net: wireless: rockchip_wlan: add rtl8723ds support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723ds / hal / phydm / phydm_interface.c
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 // include files\r
23 //============================================================\r
24 \r
25 #include "mp_precomp.h"\r
26 #include "phydm_precomp.h"\r
27 \r
28 //\r
29 // ODM IO Relative API.\r
30 //\r
31 \r
32 u1Byte\r
33 ODM_Read1Byte(\r
34         IN      PDM_ODM_T               pDM_Odm,\r
35         IN      u4Byte                  RegAddr\r
36         )\r
37 {\r
38 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
39         prtl8192cd_priv priv    = pDM_Odm->priv;\r
40         return  RTL_R8(RegAddr);\r
41 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
42         PADAPTER                Adapter = pDM_Odm->Adapter;\r
43         return rtw_read8(Adapter,RegAddr);\r
44 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
45         PADAPTER                Adapter = pDM_Odm->Adapter;\r
46         return  PlatformEFIORead1Byte(Adapter, RegAddr);\r
47 #endif  \r
48 \r
49 }\r
50 \r
51 \r
52 u2Byte\r
53 ODM_Read2Byte(\r
54         IN      PDM_ODM_T               pDM_Odm,\r
55         IN      u4Byte                  RegAddr\r
56         )\r
57 {\r
58 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
59         prtl8192cd_priv priv    = pDM_Odm->priv;\r
60         return  RTL_R16(RegAddr);\r
61 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
62         PADAPTER                Adapter = pDM_Odm->Adapter;\r
63         return rtw_read16(Adapter,RegAddr);\r
64 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
65         PADAPTER                Adapter = pDM_Odm->Adapter;\r
66         return  PlatformEFIORead2Byte(Adapter, RegAddr);\r
67 #endif  \r
68 \r
69 }\r
70 \r
71 \r
72 u4Byte\r
73 ODM_Read4Byte(\r
74         IN      PDM_ODM_T               pDM_Odm,\r
75         IN      u4Byte                  RegAddr\r
76         )\r
77 {\r
78 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
79         prtl8192cd_priv priv    = pDM_Odm->priv;\r
80         return  RTL_R32(RegAddr);\r
81 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
82         PADAPTER                Adapter = pDM_Odm->Adapter;\r
83         return rtw_read32(Adapter,RegAddr);\r
84 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
85         PADAPTER                Adapter = pDM_Odm->Adapter;\r
86         return  PlatformEFIORead4Byte(Adapter, RegAddr);\r
87 #endif  \r
88 \r
89 }\r
90 \r
91 \r
92 VOID\r
93 ODM_Write1Byte(\r
94         IN      PDM_ODM_T               pDM_Odm,\r
95         IN      u4Byte                  RegAddr,\r
96         IN      u1Byte                  Data\r
97         )\r
98 {\r
99 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
100         prtl8192cd_priv priv    = pDM_Odm->priv;\r
101         RTL_W8(RegAddr, Data);\r
102 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
103         PADAPTER                Adapter = pDM_Odm->Adapter;\r
104         rtw_write8(Adapter,RegAddr, Data);\r
105 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
106         PADAPTER                Adapter = pDM_Odm->Adapter;\r
107         PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);\r
108 #endif\r
109         \r
110 }\r
111 \r
112 \r
113 VOID\r
114 ODM_Write2Byte(\r
115         IN      PDM_ODM_T               pDM_Odm,\r
116         IN      u4Byte                  RegAddr,\r
117         IN      u2Byte                  Data\r
118         )\r
119 {\r
120 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
121         prtl8192cd_priv priv    = pDM_Odm->priv;\r
122         RTL_W16(RegAddr, Data);\r
123 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
124         PADAPTER                Adapter = pDM_Odm->Adapter;\r
125         rtw_write16(Adapter,RegAddr, Data);\r
126 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
127         PADAPTER                Adapter = pDM_Odm->Adapter;\r
128         PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);\r
129 #endif  \r
130 \r
131 }\r
132 \r
133 \r
134 VOID\r
135 ODM_Write4Byte(\r
136         IN      PDM_ODM_T               pDM_Odm,\r
137         IN      u4Byte                  RegAddr,\r
138         IN      u4Byte                  Data\r
139         )\r
140 {\r
141 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
142         prtl8192cd_priv priv    = pDM_Odm->priv;\r
143         RTL_W32(RegAddr, Data);\r
144 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
145         PADAPTER                Adapter = pDM_Odm->Adapter;\r
146         rtw_write32(Adapter,RegAddr, Data);\r
147 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
148         PADAPTER                Adapter = pDM_Odm->Adapter;\r
149         PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);\r
150 #endif  \r
151 \r
152 }\r
153 \r
154 \r
155 VOID\r
156 ODM_SetMACReg(  \r
157         IN      PDM_ODM_T       pDM_Odm,\r
158         IN      u4Byte          RegAddr,\r
159         IN      u4Byte          BitMask,\r
160         IN      u4Byte          Data\r
161         )\r
162 {\r
163 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
164         PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);\r
165 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
166         PADAPTER                Adapter = pDM_Odm->Adapter;\r
167         PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);\r
168 #endif  \r
169 }\r
170 \r
171 \r
172 u4Byte \r
173 ODM_GetMACReg(  \r
174         IN      PDM_ODM_T       pDM_Odm,\r
175         IN      u4Byte          RegAddr,\r
176         IN      u4Byte          BitMask\r
177         )\r
178 {\r
179 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
180         return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);\r
181 #elif(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))\r
182         return PHY_QueryMacReg(pDM_Odm->Adapter, RegAddr, BitMask);\r
183 #endif  \r
184 }\r
185 \r
186 \r
187 VOID\r
188 ODM_SetBBReg(   \r
189         IN      PDM_ODM_T       pDM_Odm,\r
190         IN      u4Byte          RegAddr,\r
191         IN      u4Byte          BitMask,\r
192         IN      u4Byte          Data\r
193         )\r
194 {\r
195 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
196         PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);\r
197 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
198         PADAPTER                Adapter = pDM_Odm->Adapter;\r
199         PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);\r
200 #endif  \r
201 }\r
202 \r
203 \r
204 u4Byte \r
205 ODM_GetBBReg(   \r
206         IN      PDM_ODM_T       pDM_Odm,\r
207         IN      u4Byte          RegAddr,\r
208         IN      u4Byte          BitMask\r
209         )\r
210 {\r
211 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
212         return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);\r
213 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
214         PADAPTER                Adapter = pDM_Odm->Adapter;\r
215         return PHY_QueryBBReg(Adapter, RegAddr, BitMask);\r
216 #endif  \r
217 }\r
218 \r
219 \r
220 VOID\r
221 ODM_SetRFReg(   \r
222         IN      PDM_ODM_T                       pDM_Odm,\r
223         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
224         IN      u4Byte                          RegAddr,\r
225         IN      u4Byte                          BitMask,\r
226         IN      u4Byte                          Data\r
227         )\r
228 {\r
229 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
230         PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);\r
231 #elif (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
232         PADAPTER                Adapter = pDM_Odm->Adapter;\r
233         PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);\r
234         ODM_delay_us(2);\r
235                 \r
236 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)\r
237         PHY_SetRFReg(pDM_Odm->Adapter, eRFPath, RegAddr, BitMask, Data);\r
238 #endif  \r
239 }\r
240 \r
241 u4Byte \r
242 ODM_GetRFReg(   \r
243         IN      PDM_ODM_T                       pDM_Odm,\r
244         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
245         IN      u4Byte                          RegAddr,\r
246         IN      u4Byte                          BitMask\r
247         )\r
248 {\r
249 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
250         return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);\r
251 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
252         PADAPTER                Adapter = pDM_Odm->Adapter;\r
253         return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);\r
254 #endif  \r
255 }\r
256 \r
257 \r
258 \r
259 \r
260 //\r
261 // ODM Memory relative API.\r
262 //\r
263 VOID\r
264 ODM_AllocateMemory(     \r
265         IN      PDM_ODM_T       pDM_Odm,\r
266         OUT     PVOID           *pPtr,\r
267         IN      u4Byte          length\r
268         )\r
269 {\r
270 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
271         *pPtr = kmalloc(length, GFP_ATOMIC);\r
272 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )\r
273         *pPtr = rtw_zvmalloc(length);\r
274 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
275         PADAPTER                Adapter = pDM_Odm->Adapter;\r
276         PlatformAllocateMemory(Adapter, pPtr, length);\r
277 #endif  \r
278 }\r
279 \r
280 // length could be ignored, used to detect memory leakage.\r
281 VOID\r
282 ODM_FreeMemory( \r
283         IN      PDM_ODM_T       pDM_Odm,\r
284         OUT     PVOID           pPtr,\r
285         IN      u4Byte          length\r
286         )\r
287 {\r
288 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
289         kfree(pPtr);\r
290 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )   \r
291         rtw_vmfree(pPtr, length);\r
292 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
293         //PADAPTER    Adapter = pDM_Odm->Adapter;\r
294         PlatformFreeMemory(pPtr, length);\r
295 #endif  \r
296 }\r
297 \r
298 VOID\r
299 ODM_MoveMemory( \r
300         IN      PDM_ODM_T       pDM_Odm,\r
301         OUT PVOID               pDest,\r
302         IN  PVOID               pSrc,\r
303         IN  u4Byte              Length\r
304         )\r
305 {\r
306 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
307         memcpy(pDest, pSrc, Length);\r
308 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )   \r
309         _rtw_memcpy(pDest, pSrc, Length);\r
310 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
311         PlatformMoveMemory(pDest, pSrc, Length);\r
312 #endif  \r
313 }\r
314 \r
315 void ODM_Memory_Set(\r
316         IN      PDM_ODM_T       pDM_Odm,\r
317         IN      PVOID           pbuf,\r
318         IN      s1Byte          value,\r
319         IN      u4Byte          length\r
320 )\r
321 {\r
322 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
323         memset(pbuf, value, length);\r
324 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )   \r
325         _rtw_memset(pbuf,value, length);\r
326 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
327         PlatformFillMemory(pbuf,length,value);\r
328 #endif\r
329 }\r
330 s4Byte ODM_CompareMemory(\r
331         IN      PDM_ODM_T               pDM_Odm,\r
332         IN      PVOID           pBuf1,\r
333         IN      PVOID           pBuf2,\r
334         IN      u4Byte          length\r
335        )\r
336 {\r
337 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
338         return memcmp(pBuf1,pBuf2,length);\r
339 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )   \r
340         return _rtw_memcmp(pBuf1,pBuf2,length);\r
341 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
342         return PlatformCompareMemory(pBuf1,pBuf2,length);\r
343 #endif  \r
344 }\r
345 \r
346 \r
347 \r
348 //\r
349 // ODM MISC relative API.\r
350 //\r
351 VOID\r
352 ODM_AcquireSpinLock(    \r
353         IN      PDM_ODM_T                       pDM_Odm,\r
354         IN      RT_SPINLOCK_TYPE        type\r
355         )\r
356 {\r
357 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
358         \r
359 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
360         PADAPTER Adapter = pDM_Odm->Adapter;\r
361         rtw_odm_acquirespinlock(Adapter, type);\r
362 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
363         PADAPTER                Adapter = pDM_Odm->Adapter;\r
364         PlatformAcquireSpinLock(Adapter, type);\r
365 #endif  \r
366 }\r
367 VOID\r
368 ODM_ReleaseSpinLock(    \r
369         IN      PDM_ODM_T                       pDM_Odm,\r
370         IN      RT_SPINLOCK_TYPE        type\r
371         )\r
372 {\r
373 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
374 \r
375 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )\r
376         PADAPTER Adapter = pDM_Odm->Adapter;\r
377         rtw_odm_releasespinlock(Adapter, type);\r
378 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
379         PADAPTER                Adapter = pDM_Odm->Adapter;\r
380         PlatformReleaseSpinLock(Adapter, type);\r
381 #endif  \r
382 }\r
383 \r
384 //\r
385 // Work item relative API. FOr MP driver only~!\r
386 //\r
387 VOID\r
388 ODM_InitializeWorkItem( \r
389         IN      PDM_ODM_T                                       pDM_Odm,\r
390         IN      PRT_WORK_ITEM                           pRtWorkItem,\r
391         IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
392         IN      PVOID                                           pContext,\r
393         IN      const char*                                     szID\r
394         )\r
395 {\r
396 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
397         \r
398 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
399         \r
400 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
401         PADAPTER                Adapter = pDM_Odm->Adapter;\r
402         PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);\r
403 #endif  \r
404 }\r
405 \r
406 \r
407 VOID\r
408 ODM_StartWorkItem(      \r
409         IN      PRT_WORK_ITEM   pRtWorkItem\r
410         )\r
411 {\r
412 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
413         \r
414 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
415 \r
416 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
417         PlatformStartWorkItem(pRtWorkItem);\r
418 #endif  \r
419 }\r
420 \r
421 \r
422 VOID\r
423 ODM_StopWorkItem(       \r
424         IN      PRT_WORK_ITEM   pRtWorkItem\r
425         )\r
426 {\r
427 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
428         \r
429 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
430 \r
431 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
432         PlatformStopWorkItem(pRtWorkItem);\r
433 #endif  \r
434 }\r
435 \r
436 \r
437 VOID\r
438 ODM_FreeWorkItem(       \r
439         IN      PRT_WORK_ITEM   pRtWorkItem\r
440         )\r
441 {\r
442 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
443         \r
444 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
445 \r
446 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
447         PlatformFreeWorkItem(pRtWorkItem);\r
448 #endif  \r
449 }\r
450 \r
451 \r
452 VOID\r
453 ODM_ScheduleWorkItem(   \r
454         IN      PRT_WORK_ITEM   pRtWorkItem\r
455         )\r
456 {\r
457 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
458         \r
459 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
460 \r
461 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
462         PlatformScheduleWorkItem(pRtWorkItem);\r
463 #endif  \r
464 }\r
465 \r
466 \r
467 VOID\r
468 ODM_IsWorkItemScheduled(        \r
469         IN      PRT_WORK_ITEM   pRtWorkItem\r
470         )\r
471 {\r
472 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
473         \r
474 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
475 \r
476 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
477         PlatformIsWorkItemScheduled(pRtWorkItem);\r
478 #endif  \r
479 }\r
480 \r
481 \r
482 \r
483 //\r
484 // ODM Timer relative API.\r
485 //\r
486 VOID\r
487 ODM_StallExecution(     \r
488         IN      u4Byte  usDelay\r
489         )\r
490 {\r
491 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
492         \r
493 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
494         rtw_udelay_os(usDelay);\r
495 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
496         PlatformStallExecution(usDelay);\r
497 #endif  \r
498 }\r
499 \r
500 VOID\r
501 ODM_delay_ms(IN u4Byte  ms)\r
502 {\r
503 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
504         delay_ms(ms);\r
505 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
506         rtw_mdelay_os(ms);\r
507 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
508         delay_ms(ms);\r
509 #endif                  \r
510 }\r
511 \r
512 VOID\r
513 ODM_delay_us(IN u4Byte  us)\r
514 {\r
515 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
516         delay_us(us);\r
517 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
518         rtw_udelay_os(us);\r
519 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
520         PlatformStallExecution(us);\r
521 #endif                  \r
522 }\r
523 \r
524 VOID\r
525 ODM_sleep_ms(IN u4Byte  ms)\r
526 {\r
527 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
528         \r
529 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
530         rtw_msleep_os(ms);\r
531 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
532 #endif          \r
533 }\r
534 \r
535 VOID\r
536 ODM_sleep_us(IN u4Byte  us)\r
537 {\r
538 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
539         \r
540 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
541         rtw_usleep_os(us);\r
542 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
543 #endif          \r
544 }\r
545 \r
546 VOID\r
547 ODM_SetTimer(   \r
548         IN      PDM_ODM_T               pDM_Odm,\r
549         IN      PRT_TIMER               pTimer, \r
550         IN      u4Byte                  msDelay\r
551         )\r
552 {\r
553 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
554         mod_timer(pTimer, jiffies + RTL_MILISECONDS_TO_JIFFIES(msDelay));\r
555 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
556         _set_timer(pTimer,msDelay ); //ms\r
557 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
558         PADAPTER                Adapter = pDM_Odm->Adapter;\r
559         PlatformSetTimer(Adapter, pTimer, msDelay);\r
560 #endif  \r
561 \r
562 }\r
563 \r
564 VOID\r
565 ODM_InitializeTimer(\r
566         IN      PDM_ODM_T                       pDM_Odm,\r
567         IN      PRT_TIMER                       pTimer, \r
568         IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
569         IN      PVOID                           pContext,\r
570         IN      const char*                     szID\r
571         )\r
572 {\r
573 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
574         init_timer(pTimer);\r
575         pTimer->function = CallBackFunc;\r
576         pTimer->data = (unsigned long)pDM_Odm;\r
577         /*mod_timer(pTimer, jiffies+RTL_MILISECONDS_TO_JIFFIES(10));    */\r
578 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
579         PADAPTER Adapter = pDM_Odm->Adapter;\r
580         _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);\r
581 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
582         PADAPTER Adapter = pDM_Odm->Adapter;\r
583         PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);\r
584 #endif  \r
585 }\r
586 \r
587 \r
588 VOID\r
589 ODM_CancelTimer(\r
590         IN      PDM_ODM_T               pDM_Odm,\r
591         IN      PRT_TIMER               pTimer\r
592         )\r
593 {\r
594 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)\r
595         del_timer(pTimer);\r
596 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
597         _cancel_timer_ex(pTimer);\r
598 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
599         PADAPTER Adapter = pDM_Odm->Adapter;\r
600         PlatformCancelTimer(Adapter, pTimer);\r
601 #endif\r
602 }\r
603 \r
604 \r
605 VOID\r
606 ODM_ReleaseTimer(\r
607         IN      PDM_ODM_T               pDM_Odm,\r
608         IN      PRT_TIMER               pTimer\r
609         )\r
610 {\r
611 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
612 \r
613 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
614 \r
615 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
616 \r
617         PADAPTER Adapter = pDM_Odm->Adapter;\r
618 \r
619     // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm. \r
620     // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.\r
621     if (pTimer == 0) \r
622     {\r
623         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));\r
624         return;\r
625     }\r
626         \r
627         PlatformReleaseTimer(Adapter, pTimer);\r
628 #endif\r
629 }\r
630 \r
631 \r
632 u1Byte\r
633 phydm_trans_h2c_id(\r
634         IN      PDM_ODM_T       pDM_Odm,\r
635         IN      u1Byte          phydm_h2c_id\r
636 )\r
637 {\r
638         u1Byte platform_h2c_id = phydm_h2c_id;\r
639 \r
640         switch (phydm_h2c_id)\r
641         {\r
642                 //1 [0]\r
643                 case ODM_H2C_RSSI_REPORT:\r
644 \r
645                         #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
646                                 if(pDM_Odm->SupportICType == ODM_RTL8188E)\r
647                                         platform_h2c_id = H2C_88E_RSSI_REPORT;\r
648                                 else if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
649                                         platform_h2c_id =H2C_8814A_RSSI_REPORT;                            \r
650                                 else\r
651                                         platform_h2c_id = H2C_RSSI_REPORT;\r
652                                 \r
653                         #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
654                                 platform_h2c_id = H2C_RSSI_SETTING;\r
655                                 \r
656                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
657                                 #if ((RTL8881A_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1) || (RTL8197F_SUPPORT == 1))\r
658                                 if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES) \r
659                                         platform_h2c_id = H2C_88XX_RSSI_REPORT; \r
660                                 else\r
661                                 #endif\r
662                                 #if (RTL8812A_SUPPORT == 1) \r
663                                         if (pDM_Odm->SupportICType == ODM_RTL8812)\r
664                                                 platform_h2c_id = H2C_8812_RSSI_REPORT;\r
665                                         else\r
666                                 #endif                          \r
667                                         {}\r
668                         #endif\r
669                         \r
670                                 break;\r
671 \r
672                 //1 [3] \r
673                 case ODM_H2C_WIFI_CALIBRATION:\r
674                         #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
675                                         platform_h2c_id =H2C_WIFI_CALIBRATION;\r
676                         \r
677                         #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)\r
678                                 #if (RTL8723B_SUPPORT == 1) \r
679                                         platform_h2c_id = H2C_8723B_BT_WLAN_CALIBRATION;\r
680                                 #endif\r
681                                 \r
682                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
683                         #endif\r
684                                 break;          \r
685         \r
686                         \r
687                 //1 [4]\r
688                 case ODM_H2C_IQ_CALIBRATION:\r
689                         #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
690                                 platform_h2c_id =H2C_IQ_CALIBRATION;\r
691                         \r
692                         #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
693                                 #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
694                                 platform_h2c_id = H2C_8812_IQ_CALIBRATION;\r
695                                 #endif\r
696                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
697                         #endif\r
698                         \r
699                                 break;\r
700                 //1 [5]\r
701                 case ODM_H2C_RA_PARA_ADJUST:\r
702 \r
703                         #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
704                                 if (pDM_Odm->SupportICType & (ODM_RTL8814A | ODM_RTL8822B))\r
705                                         platform_h2c_id =H2C_8814A_RA_PARA_ADJUST;                            \r
706                                 else\r
707                                         platform_h2c_id = H2C_RA_PARA_ADJUST;\r
708                         #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
709                                 #if((RTL8812A_SUPPORT==1) ||(RTL8821A_SUPPORT==1))\r
710                                         platform_h2c_id = H2C_8812_RA_PARA_ADJUST;\r
711                                 #elif ((RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1))\r
712                                         platform_h2c_id = H2C_RA_PARA_ADJUST;\r
713                                 #elif(RTL8192E_SUPPORT==1)\r
714                                         platform_h2c_id =H2C_8192E_RA_PARA_ADJUST;\r
715                                 #elif(RTL8723B_SUPPORT==1) \r
716                                         platform_h2c_id =H2C_8723B_RA_PARA_ADJUST;\r
717                                 #endif\r
718                                 \r
719                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
720                                 #if ((RTL8881A_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1) || (RTL8197F_SUPPORT == 1)) \r
721                                 if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES) \r
722                                         platform_h2c_id = H2C_88XX_RA_PARA_ADJUST;\r
723                                 else\r
724                                 #endif\r
725                                 #if(RTL8812A_SUPPORT==1) \r
726                                         if(pDM_Odm->SupportICType == ODM_RTL8812)\r
727                                                 platform_h2c_id = H2C_8812_RA_PARA_ADJUST;\r
728                                         else\r
729                                 #endif\r
730                                         {}\r
731                         #endif\r
732                         \r
733                                 break;\r
734 \r
735 \r
736                 //1 [6]\r
737                 case PHYDM_H2C_DYNAMIC_TX_PATH:\r
738 \r
739                         #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
740                                 if(pDM_Odm->SupportICType == ODM_RTL8814A)\r
741                                 {\r
742                                         platform_h2c_id =H2C_8814A_DYNAMIC_TX_PATH;\r
743                                 }\r
744                         #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
745                                 #if (RTL8814A_SUPPORT == 1)\r
746                                 if (pDM_Odm->SupportICType == ODM_RTL8814A)\r
747                                         platform_h2c_id = H2C_DYNAMIC_TX_PATH;\r
748                                 #endif\r
749                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
750                                 #if(RTL8814A_SUPPORT==1)\r
751                                         if( pDM_Odm->SupportICType == ODM_RTL8814A)\r
752                                         {\r
753                                                 platform_h2c_id = H2C_88XX_DYNAMIC_TX_PATH;                             \r
754                                         } \r
755                                 #endif\r
756 \r
757                         #endif\r
758                         \r
759                                 break;\r
760 \r
761                 /* [7]*/\r
762                 case PHYDM_H2C_FW_TRACE_EN:\r
763 \r
764                         #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
765                                 if (pDM_Odm->SupportICType & (ODM_RTL8814A|ODM_RTL8822B))\r
766                                         platform_h2c_id = H2C_8814A_FW_TRACE_EN;\r
767                                 else \r
768                                         platform_h2c_id = H2C_FW_TRACE_EN;\r
769                                 \r
770                         #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
771 \r
772                                 platform_h2c_id = 0x49;\r
773 \r
774                         #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)\r
775                                 #if ((RTL8881A_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1) || (RTL8197F_SUPPORT == 1))\r
776                                         if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES)\r
777                                                 platform_h2c_id  = H2C_88XX_FW_TRACE_EN;\r
778                                         else\r
779                                 #endif\r
780                                 #if (RTL8812A_SUPPORT == 1) \r
781                                         if (pDM_Odm->SupportICType == ODM_RTL8812)\r
782                                                 platform_h2c_id = H2C_8812_FW_TRACE_EN;\r
783                                         else\r
784                                 #endif\r
785                                         {}\r
786 \r
787                         #endif\r
788                         \r
789                                 break;\r
790 \r
791                 case PHYDM_H2C_TXBF:\r
792                         #if ((RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1))\r
793                         platform_h2c_id  = 0x41;        /*H2C_TxBF*/\r
794                         #endif\r
795                 break;\r
796 \r
797                 case PHYDM_H2C_MU:\r
798                         #if (RTL8822B_SUPPORT == 1) \r
799                         platform_h2c_id  = 0x4a;        /*H2C_MU*/\r
800                         #endif                  \r
801                 break;\r
802 \r
803                 default:\r
804                         platform_h2c_id = phydm_h2c_id;\r
805                         break;  \r
806         }       \r
807         \r
808         return platform_h2c_id;\r
809         \r
810 }\r
811 \r
812 /*ODM FW relative API.*/\r
813 \r
814 VOID\r
815 ODM_FillH2CCmd(\r
816         IN      PDM_ODM_T               pDM_Odm,\r
817         IN      u1Byte                  phydm_h2c_id,\r
818         IN      u4Byte                  CmdLen,\r
819         IN      pu1Byte                 pCmdBuffer\r
820 )\r
821 {\r
822         PADAPTER        Adapter = pDM_Odm->Adapter;\r
823         u1Byte          platform_h2c_id;\r
824 \r
825         platform_h2c_id=phydm_trans_h2c_id(pDM_Odm, phydm_h2c_id);\r
826 \r
827         ODM_RT_TRACE(pDM_Odm, PHYDM_COMP_RA_DBG, ODM_DBG_LOUD, ("[H2C]  platform_h2c_id = ((0x%x))\n", platform_h2c_id));\r
828 \r
829 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
830                 if (pDM_Odm->SupportICType == ODM_RTL8188E)     {\r
831                         if (!pDM_Odm->RaSupport88E)\r
832                                 FillH2CCmd88E(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
833                 } else if (pDM_Odm->SupportICType == ODM_RTL8814A)              \r
834                         FillH2CCmd8814A(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);          \r
835                 else if (pDM_Odm->SupportICType == ODM_RTL8822B)                \r
836 #if (RTL8822B_SUPPORT == 1)\r
837                         FillH2CCmd8822B(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
838 #endif          \r
839                 else                            \r
840                         FillH2CCmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
841 \r
842 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
843                 rtw_hal_fill_h2c_cmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);\r
844 \r
845 #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)     \r
846 #if ((RTL8881A_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8814A_SUPPORT == 1) || (RTL8822B_SUPPORT == 1) || (RTL8197F_SUPPORT == 1)) \r
847                 if (pDM_Odm->SupportICType == ODM_RTL8881A || pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType & PHYDM_IC_3081_SERIES) \r
848                         GET_HAL_INTERFACE(pDM_Odm->priv)->FillH2CCmdHandler(pDM_Odm->priv, platform_h2c_id, CmdLen, pCmdBuffer);\r
849                 else\r
850 #endif\r
851 #if (RTL8812A_SUPPORT == 1) \r
852                 if (pDM_Odm->SupportICType == ODM_RTL8812)\r
853                         FillH2CCmd8812(pDM_Odm->priv, platform_h2c_id, CmdLen, pCmdBuffer);\r
854                 else\r
855 #endif\r
856                 {}\r
857 #endif\r
858 }\r
859 \r
860 u1Byte\r
861 phydm_c2H_content_parsing(\r
862         IN      PVOID                   pDM_VOID,\r
863         IN      u1Byte                  c2hCmdId,\r
864         IN      u1Byte                  c2hCmdLen,\r
865         IN      pu1Byte                 tmpBuf\r
866 )\r
867 {\r
868         PDM_ODM_T               pDM_Odm = (PDM_ODM_T)pDM_VOID;\r
869         #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
870         PADAPTER        Adapter = pDM_Odm->Adapter;\r
871         #endif\r
872         u1Byte  Extend_c2hSubID = 0;\r
873         u1Byte  find_c2h_cmd = TRUE;\r
874 \r
875         switch (c2hCmdId) {\r
876         case PHYDM_C2H_DBG:\r
877                 phydm_fw_trace_handler(pDM_Odm, tmpBuf, c2hCmdLen);\r
878                 break;\r
879 \r
880         case PHYDM_C2H_RA_RPT:\r
881                 phydm_c2h_ra_report_handler(pDM_Odm, tmpBuf, c2hCmdLen);\r
882                 break;\r
883 \r
884         case PHYDM_C2H_RA_PARA_RPT:\r
885                 ODM_C2HRaParaReportHandler(pDM_Odm, tmpBuf, c2hCmdLen);\r
886                 break;\r
887                 \r
888         case PHYDM_C2H_DYNAMIC_TX_PATH_RPT:\r
889                 if (pDM_Odm->SupportICType & (ODM_RTL8814A))\r
890                         phydm_c2h_dtp_handler(pDM_Odm, tmpBuf, c2hCmdLen);\r
891                 break;\r
892                 \r
893         case PHYDM_C2H_IQK_FINISH:\r
894                 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)\r
895                 \r
896                 if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) {\r
897                         \r
898                         RT_TRACE(COMP_MP, DBG_LOUD, ("== FW IQK Finish ==\n"));\r
899                         PlatformAcquireSpinLock(Adapter, RT_IQK_SPINLOCK);\r
900                         pDM_Odm->RFCalibrateInfo.bIQKInProgress = FALSE;\r
901                         PlatformReleaseSpinLock(Adapter, RT_IQK_SPINLOCK);\r
902                         pDM_Odm->RFCalibrateInfo.IQK_ProgressingTime = 0;\r
903                         pDM_Odm->RFCalibrateInfo.IQK_ProgressingTime = ODM_GetProgressingTime(pDM_Odm, pDM_Odm->RFCalibrateInfo.IQK_StartTime);\r
904                 }\r
905                 \r
906                 #endif\r
907                 break;\r
908 \r
909         case PHYDM_C2H_DBG_CODE:\r
910                 phydm_fw_trace_handler_code(pDM_Odm, tmpBuf, c2hCmdLen);\r
911                 break;  \r
912 \r
913         case PHYDM_C2H_EXTEND:\r
914                 Extend_c2hSubID= tmpBuf[0];\r
915                 if (Extend_c2hSubID == PHYDM_EXTEND_C2H_DBG_PRINT)\r
916                         phydm_fw_trace_handler_8051(pDM_Odm, tmpBuf, c2hCmdLen);\r
917                 \r
918                 break;\r
919 \r
920         default:\r
921                 find_c2h_cmd = FALSE;\r
922                 break;\r
923         }\r
924 \r
925         return find_c2h_cmd;\r
926 \r
927 }\r
928 \r
929 u8Byte\r
930 ODM_GetCurrentTime(     \r
931         IN      PDM_ODM_T               pDM_Odm\r
932         )\r
933 {\r
934 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
935         return  0;\r
936 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
937         return (u8Byte)rtw_get_current_time();\r
938 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
939         return  PlatformGetCurrentTime();\r
940 #endif\r
941 }\r
942 \r
943 u8Byte\r
944 ODM_GetProgressingTime( \r
945         IN      PDM_ODM_T               pDM_Odm,\r
946         IN      u8Byte                  Start_Time\r
947         )\r
948 {\r
949 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))\r
950         return  0;\r
951 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
952         return rtw_get_passing_time_ms((u4Byte)Start_Time);\r
953 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
954         return   ((PlatformGetCurrentTime() - Start_Time)>>10);\r
955 #endif\r
956 }\r
957 \r
958 \r