phy: rockchip-inno-usb2: add SDP detect retry
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188eu / hal / OUTSRC / odm_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 \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 #if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.\r
64 #define _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 #endif\r
70 #if 0 // only sample code\r
71 #define _cat(_name, _ic_type, _func)                                                                    \\r
72         (                                                                                                                       \\r
73                 ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C):         \\r
74                 ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D):         \\r
75                 ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S):         \\r
76                 ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A):         \\r
77                 ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E):         \\r
78                 _func##_ic(_name, _8195)                                                                        \\r
79         )\r
80 #endif\r
81 \r
82 // _name: name of register or bit.\r
83 // Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" \r
84 //        gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.\r
85 #define ODM_REG(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _reg)\r
86 #define ODM_BIT(_name, _pDM_Odm)        _cat(_name, _pDM_Odm->SupportICType, _bit)\r
87 \r
88 typedef enum _ODM_H2C_CMD \r
89 {\r
90         ODM_H2C_RSSI_REPORT = 0,\r
91         ODM_H2C_PSD_RESULT=1,   \r
92         ODM_H2C_PathDiv = 2,               \r
93         ODM_MAX_H2CCMD\r
94 }ODM_H2C_CMD;\r
95 \r
96 \r
97 //\r
98 // 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.\r
99 // Suggest HW team to use thread instead of workitem. Windows also support the feature.\r
100 //\r
101 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)\r
102 typedef  void *PRT_WORK_ITEM ;\r
103 typedef  void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;\r
104 typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);\r
105 \r
106 #if 0\r
107 typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;\r
108 \r
109 typedef struct _RT_WORK_ITEM\r
110 {\r
111         \r
112         RT_WORKITEM_HANDLE                      Handle;                 // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.\r
113         PVOID                                           Adapter;                // Pointer to Adapter object.\r
114         PVOID                                           pContext;               // Parameter to passed to CallBackFunc(). \r
115         RT_WORKITEM_CALL_BACK           CallbackFunc;   // Callback function of the workitem.\r
116         u1Byte                                          RefCount;               // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. \r
117         PVOID                                           pPlatformExt;   // Pointer to platform-dependent extension.     \r
118         BOOLEAN                                         bFree;\r
119         char                                            szID[36];               // An identity string of this workitem.\r
120 }RT_WORK_ITEM, *PRT_WORK_ITEM;\r
121 \r
122 #endif\r
123 \r
124 \r
125 #endif\r
126 \r
127 //\r
128 // =========== Extern Variable ??? It should be forbidden.\r
129 //\r
130 \r
131 \r
132 //\r
133 // =========== EXtern Function Prototype\r
134 //\r
135 \r
136 \r
137 u1Byte\r
138 ODM_Read1Byte(\r
139         IN      PDM_ODM_T               pDM_Odm,\r
140         IN      u4Byte                  RegAddr\r
141         );\r
142 \r
143 u2Byte\r
144 ODM_Read2Byte(\r
145         IN      PDM_ODM_T               pDM_Odm,\r
146         IN      u4Byte                  RegAddr\r
147         );\r
148 \r
149 u4Byte\r
150 ODM_Read4Byte(\r
151         IN      PDM_ODM_T               pDM_Odm,\r
152         IN      u4Byte                  RegAddr\r
153         );\r
154 \r
155 VOID\r
156 ODM_Write1Byte(\r
157         IN      PDM_ODM_T               pDM_Odm,\r
158         IN      u4Byte                  RegAddr,\r
159         IN      u1Byte                  Data\r
160         );\r
161 \r
162 VOID\r
163 ODM_Write2Byte(\r
164         IN      PDM_ODM_T               pDM_Odm,\r
165         IN      u4Byte                  RegAddr,\r
166         IN      u2Byte                  Data\r
167         );\r
168 \r
169 VOID\r
170 ODM_Write4Byte(\r
171         IN      PDM_ODM_T               pDM_Odm,\r
172         IN      u4Byte                  RegAddr,\r
173         IN      u4Byte                  Data\r
174         );\r
175 \r
176 VOID\r
177 ODM_SetMACReg(  \r
178         IN      PDM_ODM_T       pDM_Odm,\r
179         IN      u4Byte          RegAddr,\r
180         IN      u4Byte          BitMask,\r
181         IN      u4Byte          Data\r
182         );\r
183 \r
184 u4Byte \r
185 ODM_GetMACReg(  \r
186         IN      PDM_ODM_T       pDM_Odm,\r
187         IN      u4Byte          RegAddr,\r
188         IN      u4Byte          BitMask\r
189         );\r
190 \r
191 VOID\r
192 ODM_SetBBReg(   \r
193         IN      PDM_ODM_T       pDM_Odm,\r
194         IN      u4Byte          RegAddr,\r
195         IN      u4Byte          BitMask,\r
196         IN      u4Byte          Data\r
197         );\r
198 \r
199 u4Byte \r
200 ODM_GetBBReg(   \r
201         IN      PDM_ODM_T       pDM_Odm,\r
202         IN      u4Byte          RegAddr,\r
203         IN      u4Byte          BitMask\r
204         );\r
205 \r
206 VOID\r
207 ODM_SetRFReg(   \r
208         IN      PDM_ODM_T                       pDM_Odm,\r
209         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
210         IN      u4Byte                          RegAddr,\r
211         IN      u4Byte                          BitMask,\r
212         IN      u4Byte                          Data\r
213         );\r
214 \r
215 u4Byte \r
216 ODM_GetRFReg(   \r
217         IN      PDM_ODM_T                       pDM_Odm,\r
218         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
219         IN      u4Byte                          RegAddr,\r
220         IN      u4Byte                          BitMask\r
221         );\r
222 \r
223 \r
224 //\r
225 // Memory Relative Function.\r
226 //\r
227 VOID\r
228 ODM_AllocateMemory(     \r
229         IN      PDM_ODM_T       pDM_Odm,\r
230         OUT     PVOID           *pPtr,\r
231         IN      u4Byte          length\r
232         );\r
233 VOID\r
234 ODM_FreeMemory( \r
235         IN      PDM_ODM_T       pDM_Odm,\r
236         OUT     PVOID           pPtr,\r
237         IN      u4Byte          length\r
238         );\r
239 \r
240 VOID\r
241 ODM_MoveMemory( \r
242         IN      PDM_ODM_T       pDM_Odm,\r
243         OUT PVOID               pDest,\r
244         IN  PVOID               pSrc,\r
245         IN  u4Byte              Length\r
246         );\r
247 \r
248 s4Byte ODM_CompareMemory(\r
249         IN      PDM_ODM_T       pDM_Odm,\r
250         IN      PVOID           pBuf1,\r
251       IN        PVOID           pBuf2,\r
252       IN        u4Byte          length\r
253        );\r
254         \r
255 //\r
256 // ODM MISC-spin lock relative API.\r
257 //\r
258 VOID\r
259 ODM_AcquireSpinLock(    \r
260         IN      PDM_ODM_T                       pDM_Odm,\r
261         IN      RT_SPINLOCK_TYPE        type\r
262         );\r
263 \r
264 VOID\r
265 ODM_ReleaseSpinLock(    \r
266         IN      PDM_ODM_T                       pDM_Odm,\r
267         IN      RT_SPINLOCK_TYPE        type\r
268         );\r
269 \r
270 \r
271 //\r
272 // ODM MISC-workitem relative API.\r
273 //\r
274 VOID\r
275 ODM_InitializeWorkItem( \r
276         IN      PDM_ODM_T                                       pDM_Odm,\r
277         IN      PRT_WORK_ITEM                           pRtWorkItem,\r
278         IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
279         IN      PVOID                                           pContext,\r
280         IN      const char*                                     szID\r
281         );\r
282 \r
283 VOID\r
284 ODM_StartWorkItem(      \r
285         IN      PRT_WORK_ITEM   pRtWorkItem\r
286         );\r
287 \r
288 VOID\r
289 ODM_StopWorkItem(       \r
290         IN      PRT_WORK_ITEM   pRtWorkItem\r
291         );\r
292 \r
293 VOID\r
294 ODM_FreeWorkItem(       \r
295         IN      PRT_WORK_ITEM   pRtWorkItem\r
296         );\r
297 \r
298 VOID\r
299 ODM_ScheduleWorkItem(   \r
300         IN      PRT_WORK_ITEM   pRtWorkItem\r
301         );\r
302 \r
303 VOID\r
304 ODM_IsWorkItemScheduled(        \r
305         IN      PRT_WORK_ITEM   pRtWorkItem\r
306         );\r
307 \r
308 //\r
309 // ODM Timer relative API.\r
310 //\r
311 VOID\r
312 ODM_StallExecution(     \r
313         IN      u4Byte  usDelay\r
314         );\r
315 \r
316 VOID\r
317 ODM_delay_ms(IN u4Byte  ms);\r
318 \r
319 \r
320 \r
321 VOID\r
322 ODM_delay_us(IN u4Byte  us);\r
323 \r
324 VOID\r
325 ODM_sleep_ms(IN u4Byte  ms);\r
326 \r
327 VOID\r
328 ODM_sleep_us(IN u4Byte  us);\r
329 \r
330 VOID\r
331 ODM_SetTimer(   \r
332         IN      PDM_ODM_T               pDM_Odm,\r
333         IN      PRT_TIMER               pTimer, \r
334         IN      u4Byte                  msDelay\r
335         );\r
336 \r
337 VOID\r
338 ODM_InitializeTimer(\r
339         IN      PDM_ODM_T                       pDM_Odm,\r
340         IN      PRT_TIMER                       pTimer, \r
341         IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
342         IN      PVOID                           pContext,\r
343         IN      const char*                     szID\r
344         );\r
345 \r
346 VOID\r
347 ODM_CancelTimer(\r
348         IN      PDM_ODM_T               pDM_Odm,\r
349         IN      PRT_TIMER               pTimer\r
350         );\r
351 \r
352 VOID\r
353 ODM_ReleaseTimer(\r
354         IN      PDM_ODM_T               pDM_Odm,\r
355         IN      PRT_TIMER               pTimer\r
356         );\r
357 \r
358 \r
359 //\r
360 // ODM FW relative API.\r
361 //\r
362 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
363 VOID\r
364 ODM_FillH2CCmd(\r
365         IN      PADAPTER                Adapter,\r
366         IN      u1Byte  ElementID,\r
367         IN      u4Byte  CmdLen,\r
368         IN      pu1Byte pCmdBuffer\r
369 );\r
370 #else\r
371 u4Byte\r
372 ODM_FillH2CCmd( \r
373         IN      pu1Byte         pH2CBuffer,\r
374         IN      u4Byte          H2CBufferLen,\r
375         IN      u4Byte          CmdNum,\r
376         IN      pu4Byte         pElementID,\r
377         IN      pu4Byte         pCmdLen,\r
378         IN      pu1Byte*                pCmbBuffer,\r
379         IN      pu1Byte         CmdStartSeq\r
380         );\r
381 #endif\r
382 \r
383 u4Byte\r
384 ODM_GetCurrentTime(     \r
385         IN      PDM_ODM_T               pDM_Odm\r
386         );\r
387 s4Byte\r
388 ODM_GetProgressingTime( \r
389         IN      PDM_ODM_T               pDM_Odm,\r
390         IN      u4Byte                  Start_Time\r
391         );\r
392 \r
393 #endif  // __ODM_INTERFACE_H__\r
394 \r