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