import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / connectivity / combo / drv_wlan / mt6628 / wlan / os / linux / hif / sdio / include / hif_sdio.h
CommitLineData
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 */
78typedef 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 */
81typedef UINT32 MTK_WCN_HIF_SDIO_CLTCTX;
82
83/* Callback functions provided by client driver */
84typedef INT32(*MTK_WCN_HIF_SDIO_PROBE) (MTK_WCN_HIF_SDIO_CLTCTX, const MTK_WCN_HIF_SDIO_FUNCINFO * );
85typedef INT32(*MTK_WCN_HIF_SDIO_REMOVE) (MTK_WCN_HIF_SDIO_CLTCTX);
86typedef INT32(*MTK_WCN_HIF_SDIO_IRQ) (MTK_WCN_HIF_SDIO_CLTCTX);
87
88/* Function info provided by client driver */
89struct _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 */
97typedef 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 */
106typedef 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 */
112typedef 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 */
120typedef 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) */
127typedef 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 */
205extern INT32 mtk_wcn_hif_sdio_client_reg(const MTK_WCN_HIF_SDIO_CLTINFO *pinfo);
206
207extern INT32 mtk_wcn_hif_sdio_client_unreg(const MTK_WCN_HIF_SDIO_CLTINFO *pinfo);
208
209extern INT32 mtk_wcn_hif_sdio_readb(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, PUINT8 pvb);
210
211extern INT32 mtk_wcn_hif_sdio_writeb(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, UINT8 vb);
212
213extern INT32 mtk_wcn_hif_sdio_readl(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, PUINT32 pvl);
214
215extern INT32 mtk_wcn_hif_sdio_writel(MTK_WCN_HIF_SDIO_CLTCTX ctx, UINT32 offset, UINT32 vl);
216
217extern INT32 mtk_wcn_hif_sdio_read_buf(MTK_WCN_HIF_SDIO_CLTCTX ctx,
218 UINT32 offset, PUINT32 pbuf, UINT32 len);
219
220extern INT32 mtk_wcn_hif_sdio_write_buf(MTK_WCN_HIF_SDIO_CLTCTX ctx,
221 UINT32 offset, PUINT32 pbuf, UINT32 len);
222
223extern void mtk_wcn_hif_sdio_set_drvdata(MTK_WCN_HIF_SDIO_CLTCTX ctx, void *private_data_p);
224
225extern void *mtk_wcn_hif_sdio_get_drvdata(MTK_WCN_HIF_SDIO_CLTCTX ctx);
226
227extern void mtk_wcn_hif_sdio_get_dev(MTK_WCN_HIF_SDIO_CLTCTX ctx, struct device **dev);
228
229extern 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 */