OSDN Git Service

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