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