MT6620: add the new driver JB2 V1.0
[firefly-linux-kernel-4.4.55.git] / drivers / mtk_wcn_combo / common / core / include / wmt_lib.h
1 /*! \file
2     \brief  Declaration of library functions
3
4     Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
5 */
6
7
8
9 #ifndef _WMT_LIB_H_
10 #define _WMT_LIB_H_
11
12 #include "osal.h"
13 #include "wmt_core.h"
14 #include "wmt_exp.h"
15 #include <mach/mtk_wcn_cmb_stub.h>
16 #include "stp_wmt.h"
17
18 /*******************************************************************************
19 *                         C O M P I L E R   F L A G S
20 ********************************************************************************
21 */
22
23
24 /*******************************************************************************
25 *                                 M A C R O S
26 ********************************************************************************
27 */
28
29 #define WMT_OP_BUF_SIZE (16)
30 #if 0 /* moved to wmt_exp.h */
31 #define WMT_LOG_LOUD    4
32 #define WMT_LOG_DBG     3
33 #define WMT_LOG_INFO    2
34 #define WMT_LOG_WARN    1
35 #define WMT_LOG_ERR     0
36 #endif
37 typedef enum _ENUM_WMTRSTRET_TYPE_T{
38     WMTRSTRET_SUCCESS = 0x0,
39     WMTRSTRET_FAIL = 0x1,
40     WMTRSTRET_ONGOING = 0x2,
41     WMTRSTRET_MAX
42 } ENUM_WMTRSTRET_TYPE_T, *P_ENUM_WMTRSTRET_TYPE_T;
43
44 /*
45 3(retry times) * 180 (STP retry time out)
46 + 10 (firmware process time) +
47 10 (transmit time) +
48 10 (uart process -> WMT response pool) +
49 230 (others)
50 */
51 #define WMT_LIB_RX_TIMEOUT 2000/*800-->cover v1.2phone BT function on time (~830ms)*/
52 /*
53 open wifi during wifi power on procedure
54 (because wlan is insert to system after mtk_hif_sdio module,
55 so wifi card is not registered to hif module
56 when mtk_wcn_wmt_func_on is called by wifi through rfkill)
57 */
58 #define MAX_WIFI_ON_TIME 5500
59
60 #define WMT_PWRON_RTY_DFT 2
61 #define MAX_RETRY_TIME_DUE_TO_RX_TIMEOUT WMT_PWRON_RTY_DFT * WMT_LIB_RX_TIMEOUT
62 #define MAX_EACH_FUNC_ON_WHEN_CHIP_POWER_ON_ALREADY WMT_LIB_RX_TIMEOUT /*each WMT command*/
63 #define MAX_FUNC_ON_TIME (MAX_WIFI_ON_TIME + MAX_RETRY_TIME_DUE_TO_RX_TIMEOUT + MAX_EACH_FUNC_ON_WHEN_CHIP_POWER_ON_ALREADY * 3)
64
65 #define MAX_EACH_FUNC_OFF WMT_LIB_RX_TIMEOUT + 1000 /*1000->WMT_LIB_RX_TIMEOUT + 1000, logical judgement*/
66 #define MAX_FUNC_OFF_TIME MAX_EACH_FUNC_OFF * 4
67
68 #define MAX_EACH_WMT_CMD WMT_LIB_RX_TIMEOUT + 1000 /*1000->WMT_LIB_RX_TIMEOUT + 1000, logical judgement*/
69
70 #define MAX_GPIO_CTRL_TIME (2000) /* [FixMe][GeorgeKuo] a temp value */
71
72 /*******************************************************************************
73 *                    E X T E R N A L   R E F E R E N C E S
74 ********************************************************************************
75 */
76 #if 0 /* moved to wmt_exp.h */
77 /* FIXME: apply KERN_* definition? */
78 extern UINT32 gWmtDbgLvl ;
79 #ifndef DFT_TAG
80 #define DFT_TAG         "[WMT-DFT]"
81 #endif
82
83 #define WMT_LOUD_FUNC(fmt, arg...)   if (gWmtDbgLvl >= WMT_LOG_LOUD) { osal_dbg_print(DFT_TAG "[L]%s:"  fmt, __FUNCTION__ ,##arg);}
84 #define WMT_INFO_FUNC(fmt, arg...)   if (gWmtDbgLvl >= WMT_LOG_INFO) { osal_info_print(DFT_TAG "[I]%s:"  fmt, __FUNCTION__ ,##arg);}
85 #define WMT_WARN_FUNC(fmt, arg...)   if (gWmtDbgLvl >= WMT_LOG_WARN) { osal_warn_print(DFT_TAG "[W]%s:"  fmt, __FUNCTION__ ,##arg);}
86 #define WMT_ERR_FUNC(fmt, arg...)    if (gWmtDbgLvl >= WMT_LOG_ERR) { osal_err_print(DFT_TAG "[E]%s(%d):"  fmt, __FUNCTION__ , __LINE__, ##arg);}
87 #define WMT_DBG_FUNC(fmt, arg...)    if (gWmtDbgLvl >= WMT_LOG_DBG) { osal_dbg_print(DFT_TAG "[D]%s:"  fmt, __FUNCTION__ ,##arg);}
88 #define WMT_TRC_FUNC(f)              if (gWmtDbgLvl >= WMT_LOG_DBG) { osal_dbg_print(DFT_TAG "<%s> <%d>\n", __FUNCTION__, __LINE__);}
89 #endif
90
91 /*******************************************************************************
92 *                              C O N S T A N T S
93 ********************************************************************************
94 */
95
96 /* AIF FLAG definition */
97 /* bit(0): share pin or not */
98 #define WMT_LIB_AIF_FLAG_MASK (0x1UL)
99 #define WMT_LIB_AIF_FLAG_SHARE (0x1UL << 0)
100 #define WMT_LIB_AIF_FLAG_SEPARATE (0x0UL << 0)
101
102 /*******************************************************************************
103 *                             D A T A   T Y P E S
104 ********************************************************************************
105 */
106
107 /* bit field offset definition */
108 typedef enum {
109     WMT_STAT_PWR = 0,      /* is powered on */
110     WMT_STAT_STP_REG = 1,  /* is STP driver registered: */
111     WMT_STAT_STP_OPEN = 2, /* is STP opened: default FALSE*/
112     WMT_STAT_STP_EN = 3,   /* is STP enabled: default FALSE*/
113     WMT_STAT_STP_RDY = 4,  /* is STP ready for client: default FALSE*/
114     WMT_STAT_RX = 5,       /* is rx data available */
115     WMT_STAT_CMD = 6,      /* is cmd string to be read */
116     WMT_STAT_SDIO1_ON = 7, /* is SDIO1 on */
117     WMT_STAT_SDIO2_ON = 8, /* is SDIO2 on */
118     WMT_STAT_SDIO_WIFI_ON = 9,  /* is Wi-Fi SDIO function on */
119     WMT_STAT_SDIO_STP_ON = 10,  /* is STP SDIO function on */
120     WMT_STAT_RST_ON = 11,
121     WMT_STAT_MAX
122 } WMT_STAT;
123
124 typedef enum _ENUM_WMTRSTSRC_TYPE_T{
125     WMTRSTSRC_RESET_BT = 0x0,
126     WMTRSTSRC_RESET_FM = 0x1,
127     WMTRSTSRC_RESET_GPS = 0x2,
128     WMTRSTSRC_RESET_WIFI = 0x3,
129     WMTRSTSRC_RESET_STP = 0x4,
130     WMTRSTSRC_RESET_TEST = 0x5,
131     WMTRSTSRC_RESET_MAX
132 } ENUM_WMTRSTSRC_TYPE_T, *P_ENUM_WMTRSTSRC_TYPE_T;
133
134
135 typedef struct {
136     PF_WMT_CB fDrvRst[4];
137 } WMT_FDRV_CB, *P_WMT_FDRV_CB;
138
139
140 typedef struct {
141         UINT32 dowloadSeq;
142         UCHAR addRess[4];
143         UCHAR patchName[256];
144 }WMT_PATCH_INFO,*P_WMT_PATCH_INFO;
145
146
147 /* OS independent wrapper for WMT_OP */
148 typedef struct _DEV_WMT_ {
149
150     OSAL_SLEEPABLE_LOCK psm_lock;        
151     /* WMTd thread information */
152 //    struct task_struct *pWmtd;   /* main thread (wmtd) handle */
153     OSAL_THREAD thread;
154 //    wait_queue_head_t rWmtdWq;  /*WMTd command wait queue */
155     OSAL_EVENT rWmtdWq;    //rename
156     //ULONG state; /* bit field of WMT_STAT */
157     OSAL_BIT_OP_VAR state;
158
159     /* STP context information */
160 //    wait_queue_head_t rWmtRxWq;  /* STP Rx wait queue */
161     OSAL_EVENT rWmtRxWq; //rename
162 //    WMT_STP_FUNC rStpFunc; /* STP functions */
163     WMT_FDRV_CB  rFdrvCb;
164
165     /* WMT Configurations */
166     WMT_HIF_CONF  rWmtHifConf;
167     WMT_GEN_CONF  rWmtGenConf;
168
169     /* Patch information */
170     UCHAR cPatchName[NAME_MAX + 1];
171     UCHAR cFullPatchName[NAME_MAX + 1];
172         UINT32 patchNum;
173     const osal_firmware *pPatch;
174
175     UCHAR cWmtcfgName[NAME_MAX + 1];
176     const osal_firmware *pWmtCfg;
177
178         const osal_firmware *pNvram;
179         
180     /* Current used UART port description*/
181     CHAR cUartName[NAME_MAX + 1];
182         
183     OSAL_OP_Q rFreeOpQ; /* free op queue */
184     OSAL_OP_Q rActiveOpQ; /* active op queue */
185     OSAL_OP arQue[WMT_OP_BUF_SIZE]; /* real op instances */
186     P_OSAL_OP pCurOP; /* current op*/
187
188     /* cmd str buffer */
189     UCHAR cCmd[NAME_MAX + 1];
190     INT32 cmdResult;
191 //    struct completion cmd_comp;
192 //    wait_queue_head_t cmd_wq; /* read command queues */
193     OSAL_SIGNAL cmdResp;
194     OSAL_EVENT cmdReq;
195
196     /* WMT loopback Thread Information */
197 //    WMT_CMB_VER combo_ver;
198     //P_WMT_CMB_CHIP_INFO_S pChipInfo;
199     UINT32 chip_id;
200     UINT32 hw_ver;
201     UINT32 fw_ver;
202     // TODO:  [FixMe][GeorgeKuo] remove this translated version code in the
203     // future. Just return the above 3 info to querist
204     ENUM_WMTHWVER_TYPE_T eWmtHwVer;
205
206         P_WMT_PATCH_INFO pWmtPatchInfo;
207 }DEV_WMT, *P_DEV_WMT;
208
209 /*******************************************************************************
210 *                            P U B L I C   D A T A
211 ********************************************************************************
212 */
213
214 /*******************************************************************************
215 *                           P R I V A T E   D A T A
216 ********************************************************************************
217 */
218
219 /*******************************************************************************
220 *                  F U N C T I O N   D E C L A R A T I O N S
221 ********************************************************************************
222 */
223 extern INT32 wmt_lib_init(VOID);
224 extern INT32 wmt_lib_deinit(VOID);
225 extern INT32 wmt_lib_tx (UINT8 *data, UINT32 size, UINT32 *writtenSize);
226 extern INT32 wmt_lib_tx_raw (UINT8 *data, UINT32 size, UINT32 *writtenSize);
227 extern INT32 wmt_lib_rx(UINT8 *buff, UINT32 buffLen, UINT32 *readSize);
228 extern VOID
229 wmt_lib_flush_rx(VOID);
230
231 #if CFG_WMT_PS_SUPPORT
232 extern INT32
233 wmt_lib_ps_set_idle_time(UINT32 psIdleTime);
234 extern INT32
235 wmt_lib_ps_init(VOID);
236 extern INT32
237 wmt_lib_ps_deinit(VOID);
238 extern INT32
239 wmt_lib_ps_enable(VOID);
240 extern INT32 
241 wmt_lib_ps_ctrl(UINT32 state);
242
243 extern INT32
244 wmt_lib_ps_disable(VOID);
245 extern VOID
246 wmt_lib_ps_irq_cb(VOID);
247 #endif
248 extern VOID
249 wmt_lib_ps_set_sdio_psop (
250     PF_WMT_SDIO_PSOP own_cb
251     );
252
253 /* LXOP functions: */
254 extern P_OSAL_OP wmt_lib_get_free_op (VOID);
255 extern INT32 wmt_lib_put_op_to_free_queue(P_OSAL_OP pOp);
256 extern MTK_WCN_BOOL wmt_lib_put_act_op (P_OSAL_OP pOp);
257
258 //extern ENUM_WMTHWVER_TYPE_T wmt_lib_get_hwver (VOID);
259 extern UINT32 wmt_lib_get_icinfo (ENUM_WMT_CHIPINFO_TYPE_T type);
260
261 extern MTK_WCN_BOOL wmt_lib_is_therm_ctrl_support (VOID);
262 extern MTK_WCN_BOOL wmt_lib_is_dsns_ctrl_support (VOID);
263 extern INT32 wmt_lib_trigger_cmd_signal (INT32 result);
264 extern UCHAR *wmt_lib_get_cmd(VOID);
265 extern P_OSAL_EVENT wmt_lib_get_cmd_event(VOID);
266 extern INT32 wmt_lib_set_patch_name(UCHAR *cPatchName);
267 extern INT32 wmt_lib_set_uart_name(CHAR *cUartName);
268 extern INT32 wmt_lib_set_hif(ULONG hifconf);
269 extern P_WMT_HIF_CONF wmt_lib_get_hif(VOID);
270 extern MTK_WCN_BOOL wmt_lib_get_cmd_status(VOID);
271
272 /* GeorgeKuo: replace set_chip_gpio() with more specific ones */
273 #if 0/* moved to wmt_exp.h */
274 extern INT32 wmt_lib_set_aif (CMB_STUB_AIF_X aif, MTK_WCN_BOOL share); /* set AUDIO interface options */
275 #endif
276 extern INT32 wmt_lib_host_awake_get(VOID);
277 extern INT32 wmt_lib_host_awake_put(VOID);
278 extern UINT32 wmt_lib_dbg_level_set(UINT32 level);
279
280 extern INT32 wmt_lib_msgcb_reg (
281     ENUM_WMTDRV_TYPE_T eType,
282     PF_WMT_CB pCb
283     );
284
285 extern INT32 wmt_lib_msgcb_unreg (
286     ENUM_WMTDRV_TYPE_T eType
287     );
288 ENUM_WMTRSTRET_TYPE_T wmt_lib_cmb_rst( ENUM_WMTRSTSRC_TYPE_T src);
289 MTK_WCN_BOOL wmt_lib_sw_rst(INT32 baudRst);
290 MTK_WCN_BOOL wmt_lib_hw_rst(VOID);
291 INT32 wmt_lib_reg_rw (
292     UINT32 isWrite,
293     UINT32 offset,
294     PUINT32 pvalue,
295     UINT32 mask
296     );
297 INT32 wmt_lib_efuse_rw (
298     UINT32 isWrite,
299     UINT32 offset,
300     PUINT32 pvalue,
301     UINT32 mask
302     );
303 INT32 wmt_lib_sdio_ctrl(UINT32 on);
304
305 extern INT32 DISABLE_PSM_MONITOR(void);
306 extern VOID ENABLE_PSM_MONITOR(void);
307 extern INT32 wmt_lib_notify_stp_sleep(void);
308 extern void wmt_lib_psm_lock_release(void);
309 extern INT32 wmt_lib_psm_lock_aquire(void);
310 extern INT32 wmt_lib_set_stp_wmt_last_close(UINT32 value);
311
312 extern VOID wmt_lib_set_patch_num(ULONG num);
313 extern VOID wmt_lib_set_patch_info(P_WMT_PATCH_INFO pPatchinfo);
314
315 extern INT32 wmt_lib_set_current_op(P_DEV_WMT pWmtDev, P_OSAL_OP pOp);
316 extern P_OSAL_OP wmt_lib_get_current_op(P_DEV_WMT pWmtDev);
317
318 extern INT32 wmt_lib_merge_if_flag_ctrl(UINT32 enable);
319 extern INT32 wmt_lib_merge_if_flag_get(UINT32 enable);
320
321 /*******************************************************************************
322 *                              F U N C T I O N S
323 ********************************************************************************
324 */
325
326 #endif /* _WMT_LIB_H_ */
327