support different wifi bt chip auto compatible
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / mt5931 / 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  (9)
68
69 #define HIF_DEFAULT_BLK_SIZE  (256)
70 #define HIF_DEFAULT_VENDOR    (0x037A)
71
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
77
78
79 /*******************************************************************************
80 *                             D A T A   T Y P E S
81 ********************************************************************************
82 */
83
84 /* Function info provided by client driver */
85 typedef struct _MTK_WCN_HIF_SDIO_FUNCINFO MTK_WCN_HIF_SDIO_FUNCINFO;
86
87 /* Client context provided by hif_sdio driver for the following function call */
88 typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX;
89
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);
94
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 */
101 };
102
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;
111
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;
117
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;
127
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;
134
135 /* error code returned by hif_sdio driver (use NEGATIVE number) */
136 typedef enum {
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 ;
150
151 /*******************************************************************************
152 *                            P U B L I C   D A T A
153 ********************************************************************************
154 */
155
156 /*******************************************************************************
157 *                           P R I V A T E   D A T A
158 ********************************************************************************
159 */
160
161 /*******************************************************************************
162 *                                 M A C R O S
163 ********************************************************************************
164 */
165
166 /*!
167  * \brief A macro used to describe an SDIO function
168  *
169  * Fill an MTK_WCN_HIF_SDIO_FUNCINFO structure with function-specific information
170  *
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
175  */
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)
178
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);}
184
185 /*!
186  * \brief ASSERT function definition.
187  *
188  */
189 #if HIF_SDIO_DEBUG
190 #define HIF_SDIO_ASSERT(expr)    if ( !(expr) ) { \
191                             printk("assertion failed! %s[%d]: %s\n",\
192                                 __FUNCTION__, __LINE__, #expr); \
193                             BUG_ON( !(expr) );\
194                         }
195 #else
196 #define HIF_SDIO_ASSERT(expr)    do {} while(0)
197 #endif
198
199 /*******************************************************************************
200 *                   F U N C T I O N   D E C L A R A T I O N S
201 ********************************************************************************
202 */
203
204 /*!
205  * \brief MTK hif sdio client registration function
206  *
207  * Client uses this function to do hif sdio registration
208  *
209  * \param pinfo     a pointer of client's information
210  *
211  * \retval 0    register successfully
212  * \retval < 0  error code
213  */
214 extern INT32 mtk_wcn_hif_sdio_client_reg (
215     const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
216     );
217
218 extern INT32 mtk_wcn_hif_sdio_client_unreg (
219     const MTK_WCN_HIF_SDIO_CLTINFO *pinfo
220     );
221
222 extern INT32 mtk_wcn_hif_sdio_readb (
223     MTK_WCN_HIF_SDIO_CLTCTX ctx,
224     UINT32 offset,
225     PUINT8 pvb
226     );
227
228 extern INT32 mtk_wcn_hif_sdio_writeb (
229     MTK_WCN_HIF_SDIO_CLTCTX ctx,
230     UINT32 offset,
231     UINT8 vb
232     );
233
234 extern INT32 mtk_wcn_hif_sdio_readl (
235     MTK_WCN_HIF_SDIO_CLTCTX ctx,
236     UINT32 offset,
237     PUINT32 pvl
238     );
239
240 extern INT32 mtk_wcn_hif_sdio_writel (
241     MTK_WCN_HIF_SDIO_CLTCTX ctx,
242     UINT32 offset,
243     UINT32 vl
244     );
245
246 extern INT32 mtk_wcn_hif_sdio_read_buf (
247     MTK_WCN_HIF_SDIO_CLTCTX ctx,
248     UINT32 offset,
249     PUINT32 pbuf,
250     UINT32 len
251     );
252
253 extern INT32 mtk_wcn_hif_sdio_write_buf (
254     MTK_WCN_HIF_SDIO_CLTCTX ctx,
255     UINT32 offset,
256     PUINT32 pbuf,
257     UINT32 len
258     );
259
260 extern void mtk_wcn_hif_sdio_set_drvdata(
261     MTK_WCN_HIF_SDIO_CLTCTX ctx,
262     void* private_data_p
263     );
264
265 extern void* mtk_wcn_hif_sdio_get_drvdata(
266     MTK_WCN_HIF_SDIO_CLTCTX ctx
267     );
268
269 extern void mtk_wcn_hif_sdio_get_dev(
270     MTK_WCN_HIF_SDIO_CLTCTX ctx,
271     struct device **dev
272     );
273
274 extern void mtk_wcn_hif_sdio_enable_irq(
275     MTK_WCN_HIF_SDIO_CLTCTX ctx,
276     MTK_WCN_BOOL enable
277     );
278
279 /*******************************************************************************
280 *                              F U N C T I O N S
281 ********************************************************************************
282 */
283 #endif /* _HIF_SDIO_H */
284
285
286