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 (9)
69 #define HIF_DEFAULT_BLK_SIZE (256)
70 #define HIF_DEFAULT_VENDOR (0x037A)
72 #define HIF_SDIO_LOG_LOUD 4
73 #define HIF_SDIO_LOG_DBG 3
74 #define HIF_SDIO_LOG_INFO 2
75 #define HIF_SDIO_LOG_WARN 1
76 #define HIF_SDIO_LOG_ERR 0
79 /*******************************************************************************
81 ********************************************************************************
84 /* Function info provided by client driver */
85 typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO;
87 /* Client context provided by hif_sdio driver for the following function call */
88 typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX;
90 /* Callback functions provided by client driver */
91 typedef INT32 (*MTK_WCN_HIF_SDIO_PROBE)(MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO *);
92 typedef INT32 (*MTK_WCN_HIF_SDIO_REMOVE)(MTK_WCN_HIF_SDIO_CLTCTX);
93 typedef INT32 (*MTK_WCN_HIF_SDIO_IRQ)(MTK_WCN_HIF_SDIO_CLTCTX);
95 /* Function info provided by client driver */
96 struct _MTK_WCN_HIF_SDIO_FUNCINFO {
97 UINT16 manf_id; /* TPLMID_MANF: manufacturer ID */
98 UINT16 card_id; /* TPLMID_CARD: card ID */
99 UINT16 func_num; /* Function Number */
100 UINT16 blk_sz; /* Function block size */
103 /* Client info provided by client driver */
104 typedef struct _MTK_WCN_HIF_SDIO_CLTINFO {
105 const MTK_WCN_HIF_SDIO_FUNCINFO *func_tbl; /* supported function info table */
106 UINT32 func_tbl_size; /* supported function table info element number */
107 MTK_WCN_HIF_SDIO_PROBE hif_clt_probe; /* callback function for probing */
108 MTK_WCN_HIF_SDIO_REMOVE hif_clt_remove; /* callback function for removing */
109 MTK_WCN_HIF_SDIO_IRQ hif_clt_irq; /* callback function for interrupt handling */
110 } MTK_WCN_HIF_SDIO_CLTINFO;
112 /* function info provided by registed function */
113 typedef struct _MTK_WCN_HIF_SDIO_REGISTINFO {
114 const MTK_WCN_HIF_SDIO_CLTINFO *sdio_cltinfo; /* client's MTK_WCN_HIF_SDIO_CLTINFO pointer */
115 const MTK_WCN_HIF_SDIO_FUNCINFO *func_info; /* supported function info pointer */
116 } MTK_WCN_HIF_SDIO_REGISTINFO;
118 /* Card info provided by probed function */
119 typedef struct _MTK_WCN_HIF_SDIO_PROBEINFO {
120 struct sdio_func* func; /* probed sdio function pointer */
121 void* private_data_p; /* clt's private data pointer */
122 MTK_WCN_BOOL on_by_wmt; /* TRUE: on by wmt, FALSE: not on by wmt */
123 /* added for sdio irq sync and mmc single_irq workaround */
124 MTK_WCN_BOOL sdio_irq_enabled; /* TRUE: can handle sdio irq; FALSE: no sdio irq handling */
125 INT8 clt_idx; /* registered function table info element number (initial value is -1) */
126 } MTK_WCN_HIF_SDIO_PROBEINFO;
128 /* work queue info needed by worker */
129 typedef struct _MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO {
130 struct work_struct probe_work; /* work queue structure */
131 MTK_WCN_HIF_SDIO_REGISTINFO *registinfo_p; /* MTK_WCN_HIF_SDIO_REGISTINFO pointer of the client */
132 INT8 probe_idx; /* probed function table info element number (initial value is -1) */
133 } MTK_WCN_HIF_SDIO_CLT_PROBE_WORKERINFO;
135 /* error code returned by hif_sdio driver (use NEGATIVE number) */
137 HIF_SDIO_ERR_SUCCESS = 0,
138 HIF_SDIO_ERR_FAIL = HIF_SDIO_ERR_SUCCESS - 1, /* generic error */
139 HIF_SDIO_ERR_INVALID_PARAM = HIF_SDIO_ERR_FAIL - 1,
140 HIF_SDIO_ERR_DUPLICATED = HIF_SDIO_ERR_INVALID_PARAM - 1,
141 HIF_SDIO_ERR_UNSUP_MANF_ID = HIF_SDIO_ERR_DUPLICATED - 1,
142 HIF_SDIO_ERR_UNSUP_CARD_ID = HIF_SDIO_ERR_UNSUP_MANF_ID - 1,
143 HIF_SDIO_ERR_INVALID_FUNC_NUM = HIF_SDIO_ERR_UNSUP_CARD_ID - 1,
144 HIF_SDIO_ERR_INVALID_BLK_SZ = HIF_SDIO_ERR_INVALID_FUNC_NUM - 1,
145 HIF_SDIO_ERR_NOT_PROBED = HIF_SDIO_ERR_INVALID_BLK_SZ - 1,
146 HIF_SDIO_ERR_ALRDY_ON = HIF_SDIO_ERR_NOT_PROBED -1,
147 HIF_SDIO_ERR_ALRDY_OFF = HIF_SDIO_ERR_ALRDY_ON -1,
148 HIF_SDIO_ERR_CLT_NOT_REG = HIF_SDIO_ERR_ALRDY_OFF - 1,
149 } MTK_WCN_HIF_SDIO_ERR ;
151 /*******************************************************************************
152 * P U B L I C D A T A
153 ********************************************************************************
156 /*******************************************************************************
157 * P R I V A T E D A T A
158 ********************************************************************************
161 /*******************************************************************************
163 ********************************************************************************
167 * \brief A macro used to describe an SDIO function
169 * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information
171 * \param manf the 16 bit manufacturer id
172 * \param card the 16 bit card id
173 * \param func the 16 bit function number
174 * \param b_sz the 16 bit function block size
176 #define MTK_WCN_HIF_SDIO_FUNC(manf, card, func, b_sz) \
177 .manf_id = (manf), .card_id = (card), .func_num = (func), .blk_sz = (b_sz)
179 #define HIF_SDIO_LOUD_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_LOUD) { printk(KERN_INFO SDIO_TAG"[L]%s:" fmt, __FUNCTION__ ,##arg);}
180 #define HIF_SDIO_DBG_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_DBG) { printk(KERN_INFO SDIO_TAG"[D]%s:" fmt, __FUNCTION__ ,##arg);}
181 #define HIF_SDIO_INFO_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_INFO) { printk(KERN_INFO SDIO_TAG"[I]%s:" fmt, __FUNCTION__ ,##arg);}
182 #define HIF_SDIO_WARN_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_WARN) { printk(KERN_WARNING SDIO_TAG"[W]%s(%d):" fmt, __FUNCTION__ , __LINE__, ##arg);}
183 #define HIF_SDIO_ERR_FUNC(fmt, arg...) if (gHifSdioDbgLvl >= HIF_SDIO_LOG_ERR) { printk(KERN_WARNING SDIO_TAG"[E]%s(%d):" fmt, __FUNCTION__ , __LINE__, ##arg);}
186 * \brief ASSERT function definition.
190 #define HIF_SDIO_ASSERT(expr) if ( !(expr) ) { \
191 printk("assertion failed! %s[%d]: %s\n",\
192 __FUNCTION__, __LINE__, #expr); \
196 #define HIF_SDIO_ASSERT(expr) do {} while(0)
199 /*******************************************************************************
200 * F U N C T I O N D E C L A R A T I O N S
201 ********************************************************************************
205 * \brief MTK hif sdio client registration function
207 * Client uses this function to do hif sdio registration
209 * \param pinfo a pointer of client's information
211 * \retval 0 register successfully
212 * \retval < 0 error code
214 extern INT32 mtk_wcn_hif_sdio_client_reg (
215 const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
218 extern INT32 mtk_wcn_hif_sdio_client_unreg (
219 const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
222 extern INT32 mtk_wcn_hif_sdio_readb (
223 MTK_WCN_HIF_SDIO_CLTCTX ctx,
228 extern INT32 mtk_wcn_hif_sdio_writeb (
229 MTK_WCN_HIF_SDIO_CLTCTX ctx,
234 extern INT32 mtk_wcn_hif_sdio_readl (
235 MTK_WCN_HIF_SDIO_CLTCTX ctx,
240 extern INT32 mtk_wcn_hif_sdio_writel (
241 MTK_WCN_HIF_SDIO_CLTCTX ctx,
246 extern INT32 mtk_wcn_hif_sdio_read_buf (
247 MTK_WCN_HIF_SDIO_CLTCTX ctx,
253 extern INT32 mtk_wcn_hif_sdio_write_buf (
254 MTK_WCN_HIF_SDIO_CLTCTX ctx,
260 extern void mtk_wcn_hif_sdio_set_drvdata(
261 MTK_WCN_HIF_SDIO_CLTCTX ctx,
265 extern void* mtk_wcn_hif_sdio_get_drvdata(
266 MTK_WCN_HIF_SDIO_CLTCTX ctx
269 extern void mtk_wcn_hif_sdio_get_dev(
270 MTK_WCN_HIF_SDIO_CLTCTX ctx,
274 extern void mtk_wcn_hif_sdio_enable_irq(
275 MTK_WCN_HIF_SDIO_CLTCTX ctx,
279 /*******************************************************************************
281 ********************************************************************************
283 #endif /* _HIF_SDIO_H */