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 s4Byte ODM_CompareMemory(
\r
316 IN PDM_ODM_T pDM_Odm,
\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
334 // ODM MISC relative API.
\r
337 ODM_AcquireSpinLock(
\r
338 IN PDM_ODM_T pDM_Odm,
\r
339 IN RT_SPINLOCK_TYPE type
\r
342 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
344 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
346 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
347 PADAPTER Adapter = pDM_Odm->Adapter;
\r
348 PlatformAcquireSpinLock(Adapter, type);
\r
352 ODM_ReleaseSpinLock(
\r
353 IN PDM_ODM_T pDM_Odm,
\r
354 IN RT_SPINLOCK_TYPE type
\r
357 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
359 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
\r
361 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
362 PADAPTER Adapter = pDM_Odm->Adapter;
\r
363 PlatformReleaseSpinLock(Adapter, type);
\r
368 // Work item relative API. FOr MP driver only~!
\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
376 IN const char* szID
\r
379 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
381 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\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
391 ODM_StartWorkItem(
\r
392 IN PRT_WORK_ITEM pRtWorkItem
\r
395 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
397 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
399 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
400 PlatformStartWorkItem(pRtWorkItem);
\r
407 IN PRT_WORK_ITEM pRtWorkItem
\r
410 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
412 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
414 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
415 PlatformStopWorkItem(pRtWorkItem);
\r
422 IN PRT_WORK_ITEM pRtWorkItem
\r
425 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
427 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
429 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
430 PlatformFreeWorkItem(pRtWorkItem);
\r
436 ODM_ScheduleWorkItem(
\r
437 IN PRT_WORK_ITEM pRtWorkItem
\r
440 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
442 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
444 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
445 PlatformScheduleWorkItem(pRtWorkItem);
\r
451 ODM_IsWorkItemScheduled(
\r
452 IN PRT_WORK_ITEM pRtWorkItem
\r
455 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
457 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
459 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
460 PlatformIsWorkItemScheduled(pRtWorkItem);
\r
467 // ODM Timer relative API.
\r
470 ODM_StallExecution(
\r
474 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
484 ODM_delay_ms(IN u4Byte ms)
\r
486 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
488 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
490 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
496 ODM_delay_us(IN u4Byte us)
\r
498 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
500 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
502 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
503 PlatformStallExecution(us);
\r
508 ODM_sleep_ms(IN u4Byte ms)
\r
510 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
512 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
514 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
519 ODM_sleep_us(IN u4Byte us)
\r
521 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
523 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
525 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
531 IN PDM_ODM_T pDM_Odm,
\r
532 IN PRT_TIMER pTimer,
\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
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
553 IN const char* szID
\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
572 IN PDM_ODM_T pDM_Odm,
\r
573 IN PRT_TIMER pTimer
\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
589 IN PDM_ODM_T pDM_Odm,
\r
590 IN PRT_TIMER pTimer
\r
593 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
595 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
597 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
599 PADAPTER Adapter = pDM_Odm->Adapter;
\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
605 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
\r
609 PlatformReleaseTimer(Adapter, pTimer);
\r
615 // ODM FW relative API.
\r
617 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
620 IN PADAPTER Adapter,
\r
621 IN u1Byte ElementID,
\r
623 IN pu1Byte pCmdBuffer
\r
626 if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
\r
630 case ODM_H2C_RSSI_REPORT:
\r
631 FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
638 else if(IS_HARDWARE_TYPE_8192E(Adapter))
\r
642 case ODM_H2C_RSSI_REPORT:
\r
643 FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
649 else if(IS_HARDWARE_TYPE_8723B(Adapter))
\r
652 // <Roger_TODO> We should take RTL8723B into consideration, 2012.10.08
\r
656 case ODM_H2C_RSSI_REPORT:
\r
657 FillH2CCmd8723B(Adapter, H2C_8723B_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
665 else if(IS_HARDWARE_TYPE_8188E(Adapter))
\r
669 case ODM_H2C_PSD_RESULT:
\r
670 FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
\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
684 case ODM_H2C_RSSI_REPORT:
\r
685 FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
\r
687 case ODM_H2C_PSD_RESULT:
\r
688 FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
\r
698 IN pu1Byte pH2CBuffer,
\r
699 IN u4Byte H2CBufferLen,
\r
701 IN pu4Byte pElementID,
\r
702 IN pu4Byte pCmdLen,
\r
703 IN pu1Byte* pCmbBuffer,
\r
704 IN pu1Byte CmdStartSeq
\r
707 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\r
709 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
711 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
712 //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
\r
722 ODM_GetCurrentTime(
\r
723 IN PDM_ODM_T pDM_Odm
\r
726 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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
736 ODM_GetProgressingTime(
\r
737 IN PDM_ODM_T pDM_Odm,
\r
738 IN u4Byte Start_Time
\r
741 #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
\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