xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8821cs/include/sdio_ops.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3  *
4  * Copyright(c) 2007 - 2017 Realtek Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  *****************************************************************************/
16 #ifndef __SDIO_OPS_H__
17 #define __SDIO_OPS_H__
18 
19 
20 /* Follow mac team suggestion, default I/O fail return value is 0xFF */
21 #define SDIO_ERR_VAL8	0xFF
22 #define SDIO_ERR_VAL16	0xFFFF
23 #define SDIO_ERR_VAL32	0xFFFFFFFF
24 
25 #ifdef PLATFORM_LINUX
26 #include <sdio_ops_linux.h>
27 #endif
28 
29 extern void sdio_set_intf_ops(_adapter *padapter, struct _io_ops *pops);
30 void dump_sdio_card_info(void *sel, struct dvobj_priv *dvobj);
31 
32 u32 sdio_init(struct dvobj_priv *dvobj);
33 void sdio_deinit(struct dvobj_priv *dvobj);
34 int sdio_alloc_irq(struct dvobj_priv *dvobj);
35 void sdio_free_irq(struct dvobj_priv *dvobj);
36 u8 sdio_get_num_of_func(struct dvobj_priv *dvobj);
37 
38 #if 0
39 extern void sdio_func1cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
40 extern void sdio_func1cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
41 #endif
42 extern u8 SdioLocalCmd52Read1Byte(PADAPTER padapter, u32 addr);
43 extern void SdioLocalCmd52Write1Byte(PADAPTER padapter, u32 addr, u8 v);
44 extern s32 _sdio_local_read(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
45 extern s32 sdio_local_read(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
46 extern s32 _sdio_local_write(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
47 extern s32 sdio_local_write(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
48 
49 u32 _sdio_read32(PADAPTER padapter, u32 addr);
50 s32 _sdio_write32(PADAPTER padapter, u32 addr, u32 val);
51 
52 extern void sd_int_hdl(PADAPTER padapter);
53 extern u8 CheckIPSStatus(PADAPTER padapter);
54 
55 #ifdef CONFIG_RTL8188E
56 extern void InitInterrupt8188ESdio(PADAPTER padapter);
57 extern void EnableInterrupt8188ESdio(PADAPTER padapter);
58 extern void DisableInterrupt8188ESdio(PADAPTER padapter);
59 extern void UpdateInterruptMask8188ESdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
60 extern u8 HalQueryTxBufferStatus8189ESdio(PADAPTER padapter);
61 extern u8 HalQueryTxOQTBufferStatus8189ESdio(PADAPTER padapter);
62 extern void ClearInterrupt8188ESdio(PADAPTER padapter);
63 #endif /* CONFIG_RTL8188E */
64 
65 #ifdef CONFIG_RTL8821A
66 extern void InitInterrupt8821AS(PADAPTER padapter);
67 extern void EnableInterrupt8821AS(PADAPTER padapter);
68 extern void DisableInterrupt8821AS(PADAPTER padapter);
69 extern u8 HalQueryTxBufferStatus8821AS(PADAPTER padapter);
70 extern u8 HalQueryTxOQTBufferStatus8821ASdio(PADAPTER padapter);
71 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
72 void ClearInterrupt8821AS(PADAPTER padapter);
73 #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
74 #endif /* CONFIG_RTL8821A */
75 
76 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
77 #if defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822B) || defined(CONFIG_RTL8822C) \
78     || defined(CONFIG_RTL8723F)
79 u8 rtw_hal_enable_cpwm2(_adapter *adapter);
80 #endif
81 extern u8 RecvOnePkt(PADAPTER padapter);
82 #endif /* CONFIG_WOWLAN */
83 #ifdef CONFIG_RTL8723B
84 extern void InitInterrupt8723BSdio(PADAPTER padapter);
85 extern void InitSysInterrupt8723BSdio(PADAPTER padapter);
86 extern void EnableInterrupt8723BSdio(PADAPTER padapter);
87 extern void DisableInterrupt8723BSdio(PADAPTER padapter);
88 extern u8 HalQueryTxBufferStatus8723BSdio(PADAPTER padapter);
89 extern u8 HalQueryTxOQTBufferStatus8723BSdio(PADAPTER padapter);
90 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
91 extern void DisableInterruptButCpwm28723BSdio(PADAPTER padapter);
92 extern void ClearInterrupt8723BSdio(PADAPTER padapter);
93 #endif /* CONFIG_WOWLAN */
94 #endif
95 
96 
97 #ifdef CONFIG_RTL8192E
98 extern void InitInterrupt8192ESdio(PADAPTER padapter);
99 extern void EnableInterrupt8192ESdio(PADAPTER padapter);
100 extern void DisableInterrupt8192ESdio(PADAPTER padapter);
101 extern void UpdateInterruptMask8192ESdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
102 extern u8 HalQueryTxBufferStatus8192ESdio(PADAPTER padapter);
103 extern u8 HalQueryTxOQTBufferStatus8192ESdio(PADAPTER padapter);
104 extern void ClearInterrupt8192ESdio(PADAPTER padapter);
105 #endif /* CONFIG_RTL8192E */
106 
107 #ifdef CONFIG_RTL8703B
108 extern void InitInterrupt8703BSdio(PADAPTER padapter);
109 extern void InitSysInterrupt8703BSdio(PADAPTER padapter);
110 extern void EnableInterrupt8703BSdio(PADAPTER padapter);
111 extern void DisableInterrupt8703BSdio(PADAPTER padapter);
112 extern u8 HalQueryTxBufferStatus8703BSdio(PADAPTER padapter);
113 extern u8 HalQueryTxOQTBufferStatus8703BSdio(PADAPTER padapter);
114 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
115 extern void DisableInterruptButCpwm28703BSdio(PADAPTER padapter);
116 extern void ClearInterrupt8703BSdio(PADAPTER padapter);
117 #endif /* CONFIG_WOWLAN */
118 #endif
119 
120 #ifdef CONFIG_RTL8723D
121 extern void InitInterrupt8723DSdio(PADAPTER padapter);
122 extern void InitSysInterrupt8723DSdio(PADAPTER padapter);
123 extern void EnableInterrupt8723DSdio(PADAPTER padapter);
124 extern void DisableInterrupt8723DSdio(PADAPTER padapter);
125 extern u8 HalQueryTxBufferStatus8723DSdio(PADAPTER padapter);
126 extern u8 HalQueryTxOQTBufferStatus8723DSdio(PADAPTER padapter);
127 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
128 extern void DisableInterruptButCpwm28723dSdio(PADAPTER padapter);
129 extern void ClearInterrupt8723DSdio(PADAPTER padapter);
130 #endif /* CONFIG_WOWLAN */
131 #endif
132 
133 #ifdef CONFIG_RTL8192F
134 extern void InitInterrupt8192FSdio(PADAPTER padapter);
135 extern void InitSysInterrupt8192FSdio(PADAPTER padapter);
136 extern void EnableInterrupt8192FSdio(PADAPTER padapter);
137 extern void DisableInterrupt8192FSdio(PADAPTER padapter);
138 extern void UpdateInterruptMask8192FSdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
139 extern u8 HalQueryTxBufferStatus8192FSdio(PADAPTER padapter);
140 extern u8 HalQueryTxOQTBufferStatus8192FSdio(PADAPTER padapter);
141 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
142 extern void DisableInterruptButCpwm2192fSdio(PADAPTER padapter);
143 extern void ClearInterrupt8192FSdio(PADAPTER padapter);
144 #endif /* CONFIG_WOWLAN */
145 #endif
146 
147 #ifdef CONFIG_RTL8188F
148 extern void InitInterrupt8188FSdio(PADAPTER padapter);
149 extern void InitSysInterrupt8188FSdio(PADAPTER padapter);
150 extern void EnableInterrupt8188FSdio(PADAPTER padapter);
151 extern void DisableInterrupt8188FSdio(PADAPTER padapter);
152 extern u8 HalQueryTxBufferStatus8188FSdio(PADAPTER padapter);
153 extern u8 HalQueryTxOQTBufferStatus8188FSdio(PADAPTER padapter);
154 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
155 extern void DisableInterruptButCpwm28188FSdio(PADAPTER padapter);
156 extern void ClearInterrupt8188FSdio(PADAPTER padapter);
157 #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
158 #endif
159 
160 #ifdef CONFIG_RTL8188GTV
161 extern void InitInterrupt8188GTVSdio(PADAPTER padapter);
162 extern void InitSysInterrupt8188GTVSdio(PADAPTER padapter);
163 extern void EnableInterrupt8188GTVSdio(PADAPTER padapter);
164 extern void DisableInterrupt8188GTVSdio(PADAPTER padapter);
165 extern u8 HalQueryTxBufferStatus8188GTVSdio(PADAPTER padapter);
166 extern u8 HalQueryTxOQTBufferStatus8188GTVSdio(PADAPTER padapter);
167 #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
168 extern void DisableInterruptButCpwm28188GTVSdio(PADAPTER padapter);
169 extern void ClearInterrupt8188GTVSdio(PADAPTER padapter);
170 #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
171 #endif
172 
173 /**
174  * rtw_sdio_get_block_size() - Get block size of SDIO transfer
175  * @d		struct dvobj_priv*
176  *
177  * The unit of return value is byte.
178  */
rtw_sdio_get_block_size(struct dvobj_priv * d)179 static inline u32 rtw_sdio_get_block_size(struct dvobj_priv *d)
180 {
181 	return d->intf_data.block_transfer_len;
182 }
183 
184 /**
185  * rtw_sdio_cmd53_align_size() - Align size to one CMD53 could complete
186  * @d		struct dvobj_priv*
187  * @len		length to align
188  *
189  * Adjust len to align block size, and the new size could be transfered by one
190  * CMD53.
191  * If len < block size, it would keep original value, otherwise the value
192  * would be rounded up by block size.
193  *
194  * Return adjusted length.
195  */
rtw_sdio_cmd53_align_size(struct dvobj_priv * d,size_t len)196 static inline size_t rtw_sdio_cmd53_align_size(struct dvobj_priv *d, size_t len)
197 {
198 	u32 blk_sz;
199 
200 
201 	blk_sz = rtw_sdio_get_block_size(d);
202 	if (len <= blk_sz)
203 		return len;
204 
205 	return _RND(len, blk_sz);
206 }
207 
208 #endif /* !__SDIO_OPS_H__ */
209