Commit | Line | Data |
---|---|---|
6fa3eb70 S |
1 | /* |
2 | ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/os/linux/hif/sdio/include/hif_sdio.h#2 $ | |
3 | */ | |
4 | ||
5 | /*! \file "hif_sdio.h" | |
6 | \brief | |
7 | ||
8 | ||
9 | */ | |
10 | ||
11 | /* | |
12 | ** $Log: $ | |
13 | * | |
14 | * 06 13 2012 yuche.tsai | |
15 | * NULL | |
16 | * Update maintrunk driver. | |
17 | * Add support for driver compose assoc request frame. | |
18 | * | |
19 | * 05 02 2012 terry.wu | |
20 | * NULL | |
21 | * Fix build error if HAVE_AEE_FEATURE = n | |
22 | * | |
23 | * 04 12 2012 terry.wu | |
24 | * NULL | |
25 | * Add AEE message support | |
26 | * 1) Show AEE warning(red screen) if SDIO access error occurs | |
27 | ||
28 | * | |
29 | * 03 02 2012 terry.wu | |
30 | * NULL | |
31 | * Enable CFG80211 Support. | |
32 | * | |
33 | * 08 18 2010 jeffrey.chang | |
34 | * NULL | |
35 | * support multi-function sdio | |
36 | * | |
37 | * 07 25 2010 george.kuo | |
38 | * | |
39 | * Move hif_sdio driver to linux directory. | |
40 | * | |
41 | * 07 23 2010 george.kuo | |
42 | * | |
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. | |
45 | ** | |
46 | ** | |
47 | */ | |
48 | ||
49 | #ifndef _HIF_SDIO_H | |
50 | #define _HIF_SDIO_H | |
51 | /******************************************************************************* | |
52 | * C O M P I L E R F L A G S | |
53 | ******************************************************************************** | |
54 | */ | |
55 | #define HIF_SDIO_DEBUG (0) /* 0:trun off debug msg and assert, 1:trun off debug msg and assert */ | |
56 | ||
57 | /******************************************************************************* | |
58 | * E X T E R N A L R E F E R E N C E S | |
59 | ******************************************************************************** | |
60 | */ | |
61 | #include "mtk_porting.h" | |
62 | ||
63 | /******************************************************************************* | |
64 | * C O N S T A N T S | |
65 | ******************************************************************************** | |
66 | */ | |
67 | #define CFG_CLIENT_COUNT (8) | |
68 | ||
69 | #define HIF_DEFAULT_BLK_SIZE (256) | |
70 | #define HIF_DEFAULT_VENDOR (0x037A) | |
71 | ||
72 | /******************************************************************************* | |
73 | * D A T A T Y P E S | |
74 | ******************************************************************************** | |
75 | */ | |
76 | ||
77 | /* Function info provided by client driver */ | |
78 | typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO; | |
79 | ||
80 | /* Client context provided by hif_sdio driver for the following function call */ | |
81 | typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX; | |
82 | ||
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); | |
87 | ||
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 */ | |
94 | }; | |
95 | ||
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; | |
104 | ||
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; | |
110 | ||
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; | |
118 | ||
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; | |
125 | ||
126 | /* error code returned by hif_sdio driver (use NEGATIVE number) */ | |
127 | typedef enum { | |
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; | |
137 | ||
138 | /******************************************************************************* | |
139 | * P U B L I C D A T A | |
140 | ******************************************************************************** | |
141 | */ | |
142 | ||
143 | /******************************************************************************* | |
144 | * P R I V A T E D A T A | |
145 | ******************************************************************************** | |
146 | */ | |
147 | ||
148 | /******************************************************************************* | |
149 | * M A C R O S | |
150 | ******************************************************************************** | |
151 | */ | |
152 | ||
153 | /*! | |
154 | * \brief A macro used to describe an SDIO function | |
155 | * | |
156 | * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information | |
157 | * | |
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 | |
162 | */ | |
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) | |
165 | ||
166 | /*! | |
167 | * \brief A debug print used to print debug messages while compiler flag HIF_SDIO_DEBUG on. | |
168 | * | |
169 | */ | |
170 | #if HIF_SDIO_DEBUG | |
171 | #define DPRINTK(fmt, args...) printk("%s: " fmt, __func__, ## args) | |
172 | #else | |
173 | #define DPRINTK(fmt, args...) | |
174 | #endif | |
175 | ||
176 | /*! | |
177 | * \brief ASSERT function definition. | |
178 | * | |
179 | */ | |
180 | #if HIF_SDIO_DEBUG | |
181 | #define ASSERT(expr) if (!(expr)) { \ | |
182 | printk("assertion failed! %s[%d]: %s\n",\ | |
183 | __func__, __LINE__, #expr); \ | |
184 | BUG_ON(!(expr));\ | |
185 | } | |
186 | #else | |
187 | #define ASSERT(expr) do {} while (0) | |
188 | #endif | |
189 | ||
190 | /******************************************************************************* | |
191 | * F U N C T I O N D E C L A R A T I O N S | |
192 | ******************************************************************************** | |
193 | */ | |
194 | ||
195 | /*! | |
196 | * \brief MTK hif sdio client registration function | |
197 | * | |
198 | * Client uses this function to do hif sdio registration | |
199 | * | |
200 | * \param pinfo a pointer of client's information | |
201 | * | |
202 | * \retval 0 register successfully | |
203 | * \retval < 0 error code | |
204 | */ | |
205 | extern INT32 mtk_wcn_hif_sdio_client_reg(const MTK_WCN_HIF_SDIO_CLTINFO *pinfo); | |
206 | ||
207 | extern INT32 mtk_wcn_hif_sdio_client_unreg(const MTK_WCN_HIF_SDIO_CLTINFO *pinfo); | |
208 | ||
209 | extern INT32 mtk_wcn_hif_sdio_readb(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, PUINT8 pvb); | |
210 | ||
211 | extern INT32 mtk_wcn_hif_sdio_writeb(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, UINT8 vb); | |
212 | ||
213 | extern INT32 mtk_wcn_hif_sdio_readl(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, PUINT32 pvl); | |
214 | ||
215 | extern INT32 mtk_wcn_hif_sdio_writel(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, UINT32 vl); | |
216 | ||
217 | extern INT32 mtk_wcn_hif_sdio_read_buf(MTK_WCN_HIF_SDIO_CLTCTX ctx, | |
218 | UINT32 offset, PUINT32 pbuf, UINT32 len); | |
219 | ||
220 | extern INT32 mtk_wcn_hif_sdio_write_buf(MTK_WCN_HIF_SDIO_CLTCTX ctx, | |
221 | UINT32 offset, PUINT32 pbuf, UINT32 len); | |
222 | ||
223 | extern void mtk_wcn_hif_sdio_set_drvdata(MTK_WCN_HIF_SDIO_CLTCTX ctx, void *private_data_p); | |
224 | ||
225 | extern void *mtk_wcn_hif_sdio_get_drvdata(MTK_WCN_HIF_SDIO_CLTCTX ctx); | |
226 | ||
227 | extern void mtk_wcn_hif_sdio_get_dev(MTK_WCN_HIF_SDIO_CLTCTX ctx, struct device **dev); | |
228 | ||
229 | extern void mtk_wcn_hif_sdio_enable_irq(MTK_WCN_HIF_SDIO_CLTCTX ctx, MTK_WCN_BOOL enable); | |
230 | ||
231 | /******************************************************************************* | |
232 | * F U N C T I O N S | |
233 | ******************************************************************************** | |
234 | */ | |
235 | #endif /* _HIF_SDIO_H */ |