net: wireless: rockchip_wlan: add rtl8723bs support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / hal / phydm / phydm_interface.h
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.\r
4  *                                        \r
5  * This program is free software; you can redistribute it and/or modify it\r
6  * under the terms of version 2 of the GNU General Public License as\r
7  * published by the Free Software Foundation.\r
8  *\r
9  * This program is distributed in the hope that it will be useful, but WITHOUT\r
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
12  * more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along with\r
15  * this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
17  *\r
18  *\r
19  ******************************************************************************/\r
20 \r
21 \r
22 #ifndef __ODM_INTERFACE_H__\r
23 #define __ODM_INTERFACE_H__\r
24 \r
25 #define INTERFACE_VERSION       "1.0"           /*2015.01.13  Dino*/\r
26 \r
27 //\r
28 // =========== Constant/Structure/Enum/... Define\r
29 //\r
30 \r
31 \r
32 \r
33 //\r
34 // =========== Macro Define\r
35 //\r
36 \r
37 #define _reg_all(_name)                 ODM_##_name\r
38 #define _reg_ic(_name, _ic)             ODM_##_name##_ic\r
39 #define _bit_all(_name)                 BIT_##_name\r
40 #define _bit_ic(_name, _ic)             BIT_##_name##_ic\r
41 \r
42 // _cat: implemented by Token-Pasting Operator.\r
43 #if 0\r
44 #define _cat(_name, _ic_type, _func)                                                            \\r
45         (                                                                                                                       \\r
46                 _func##_all(_name)                                                                              \\r
47         )\r
48 #endif\r
49 \r
50 /*===================================\r
51 \r
52 #define ODM_REG_DIG_11N         0xC50\r
53 #define ODM_REG_DIG_11AC        0xDDD\r
54 \r
55 ODM_REG(DIG,_pDM_Odm)\r
56 =====================================*/\r
57 \r
58 #define _reg_11N(_name)                 ODM_REG_##_name##_11N \r
59 #define _reg_11AC(_name)                ODM_REG_##_name##_11AC\r
60 #define _bit_11N(_name)                 ODM_BIT_##_name##_11N \r
61 #define _bit_11AC(_name)                ODM_BIT_##_name##_11AC\r
62 \r
63 #ifdef __ECOS\r
64 #define _rtk_cat(_name, _ic_type, _func)                \\r
65         (                                       \\r
66                 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name):           \\r
67                 _func##_11AC(_name)     \\r
68         )\r
69 #else\r
70 \r
71 #define _cat(_name, _ic_type, _func)                                                                    \\r
72         (                                                                                                                       \\r
73                 ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name):           \\r
74                 _func##_11AC(_name)                                                                     \\r
75         )\r
76 #endif\r
77 /* \r
78 // only sample code\r
79 //#define _cat(_name, _ic_type, _func)                                                                  \\r
80 //      (                                                                                                                       \\r
81 //              ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C):         \\r
82 //              ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D):         \\r
83 //              ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S):         \\r
84 //              ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A):         \\r
85 //              ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E):         \\r
86 //              _func##_ic(_name, _8195)                                                                        \\r
87 //      )\r
88 */\r
89 \r
90 // _name: name of register or bit.\r
91 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" \r
92 //        gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.\r
93 #ifdef __ECOS\r
94 #define ODM_REG(_name, _pDM_Odm)        _rtk_cat(_name, _pDM_Odm->SupportICType, _reg)\r
95 #define ODM_BIT(_name, _pDM_Odm)        _rtk_cat(_name, _pDM_Odm->SupportICType, _bit)\r
96 #else\r
97 #define ODM_REG(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _reg)\r
98 #define ODM_BIT(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _bit)\r
99 #endif\r
100 typedef enum _PHYDM_H2C_CMD {\r
101         ODM_H2C_RSSI_REPORT = 0,\r
102         ODM_H2C_PSD_RESULT = 1, \r
103         ODM_H2C_PathDiv = 2,\r
104         ODM_H2C_WIFI_CALIBRATION = 3,\r
105         ODM_H2C_IQ_CALIBRATION = 4,\r
106         ODM_H2C_RA_PARA_ADJUST = 5,\r
107         PHYDM_H2C_DYNAMIC_TX_PATH = 6,\r
108         PHYDM_H2C_FW_TRACE_EN = 7,\r
109         PHYDM_H2C_TXBF = 8,\r
110         ODM_MAX_H2CCMD\r
111 } PHYDM_H2C_CMD;\r
112 \r
113 typedef enum _PHYDM_C2H_EVT {\r
114         PHYDM_C2H_DBG = 0,\r
115         PHYDM_C2H_LB = 1,\r
116         PHYDM_C2H_XBF = 2,\r
117         PHYDM_C2H_TX_REPORT = 3,\r
118         PHYDM_C2H_INFO = 9,\r
119         PHYDM_C2H_BT_MP = 11,\r
120         PHYDM_C2H_RA_RPT = 12,\r
121         PHYDM_C2H_RA_PARA_RPT = 14,\r
122         PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,\r
123         PHYDM_C2H_IQK_FINISH = 17, /*0x11*/\r
124         PHYDM_C2H_DBG_CODE = 0xFE,\r
125         PHYDM_C2H_EXTEND = 0xFF,\r
126 } PHYDM_C2H_EVT;\r
127 \r
128 typedef enum _PHYDM_EXTEND_C2H_EVT {\r
129         PHYDM_EXTEND_C2H_DBG_PRINT = 0\r
130 \r
131 } PHYDM_EXTEND_C2H_EVT;\r
132 \r
133 typedef enum _PHYDM_ACTING_TYPE {\r
134         PhyDM_ACTING_AS_IBSS = 0,\r
135         PhyDM_ACTING_AS_AP = 1\r
136 } PHYDM_ACTING_TYPE;\r
137 \r
138 \r
139 //\r
140 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.\r
141 // Suggest HW team to use thread instead of workitem. Windows also support the feature.\r
142 //\r
143 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
144 typedef  void *PRT_WORK_ITEM ;\r
145 typedef  void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;\r
146 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);\r
147 \r
148 #if 0\r
149 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;\r
150 \r
151 typedef struct _RT_WORK_ITEM\r
152 {\r
153         \r
154         RT_WORKITEM_HANDLE                      Handle;                 // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.\r
155         PVOID                                           Adapter;                // Pointer to Adapter object.\r
156         PVOID                                           pContext;               // Parameter to passed to CallBackFunc(). \r
157         RT_WORKITEM_CALL_BACK           CallbackFunc;   // Callback function of the workitem.\r
158         u1Byte                                          RefCount;               // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. \r
159         PVOID                                           pPlatformExt;   // Pointer to platform-dependent extension.     \r
160         BOOLEAN                                         bFree;\r
161         char                                            szID[36];               // An identity string of this workitem.\r
162 }RT_WORK_ITEM, *PRT_WORK_ITEM;\r
163 \r
164 #endif\r
165 \r
166 \r
167 #endif\r
168 \r
169 //\r
170 // =========== Extern Variable ??? It should be forbidden.\r
171 //\r
172 \r
173 \r
174 //\r
175 // =========== EXtern Function Prototype\r
176 //\r
177 \r
178 \r
179 u1Byte\r
180 ODM_Read1Byte(\r
181         IN      PDM_ODM_T               pDM_Odm,\r
182         IN      u4Byte                  RegAddr\r
183         );\r
184 \r
185 u2Byte\r
186 ODM_Read2Byte(\r
187         IN      PDM_ODM_T               pDM_Odm,\r
188         IN      u4Byte                  RegAddr\r
189         );\r
190 \r
191 u4Byte\r
192 ODM_Read4Byte(\r
193         IN      PDM_ODM_T               pDM_Odm,\r
194         IN      u4Byte                  RegAddr\r
195         );\r
196 \r
197 VOID\r
198 ODM_Write1Byte(\r
199         IN      PDM_ODM_T               pDM_Odm,\r
200         IN      u4Byte                  RegAddr,\r
201         IN      u1Byte                  Data\r
202         );\r
203 \r
204 VOID\r
205 ODM_Write2Byte(\r
206         IN      PDM_ODM_T               pDM_Odm,\r
207         IN      u4Byte                  RegAddr,\r
208         IN      u2Byte                  Data\r
209         );\r
210 \r
211 VOID\r
212 ODM_Write4Byte(\r
213         IN      PDM_ODM_T               pDM_Odm,\r
214         IN      u4Byte                  RegAddr,\r
215         IN      u4Byte                  Data\r
216         );\r
217 \r
218 VOID\r
219 ODM_SetMACReg(  \r
220         IN      PDM_ODM_T       pDM_Odm,\r
221         IN      u4Byte          RegAddr,\r
222         IN      u4Byte          BitMask,\r
223         IN      u4Byte          Data\r
224         );\r
225 \r
226 u4Byte \r
227 ODM_GetMACReg(  \r
228         IN      PDM_ODM_T       pDM_Odm,\r
229         IN      u4Byte          RegAddr,\r
230         IN      u4Byte          BitMask\r
231         );\r
232 \r
233 VOID\r
234 ODM_SetBBReg(   \r
235         IN      PDM_ODM_T       pDM_Odm,\r
236         IN      u4Byte          RegAddr,\r
237         IN      u4Byte          BitMask,\r
238         IN      u4Byte          Data\r
239         );\r
240 \r
241 u4Byte \r
242 ODM_GetBBReg(   \r
243         IN      PDM_ODM_T       pDM_Odm,\r
244         IN      u4Byte          RegAddr,\r
245         IN      u4Byte          BitMask\r
246         );\r
247 \r
248 VOID\r
249 ODM_SetRFReg(   \r
250         IN      PDM_ODM_T                       pDM_Odm,\r
251         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
252         IN      u4Byte                          RegAddr,\r
253         IN      u4Byte                          BitMask,\r
254         IN      u4Byte                          Data\r
255         );\r
256 \r
257 u4Byte \r
258 ODM_GetRFReg(   \r
259         IN      PDM_ODM_T                       pDM_Odm,\r
260         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
261         IN      u4Byte                          RegAddr,\r
262         IN      u4Byte                          BitMask\r
263         );\r
264 \r
265 \r
266 //\r
267 // Memory Relative Function.\r
268 //\r
269 VOID\r
270 ODM_AllocateMemory(     \r
271         IN      PDM_ODM_T       pDM_Odm,\r
272         OUT     PVOID           *pPtr,\r
273         IN      u4Byte          length\r
274         );\r
275 VOID\r
276 ODM_FreeMemory( \r
277         IN      PDM_ODM_T       pDM_Odm,\r
278         OUT     PVOID           pPtr,\r
279         IN      u4Byte          length\r
280         );\r
281 \r
282 VOID\r
283 ODM_MoveMemory( \r
284         IN      PDM_ODM_T       pDM_Odm,\r
285         OUT PVOID               pDest,\r
286         IN  PVOID               pSrc,\r
287         IN  u4Byte              Length\r
288         );\r
289 \r
290 s4Byte ODM_CompareMemory(\r
291         IN      PDM_ODM_T       pDM_Odm,\r
292         IN      PVOID           pBuf1,\r
293       IN        PVOID           pBuf2,\r
294       IN        u4Byte          length\r
295        );\r
296 \r
297 void ODM_Memory_Set\r
298         (IN     PDM_ODM_T       pDM_Odm,\r
299                 IN  PVOID       pbuf,\r
300                 IN  s1Byte      value,\r
301                 IN  u4Byte      length);\r
302         \r
303 //\r
304 // ODM MISC-spin lock relative API.\r
305 //\r
306 VOID\r
307 ODM_AcquireSpinLock(    \r
308         IN      PDM_ODM_T                       pDM_Odm,\r
309         IN      RT_SPINLOCK_TYPE        type\r
310         );\r
311 \r
312 VOID\r
313 ODM_ReleaseSpinLock(    \r
314         IN      PDM_ODM_T                       pDM_Odm,\r
315         IN      RT_SPINLOCK_TYPE        type\r
316         );\r
317 \r
318 \r
319 //\r
320 // ODM MISC-workitem relative API.\r
321 //\r
322 VOID\r
323 ODM_InitializeWorkItem( \r
324         IN      PDM_ODM_T                                       pDM_Odm,\r
325         IN      PRT_WORK_ITEM                           pRtWorkItem,\r
326         IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
327         IN      PVOID                                           pContext,\r
328         IN      const char*                                     szID\r
329         );\r
330 \r
331 VOID\r
332 ODM_StartWorkItem(      \r
333         IN      PRT_WORK_ITEM   pRtWorkItem\r
334         );\r
335 \r
336 VOID\r
337 ODM_StopWorkItem(       \r
338         IN      PRT_WORK_ITEM   pRtWorkItem\r
339         );\r
340 \r
341 VOID\r
342 ODM_FreeWorkItem(       \r
343         IN      PRT_WORK_ITEM   pRtWorkItem\r
344         );\r
345 \r
346 VOID\r
347 ODM_ScheduleWorkItem(   \r
348         IN      PRT_WORK_ITEM   pRtWorkItem\r
349         );\r
350 \r
351 VOID\r
352 ODM_IsWorkItemScheduled(        \r
353         IN      PRT_WORK_ITEM   pRtWorkItem\r
354         );\r
355 \r
356 //\r
357 // ODM Timer relative API.\r
358 //\r
359 VOID\r
360 ODM_StallExecution(     \r
361         IN      u4Byte  usDelay\r
362         );\r
363 \r
364 VOID\r
365 ODM_delay_ms(IN u4Byte  ms);\r
366 \r
367 \r
368 \r
369 VOID\r
370 ODM_delay_us(IN u4Byte  us);\r
371 \r
372 VOID\r
373 ODM_sleep_ms(IN u4Byte  ms);\r
374 \r
375 VOID\r
376 ODM_sleep_us(IN u4Byte  us);\r
377 \r
378 VOID\r
379 ODM_SetTimer(   \r
380         IN      PDM_ODM_T               pDM_Odm,\r
381         IN      PRT_TIMER               pTimer, \r
382         IN      u4Byte                  msDelay\r
383         );\r
384 \r
385 VOID\r
386 ODM_InitializeTimer(\r
387         IN      PDM_ODM_T                       pDM_Odm,\r
388         IN      PRT_TIMER                       pTimer, \r
389         IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
390         IN      PVOID                           pContext,\r
391         IN      const char*                     szID\r
392         );\r
393 \r
394 VOID\r
395 ODM_CancelTimer(\r
396         IN      PDM_ODM_T               pDM_Odm,\r
397         IN      PRT_TIMER               pTimer\r
398         );\r
399 \r
400 VOID\r
401 ODM_ReleaseTimer(\r
402         IN      PDM_ODM_T               pDM_Odm,\r
403         IN      PRT_TIMER               pTimer\r
404         );\r
405 \r
406 BOOLEAN\r
407 phydm_actingDetermine(\r
408         IN      PDM_ODM_T               pDM_Odm,\r
409         IN      PHYDM_ACTING_TYPE       type\r
410         );\r
411 \r
412 //\r
413 // ODM FW relative API.\r
414 //\r
415 VOID\r
416 ODM_FillH2CCmd(\r
417         IN      PDM_ODM_T               pDM_Odm,\r
418         IN      u1Byte                  ElementID,\r
419         IN      u4Byte                  CmdLen,\r
420         IN      pu1Byte                 pCmdBuffer\r
421 );\r
422 \r
423 u1Byte\r
424 phydm_c2H_content_parsing(\r
425         IN      PVOID                   pDM_VOID,\r
426         IN      u1Byte                  c2hCmdId,\r
427         IN      u1Byte                  c2hCmdLen,\r
428         IN      pu1Byte                 tmpBuf\r
429 );\r
430 \r
431 u8Byte\r
432 ODM_GetCurrentTime(     \r
433         IN      PDM_ODM_T               pDM_Odm\r
434         );\r
435 u8Byte\r
436 ODM_GetProgressingTime( \r
437         IN      PDM_ODM_T               pDM_Odm,\r
438         IN      u8Byte                  Start_Time\r
439         );\r
440 \r
441 #endif  // __ODM_INTERFACE_H__\r
442 \r