2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif_sdio.h#2 $
14 * 06 13 2012 yuche.tsai
16 * Update maintrunk driver.
17 * Add support for driver compose assoc request frame.
21 * Fix build error if HAVE_AEE_FEATURE = n
25 * Add AEE message support
26 * 1) Show AEE warning(red screen) if SDIO access error occurs
31 * Enable CFG80211 Support.
33 * 08 18 2010 jeffrey.chang
35 * support multi-function sdio
37 * 07 25 2010 george.kuo
39 * Move hif_sdio driver to linux directory.
41 * 07 23 2010 george.kuo
43 * Add MT6620 driver source tree
44 * , including char device driver (wmt, bt, gps), stp driver, interface driver (tty ldisc and hif_sdio), and bt hci driver.
51 /*******************************************************************************
52 * C O M P I L E R F L A G S
53 ********************************************************************************
55 #define HIF_SDIO_DEBUG (0) /* 0:trun off debug msg and assert, 1:trun off debug msg and assert */
57 /*******************************************************************************
58 * E X T E R N A L R E F E R E N C E S
59 ********************************************************************************
61 #include "mtk_porting.h"
63 /*******************************************************************************
65 ********************************************************************************
67 #define CFG_CLIENT_COUNT (8)
69 #define HIF_DEFAULT_BLK_SIZE (256)
70 #define HIF_DEFAULT_VENDOR (0x037A)
72 /*******************************************************************************
74 ********************************************************************************
77 /* Function info provided by client driver */
78 typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO;
80 /* Client context provided by hif_sdio driver for the following function call */
81 typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX;
83 /* Callback functions provided by client driver */
84 typedef INT32 (*MTK_WCN_HIF_SDIO_PROBE)(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *);
85 typedef INT32 (*MTK_WCN_HIF_SDIO_REMOVE)(MTK_WCN_HIF_SDIO_CLTCTX);
86 typedef INT32 (*MTK_WCN_HIF_SDIO_IRQ)(MTK_WCN_HIF_SDIO_CLTCTX);
88 /* Function info provided by client driver */
89 struct _MTK_WCN_HIF_SDIO_FUNCINFO {
90 UINT16 manf_id; /* TPLMID_MANF: manufacturer ID */
91 UINT16 card_id; /* TPLMID_CARD: card ID */
92 UINT16 func_num; /* Function Number */
93 UINT16 blk_sz; /* Function block size */
96 /* Client info provided by client driver */
97 typedef struct _MTK_WCN_HIF_SDIO_CLTINFO {
98 const MTK_WCN_HIF_SDIO_FUNCINFO *func_tbl; /* supported function info table */
99 UINT32 func_tbl_size; /* supported function table info element number */
100 MTK_WCN_HIF_SDIO_PROBE hif_clt_probe; /* callback function for probing */
101 MTK_WCN_HIF_SDIO_REMOVE hif_clt_remove; /* callback function for removing */
102 MTK_WCN_HIF_SDIO_IRQ hif_clt_irq; /* callback function for interrupt handling */
103 } MTK_WCN_HIF_SDIO_CLTINFO;
105 /* function info provided by registed function */
106 typedef struct _MTK_WCN_HIF_SDIO_REGISTINFO {
107 const MTK_WCN_HIF_SDIO_CLTINFO *sdio_cltinfo; /* client's MTK_WCN_HIF_SDIO_CLTINFO pointer */
108 const MTK_WCN_HIF_SDIO_FUNCINFO *func_info; /* supported function info pointer */
109 } MTK_WCN_HIF_SDIO_REGISTINFO;
111 /* Card info provided by probed function */
112 typedef struct _MTK_WCN_HIF_SDIO_PROBEINFO {
113 struct sdio_func* func; /* probed sdio function pointer */
114 INT8 clt_idx; /* registered function table info element number (initial value is -1) */
115 MTK_WCN_BOOL interrupted; /* TRUE: interrupted, FALSE: not interrupted */
116 void* private_data_p; /* clt's private data pointer */
117 } MTK_WCN_HIF_SDIO_PROBEINFO;
119 /* work queue info needed by worker */
120 typedef struct _MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO {
121 struct work_struct probe_work; /* work queue structure */
122 MTK_WCN_HIF_SDIO_REGISTINFO *registinfo_p; /* MTK_WCN_HIF_SDIO_REGISTINFO pointer of the client */
123 INT8 probe_idx; /* probed function table info element number (initial value is -1) */
124 } MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO;
126 /* error code returned by hif_sdio driver (use NEGATIVE number) */
128 HIF_SDIO_ERR_SUCCESS = 0,
129 HIF_SDIO_ERR_FAIL, /* generic error */
130 HIF_SDIO_ERR_INVALID_PARAM,
131 HIF_SDIO_ERR_DUPLICATED,
132 HIF_SDIO_ERR_UNSUP_MANF_ID,
133 HIF_SDIO_ERR_UNSUP_CARD_ID,
134 HIF_SDIO_ERR_INVALID_FUNC_NUM,
135 HIF_SDIO_ERR_INVALID_BLK_SZ,
136 } MTK_WCN_HIF_SDIO_ERR ;
138 /*******************************************************************************
139 * P U B L I C D A T A
140 ********************************************************************************
143 /*******************************************************************************
144 * P R I V A T E D A T A
145 ********************************************************************************
148 /*******************************************************************************
150 ********************************************************************************
154 * \brief A macro used to describe an SDIO function
156 * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information
158 * \param manf the 16 bit manufacturer id
159 * \param card the 16 bit card id
160 * \param func the 16 bit function number
161 * \param b_sz the 16 bit function block size
163 #define MTK_WCN_HIF_SDIO_FUNC(manf, card, func, b_sz) \
164 .manf_id = (manf), .card_id = (card), .func_num = (func), .blk_sz = (b_sz)
167 * \brief A debug print used to print debug messages while compiler flag HIF_SDIO_DEBUG on.
171 #define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__, ## args)
173 #define DPRINTK(fmt, args...)
177 * \brief ASSERT function definition.
181 #define ASSERT(expr) if ( !(expr) ) { \
182 printk("assertion failed! %s[%d]: %s\n",\
183 __FUNCTION__, __LINE__, #expr); \
187 #define ASSERT(expr) do {} while(0)
190 /*******************************************************************************
191 * F U N C T I O N D E C L A R A T I O N S
192 ********************************************************************************
196 * \brief MTK hif sdio client registration function
198 * Client uses this function to do hif sdio registration
200 * \param pinfo a pointer of client's information
202 * \retval 0 register successfully
203 * \retval < 0 error code
205 extern INT32 mtk_wcn_hif_sdio_client_reg (
206 const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
209 extern INT32 mtk_wcn_hif_sdio_client_unreg (
210 const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
213 extern INT32 mtk_wcn_hif_sdio_readb (
214 MTK_WCN_HIF_SDIO_CLTCTX ctx,
219 extern INT32 mtk_wcn_hif_sdio_writeb (
220 MTK_WCN_HIF_SDIO_CLTCTX ctx,
225 extern INT32 mtk_wcn_hif_sdio_readl (
226 MTK_WCN_HIF_SDIO_CLTCTX ctx,
231 extern INT32 mtk_wcn_hif_sdio_writel (
232 MTK_WCN_HIF_SDIO_CLTCTX ctx,
237 extern INT32 mtk_wcn_hif_sdio_read_buf (
238 MTK_WCN_HIF_SDIO_CLTCTX ctx,
244 extern INT32 mtk_wcn_hif_sdio_write_buf (
245 MTK_WCN_HIF_SDIO_CLTCTX ctx,
251 extern void mtk_wcn_hif_sdio_set_drvdata(
252 MTK_WCN_HIF_SDIO_CLTCTX ctx,
256 extern void* mtk_wcn_hif_sdio_get_drvdata(
257 MTK_WCN_HIF_SDIO_CLTCTX ctx
260 extern void mtk_wcn_hif_sdio_get_dev(
261 MTK_WCN_HIF_SDIO_CLTCTX ctx,
264 extern void mtk_wcn_hif_sdio_enable_irq(
265 MTK_WCN_HIF_SDIO_CLTCTX ctx,
270 /*******************************************************************************
272 ********************************************************************************
274 #endif /* _HIF_SDIO_H */