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
25 #include "mp_precomp.h"
\r
26 #include "phydm_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))
\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))
\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))
\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))
\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))
\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))
\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))
\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))
\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
189 IN PDM_ODM_T pDM_Odm,
\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
206 IN PDM_ODM_T pDM_Odm,
\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
222 IN PDM_ODM_T pDM_Odm,
\r
223 IN ODM_RF_RADIO_PATH_E eRFPath,
\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
236 #elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
237 PHY_SetRFReg(pDM_Odm->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))
\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))
\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))
\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)
\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
315 void ODM_Memory_Set(
\r
316 IN PDM_ODM_T pDM_Odm,
\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
330 s4Byte ODM_CompareMemory(
\r
331 IN PDM_ODM_T pDM_Odm,
\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
349 // ODM MISC relative API.
\r
352 ODM_AcquireSpinLock(
\r
353 IN PDM_ODM_T pDM_Odm,
\r
354 IN RT_SPINLOCK_TYPE type
\r
357 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\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
368 ODM_ReleaseSpinLock(
\r
369 IN PDM_ODM_T pDM_Odm,
\r
370 IN RT_SPINLOCK_TYPE type
\r
373 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\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
385 // Work item relative API. FOr MP driver only~!
\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
393 IN const char* szID
\r
396 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
398 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\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
408 ODM_StartWorkItem(
\r
409 IN PRT_WORK_ITEM pRtWorkItem
\r
412 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
414 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
416 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
417 PlatformStartWorkItem(pRtWorkItem);
\r
424 IN PRT_WORK_ITEM pRtWorkItem
\r
427 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
429 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
431 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
432 PlatformStopWorkItem(pRtWorkItem);
\r
439 IN PRT_WORK_ITEM pRtWorkItem
\r
442 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
444 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
446 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
447 PlatformFreeWorkItem(pRtWorkItem);
\r
453 ODM_ScheduleWorkItem(
\r
454 IN PRT_WORK_ITEM pRtWorkItem
\r
457 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
459 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
461 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
462 PlatformScheduleWorkItem(pRtWorkItem);
\r
468 ODM_IsWorkItemScheduled(
\r
469 IN PRT_WORK_ITEM pRtWorkItem
\r
472 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
474 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
476 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
477 PlatformIsWorkItemScheduled(pRtWorkItem);
\r
484 // ODM Timer relative API.
\r
487 ODM_StallExecution(
\r
491 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\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
501 ODM_delay_ms(IN u4Byte ms)
\r
503 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
505 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
507 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
513 ODM_delay_us(IN u4Byte us)
\r
515 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
517 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
519 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
520 PlatformStallExecution(us);
\r
525 ODM_sleep_ms(IN u4Byte ms)
\r
527 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
529 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
531 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
536 ODM_sleep_us(IN u4Byte us)
\r
538 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
540 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
542 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
548 IN PDM_ODM_T pDM_Odm,
\r
549 IN PRT_TIMER pTimer,
\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
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
570 IN const char* szID
\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
590 IN PDM_ODM_T pDM_Odm,
\r
591 IN PRT_TIMER pTimer
\r
594 #if (DM_ODM_SUPPORT_TYPE & ODM_AP)
\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
607 IN PDM_ODM_T pDM_Odm,
\r
608 IN PRT_TIMER pTimer
\r
611 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\r
613 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
615 #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
617 PADAPTER Adapter = pDM_Odm->Adapter;
\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
623 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
\r
627 PlatformReleaseTimer(Adapter, pTimer);
\r
633 phydm_trans_h2c_id(
\r
634 IN PDM_ODM_T pDM_Odm,
\r
635 IN u1Byte phydm_h2c_id
\r
638 u1Byte platform_h2c_id = phydm_h2c_id;
\r
640 switch (phydm_h2c_id)
\r
643 case ODM_H2C_RSSI_REPORT:
\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
651 platform_h2c_id = H2C_RSSI_REPORT;
\r
653 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
654 platform_h2c_id = H2C_RSSI_SETTING;
\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
662 #if (RTL8812A_SUPPORT == 1)
\r
663 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
664 platform_h2c_id = H2C_8812_RSSI_REPORT;
\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
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
682 #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)
\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
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
696 #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)
\r
701 case ODM_H2C_RA_PARA_ADJUST:
\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
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
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
725 #if(RTL8812A_SUPPORT==1)
\r
726 if(pDM_Odm->SupportICType == ODM_RTL8812)
\r
727 platform_h2c_id = H2C_8812_RA_PARA_ADJUST;
\r
737 case PHYDM_H2C_DYNAMIC_TX_PATH:
\r
739 #if(DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
740 if(pDM_Odm->SupportICType == ODM_RTL8814A)
\r
742 platform_h2c_id =H2C_8814A_DYNAMIC_TX_PATH;
\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
749 #elif(DM_ODM_SUPPORT_TYPE & ODM_AP)
\r
750 #if(RTL8814A_SUPPORT==1)
\r
751 if( pDM_Odm->SupportICType == ODM_RTL8814A)
\r
753 platform_h2c_id = H2C_88XX_DYNAMIC_TX_PATH;
\r
762 case PHYDM_H2C_FW_TRACE_EN:
\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
768 platform_h2c_id = H2C_FW_TRACE_EN;
\r
770 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
772 platform_h2c_id = 0x49;
\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
780 #if (RTL8812A_SUPPORT == 1)
\r
781 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
782 platform_h2c_id = H2C_8812_FW_TRACE_EN;
\r
791 case PHYDM_H2C_TXBF:
\r
792 #if ((RTL8192E_SUPPORT == 1) || (RTL8812A_SUPPORT == 1))
\r
793 platform_h2c_id = 0x41; /*H2C_TxBF*/
\r
798 #if (RTL8822B_SUPPORT == 1)
\r
799 platform_h2c_id = 0x4a; /*H2C_MU*/
\r
804 platform_h2c_id = phydm_h2c_id;
\r
808 return platform_h2c_id;
\r
812 /*ODM FW relative API.*/
\r
816 IN PDM_ODM_T pDM_Odm,
\r
817 IN u1Byte phydm_h2c_id,
\r
819 IN pu1Byte pCmdBuffer
\r
822 PADAPTER Adapter = pDM_Odm->Adapter;
\r
823 u1Byte platform_h2c_id;
\r
825 platform_h2c_id=phydm_trans_h2c_id(pDM_Odm, phydm_h2c_id);
\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
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
840 FillH2CCmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);
\r
842 #elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
\r
843 rtw_hal_fill_h2c_cmd(Adapter, platform_h2c_id, CmdLen, pCmdBuffer);
\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
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
861 phydm_c2H_content_parsing(
\r
863 IN u1Byte c2hCmdId,
\r
864 IN u1Byte c2hCmdLen,
\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
872 u1Byte Extend_c2hSubID = 0;
\r
873 u1Byte find_c2h_cmd = TRUE;
\r
875 switch (c2hCmdId) {
\r
876 case PHYDM_C2H_DBG:
\r
877 phydm_fw_trace_handler(pDM_Odm, tmpBuf, c2hCmdLen);
\r
880 case PHYDM_C2H_RA_RPT:
\r
881 phydm_c2h_ra_report_handler(pDM_Odm, tmpBuf, c2hCmdLen);
\r
884 case PHYDM_C2H_RA_PARA_RPT:
\r
885 ODM_C2HRaParaReportHandler(pDM_Odm, tmpBuf, c2hCmdLen);
\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
893 case PHYDM_C2H_IQK_FINISH:
\r
894 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
896 if (pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) {
\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
909 case PHYDM_C2H_DBG_CODE:
\r
910 phydm_fw_trace_handler_code(pDM_Odm, tmpBuf, c2hCmdLen);
\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
921 find_c2h_cmd = FALSE;
\r
925 return find_c2h_cmd;
\r
930 ODM_GetCurrentTime(
\r
931 IN PDM_ODM_T pDM_Odm
\r
934 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\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
944 ODM_GetProgressingTime(
\r
945 IN PDM_ODM_T pDM_Odm,
\r
946 IN u8Byte Start_Time
\r
949 #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
\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