net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / 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.1"           /*2015.07.29  YuChen*/\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_RTL8188E)? _func##_ic(_name, _8188E):         \\r
82 //              _func##_ic(_name, _8195)                                                                        \\r
83 //      )\r
84 */\r
85 \r
86 // _name: name of register or bit.\r
87 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" \r
88 //        gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.\r
89 #ifdef __ECOS\r
90 #define ODM_REG(_name, _pDM_Odm)        _rtk_cat(_name, _pDM_Odm->SupportICType, _reg)\r
91 #define ODM_BIT(_name, _pDM_Odm)        _rtk_cat(_name, _pDM_Odm->SupportICType, _bit)\r
92 #else\r
93 #define ODM_REG(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _reg)\r
94 #define ODM_BIT(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _bit)\r
95 #endif\r
96 typedef enum _PHYDM_H2C_CMD {\r
97         ODM_H2C_RSSI_REPORT = 0,\r
98         ODM_H2C_PSD_RESULT = 1, \r
99         ODM_H2C_PathDiv = 2,\r
100         ODM_H2C_WIFI_CALIBRATION = 3,\r
101         ODM_H2C_IQ_CALIBRATION = 4,\r
102         ODM_H2C_RA_PARA_ADJUST = 5,\r
103         PHYDM_H2C_DYNAMIC_TX_PATH = 6,\r
104         PHYDM_H2C_FW_TRACE_EN = 7,\r
105         PHYDM_H2C_TXBF = 8,\r
106         PHYDM_H2C_MU = 9,\r
107         ODM_MAX_H2CCMD\r
108 }PHYDM_H2C_CMD;\r
109 \r
110 typedef enum _PHYDM_C2H_EVT {\r
111         PHYDM_C2H_DBG = 0,\r
112         PHYDM_C2H_LB = 1,\r
113         PHYDM_C2H_XBF = 2,\r
114         PHYDM_C2H_TX_REPORT = 3,\r
115         PHYDM_C2H_INFO = 9,\r
116         PHYDM_C2H_BT_MP = 11,\r
117         PHYDM_C2H_RA_RPT = 12,\r
118         PHYDM_C2H_RA_PARA_RPT=14,\r
119         PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15,\r
120         PHYDM_C2H_IQK_FINISH = 17, /*0x11*/\r
121         PHYDM_C2H_DBG_CODE = 0xFE,\r
122         PHYDM_C2H_EXTEND = 0xFF,\r
123 }PHYDM_C2H_EVT;\r
124 \r
125 typedef enum _PHYDM_EXTEND_C2H_EVT {\r
126         PHYDM_EXTEND_C2H_DBG_PRINT = 0\r
127 \r
128 }PHYDM_EXTEND_C2H_EVT;\r
129 \r
130 \r
131 //\r
132 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.\r
133 // Suggest HW team to use thread instead of workitem. Windows also support the feature.\r
134 //\r
135 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
136 typedef  void *PRT_WORK_ITEM ;\r
137 typedef  void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;\r
138 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);\r
139 \r
140 #if 0\r
141 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;\r
142 \r
143 typedef struct _RT_WORK_ITEM\r
144 {\r
145         \r
146         RT_WORKITEM_HANDLE                      Handle;                 // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.\r
147         PVOID                                           Adapter;                // Pointer to Adapter object.\r
148         PVOID                                           pContext;               // Parameter to passed to CallBackFunc(). \r
149         RT_WORKITEM_CALL_BACK           CallbackFunc;   // Callback function of the workitem.\r
150         u1Byte                                          RefCount;               // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. \r
151         PVOID                                           pPlatformExt;   // Pointer to platform-dependent extension.     \r
152         BOOLEAN                                         bFree;\r
153         char                                            szID[36];               // An identity string of this workitem.\r
154 }RT_WORK_ITEM, *PRT_WORK_ITEM;\r
155 \r
156 #endif\r
157 \r
158 \r
159 #endif\r
160 \r
161 //\r
162 // =========== Extern Variable ??? It should be forbidden.\r
163 //\r
164 \r
165 \r
166 //\r
167 // =========== EXtern Function Prototype\r
168 //\r
169 \r
170 \r
171 u1Byte\r
172 ODM_Read1Byte(\r
173         IN      PDM_ODM_T               pDM_Odm,\r
174         IN      u4Byte                  RegAddr\r
175         );\r
176 \r
177 u2Byte\r
178 ODM_Read2Byte(\r
179         IN      PDM_ODM_T               pDM_Odm,\r
180         IN      u4Byte                  RegAddr\r
181         );\r
182 \r
183 u4Byte\r
184 ODM_Read4Byte(\r
185         IN      PDM_ODM_T               pDM_Odm,\r
186         IN      u4Byte                  RegAddr\r
187         );\r
188 \r
189 VOID\r
190 ODM_Write1Byte(\r
191         IN      PDM_ODM_T               pDM_Odm,\r
192         IN      u4Byte                  RegAddr,\r
193         IN      u1Byte                  Data\r
194         );\r
195 \r
196 VOID\r
197 ODM_Write2Byte(\r
198         IN      PDM_ODM_T               pDM_Odm,\r
199         IN      u4Byte                  RegAddr,\r
200         IN      u2Byte                  Data\r
201         );\r
202 \r
203 VOID\r
204 ODM_Write4Byte(\r
205         IN      PDM_ODM_T               pDM_Odm,\r
206         IN      u4Byte                  RegAddr,\r
207         IN      u4Byte                  Data\r
208         );\r
209 \r
210 VOID\r
211 ODM_SetMACReg(  \r
212         IN      PDM_ODM_T       pDM_Odm,\r
213         IN      u4Byte          RegAddr,\r
214         IN      u4Byte          BitMask,\r
215         IN      u4Byte          Data\r
216         );\r
217 \r
218 u4Byte \r
219 ODM_GetMACReg(  \r
220         IN      PDM_ODM_T       pDM_Odm,\r
221         IN      u4Byte          RegAddr,\r
222         IN      u4Byte          BitMask\r
223         );\r
224 \r
225 VOID\r
226 ODM_SetBBReg(   \r
227         IN      PDM_ODM_T       pDM_Odm,\r
228         IN      u4Byte          RegAddr,\r
229         IN      u4Byte          BitMask,\r
230         IN      u4Byte          Data\r
231         );\r
232 \r
233 u4Byte \r
234 ODM_GetBBReg(   \r
235         IN      PDM_ODM_T       pDM_Odm,\r
236         IN      u4Byte          RegAddr,\r
237         IN      u4Byte          BitMask\r
238         );\r
239 \r
240 VOID\r
241 ODM_SetRFReg(   \r
242         IN      PDM_ODM_T                       pDM_Odm,\r
243         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
244         IN      u4Byte                          RegAddr,\r
245         IN      u4Byte                          BitMask,\r
246         IN      u4Byte                          Data\r
247         );\r
248 \r
249 u4Byte \r
250 ODM_GetRFReg(   \r
251         IN      PDM_ODM_T                       pDM_Odm,\r
252         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
253         IN      u4Byte                          RegAddr,\r
254         IN      u4Byte                          BitMask\r
255         );\r
256 \r
257 \r
258 //\r
259 // Memory Relative Function.\r
260 //\r
261 VOID\r
262 ODM_AllocateMemory(     \r
263         IN      PDM_ODM_T       pDM_Odm,\r
264         OUT     PVOID           *pPtr,\r
265         IN      u4Byte          length\r
266         );\r
267 VOID\r
268 ODM_FreeMemory( \r
269         IN      PDM_ODM_T       pDM_Odm,\r
270         OUT     PVOID           pPtr,\r
271         IN      u4Byte          length\r
272         );\r
273 \r
274 VOID\r
275 ODM_MoveMemory( \r
276         IN      PDM_ODM_T       pDM_Odm,\r
277         OUT PVOID               pDest,\r
278         IN  PVOID               pSrc,\r
279         IN  u4Byte              Length\r
280         );\r
281 \r
282 s4Byte ODM_CompareMemory(\r
283         IN      PDM_ODM_T       pDM_Odm,\r
284         IN      PVOID           pBuf1,\r
285       IN        PVOID           pBuf2,\r
286       IN        u4Byte          length\r
287        );\r
288 \r
289 void ODM_Memory_Set\r
290         (IN     PDM_ODM_T       pDM_Odm,\r
291                 IN  PVOID       pbuf,\r
292                 IN  s1Byte      value,\r
293                 IN  u4Byte      length);\r
294         \r
295 //\r
296 // ODM MISC-spin lock relative API.\r
297 //\r
298 VOID\r
299 ODM_AcquireSpinLock(    \r
300         IN      PDM_ODM_T                       pDM_Odm,\r
301         IN      RT_SPINLOCK_TYPE        type\r
302         );\r
303 \r
304 VOID\r
305 ODM_ReleaseSpinLock(    \r
306         IN      PDM_ODM_T                       pDM_Odm,\r
307         IN      RT_SPINLOCK_TYPE        type\r
308         );\r
309 \r
310 \r
311 //\r
312 // ODM MISC-workitem relative API.\r
313 //\r
314 VOID\r
315 ODM_InitializeWorkItem( \r
316         IN      PDM_ODM_T                                       pDM_Odm,\r
317         IN      PRT_WORK_ITEM                           pRtWorkItem,\r
318         IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
319         IN      PVOID                                           pContext,\r
320         IN      const char*                                     szID\r
321         );\r
322 \r
323 VOID\r
324 ODM_StartWorkItem(      \r
325         IN      PRT_WORK_ITEM   pRtWorkItem\r
326         );\r
327 \r
328 VOID\r
329 ODM_StopWorkItem(       \r
330         IN      PRT_WORK_ITEM   pRtWorkItem\r
331         );\r
332 \r
333 VOID\r
334 ODM_FreeWorkItem(       \r
335         IN      PRT_WORK_ITEM   pRtWorkItem\r
336         );\r
337 \r
338 VOID\r
339 ODM_ScheduleWorkItem(   \r
340         IN      PRT_WORK_ITEM   pRtWorkItem\r
341         );\r
342 \r
343 VOID\r
344 ODM_IsWorkItemScheduled(        \r
345         IN      PRT_WORK_ITEM   pRtWorkItem\r
346         );\r
347 \r
348 //\r
349 // ODM Timer relative API.\r
350 //\r
351 VOID\r
352 ODM_StallExecution(     \r
353         IN      u4Byte  usDelay\r
354         );\r
355 \r
356 VOID\r
357 ODM_delay_ms(IN u4Byte  ms);\r
358 \r
359 \r
360 \r
361 VOID\r
362 ODM_delay_us(IN u4Byte  us);\r
363 \r
364 VOID\r
365 ODM_sleep_ms(IN u4Byte  ms);\r
366 \r
367 VOID\r
368 ODM_sleep_us(IN u4Byte  us);\r
369 \r
370 VOID\r
371 ODM_SetTimer(   \r
372         IN      PDM_ODM_T               pDM_Odm,\r
373         IN      PRT_TIMER               pTimer, \r
374         IN      u4Byte                  msDelay\r
375         );\r
376 \r
377 VOID\r
378 ODM_InitializeTimer(\r
379         IN      PDM_ODM_T                       pDM_Odm,\r
380         IN      PRT_TIMER                       pTimer, \r
381         IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
382         IN      PVOID                           pContext,\r
383         IN      const char*                     szID\r
384         );\r
385 \r
386 VOID\r
387 ODM_CancelTimer(\r
388         IN      PDM_ODM_T               pDM_Odm,\r
389         IN      PRT_TIMER               pTimer\r
390         );\r
391 \r
392 VOID\r
393 ODM_ReleaseTimer(\r
394         IN      PDM_ODM_T               pDM_Odm,\r
395         IN      PRT_TIMER               pTimer\r
396         );\r
397 \r
398 //\r
399 // ODM FW relative API.\r
400 //\r
401 VOID\r
402 ODM_FillH2CCmd(\r
403         IN      PDM_ODM_T               pDM_Odm,\r
404         IN      u1Byte                  ElementID,\r
405         IN      u4Byte                  CmdLen,\r
406         IN      pu1Byte                 pCmdBuffer\r
407 );\r
408 \r
409 u1Byte\r
410 phydm_c2H_content_parsing(\r
411         IN      PVOID                   pDM_VOID,\r
412         IN      u1Byte                  c2hCmdId,\r
413         IN      u1Byte                  c2hCmdLen,\r
414         IN      pu1Byte                 tmpBuf\r
415 );\r
416 \r
417 u8Byte\r
418 ODM_GetCurrentTime(     \r
419         IN      PDM_ODM_T               pDM_Odm\r
420         );\r
421 u8Byte\r
422 ODM_GetProgressingTime( \r
423         IN      PDM_ODM_T               pDM_Odm,\r
424         IN      u8Byte                  Start_Time\r
425         );\r
426 \r
427 #endif  // __ODM_INTERFACE_H__\r
428 \r