sdio_ops.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. /* Follow mac team suggestion, default I/O fail return value is 0xFF */
  18. #define SDIO_ERR_VAL8 0xFF
  19. #define SDIO_ERR_VAL16 0xFFFF
  20. #define SDIO_ERR_VAL32 0xFFFFFFFF
  21. #ifdef PLATFORM_LINUX
  22. #include <sdio_ops_linux.h>
  23. #endif
  24. #ifdef PLATFORM_WINDOWS
  25. #ifdef PLATFORM_OS_XP
  26. #include <sdio_ops_xp.h>
  27. struct async_context {
  28. PMDL pmdl;
  29. PSDBUS_REQUEST_PACKET sdrp;
  30. unsigned char *r_buf;
  31. unsigned char *padapter;
  32. };
  33. #endif
  34. #ifdef PLATFORM_OS_CE
  35. #include <sdio_ops_ce.h>
  36. #endif
  37. #endif /* PLATFORM_WINDOWS */
  38. extern void sdio_set_intf_ops(_adapter *padapter, struct _io_ops *pops);
  39. void dump_sdio_card_info(void *sel, struct dvobj_priv *dvobj);
  40. u32 sdio_init(struct dvobj_priv *dvobj);
  41. void sdio_deinit(struct dvobj_priv *dvobj);
  42. int sdio_alloc_irq(struct dvobj_priv *dvobj);
  43. void sdio_free_irq(struct dvobj_priv *dvobj);
  44. #if 0
  45. extern void sdio_func1cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
  46. extern void sdio_func1cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
  47. #endif
  48. extern u8 SdioLocalCmd52Read1Byte(PADAPTER padapter, u32 addr);
  49. extern void SdioLocalCmd52Write1Byte(PADAPTER padapter, u32 addr, u8 v);
  50. extern s32 _sdio_local_read(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
  51. extern s32 sdio_local_read(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
  52. extern s32 _sdio_local_write(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
  53. extern s32 sdio_local_write(PADAPTER padapter, u32 addr, u32 cnt, u8 *pbuf);
  54. u32 _sdio_read32(PADAPTER padapter, u32 addr);
  55. s32 _sdio_write32(PADAPTER padapter, u32 addr, u32 val);
  56. extern void sd_int_hdl(PADAPTER padapter);
  57. extern u8 CheckIPSStatus(PADAPTER padapter);
  58. #ifdef CONFIG_RTL8188E
  59. extern void InitInterrupt8188ESdio(PADAPTER padapter);
  60. extern void EnableInterrupt8188ESdio(PADAPTER padapter);
  61. extern void DisableInterrupt8188ESdio(PADAPTER padapter);
  62. extern void UpdateInterruptMask8188ESdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
  63. extern u8 HalQueryTxBufferStatus8189ESdio(PADAPTER padapter);
  64. extern u8 HalQueryTxOQTBufferStatus8189ESdio(PADAPTER padapter);
  65. extern void ClearInterrupt8188ESdio(PADAPTER padapter);
  66. #endif /* CONFIG_RTL8188E */
  67. #ifdef CONFIG_RTL8821A
  68. extern void InitInterrupt8821AS(PADAPTER padapter);
  69. extern void EnableInterrupt8821AS(PADAPTER padapter);
  70. extern void DisableInterrupt8821AS(PADAPTER padapter);
  71. extern u8 HalQueryTxBufferStatus8821AS(PADAPTER padapter);
  72. extern u8 HalQueryTxOQTBufferStatus8821ASdio(PADAPTER padapter);
  73. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  74. void ClearInterrupt8821AS(PADAPTER padapter);
  75. #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
  76. #endif /* CONFIG_RTL8821A */
  77. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  78. #if defined(CONFIG_RTL8821C) || defined(CONFIG_RTL8822B)
  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. #ifdef CONFIG_RTL8192E
  96. extern void InitInterrupt8192ESdio(PADAPTER padapter);
  97. extern void EnableInterrupt8192ESdio(PADAPTER padapter);
  98. extern void DisableInterrupt8192ESdio(PADAPTER padapter);
  99. extern void UpdateInterruptMask8192ESdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
  100. extern u8 HalQueryTxBufferStatus8192ESdio(PADAPTER padapter);
  101. extern u8 HalQueryTxOQTBufferStatus8192ESdio(PADAPTER padapter);
  102. extern void ClearInterrupt8192ESdio(PADAPTER padapter);
  103. #endif /* CONFIG_RTL8192E */
  104. #ifdef CONFIG_RTL8703B
  105. extern void InitInterrupt8703BSdio(PADAPTER padapter);
  106. extern void InitSysInterrupt8703BSdio(PADAPTER padapter);
  107. extern void EnableInterrupt8703BSdio(PADAPTER padapter);
  108. extern void DisableInterrupt8703BSdio(PADAPTER padapter);
  109. extern u8 HalQueryTxBufferStatus8703BSdio(PADAPTER padapter);
  110. extern u8 HalQueryTxOQTBufferStatus8703BSdio(PADAPTER padapter);
  111. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  112. extern void DisableInterruptButCpwm28703BSdio(PADAPTER padapter);
  113. extern void ClearInterrupt8703BSdio(PADAPTER padapter);
  114. #endif /* CONFIG_WOWLAN */
  115. #endif
  116. #ifdef CONFIG_RTL8723D
  117. extern void InitInterrupt8723DSdio(PADAPTER padapter);
  118. extern void InitSysInterrupt8723DSdio(PADAPTER padapter);
  119. extern void EnableInterrupt8723DSdio(PADAPTER padapter);
  120. extern void DisableInterrupt8723DSdio(PADAPTER padapter);
  121. extern u8 HalQueryTxBufferStatus8723DSdio(PADAPTER padapter);
  122. extern u8 HalQueryTxOQTBufferStatus8723DSdio(PADAPTER padapter);
  123. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  124. extern void DisableInterruptButCpwm28723dSdio(PADAPTER padapter);
  125. extern void ClearInterrupt8723DSdio(PADAPTER padapter);
  126. #endif /* CONFIG_WOWLAN */
  127. #endif
  128. #ifdef CONFIG_RTL8192F
  129. extern void InitInterrupt8192FSdio(PADAPTER padapter);
  130. extern void InitSysInterrupt8192FSdio(PADAPTER padapter);
  131. extern void EnableInterrupt8192FSdio(PADAPTER padapter);
  132. extern void DisableInterrupt8192FSdio(PADAPTER padapter);
  133. extern void UpdateInterruptMask8192FSdio(PADAPTER padapter, u32 AddMSR, u32 RemoveMSR);
  134. extern u8 HalQueryTxBufferStatus8192FSdio(PADAPTER padapter);
  135. extern u8 HalQueryTxOQTBufferStatus8192FSdio(PADAPTER padapter);
  136. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  137. extern void DisableInterruptButCpwm2192fSdio(PADAPTER padapter);
  138. extern void ClearInterrupt8192FSdio(PADAPTER padapter);
  139. #endif /* CONFIG_WOWLAN */
  140. #endif
  141. #ifdef CONFIG_RTL8188F
  142. extern void InitInterrupt8188FSdio(PADAPTER padapter);
  143. extern void InitSysInterrupt8188FSdio(PADAPTER padapter);
  144. extern void EnableInterrupt8188FSdio(PADAPTER padapter);
  145. extern void DisableInterrupt8188FSdio(PADAPTER padapter);
  146. extern u8 HalQueryTxBufferStatus8188FSdio(PADAPTER padapter);
  147. extern u8 HalQueryTxOQTBufferStatus8188FSdio(PADAPTER padapter);
  148. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  149. extern void DisableInterruptButCpwm28188FSdio(PADAPTER padapter);
  150. extern void ClearInterrupt8188FSdio(PADAPTER padapter);
  151. #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
  152. #endif
  153. #ifdef CONFIG_RTL8188GTV
  154. extern void InitInterrupt8188GTVSdio(PADAPTER padapter);
  155. extern void InitSysInterrupt8188GTVSdio(PADAPTER padapter);
  156. extern void EnableInterrupt8188GTVSdio(PADAPTER padapter);
  157. extern void DisableInterrupt8188GTVSdio(PADAPTER padapter);
  158. extern u8 HalQueryTxBufferStatus8188GTVSdio(PADAPTER padapter);
  159. extern u8 HalQueryTxOQTBufferStatus8188GTVSdio(PADAPTER padapter);
  160. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  161. extern void DisableInterruptButCpwm28188GTVSdio(PADAPTER padapter);
  162. extern void ClearInterrupt8188GTVSdio(PADAPTER padapter);
  163. #endif /* defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN) */
  164. #endif
  165. /**
  166. * rtw_sdio_get_block_size() - Get block size of SDIO transfer
  167. * @d struct dvobj_priv*
  168. *
  169. * The unit of return value is byte.
  170. */
  171. static inline u32 rtw_sdio_get_block_size(struct dvobj_priv *d)
  172. {
  173. return d->intf_data.block_transfer_len;
  174. }
  175. /**
  176. * rtw_sdio_cmd53_align_size() - Align size to one CMD53 could complete
  177. * @d struct dvobj_priv*
  178. * @len length to align
  179. *
  180. * Adjust len to align block size, and the new size could be transfered by one
  181. * CMD53.
  182. * If len < block size, it would keep original value, otherwise the value
  183. * would be rounded up by block size.
  184. *
  185. * Return adjusted length.
  186. */
  187. static inline size_t rtw_sdio_cmd53_align_size(struct dvobj_priv *d, size_t len)
  188. {
  189. u32 blk_sz;
  190. blk_sz = rtw_sdio_get_block_size(d);
  191. if (len <= blk_sz)
  192. return len;
  193. return _RND(len, blk_sz);
  194. }
  195. #endif /* !__SDIO_OPS_H__ */