1 /******************************************************************************
\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
\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
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
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
19 ******************************************************************************/
\r
21 //============================================================
\r
23 //============================================================
\r
26 #include "odm_precomp.h"
\r
29 // ODM IO Relative API.
\r
34 IN PDM_ODM_T pDM_Odm,
\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
54 IN PDM_ODM_T pDM_Odm,
\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
74 IN PDM_ODM_T pDM_Odm,
\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
94 IN PDM_ODM_T pDM_Odm,
\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
115 IN PDM_ODM_T pDM_Odm,
\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
136 IN PDM_ODM_T pDM_Odm,
\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
157 IN PDM_ODM_T pDM_Odm,
\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
174 IN PDM_ODM_T pDM_Odm,
\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
192 IN PDM_ODM_T pDM_Odm,
\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
209 IN PDM_ODM_T pDM_Odm,
\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
225 IN PDM_ODM_T pDM_Odm,
\r
226 IN ODM_RF_RADIO_PATH_E eRFPath,
\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
243 IN PDM_ODM_T pDM_Odm,
\r
244 IN ODM_RF_RADIO_PATH_E eRFPath,
\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
261 // ODM Memory relative API.
\r
264 ODM_AllocateMemory(
\r
265 IN PDM_ODM_T pDM_Odm,
\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
280 // length could be ignored, used to detect memory leakage.
\r
283 IN PDM_ODM_T pDM_Odm,
\r
288 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
300 IN PDM_ODM_T pDM_Odm,
\r
306 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
315 void ODM_Memory_Set
\r
316 (IN PDM_ODM_T pDM_Odm,
\r
321 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
329 s4Byte ODM_CompareMemory(
\r
330 IN PDM_ODM_T pDM_Odm,
\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
348 // ODM MISC relative API.
\r
351 ODM_AcquireSpinLock(
\r
352 IN PDM_ODM_T pDM_Odm,
\r
353 IN RT_SPINLOCK_TYPE type
\r
356 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
358 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
360 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
361 PADAPTER Adapter = pDM_Odm->Adapter;
\r
362 PlatformAcquireSpinLock(Adapter, type);
\r
366 ODM_ReleaseSpinLock(
\r
367 IN PDM_ODM_T pDM_Odm,
\r
368 IN RT_SPINLOCK_TYPE type
\r
371 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
373 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
\r
375 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
376 PADAPTER Adapter = pDM_Odm->Adapter;
\r
377 PlatformReleaseSpinLock(Adapter, type);
\r
382 // Work item relative API. FOr MP driver only~!
\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
390 IN const char* szID
\r
393 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
395 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\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
405 ODM_StartWorkItem(
\r
406 IN PRT_WORK_ITEM pRtWorkItem
\r
409 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
411 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
413 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
414 PlatformStartWorkItem(pRtWorkItem);
\r
421 IN PRT_WORK_ITEM pRtWorkItem
\r
424 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
426 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
428 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
429 PlatformStopWorkItem(pRtWorkItem);
\r
436 IN PRT_WORK_ITEM pRtWorkItem
\r
439 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
441 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
443 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
444 PlatformFreeWorkItem(pRtWorkItem);
\r
450 ODM_ScheduleWorkItem(
\r
451 IN PRT_WORK_ITEM pRtWorkItem
\r
454 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
456 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
458 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
459 PlatformScheduleWorkItem(pRtWorkItem);
\r
465 ODM_IsWorkItemScheduled(
\r
466 IN PRT_WORK_ITEM pRtWorkItem
\r
469 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
471 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
473 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
474 PlatformIsWorkItemScheduled(pRtWorkItem);
\r
481 // ODM Timer relative API.
\r
484 ODM_StallExecution(
\r
488 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
498 ODM_delay_ms(IN u4Byte ms)
\r
500 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
502 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
504 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
510 ODM_delay_us(IN u4Byte us)
\r
512 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
514 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
516 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
517 PlatformStallExecution(us);
\r
522 ODM_sleep_ms(IN u4Byte ms)
\r
524 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
526 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
528 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
533 ODM_sleep_us(IN u4Byte us)
\r
535 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
537 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
539 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
545 IN PDM_ODM_T pDM_Odm,
\r
546 IN PRT_TIMER pTimer,
\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
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
567 IN const char* szID
\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
586 IN PDM_ODM_T pDM_Odm,
\r
587 IN PRT_TIMER pTimer
\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
603 IN PDM_ODM_T pDM_Odm,
\r
604 IN PRT_TIMER pTimer
\r
607 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
609 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
611 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
613 PADAPTER Adapter = pDM_Odm->Adapter;
\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
619 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
\r
623 PlatformReleaseTimer(Adapter, pTimer);
\r
629 // ODM FW relative API.
\r
631 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
634 IN PADAPTER Adapter,
\r
635 IN u1Byte ElementID,
\r
637 IN pu1Byte pCmdBuffer
\r
640 if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
\r
644 case ODM_H2C_RSSI_REPORT:
\r
645 FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
652 else if(IS_HARDWARE_TYPE_8192E(Adapter))
\r
656 case ODM_H2C_RSSI_REPORT:
\r
657 FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
663 else if(IS_HARDWARE_TYPE_8723B(Adapter))
\r
666 // <Roger_TODO> We should take RTL8723B into consideration, 2012.10.08
\r
670 case ODM_H2C_RSSI_REPORT:
\r
671 FillH2CCmd8723B(Adapter, H2C_8723B_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
679 else if(IS_HARDWARE_TYPE_8188E(Adapter))
\r
683 case ODM_H2C_PSD_RESULT:
\r
684 FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
\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
698 case ODM_H2C_RSSI_REPORT:
\r
699 FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
701 case ODM_H2C_PSD_RESULT:
\r
702 FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
\r
712 IN pu1Byte pH2CBuffer,
\r
713 IN u4Byte H2CBufferLen,
\r
715 IN pu4Byte pElementID,
\r
716 IN pu4Byte pCmdLen,
\r
717 IN pu1Byte* pCmbBuffer,
\r
718 IN pu1Byte CmdStartSeq
\r
721 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
723 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
725 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
726 //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
\r
736 ODM_GetCurrentTime(
\r
737 IN PDM_ODM_T pDM_Odm
\r
740 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
750 ODM_GetProgressingTime(
\r
751 IN PDM_ODM_T pDM_Odm,
\r
752 IN u4Byte Start_Time
\r
755 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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