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.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 \r
26 #include "odm_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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\r
180         return PHY_QueryMacReg(pDM_Odm->priv, RegAddr, BitMask);\r
181 #elif(DM_ODM_SUPPORT_TYPE & (ODM_WIN))\r
182         PADAPTER                Adapter = pDM_Odm->Adapter;\r
183         return PHY_QueryMacReg(Adapter, RegAddr, BitMask);\r
184 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE))\r
185         return PHY_QueryBBReg(pDM_Odm->Adapter, RegAddr, BitMask);\r
186 #endif  \r
187 }\r
188 \r
189 \r
190 VOID\r
191 ODM_SetBBReg(   \r
192         IN      PDM_ODM_T       pDM_Odm,\r
193         IN      u4Byte          RegAddr,\r
194         IN      u4Byte          BitMask,\r
195         IN      u4Byte          Data\r
196         )\r
197 {\r
198 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
199         PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);\r
200 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
201         PADAPTER                Adapter = pDM_Odm->Adapter;\r
202         PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);\r
203 #endif  \r
204 }\r
205 \r
206 \r
207 u4Byte \r
208 ODM_GetBBReg(   \r
209         IN      PDM_ODM_T       pDM_Odm,\r
210         IN      u4Byte          RegAddr,\r
211         IN      u4Byte          BitMask\r
212         )\r
213 {\r
214 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
215         return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);\r
216 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
217         PADAPTER                Adapter = pDM_Odm->Adapter;\r
218         return PHY_QueryBBReg(Adapter, RegAddr, BitMask);\r
219 #endif  \r
220 }\r
221 \r
222 \r
223 VOID\r
224 ODM_SetRFReg(   \r
225         IN      PDM_ODM_T                       pDM_Odm,\r
226         IN      ODM_RF_RADIO_PATH_E     eRFPath,\r
227         IN      u4Byte                          RegAddr,\r
228         IN      u4Byte                          BitMask,\r
229         IN      u4Byte                          Data\r
230         )\r
231 {\r
232 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
233         PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);\r
234 #elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))\r
235         PADAPTER                Adapter = pDM_Odm->Adapter;\r
236         PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);\r
237 #endif  \r
238 }\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\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|ODM_ADSL))\r
307         \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 s4Byte ODM_CompareMemory(\r
316         IN      PDM_ODM_T               pDM_Odm,\r
317         IN      PVOID           pBuf1,\r
318         IN      PVOID           pBuf2,\r
319         IN      u4Byte          length\r
320        )\r
321 {\r
322 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
323         return memcmp(pBuf1,pBuf2,length);\r
324 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )   \r
325         return _rtw_memcmp(pBuf1,pBuf2,length);\r
326 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
327         return PlatformCompareMemory(pBuf1,pBuf2,length);\r
328 #endif  \r
329 }\r
330 \r
331 \r
332 \r
333 //\r
334 // ODM MISC relative API.\r
335 //\r
336 VOID\r
337 ODM_AcquireSpinLock(    \r
338         IN      PDM_ODM_T                       pDM_Odm,\r
339         IN      RT_SPINLOCK_TYPE        type\r
340         )\r
341 {\r
342 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
343         \r
344 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
345 \r
346 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
347         PADAPTER                Adapter = pDM_Odm->Adapter;\r
348         PlatformAcquireSpinLock(Adapter, type);\r
349 #endif  \r
350 }\r
351 VOID\r
352 ODM_ReleaseSpinLock(    \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|ODM_ADSL))\r
358 \r
359 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )\r
360         \r
361 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
362         PADAPTER                Adapter = pDM_Odm->Adapter;\r
363         PlatformReleaseSpinLock(Adapter, type);\r
364 #endif  \r
365 }\r
366 \r
367 //\r
368 // Work item relative API. FOr MP driver only~!\r
369 //\r
370 VOID\r
371 ODM_InitializeWorkItem( \r
372         IN      PDM_ODM_T                                       pDM_Odm,\r
373         IN      PRT_WORK_ITEM                           pRtWorkItem,\r
374         IN      RT_WORKITEM_CALL_BACK           RtWorkItemCallback,\r
375         IN      PVOID                                           pContext,\r
376         IN      const char*                                     szID\r
377         )\r
378 {\r
379 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
380         \r
381 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
382         \r
383 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
384         PADAPTER                Adapter = pDM_Odm->Adapter;\r
385         PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);\r
386 #endif  \r
387 }\r
388 \r
389 \r
390 VOID\r
391 ODM_StartWorkItem(      \r
392         IN      PRT_WORK_ITEM   pRtWorkItem\r
393         )\r
394 {\r
395 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
396         \r
397 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
398 \r
399 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
400         PlatformStartWorkItem(pRtWorkItem);\r
401 #endif  \r
402 }\r
403 \r
404 \r
405 VOID\r
406 ODM_StopWorkItem(       \r
407         IN      PRT_WORK_ITEM   pRtWorkItem\r
408         )\r
409 {\r
410 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
411         \r
412 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
413 \r
414 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
415         PlatformStopWorkItem(pRtWorkItem);\r
416 #endif  \r
417 }\r
418 \r
419 \r
420 VOID\r
421 ODM_FreeWorkItem(       \r
422         IN      PRT_WORK_ITEM   pRtWorkItem\r
423         )\r
424 {\r
425 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
426         \r
427 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
428 \r
429 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
430         PlatformFreeWorkItem(pRtWorkItem);\r
431 #endif  \r
432 }\r
433 \r
434 \r
435 VOID\r
436 ODM_ScheduleWorkItem(   \r
437         IN      PRT_WORK_ITEM   pRtWorkItem\r
438         )\r
439 {\r
440 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
441         \r
442 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
443 \r
444 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
445         PlatformScheduleWorkItem(pRtWorkItem);\r
446 #endif  \r
447 }\r
448 \r
449 \r
450 VOID\r
451 ODM_IsWorkItemScheduled(        \r
452         IN      PRT_WORK_ITEM   pRtWorkItem\r
453         )\r
454 {\r
455 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
456         \r
457 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
458 \r
459 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
460         PlatformIsWorkItemScheduled(pRtWorkItem);\r
461 #endif  \r
462 }\r
463 \r
464 \r
465 \r
466 //\r
467 // ODM Timer relative API.\r
468 //\r
469 VOID\r
470 ODM_StallExecution(     \r
471         IN      u4Byte  usDelay\r
472         )\r
473 {\r
474 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
475         \r
476 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
477         rtw_udelay_os(usDelay);\r
478 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
479         PlatformStallExecution(usDelay);\r
480 #endif  \r
481 }\r
482 \r
483 VOID\r
484 ODM_delay_ms(IN u4Byte  ms)\r
485 {\r
486 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
487         delay_ms(ms);\r
488 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
489         rtw_mdelay_os(ms);\r
490 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
491         delay_ms(ms);\r
492 #endif                  \r
493 }\r
494 \r
495 VOID\r
496 ODM_delay_us(IN u4Byte  us)\r
497 {\r
498 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
499         delay_us(us);\r
500 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
501         rtw_udelay_os(us);\r
502 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
503         PlatformStallExecution(us);\r
504 #endif                  \r
505 }\r
506 \r
507 VOID\r
508 ODM_sleep_ms(IN u4Byte  ms)\r
509 {\r
510 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
511         \r
512 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
513         rtw_msleep_os(ms);\r
514 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
515 #endif          \r
516 }\r
517 \r
518 VOID\r
519 ODM_sleep_us(IN u4Byte  us)\r
520 {\r
521 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
522         \r
523 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
524         rtw_usleep_os(us);\r
525 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
526 #endif          \r
527 }\r
528 \r
529 VOID\r
530 ODM_SetTimer(   \r
531         IN      PDM_ODM_T               pDM_Odm,\r
532         IN      PRT_TIMER               pTimer, \r
533         IN      u4Byte                  msDelay\r
534         )\r
535 {\r
536 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
537         mod_timer(pTimer, jiffies + (msDelay+9)/10);    \r
538 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
539         _set_timer(pTimer,msDelay ); //ms\r
540 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
541         PADAPTER                Adapter = pDM_Odm->Adapter;\r
542         PlatformSetTimer(Adapter, pTimer, msDelay);\r
543 #endif  \r
544 \r
545 }\r
546 \r
547 VOID\r
548 ODM_InitializeTimer(\r
549         IN      PDM_ODM_T                       pDM_Odm,\r
550         IN      PRT_TIMER                       pTimer, \r
551         IN      RT_TIMER_CALL_BACK      CallBackFunc, \r
552         IN      PVOID                           pContext,\r
553         IN      const char*                     szID\r
554         )\r
555 {\r
556 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
557         pTimer->function = CallBackFunc;\r
558         pTimer->data = (unsigned long)pDM_Odm;\r
559         init_timer(pTimer);     \r
560 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
561         PADAPTER Adapter = pDM_Odm->Adapter;\r
562         _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);\r
563 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
564         PADAPTER Adapter = pDM_Odm->Adapter;\r
565         PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);\r
566 #endif  \r
567 }\r
568 \r
569 \r
570 VOID\r
571 ODM_CancelTimer(\r
572         IN      PDM_ODM_T               pDM_Odm,\r
573         IN      PRT_TIMER               pTimer\r
574         )\r
575 {\r
576 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
577         del_timer_sync(pTimer);\r
578 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
579         _cancel_timer_ex(pTimer);\r
580 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
581         PADAPTER Adapter = pDM_Odm->Adapter;\r
582         PlatformCancelTimer(Adapter, pTimer);\r
583 #endif\r
584 }\r
585 \r
586 \r
587 VOID\r
588 ODM_ReleaseTimer(\r
589         IN      PDM_ODM_T               pDM_Odm,\r
590         IN      PRT_TIMER               pTimer\r
591         )\r
592 {\r
593 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
594 \r
595 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
596 \r
597 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
598 \r
599         PADAPTER Adapter = pDM_Odm->Adapter;\r
600 \r
601     // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm. \r
602     // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.\r
603     if (pTimer == 0) \r
604     {\r
605         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));\r
606         return;\r
607     }\r
608         \r
609         PlatformReleaseTimer(Adapter, pTimer);\r
610 #endif\r
611 }\r
612 \r
613 \r
614 //\r
615 // ODM FW relative API.\r
616 //\r
617 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)\r
618 VOID\r
619 ODM_FillH2CCmd(\r
620         IN      PADAPTER                Adapter,\r
621         IN      u1Byte  ElementID,\r
622         IN      u4Byte  CmdLen,\r
623         IN      pu1Byte pCmdBuffer\r
624 )\r
625 {\r
626         if(IS_HARDWARE_TYPE_JAGUAR(Adapter))\r
627         {\r
628                 switch(ElementID)\r
629                 {\r
630                 case ODM_H2C_RSSI_REPORT:\r
631                         FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);\r
632                         break;\r
633                 default:\r
634                         break;\r
635                 }\r
636 \r
637         }\r
638         else if(IS_HARDWARE_TYPE_8192E(Adapter))\r
639         {\r
640                 switch(ElementID)\r
641                 {\r
642                 case ODM_H2C_RSSI_REPORT:\r
643                         FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);\r
644                         break;\r
645                 default:\r
646                         break;\r
647                 }       \r
648         }\r
649         else if(IS_HARDWARE_TYPE_8723B(Adapter))\r
650         {\r
651                 //\r
652                 // <Roger_TODO> We should take RTL8723B into consideration, 2012.10.08\r
653                 //\r
654                 switch(ElementID)\r
655                 {\r
656                         case ODM_H2C_RSSI_REPORT:\r
657                            FillH2CCmd8723B(Adapter, H2C_8723B_RSSI_REPORT, CmdLen, pCmdBuffer);\r
658                            break;\r
659                            \r
660                         default:\r
661                            break;                          \r
662                 }\r
663 \r
664         }\r
665         else if(IS_HARDWARE_TYPE_8188E(Adapter))\r
666         {\r
667                 switch(ElementID)\r
668                 {\r
669                 case ODM_H2C_PSD_RESULT:\r
670                         FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);\r
671                         break;\r
672                 case ODM_H2C_RSSI_REPORT:\r
673                         if(IS_VENDOR_8188E_I_CUT_SERIES(Adapter))\r
674                                 FillH2CCmd88E(Adapter, H2C_88E_RSSI_REPORT, CmdLen, pCmdBuffer);\r
675                         break;\r
676                 default:\r
677                         break;\r
678                 }\r
679         }\r
680         else\r
681         {\r
682                 switch(ElementID)\r
683                 {\r
684                 case ODM_H2C_RSSI_REPORT:\r
685                         FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);\r
686                         break;\r
687                 case ODM_H2C_PSD_RESULT:\r
688                         FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);\r
689                         break;\r
690                 default:\r
691                         break;\r
692                 }\r
693         }\r
694 }\r
695 #else\r
696 u4Byte\r
697 ODM_FillH2CCmd( \r
698         IN      pu1Byte         pH2CBuffer,\r
699         IN      u4Byte          H2CBufferLen,\r
700         IN      u4Byte          CmdNum,\r
701         IN      pu4Byte         pElementID,\r
702         IN      pu4Byte         pCmdLen,\r
703         IN      pu1Byte*                pCmbBuffer,\r
704         IN      pu1Byte         CmdStartSeq\r
705         )\r
706 {\r
707 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
708         \r
709 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
710 \r
711 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
712         //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);\r
713         return  FALSE;\r
714 #endif\r
715 \r
716         return  TRUE;\r
717 }\r
718 #endif\r
719 \r
720 \r
721 u4Byte\r
722 ODM_GetCurrentTime(     \r
723         IN      PDM_ODM_T               pDM_Odm\r
724         )\r
725 {\r
726 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
727         return  0;\r
728 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
729         return rtw_get_current_time();\r
730 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
731         return  0;\r
732 #endif\r
733 }\r
734 \r
735 s4Byte\r
736 ODM_GetProgressingTime( \r
737         IN      PDM_ODM_T               pDM_Odm,\r
738         IN      u4Byte                  Start_Time\r
739         )\r
740 {\r
741 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))\r
742         return  0;\r
743 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)\r
744         return rtw_get_passing_time_ms(Start_Time);\r
745 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)    \r
746         return  0;\r
747 #endif\r
748 }\r
749 \r
750 \r