support different wifi bt chip auto compatible
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / combo_mt66xx / mt6628 / wlan / os / linux / hif / sdio / include / hif_sdio.h
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, __FUNCTION__, ## 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                                 __FUNCTION__, __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 (
206     const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
207     );
208
209 extern INT32 mtk_wcn_hif_sdio_client_unreg (
210     const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
211     );
212
213 extern INT32 mtk_wcn_hif_sdio_readb (
214     MTK_WCN_HIF_SDIO_CLTCTX ctx,
215     UINT32 offset,
216     PUINT8 pvb
217     );
218
219 extern INT32 mtk_wcn_hif_sdio_writeb (
220     MTK_WCN_HIF_SDIO_CLTCTX ctx,
221     UINT32 offset,
222     UINT8 vb
223     );
224
225 extern INT32 mtk_wcn_hif_sdio_readl (
226     MTK_WCN_HIF_SDIO_CLTCTX ctx,
227     UINT32 offset,
228     PUINT32 pvl
229     );
230
231 extern INT32 mtk_wcn_hif_sdio_writel (
232     MTK_WCN_HIF_SDIO_CLTCTX ctx,
233     UINT32 offset,
234     UINT32 vl
235     );
236
237 extern INT32 mtk_wcn_hif_sdio_read_buf (
238     MTK_WCN_HIF_SDIO_CLTCTX ctx,
239     UINT32 offset,
240     PUINT32 pbuf,
241     UINT32 len
242     );
243
244 extern INT32 mtk_wcn_hif_sdio_write_buf (
245     MTK_WCN_HIF_SDIO_CLTCTX ctx,
246     UINT32 offset,
247     PUINT32 pbuf,
248     UINT32 len
249     );
250
251 extern void mtk_wcn_hif_sdio_set_drvdata(
252     MTK_WCN_HIF_SDIO_CLTCTX ctx,
253     void* private_data_p
254     );
255
256 extern void* mtk_wcn_hif_sdio_get_drvdata(
257     MTK_WCN_HIF_SDIO_CLTCTX ctx
258     );
259
260 extern void mtk_wcn_hif_sdio_get_dev(
261     MTK_WCN_HIF_SDIO_CLTCTX ctx,
262     struct device **dev
263     );
264 extern void mtk_wcn_hif_sdio_enable_irq(
265     MTK_WCN_HIF_SDIO_CLTCTX ctx,
266     MTK_WCN_BOOL enable
267     );
268
269
270 /*******************************************************************************
271 *                              F U N C T I O N S
272 ********************************************************************************
273 */
274 #endif /* _HIF_SDIO_H */
275
276
277