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
28 #define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig_MP_##ic##txt(pDM_Odm))
\r
29 #define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC_##ic##txt(pDM_Odm))
\r
32 #if (TESTCHIP_SUPPORT == 1)
\r
33 #define READ_AND_CONFIG(ic, txt) do {\
\r
34 if (pDM_Odm->bIsMPChip)\
\r
35 READ_AND_CONFIG_MP(ic,txt);\
\r
37 READ_AND_CONFIG_TC(ic,txt);\
\r
40 #define READ_AND_CONFIG READ_AND_CONFIG_MP
\r
44 #define READ_FIRMWARE_MP(ic, txt) (ODM_ReadFirmware_MP_##ic##txt(pDM_Odm, pFirmware, pSize))
\r
45 #define READ_FIRMWARE_TC(ic, txt) (ODM_ReadFirmware_TC_##ic##txt(pDM_Odm, pFirmware, pSize))
\r
47 #if (TESTCHIP_SUPPORT == 1)
\r
48 #define READ_FIRMWARE(ic, txt) do {\
\r
49 if (pDM_Odm->bIsMPChip)\
\r
50 READ_FIRMWARE_MP(ic,txt);\
\r
52 READ_FIRMWARE_TC(ic,txt);\
\r
55 #define READ_FIRMWARE READ_FIRMWARE_MP
\r
58 #define GET_VERSION_MP(ic, txt) (ODM_GetVersion_MP_##ic##txt())
\r
59 #define GET_VERSION_TC(ic, txt) (ODM_GetVersion_TC_##ic##txt())
\r
60 #define GET_VERSION(ic, txt) (pDM_Odm->bIsMPChip?GET_VERSION_MP(ic,txt):GET_VERSION_TC(ic,txt))
\r
64 odm_QueryRxPwrPercentage(
\r
68 if ((AntPower <= -100) || (AntPower >= 20))
\r
72 else if (AntPower >= 0)
\r
78 return (100+AntPower);
\r
83 #if (DM_ODM_SUPPORT_TYPE != ODM_WIN)
\r
85 // 2012/01/12 MH MOve some signal strength smooth method to MP HAL layer.
\r
86 // IF other SW team do not support the feature, remove this section.??
\r
89 odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(
\r
90 IN OUT PDM_ODM_T pDM_Odm,
\r
95 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
96 //if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
98 // Step 1. Scale mapping.
\r
99 // 20100611 Joseph: Re-tunning RSSI presentation for Lenovo.
\r
100 // 20100426 Joseph: Modify Signal strength mapping.
\r
101 // This modification makes the RSSI indication similar to Intel solution.
\r
102 // 20100414 Joseph: Tunning RSSI for Lenovo according to RTL8191SE.
\r
103 if(CurrSig >= 54 && CurrSig <= 100)
\r
107 else if(CurrSig>=42 && CurrSig <= 53 )
\r
111 else if(CurrSig>=36 && CurrSig <= 41 )
\r
113 RetSig = 74 + ((CurrSig - 36) *20)/6;
\r
115 else if(CurrSig>=33 && CurrSig <= 35 )
\r
117 RetSig = 65 + ((CurrSig - 33) *8)/2;
\r
119 else if(CurrSig>=18 && CurrSig <= 32 )
\r
121 RetSig = 62 + ((CurrSig - 18) *2)/15;
\r
123 else if(CurrSig>=15 && CurrSig <= 17 )
\r
125 RetSig = 33 + ((CurrSig - 15) *28)/2;
\r
127 else if(CurrSig>=10 && CurrSig <= 14 )
\r
131 else if(CurrSig>=8 && CurrSig <= 9 )
\r
135 else if(CurrSig <= 8 )
\r
140 #endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
145 odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(
\r
146 IN OUT PDM_ODM_T pDM_Odm,
\r
151 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
152 //if(pDM_Odm->SupportInterface == ODM_ITRF_USB)
\r
154 // Netcore request this modification because 2009.04.13 SU driver use it.
\r
155 if(CurrSig >= 31 && CurrSig <= 100)
\r
159 else if(CurrSig >= 21 && CurrSig <= 30)
\r
161 RetSig = 90 + ((CurrSig - 20) / 1);
\r
163 else if(CurrSig >= 11 && CurrSig <= 20)
\r
165 RetSig = 80 + ((CurrSig - 10) / 1);
\r
167 else if(CurrSig >= 7 && CurrSig <= 10)
\r
169 RetSig = 69 + (CurrSig - 7);
\r
171 else if(CurrSig == 6)
\r
175 else if(CurrSig == 5)
\r
179 else if(CurrSig == 4)
\r
183 else if(CurrSig == 3)
\r
187 else if(CurrSig == 2)
\r
191 else if(CurrSig == 1)
\r
200 #endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
206 odm_SignalScaleMapping_92CSeries(
\r
207 IN OUT PDM_ODM_T pDM_Odm,
\r
211 s4Byte RetSig = 0;
\r
212 #if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
\r
213 if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
215 // Step 1. Scale mapping.
\r
216 if(CurrSig >= 61 && CurrSig <= 100)
\r
218 RetSig = 90 + ((CurrSig - 60) / 4);
\r
220 else if(CurrSig >= 41 && CurrSig <= 60)
\r
222 RetSig = 78 + ((CurrSig - 40) / 2);
\r
224 else if(CurrSig >= 31 && CurrSig <= 40)
\r
226 RetSig = 66 + (CurrSig - 30);
\r
228 else if(CurrSig >= 21 && CurrSig <= 30)
\r
230 RetSig = 54 + (CurrSig - 20);
\r
232 else if(CurrSig >= 5 && CurrSig <= 20)
\r
234 RetSig = 42 + (((CurrSig - 5) * 2) / 3);
\r
236 else if(CurrSig == 4)
\r
240 else if(CurrSig == 3)
\r
244 else if(CurrSig == 2)
\r
248 else if(CurrSig == 1)
\r
259 #if ((DEV_BUS_TYPE == RT_USB_INTERFACE) ||(DEV_BUS_TYPE == RT_SDIO_INTERFACE))
\r
260 if((pDM_Odm->SupportInterface == ODM_ITRF_USB) || (pDM_Odm->SupportInterface == ODM_ITRF_SDIO))
\r
262 if(CurrSig >= 51 && CurrSig <= 100)
\r
266 else if(CurrSig >= 41 && CurrSig <= 50)
\r
268 RetSig = 80 + ((CurrSig - 40)*2);
\r
270 else if(CurrSig >= 31 && CurrSig <= 40)
\r
272 RetSig = 66 + (CurrSig - 30);
\r
274 else if(CurrSig >= 21 && CurrSig <= 30)
\r
276 RetSig = 54 + (CurrSig - 20);
\r
278 else if(CurrSig >= 10 && CurrSig <= 20)
\r
280 RetSig = 42 + (((CurrSig - 10) * 2) / 3);
\r
282 else if(CurrSig >= 5 && CurrSig <= 9)
\r
284 RetSig = 22 + (((CurrSig - 5) * 3) / 2);
\r
286 else if(CurrSig >= 1 && CurrSig <= 4)
\r
288 RetSig = 6 + (((CurrSig - 1) * 3) / 2);
\r
300 odm_SignalScaleMapping(
\r
301 IN OUT PDM_ODM_T pDM_Odm,
\r
305 if( (pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
306 (pDM_Odm->SupportInterface != ODM_ITRF_PCIE) && //USB & SDIO
\r
307 (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore
\r
309 return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(pDM_Odm,CurrSig);
\r
311 else if( (pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
312 (pDM_Odm->SupportInterface == ODM_ITRF_PCIE) &&
\r
313 (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)
\r
315 return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);
\r
318 return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);
\r
325 static u1Byte odm_SQ_process_patch_RT_CID_819x_Lenovo(
\r
326 IN PDM_ODM_T pDM_Odm,
\r
327 IN u1Byte isCCKrate,
\r
328 IN u1Byte PWDB_ALL,
\r
334 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
338 if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter))
\r
342 // <Roger_Notes> Expected signal strength and bars indication at Lenovo lab. 2013.04.11
\r
343 // 802.11n, 802.11b, 802.11g only at channel 6
\r
345 // Attenuation (dB) OS Signal Bars RSSI by Xirrus (dBm)
\r
360 RT_TRACE(COMP_DBG, DBG_WARNING, ("odm_SQ_process_patch_RT_CID_819x_Lenovo\n"));
\r
362 #if OS_WIN_FROM_WIN8(OS_VERSION)
\r
365 else if(PWDB_ALL >= 23 && PWDB_ALL < 50)
\r
367 else if(PWDB_ALL >= 18 && PWDB_ALL < 23)
\r
369 else if(PWDB_ALL >= 8 && PWDB_ALL < 18)
\r
376 else if(PWDB_ALL >= 23 && PWDB_ALL < 34)
\r
378 else if(PWDB_ALL >= 18 && PWDB_ALL < 23)
\r
380 else if(PWDB_ALL >= 8 && PWDB_ALL < 18)
\r
385 if(PWDB_ALL == 0)// Abnormal case, do not indicate the value above 20 on Win7
\r
390 else if(IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter)){
\r
393 // <Roger_Notes> Expected signal strength and bars indication at Lenovo lab. 2013.04.11
\r
394 // 802.11n, 802.11b, 802.11g only at channel 6
\r
396 // Attenuation (dB) OS Signal Bars RSSI by Xirrus (dBm)
\r
414 else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
\r
416 else if(PWDB_ALL >= 31 && PWDB_ALL < 35)
\r
418 else if(PWDB_ALL >= 22 && PWDB_ALL < 31)
\r
420 else if(PWDB_ALL >= 18 && PWDB_ALL < 22)
\r
429 else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
\r
431 else if(PWDB_ALL >= 22 && PWDB_ALL < 35)
\r
433 else if(PWDB_ALL >= 18 && PWDB_ALL < 22)
\r
443 if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter) ||
\r
444 IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter))
\r
448 else if(RSSI >= 22 && RSSI < 45)
\r
450 else if(RSSI >= 18 && RSSI < 22)
\r
459 else if(RSSI >= 22 && RSSI < 45)
\r
461 else if(RSSI >= 18 && RSSI < 22)
\r
468 RT_TRACE(COMP_DBG, DBG_TRACE, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));
\r
474 static u1Byte odm_SQ_process_patch_RT_CID_819x_Acer(
\r
475 IN PDM_ODM_T pDM_Odm,
\r
476 IN u1Byte isCCKrate,
\r
477 IN u1Byte PWDB_ALL,
\r
484 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
488 RT_TRACE(COMP_DBG, DBG_WARNING, ("odm_SQ_process_patch_RT_Acer\n"));
\r
490 #if OS_WIN_FROM_WIN8(OS_VERSION)
\r
494 else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
\r
496 else if(PWDB_ALL >= 30 && PWDB_ALL < 35)
\r
498 else if(PWDB_ALL >= 25 && PWDB_ALL < 30)
\r
500 else if(PWDB_ALL >= 20 && PWDB_ALL < 25)
\r
507 else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
\r
509 else if(PWDB_ALL >= 30 && PWDB_ALL < 35)
\r
511 else if(PWDB_ALL >= 25 && PWDB_ALL < 30)
\r
513 else if(PWDB_ALL >= 20 && PWDB_ALL < 25)
\r
518 if(PWDB_ALL == 0)// Abnormal case, do not indicate the value above 20 on Win7
\r
528 if(IS_HARDWARE_TYPE_8723AE(pDM_Odm->Adapter) ||
\r
529 IS_HARDWARE_TYPE_8192E(pDM_Odm->Adapter))
\r
533 else if(RSSI >= 22 && RSSI < 45)
\r
535 else if(RSSI >= 18 && RSSI < 22)
\r
544 else if(RSSI >= 30 && RSSI < 35)
\r
546 else if(RSSI >= 25 && RSSI < 30)
\r
553 RT_TRACE(COMP_DBG, DBG_LOUD, ("isCCKrate(%#d), PWDB_ALL(%#d), RSSI(%#d), SQ(%#d)\n", isCCKrate, PWDB_ALL, RSSI, SQ));
\r
560 odm_EVMdbToPercentage(
\r
565 // -33dB~0dB to 0%~99%
\r
572 //DbgPrint("Value=%d\n", Value);
\r
573 //ODM_RT_DISP(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));
\r
580 ret_val = 0 - ret_val;
\r
590 odm_EVMdbm_JaguarSeries(
\r
594 s1Byte ret_val = Value;
\r
596 // -33dB~0dB to 33dB ~ 0dB
\r
597 if(ret_val == -128)
\r
599 else if (ret_val < 0)
\r
600 ret_val = 0 - ret_val;
\r
602 ret_val = ret_val >> 1;
\r
615 ret_val = 0 - Value;
\r
616 ret_val = (ret_val << 1) + (ret_val >> 1) ; // *2.5~=312.5/2^7
\r
617 ret_val = ret_val | BIT12; // set bit12 as 1 for negative cfo
\r
622 ret_val = (ret_val << 1) + (ret_val>>1) ; // *2.5~=312.5/2^7
\r
629 odm_RxPhyStatus92CSeries_Parsing(
\r
630 IN OUT PDM_ODM_T pDM_Odm,
\r
631 OUT PODM_PHY_INFO_T pPhyInfo,
\r
632 IN pu1Byte pPhyStatus,
\r
633 IN PODM_PACKET_INFO_T pPktinfo
\r
636 SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
\r
637 u1Byte i, Max_spatial_stream;
\r
638 s1Byte rx_pwr[4], rx_pwr_all=0;
\r
639 u1Byte EVM, PWDB_ALL = 0, PWDB_ALL_BT;
\r
640 u1Byte RSSI, total_rssi=0;
\r
641 BOOLEAN isCCKrate=FALSE;
\r
642 u1Byte rf_rx_num = 0;
\r
643 u1Byte cck_highpwr = 0;
\r
644 u1Byte LNA_idx, VGA_idx;
\r
645 PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;
\r
647 isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;
\r
648 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;
\r
649 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
\r
655 u1Byte cck_agc_rpt;
\r
657 pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;
\r
659 // (1)Hardware does not provide RSSI for CCK
\r
660 // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
\r
663 //if(pHalData->eRFPowerState == eRfOn)
\r
664 cck_highpwr = pDM_Odm->bCckHighPower;
\r
666 // cck_highpwr = FALSE;
\r
668 cck_agc_rpt = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ;
\r
670 //2011.11.28 LukeLee: 88E use different LNA & VGA gain table
\r
671 //The RSSI formula should be modified according to the gain table
\r
672 //In 88E, cck_highpwr is always set to 1
\r
673 if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B))
\r
675 LNA_idx = ((cck_agc_rpt & 0xE0) >>5);
\r
676 VGA_idx = (cck_agc_rpt & 0x1F);
\r
677 if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8192E))
\r
683 rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2
\r
688 rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0
\r
691 rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5
\r
694 rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4
\r
697 //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0
\r
698 rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0
\r
702 rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0
\r
704 rx_pwr_all = -6+ 2*(5-VGA_idx);
\r
707 rx_pwr_all = 8-2*VGA_idx;
\r
710 rx_pwr_all = 14-2*VGA_idx;
\r
713 //DbgPrint("CCK Exception default\n");
\r
718 //2012.10.08 LukeLee: Modify for 92E CCK RSSI
\r
719 if(pDM_Odm->SupportICType == ODM_RTL8192E)
\r
722 PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
723 if(cck_highpwr == FALSE)
\r
726 PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;
\r
727 else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))
\r
733 else if(pDM_Odm->SupportICType & (ODM_RTL8723B))
\r
735 #if (RTL8723B_SUPPORT == 1)
\r
736 rx_pwr_all = odm_CCKRSSI_8723B(LNA_idx,VGA_idx);
\r
737 PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
747 report =( cck_agc_rpt & 0xc0 )>>6;
\r
750 // 03312009 modified by cosa
\r
751 // Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion
\r
752 // Note: different RF with the different RNA gain.
\r
754 rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
\r
757 rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
\r
760 rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
\r
763 rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
\r
769 //report = pDrvInfo->cfosho[0] & 0x60;
\r
770 //report = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a& 0x60;
\r
772 report = (cck_agc_rpt & 0x60)>>5;
\r
776 rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1) ;
\r
779 rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1);
\r
782 rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1) ;
\r
785 rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1) ;
\r
790 PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
792 //Modification for ext-LNA board
\r
793 if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))
\r
795 if((cck_agc_rpt>>7) == 0){
\r
796 PWDB_ALL = (PWDB_ALL>94)?100:(PWDB_ALL +6);
\r
803 PWDB_ALL = (PWDB_ALL<=16)?(PWDB_ALL>>2):(PWDB_ALL -12);
\r
807 if(PWDB_ALL > 25 && PWDB_ALL <= 60)
\r
809 //else if (PWDB_ALL <= 25)
\r
812 else//Modification for int-LNA board
\r
816 else if(PWDB_ALL > 50 && PWDB_ALL <= 68)
\r
821 pPhyInfo->RxPWDBAll = PWDB_ALL;
\r
822 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
823 pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;
\r
824 pPhyInfo->RecvSignalPower = rx_pwr_all;
\r
827 // (3) Get Signal Quality (EVM)
\r
829 //if(pPktinfo->bPacketMatchBSSID)
\r
833 if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
834 (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){
\r
835 SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);
\r
837 else if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
838 (pDM_Odm->PatchID==RT_CID_819x_Acer))
\r
840 SQ = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,0);
\r
842 else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){
\r
846 SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;
\r
850 else if (SQ_rpt < 20)
\r
853 SQ = ((64-SQ_rpt) * 100) / 44;
\r
857 //DbgPrint("cck SQ = %d\n", SQ);
\r
858 pPhyInfo->SignalQuality = SQ;
\r
859 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;
\r
860 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
\r
863 else //is OFDM rate
\r
865 pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
\r
868 // (1)Get RSSI for HT rate
\r
871 for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)
\r
873 // 2008/01/30 MH we will judge RF RX path now.
\r
874 if (pDM_Odm->RFPathRxEnable & BIT(i))
\r
879 rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;
\r
882 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
883 pPhyInfo->RxPwr[i] = rx_pwr[i];
\r
886 /* Translate DBM to percentage. */
\r
887 RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);
\r
888 total_rssi += RSSI;
\r
889 //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));
\r
891 //Modification for ext-LNA board
\r
892 if(pDM_Odm->SupportICType&ODM_RTL8192C)
\r
894 if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))
\r
896 if((pPhyStaRpt->path_agc[i].trsw) == 1)
\r
897 RSSI = (RSSI>94)?100:(RSSI +6);
\r
899 RSSI = (RSSI<=16)?(RSSI>>3):(RSSI -16);
\r
901 if((RSSI <= 34) && (RSSI >=4))
\r
906 pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;
\r
908 #if (DM_ODM_SUPPORT_TYPE & (/*ODM_WIN|*/ODM_CE|ODM_AP|ODM_ADSL))
\r
909 //Get Rx snr value in DB
\r
910 pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);
\r
913 /* Record Signal Strength for next packet */
\r
914 //if(pPktinfo->bPacketMatchBSSID)
\r
916 if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
917 (pDM_Odm->PatchID==RT_CID_819x_Lenovo))
\r
919 if(i==ODM_RF_PATH_A)
\r
920 pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);
\r
923 else if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
924 (pDM_Odm->PatchID==RT_CID_819x_Acer))
\r
926 pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Acer(pDM_Odm,isCCKrate,PWDB_ALL,0,RSSI);
\r
934 // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
\r
936 rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;
\r
938 PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
939 //RT_DISP(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_ALL));
\r
941 pPhyInfo->RxPWDBAll = PWDB_ALL;
\r
942 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));
\r
943 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
944 pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;
\r
945 pPhyInfo->RxPower = rx_pwr_all;
\r
946 pPhyInfo->RecvSignalPower = rx_pwr_all;
\r
949 if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19)){
\r
951 }else if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==25)){
\r
954 else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo
\r
956 // (3)EVM of HT rate
\r
958 if(pPktinfo->DataRate >=DESC_RATEMCS8 && pPktinfo->DataRate <=DESC_RATEMCS15)
\r
959 Max_spatial_stream = 2; //both spatial stream make sense
\r
961 Max_spatial_stream = 1; //only spatial stream 1 makes sense
\r
963 for(i=0; i<Max_spatial_stream; i++)
\r
965 // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment
\r
966 // fill most significant bit to "zero" when doing shifting operation which may change a negative
\r
967 // value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore.
\r
968 EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] )); //dbm
\r
970 //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",
\r
971 //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));
\r
973 //if(pPktinfo->bPacketMatchBSSID)
\r
975 if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only
\r
977 pPhyInfo->SignalQuality = (u1Byte)(EVM & 0xff);
\r
979 pPhyInfo->RxMIMOSignalQuality[i] = (u1Byte)(EVM & 0xff);
\r
984 ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->path_cfotail);
\r
987 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
988 //UI BSS List signal strength(in percentage), make it good looking, from 0~100.
\r
989 //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().
\r
992 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
993 // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
\r
994 pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;
\r
996 #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING
\r
997 pPhyInfo->SignalStrength = (u1Byte)PWDB_ALL;
\r
999 pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;
\r
1005 if (rf_rx_num != 0)
\r
1007 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
1008 // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
\r
1009 pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;
\r
1011 #ifdef CONFIG_SKIP_SIGNAL_SCALE_MAPPING
\r
1012 total_rssi/=rf_rx_num;
\r
1013 pPhyInfo->SignalStrength = (u1Byte)total_rssi;
\r
1015 pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));
\r
1022 //DbgPrint("isCCKrate = %d, pPhyInfo->RxPWDBAll = %d, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a = 0x%x\n",
\r
1023 //isCCKrate, pPhyInfo->RxPWDBAll, pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a);
\r
1025 //For 92C/92D HW (Hybrid) Antenna Diversity
\r
1026 #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
\r
1027 pDM_SWAT_Table->antsel = pPhyStaRpt->ant_sel;
\r
1028 //For 88E HW Antenna Diversity
\r
1029 pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;
\r
1030 pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;
\r
1031 pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;
\r
1035 #if ODM_IC_11AC_SERIES_SUPPORT
\r
1038 odm_RxPhyStatusJaguarSeries_Parsing(
\r
1039 IN OUT PDM_ODM_T pDM_Odm,
\r
1040 OUT PODM_PHY_INFO_T pPhyInfo,
\r
1041 IN pu1Byte pPhyStatus,
\r
1042 IN PODM_PACKET_INFO_T pPktinfo
\r
1045 u1Byte i, Max_spatial_stream;
\r
1046 s1Byte rx_pwr[4], rx_pwr_all=0;
\r
1047 u1Byte EVM = 0, EVMdbm, PWDB_ALL = 0, PWDB_ALL_BT;
\r
1048 u1Byte RSSI, total_rssi=0;
\r
1049 u1Byte isCCKrate=0;
\r
1050 u1Byte rf_rx_num = 0;
\r
1051 u1Byte cck_highpwr = 0;
\r
1052 u1Byte LNA_idx, VGA_idx;
\r
1055 PPHY_STATUS_RPT_8812_T pPhyStaRpt = (PPHY_STATUS_RPT_8812_T)pPhyStatus;
\r
1057 if(pPktinfo->DataRate <= DESC_RATE54M)
\r
1059 switch(pPhyStaRpt->r_RFMOD){
\r
1061 if(pPhyStaRpt->sub_chnl == 0)
\r
1062 pPhyInfo->BandWidth = 1;
\r
1064 pPhyInfo->BandWidth = 0;
\r
1068 if(pPhyStaRpt->sub_chnl == 0)
\r
1069 pPhyInfo->BandWidth = 2;
\r
1070 else if(pPhyStaRpt->sub_chnl == 9 || pPhyStaRpt->sub_chnl == 10)
\r
1071 pPhyInfo->BandWidth = 1;
\r
1073 pPhyInfo->BandWidth = 0;
\r
1077 pPhyInfo->BandWidth = 0;
\r
1082 if(pPktinfo->DataRate <= DESC_RATE11M)
\r
1085 isCCKrate = FALSE;
\r
1087 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;
\r
1088 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
\r
1093 u1Byte cck_agc_rpt;
\r
1094 pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;
\r
1096 // (1)Hardware does not provide RSSI for CCK
\r
1097 // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
\r
1100 //if(pHalData->eRFPowerState == eRfOn)
\r
1101 cck_highpwr = pDM_Odm->bCckHighPower;
\r
1103 // cck_highpwr = FALSE;
\r
1105 cck_agc_rpt = pPhyStaRpt->cfosho[0] ;
\r
1107 LNA_idx = ((cck_agc_rpt & 0xE0) >>5);
\r
1108 VGA_idx = (cck_agc_rpt & 0x1F);
\r
1109 if(pDM_Odm->SupportICType == ODM_RTL8812)
\r
1115 rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2
\r
1117 rx_pwr_all = -100;
\r
1120 rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0
\r
1123 rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5
\r
1126 rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4
\r
1129 //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0
\r
1130 rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0
\r
1134 rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0
\r
1136 rx_pwr_all = -6+ 2*(5-VGA_idx);
\r
1139 rx_pwr_all = 8-2*VGA_idx;
\r
1142 rx_pwr_all = 14-2*VGA_idx;
\r
1145 //DbgPrint("CCK Exception default\n");
\r
1149 PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
1150 if(cck_highpwr == FALSE)
\r
1152 if(PWDB_ALL >= 80)
\r
1153 PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;
\r
1154 else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))
\r
1160 else if(pDM_Odm->SupportICType == ODM_RTL8821)
\r
1167 rx_pwr_all = Pout -32 -(2*VGA_idx);
\r
1170 rx_pwr_all = Pout -24 -(2*VGA_idx);
\r
1173 rx_pwr_all = Pout -11 -(2*VGA_idx);
\r
1176 rx_pwr_all = Pout + 5 -(2*VGA_idx);
\r
1179 rx_pwr_all = Pout + 21 -(2*VGA_idx);
\r
1182 PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
1185 pPhyInfo->RxPWDBAll = PWDB_ALL;
\r
1186 //if(pPktinfo->StationID == 0)
\r
1188 // DbgPrint("CCK: LNA_idx = %d, VGA_idx = %d, pPhyInfo->RxPWDBAll = %d\n",
\r
1189 // LNA_idx, VGA_idx, pPhyInfo->RxPWDBAll);
\r
1191 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
1192 pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;
\r
1193 pPhyInfo->RecvSignalPower = rx_pwr_all;
\r
1196 // (3) Get Signal Quality (EVM)
\r
1198 //if(pPktinfo->bPacketMatchBSSID)
\r
1200 u1Byte SQ,SQ_rpt;
\r
1202 if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
1203 (pDM_Odm->PatchID==RT_CID_819x_Lenovo)){
\r
1204 SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);
\r
1206 else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){
\r
1210 SQ_rpt = pPhyStaRpt->pwdb_all;
\r
1214 else if (SQ_rpt < 20)
\r
1217 SQ = ((64-SQ_rpt) * 100) / 44;
\r
1221 //DbgPrint("cck SQ = %d\n", SQ);
\r
1222 pPhyInfo->SignalQuality = SQ;
\r
1223 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;
\r
1224 pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
\r
1227 else //is OFDM rate
\r
1229 pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
\r
1232 // (1)Get RSSI for OFDM rate
\r
1235 for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)
\r
1237 // 2008/01/30 MH we will judge RF RX path now.
\r
1238 //DbgPrint("pDM_Odm->RFPathRxEnable = %x\n", pDM_Odm->RFPathRxEnable);
\r
1239 if (pDM_Odm->RFPathRxEnable & BIT(i))
\r
1245 //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip
\r
1246 //if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))
\r
1247 rx_pwr[i] = (pPhyStaRpt->gain_trsw[i]&0x7F) - 110;
\r
1249 // rx_pwr[i] = ((pPhyStaRpt->gain_trsw[i]& 0x3F)*2) - 110; //OLD FORMULA
\r
1251 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
1252 pPhyInfo->RxPwr[i] = rx_pwr[i];
\r
1255 /* Translate DBM to percentage. */
\r
1256 RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);
\r
1258 total_rssi += RSSI;
\r
1259 //RT_DISP(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));
\r
1263 pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;
\r
1265 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE|ODM_AP|ODM_ADSL))
\r
1266 //Get Rx snr value in DB
\r
1267 pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = pPhyStaRpt->rxsnr[i]/2;
\r
1271 // (2) CFO_short & CFO_tail
\r
1273 pPhyInfo->Cfo_short[i] = odm_Cfo( (pPhyStaRpt->cfosho[i]) );
\r
1274 pPhyInfo->Cfo_tail[i] = odm_Cfo( (pPhyStaRpt->cfotail[i]) );
\r
1276 /* Record Signal Strength for next packet */
\r
1277 //if(pPktinfo->bPacketMatchBSSID)
\r
1279 if((pDM_Odm->SupportPlatform == ODM_WIN) &&
\r
1280 (pDM_Odm->PatchID==RT_CID_819x_Lenovo))
\r
1282 if(i==ODM_RF_PATH_A)
\r
1283 pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);
\r
1291 // (3)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
\r
1293 //2012.05.25 LukeLee: Testchip AGC report is wrong, it should be restored back to old formula in MP chip
\r
1294 if((pDM_Odm->SupportICType & (ODM_RTL8812|ODM_RTL8821)) && (!pDM_Odm->bIsMPChip))
\r
1295 rx_pwr_all = (pPhyStaRpt->pwdb_all& 0x7f) -110;
\r
1297 rx_pwr_all = (((pPhyStaRpt->pwdb_all) >> 1 )& 0x7f) -110; //OLD FORMULA
\r
1300 PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
\r
1303 pPhyInfo->RxPWDBAll = PWDB_ALL;
\r
1304 //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));
\r
1305 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
1306 pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;
\r
1307 pPhyInfo->RxPower = rx_pwr_all;
\r
1308 pPhyInfo->RecvSignalPower = rx_pwr_all;
\r
1311 //DbgPrint("OFDM: pPhyInfo->RxPWDBAll = %d, pPhyInfo->RxMIMOSignalStrength[0] = %d, pPhyInfo->RxMIMOSignalStrength[1] = %d\n",
\r
1312 // pPhyInfo->RxPWDBAll, pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1]);
\r
1315 if((pDM_Odm->SupportPlatform == ODM_WIN) &&(pDM_Odm->PatchID==19)){
\r
1318 else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo
\r
1320 // (4)EVM of OFDM rate
\r
1322 if( (pPktinfo->DataRate>=DESC_RATEMCS8) &&
\r
1323 (pPktinfo->DataRate <=DESC_RATEMCS15))
\r
1324 Max_spatial_stream = 2;
\r
1325 else if( (pPktinfo->DataRate>=DESC_RATEVHTSS2MCS0) &&
\r
1326 (pPktinfo->DataRate <=DESC_RATEVHTSS2MCS9))
\r
1327 Max_spatial_stream = 2;
\r
1329 Max_spatial_stream = 1;
\r
1331 //if(pPktinfo->bPacketMatchBSSID)
\r
1333 //DbgPrint("pPktinfo->DataRate = %d\n", pPktinfo->DataRate);
\r
1335 for(i=0; i<Max_spatial_stream; i++)
\r
1337 // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment
\r
1338 // fill most significant bit to "zero" when doing shifting operation which may change a negative
\r
1339 // value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore.
\r
1341 // 2013/09/02 MH According to 8812AU test, when use RX evm the value sometimes
\r
1342 // will be incorrect and 1SS-MCS-0-7 always incorrect. Only use LSIG the evm value
\r
1343 // seems ok. This seems BB bug, we need use another way to display better SQ.
\r
1345 //if (pPktinfo->DataRate>=DESC8812_RATE6M && pPktinfo->DataRate<=DESC8812_RATE54M)
\r
1348 if(i==ODM_RF_PATH_A )
\r
1350 EVM = odm_EVMdbToPercentage( (pPhyStaRpt->sigevm )); //dbm
\r
1359 if (pPhyStaRpt->rxevm[i] == -128)
\r
1361 pPhyStaRpt->rxevm[i] = -25;
\r
1363 EVM = odm_EVMdbToPercentage( (pPhyStaRpt->rxevm[i] )); //dbm
\r
1366 EVMdbm = odm_EVMdbm_JaguarSeries(pPhyStaRpt->rxevm[i]);
\r
1367 //RT_DISP(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",
\r
1368 //pPktinfo->DataRate, pPhyStaRpt->rxevm[i], "%", EVM));
\r
1372 if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only
\r
1374 pPhyInfo->SignalQuality = EVM;
\r
1376 pPhyInfo->RxMIMOSignalQuality[i] = EVM;
\r
1377 pPhyInfo->RxMIMOEVMdbm[i] = EVMdbm;
\r
1383 ODM_ParsingCFO(pDM_Odm, pPktinfo, pPhyStaRpt->cfotail);
\r
1386 //DbgPrint("isCCKrate= %d, pPhyInfo->SignalStrength=%d % PWDB_AL=%d rf_rx_num=%d\n", isCCKrate, pPhyInfo->SignalStrength, PWDB_ALL, rf_rx_num);
\r
1388 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
\r
1389 //UI BSS List signal strength(in percentage), make it good looking, from 0~100.
\r
1390 //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().
\r
1393 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
1394 // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
\r
1395 pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;
\r
1397 pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;
\r
1402 if (rf_rx_num != 0)
\r
1404 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
1405 // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
\r
1406 pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;
\r
1408 pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));
\r
1413 pDM_Odm->RxPWDBAve = pDM_Odm->RxPWDBAve + pPhyInfo->RxPWDBAll;
\r
1415 pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->antidx_anta;
\r
1416 pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->antidx_antb;
\r
1418 //DbgPrint("pPhyStaRpt->antidx_anta = %d, pPhyStaRpt->antidx_antb = %d, pPhyStaRpt->resvd_1 = %d",
\r
1419 // pPhyStaRpt->antidx_anta, pPhyStaRpt->antidx_antb, pPhyStaRpt->resvd_1);
\r
1421 //DbgPrint("----------------------------\n");
\r
1422 //DbgPrint("pPktinfo->StationID=%d, pPktinfo->DataRate=0x%x\n",pPktinfo->StationID, pPktinfo->DataRate);
\r
1423 //DbgPrint("pPhyStaRpt->gain_trsw[0]=0x%x, pPhyStaRpt->gain_trsw[1]=0x%x, pPhyStaRpt->pwdb_all=0x%x\n",
\r
1424 // pPhyStaRpt->gain_trsw[0],pPhyStaRpt->gain_trsw[1], pPhyStaRpt->pwdb_all);
\r
1425 //DbgPrint("pPhyInfo->RxMIMOSignalStrength[0]=%d, pPhyInfo->RxMIMOSignalStrength[1]=%d, RxPWDBAll=%d\n",
\r
1426 // pPhyInfo->RxMIMOSignalStrength[0], pPhyInfo->RxMIMOSignalStrength[1], pPhyInfo->RxPWDBAll);
\r
1433 odm_Init_RSSIForDM(
\r
1434 IN OUT PDM_ODM_T pDM_Odm
\r
1441 odm_Process_RSSIForDM(
\r
1442 IN OUT PDM_ODM_T pDM_Odm,
\r
1443 IN PODM_PHY_INFO_T pPhyInfo,
\r
1444 IN PODM_PACKET_INFO_T pPktinfo
\r
1448 s4Byte UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave;
\r
1449 u1Byte isCCKrate=0;
\r
1450 u1Byte RSSI_max, RSSI_min, i;
\r
1451 u4Byte OFDM_pkt=0;
\r
1452 u4Byte Weighting=0;
\r
1453 PSTA_INFO_T pEntry;
\r
1456 if(pPktinfo->StationID == 0xFF)
\r
1460 // 2012/05/30 MH/Luke.Lee Add some description
\r
1461 // In windows driver: AP/IBSS mode STA
\r
1463 //if (pDM_Odm->SupportPlatform == ODM_WIN)
\r
1465 // pEntry = pDM_Odm->pODM_StaInfo[pDM_Odm->pAidMap[pPktinfo->StationID-1]];
\r
1468 pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID];
\r
1470 if(!IS_STA_VALID(pEntry) ){
\r
1473 if((!pPktinfo->bPacketMatchBSSID) )
\r
1478 if(pPktinfo->bPacketBeacon)
\r
1479 pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;
\r
1481 isCCKrate = (pPktinfo->DataRate <= DESC_RATE11M)?TRUE :FALSE;
\r
1482 pDM_Odm->RxRate = pPktinfo->DataRate;
\r
1486 DbgPrint("OFDM: pPktinfo->StationID=%d, isCCKrate=%d, pPhyInfo->RxPWDBAll=%d\n",
\r
1487 pPktinfo->StationID, isCCKrate, pPhyInfo->RxPWDBAll);
\r
1491 //--------------Statistic for antenna/path diversity------------------
\r
1492 if(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV)
\r
1494 #if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
\r
1495 ODM_Process_RSSIForAntDiv(pDM_Odm,pPhyInfo,pPktinfo);
\r
1498 else if(pDM_Odm->SupportAbility & ODM_BB_PATH_DIV)
\r
1500 #if (RTL8812A_SUPPORT == 1)
\r
1501 if(pDM_Odm->SupportICType == ODM_RTL8812)
\r
1503 pPATHDIV_T pDM_PathDiv = &pDM_Odm->DM_PathDiv;
\r
1504 if(pPktinfo->bPacketToSelf || pPktinfo->bPacketMatchBSSID)
\r
1506 if(pPktinfo->DataRate > DESC_RATE11M)
\r
1507 ODM_PathStatistics_8812A(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A],
\r
1508 pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B]);
\r
1514 //-----------------Smart Antenna Debug Message------------------//
\r
1516 UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK;
\r
1517 UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
\r
1518 UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
\r
1520 if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
\r
1523 if(!isCCKrate)//ofdm rate
\r
1525 if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B] == 0){
\r
1526 RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
\r
1527 pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
\r
1528 pDM_Odm->RSSI_B = 0;
\r
1532 //DbgPrint("pRfd->Status.RxMIMOSignalStrength[0] = %d, pRfd->Status.RxMIMOSignalStrength[1] = %d \n",
\r
1533 //pRfd->Status.RxMIMOSignalStrength[0], pRfd->Status.RxMIMOSignalStrength[1]);
\r
1534 pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
\r
1535 pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
\r
1537 if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B])
\r
1539 RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
\r
1540 RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
\r
1544 RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
\r
1545 RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
\r
1547 if((RSSI_max -RSSI_min) < 3)
\r
1548 RSSI_Ave = RSSI_max;
\r
1549 else if((RSSI_max -RSSI_min) < 6)
\r
1550 RSSI_Ave = RSSI_max - 1;
\r
1551 else if((RSSI_max -RSSI_min) < 10)
\r
1552 RSSI_Ave = RSSI_max - 2;
\r
1554 RSSI_Ave = RSSI_max - 3;
\r
1557 //1 Process OFDM RSSI
\r
1558 if(UndecoratedSmoothedOFDM <= 0) // initialize
\r
1560 UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;
\r
1564 if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedOFDM)
\r
1566 UndecoratedSmoothedOFDM =
\r
1567 ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
\r
1568 (RSSI_Ave)) /(Rx_Smooth_Factor);
\r
1569 UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;
\r
1573 UndecoratedSmoothedOFDM =
\r
1574 ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
\r
1575 (RSSI_Ave)) /(Rx_Smooth_Factor);
\r
1579 pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0;
\r
1584 RSSI_Ave = pPhyInfo->RxPWDBAll;
\r
1585 pDM_Odm->RSSI_A = (u1Byte) pPhyInfo->RxPWDBAll;
\r
1586 pDM_Odm->RSSI_B = 0;
\r
1588 //1 Process CCK RSSI
\r
1589 if(UndecoratedSmoothedCCK <= 0) // initialize
\r
1591 UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;
\r
1595 if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedCCK)
\r
1597 UndecoratedSmoothedCCK =
\r
1598 ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
\r
1599 (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
\r
1600 UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
\r
1604 UndecoratedSmoothedCCK =
\r
1605 ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
\r
1606 (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
\r
1609 pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;
\r
1614 //2011.07.28 LukeLee: modified to prevent unstable CCK RSSI
\r
1615 if(pEntry->rssi_stat.ValidBit >= 64)
\r
1616 pEntry->rssi_stat.ValidBit = 64;
\r
1618 pEntry->rssi_stat.ValidBit++;
\r
1620 for(i=0; i<pEntry->rssi_stat.ValidBit; i++)
\r
1621 OFDM_pkt += (u1Byte)(pEntry->rssi_stat.PacketMap>>i)&BIT0;
\r
1623 if(pEntry->rssi_stat.ValidBit == 64)
\r
1625 Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4);
\r
1626 UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;
\r
1630 if(pEntry->rssi_stat.ValidBit != 0)
\r
1631 UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;
\r
1633 UndecoratedSmoothedPWDB = 0;
\r
1636 pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;
\r
1637 pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;
\r
1638 pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;
\r
1640 //DbgPrint("OFDM_pkt=%d, Weighting=%d\n", OFDM_pkt, Weighting);
\r
1641 //DbgPrint("UndecoratedSmoothedOFDM=%d, UndecoratedSmoothedPWDB=%d, UndecoratedSmoothedCCK=%d\n",
\r
1642 // UndecoratedSmoothedOFDM, UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK);
\r
1651 // Endianness before calling this API
\r
1654 ODM_PhyStatusQuery_92CSeries(
\r
1655 IN OUT PDM_ODM_T pDM_Odm,
\r
1656 OUT PODM_PHY_INFO_T pPhyInfo,
\r
1657 IN pu1Byte pPhyStatus,
\r
1658 IN PODM_PACKET_INFO_T pPktinfo
\r
1662 odm_RxPhyStatus92CSeries_Parsing(
\r
1668 if( pDM_Odm->RSSI_test == TRUE)
\r
1670 // Select the packets to do RSSI checking for antenna switching.
\r
1671 if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon )
\r
1674 #if 0//(DM_ODM_SUPPORT_TYPE == ODM_WIN)
\r
1675 dm_SWAW_RSSI_Check(
\r
1677 (tmppAdapter!=NULL)?(tmppAdapter==Adapter):TRUE,
\r
1678 bPacketMatchBSSID,
\r
1681 #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
\r
1682 // Select the packets to do RSSI checking for antenna switching.
\r
1683 //odm_SwAntDivRSSICheck8192C(padapter, precvframe->u.hdr.attrib.RxPWDBAll);
\r
1686 ODM_SwAntDivChkPerPktRssi(pDM_Odm,pPktinfo->StationID,pPhyInfo);
\r
1691 odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);
\r
1699 // Endianness before calling this API
\r
1702 ODM_PhyStatusQuery_JaguarSeries(
\r
1703 IN OUT PDM_ODM_T pDM_Odm,
\r
1704 OUT PODM_PHY_INFO_T pPhyInfo,
\r
1705 IN pu1Byte pPhyStatus,
\r
1706 IN PODM_PACKET_INFO_T pPktinfo
\r
1709 odm_RxPhyStatusJaguarSeries_Parsing(
\r
1715 odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);
\r
1719 ODM_PhyStatusQuery(
\r
1720 IN OUT PDM_ODM_T pDM_Odm,
\r
1721 OUT PODM_PHY_INFO_T pPhyInfo,
\r
1722 IN pu1Byte pPhyStatus,
\r
1723 IN PODM_PACKET_INFO_T pPktinfo
\r
1727 if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES )
\r
1729 ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
\r
1733 ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
\r
1737 // For future use.
\r
1739 ODM_MacStatusQuery(
\r
1740 IN OUT PDM_ODM_T pDM_Odm,
\r
1741 IN pu1Byte pMacStatus,
\r
1743 IN BOOLEAN bPacketMatchBSSID,
\r
1744 IN BOOLEAN bPacketToSelf,
\r
1745 IN BOOLEAN bPacketBeacon
\r
1748 // 2011/10/19 Driver team will handle in the future.
\r
1754 // If you want to add a new IC, Please follow below template and generate a new one.
\r
1759 ODM_ConfigRFWithHeaderFile(
\r
1760 IN PDM_ODM_T pDM_Odm,
\r
1761 IN ODM_RF_Config_Type ConfigType,
\r
1762 IN ODM_RF_RADIO_PATH_E eRFPath
\r
1765 PADAPTER Adapter = pDM_Odm->Adapter;
\r
1767 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1768 ("===>ODM_ConfigRFWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));
\r
1769 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1770 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",
\r
1771 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));
\r
1773 #if (RTL8723A_SUPPORT == 1)
\r
1774 if (pDM_Odm->SupportICType == ODM_RTL8723A)
\r
1776 if(ConfigType == CONFIG_RF_RADIO) {
\r
1777 if(eRFPath == ODM_RF_PATH_A)
\r
1778 READ_AND_CONFIG_MP(8723A,_RadioA);
\r
1783 #if (RTL8188E_SUPPORT == 1)
\r
1784 if (pDM_Odm->SupportICType == ODM_RTL8188E)
\r
1786 if(ConfigType == CONFIG_RF_RADIO) {
\r
1787 if(eRFPath == ODM_RF_PATH_A)
\r
1788 READ_AND_CONFIG_MP(8188E,_RadioA);
\r
1790 else if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1791 READ_AND_CONFIG_MP(8188E,_TXPWR_LMT);
\r
1796 #if (RTL8812A_SUPPORT == 1)
\r
1797 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
1799 if(ConfigType == CONFIG_RF_RADIO) {
\r
1800 if(eRFPath == ODM_RF_PATH_A)
\r
1802 READ_AND_CONFIG(8812A,_RadioA);
\r
1804 else if(eRFPath == ODM_RF_PATH_B)
\r
1806 READ_AND_CONFIG(8812A,_RadioB);
\r
1809 else if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1810 READ_AND_CONFIG(8812A,_TXPWR_LMT);
\r
1815 #if (RTL8821A_SUPPORT == 1)
\r
1816 if (pDM_Odm->SupportICType == ODM_RTL8821)
\r
1818 if(ConfigType == CONFIG_RF_RADIO) {
\r
1819 if(eRFPath == ODM_RF_PATH_A)
\r
1821 READ_AND_CONFIG_MP(8821A,_RadioA);
\r
1824 else if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1826 if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {
\r
1827 if (pDM_Odm->ExtPA5G || pDM_Odm->ExtLNA5G)
\r
1828 READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_FEM);
\r
1830 READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8811AU_IPA);
\r
1832 READ_AND_CONFIG_MP(8821A,_TXPWR_LMT_8821A);
\r
1835 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigRFWithHeaderFile\n"));
\r
1839 #if (RTL8723B_SUPPORT == 1)
\r
1840 if (pDM_Odm->SupportICType == ODM_RTL8723B)
\r
1842 if(ConfigType == CONFIG_RF_RADIO) {
\r
1843 READ_AND_CONFIG(8723B,_RadioA);
\r
1845 else if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1846 READ_AND_CONFIG(8723B,_TXPWR_LMT);
\r
1851 #if (RTL8192E_SUPPORT == 1)
\r
1852 if (pDM_Odm->SupportICType == ODM_RTL8192E)
\r
1854 if(ConfigType == CONFIG_RF_RADIO) {
\r
1855 if(eRFPath == ODM_RF_PATH_A)
\r
1856 READ_AND_CONFIG_MP(8192E,_RadioA);
\r
1857 else if(eRFPath == ODM_RF_PATH_B)
\r
1858 READ_AND_CONFIG_MP(8192E,_RadioB);
\r
1860 else if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1861 READ_AND_CONFIG_MP(8192E,_TXPWR_LMT);
\r
1866 #if (RTL8814A_SUPPORT == 1)
\r
1867 if (pDM_Odm->SupportICType == ODM_RTL8814A)
\r
1870 if(ConfigType == CONFIG_RF_TXPWR_LMT) {
\r
1871 READ_AND_CONFIG(8813A,_TXPWR_LMT);
\r
1877 return HAL_STATUS_SUCCESS;
\r
1881 ODM_ConfigRFWithTxPwrTrackHeaderFile(
\r
1882 IN PDM_ODM_T pDM_Odm
\r
1885 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1886 ("===>ODM_ConfigRFWithTxPwrTrackHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));
\r
1887 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1888 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",
\r
1889 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));
\r
1894 #if (RTL8821A_SUPPORT == 1)
\r
1895 else if(pDM_Odm->SupportICType == ODM_RTL8821)
\r
1897 if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
1898 READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);
\r
1899 else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)
\r
1900 READ_AND_CONFIG_MP(8821A,_TxPowerTrack_USB);
\r
1902 READ_AND_CONFIG_MP(8821A,_TxPowerTrack_PCIE);
\r
1905 #if (RTL8812A_SUPPORT == 1)
\r
1906 else if(pDM_Odm->SupportICType == ODM_RTL8812)
\r
1908 if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
1909 READ_AND_CONFIG(8812A,_TxPowerTrack_PCIE);
\r
1910 else if (pDM_Odm->SupportInterface == ODM_ITRF_USB) {
\r
1911 if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip)
\r
1912 READ_AND_CONFIG_MP(8812A,_TxPowerTrack_RFE3);
\r
1914 READ_AND_CONFIG(8812A,_TxPowerTrack_USB);
\r
1919 #if (RTL8192E_SUPPORT == 1)
\r
1920 else if(pDM_Odm->SupportICType == ODM_RTL8192E)
\r
1922 if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
1923 READ_AND_CONFIG_MP(8192E,_TxPowerTrack_PCIE);
\r
1924 else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)
\r
1925 READ_AND_CONFIG_MP(8192E,_TxPowerTrack_USB);
\r
1928 #if RTL8723B_SUPPORT
\r
1929 else if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
1931 if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
1932 READ_AND_CONFIG(8723B,_TxPowerTrack_PCIE);
\r
1933 else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)
\r
1934 READ_AND_CONFIG(8723B,_TxPowerTrack_USB);
\r
1935 else if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)
\r
1936 READ_AND_CONFIG(8723B,_TxPowerTrack_SDIO);
\r
1939 #if RTL8188E_SUPPORT
\r
1940 else if(pDM_Odm->SupportICType == ODM_RTL8188E)
\r
1942 if (pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
\r
1943 READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);
\r
1944 else if (pDM_Odm->SupportInterface == ODM_ITRF_USB)
\r
1945 READ_AND_CONFIG_MP(8188E,_TxPowerTrack_USB);
\r
1947 READ_AND_CONFIG_MP(8188E,_TxPowerTrack_PCIE);
\r
1951 return HAL_STATUS_SUCCESS;
\r
1955 ODM_ConfigBBWithHeaderFile(
\r
1956 IN PDM_ODM_T pDM_Odm,
\r
1957 IN ODM_BB_Config_Type ConfigType
\r
1960 #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
\r
1961 PADAPTER Adapter = pDM_Odm->Adapter;
\r
1962 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
1963 PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
\r
1967 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1968 ("===>ODM_ConfigBBWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));
\r
1969 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
1970 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",
\r
1971 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));
\r
1973 #if (RTL8723A_SUPPORT == 1)
\r
1974 if(pDM_Odm->SupportICType == ODM_RTL8723A)
\r
1976 if(ConfigType == CONFIG_BB_PHY_REG)
\r
1978 READ_AND_CONFIG_MP(8723A,_PHY_REG);
\r
1980 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
1982 READ_AND_CONFIG_MP(8723A,_AGC_TAB);
\r
1987 #if (RTL8188E_SUPPORT == 1)
\r
1988 if(pDM_Odm->SupportICType == ODM_RTL8188E)
\r
1990 if(ConfigType == CONFIG_BB_PHY_REG)
\r
1992 READ_AND_CONFIG_MP(8188E,_PHY_REG);
\r
1994 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
1996 READ_AND_CONFIG_MP(8188E,_AGC_TAB);
\r
1998 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2000 READ_AND_CONFIG_MP(8188E,_PHY_REG_PG);
\r
2005 #if (RTL8812A_SUPPORT == 1)
\r
2006 if(pDM_Odm->SupportICType == ODM_RTL8812)
\r
2008 if(ConfigType == CONFIG_BB_PHY_REG)
\r
2010 READ_AND_CONFIG(8812A,_PHY_REG);
\r
2012 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
2014 READ_AND_CONFIG(8812A,_AGC_TAB);
\r
2016 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2018 if (pDM_Odm->RFEType == 3 && pDM_Odm->bIsMPChip)
\r
2019 READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_ASUS);
\r
2020 #if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
\r
2021 else if (pMgntInfo->CustomerID == RT_CID_WNC_NEC && pDM_Odm->bIsMPChip)
\r
2022 READ_AND_CONFIG_MP(8812A,_PHY_REG_PG_NEC);
\r
2025 READ_AND_CONFIG(8812A,_PHY_REG_PG);
\r
2027 else if(ConfigType == CONFIG_BB_PHY_REG_MP)
\r
2029 READ_AND_CONFIG_MP(8812A,_PHY_REG_MP);
\r
2031 else if(ConfigType == CONFIG_BB_AGC_TAB_DIFF)
\r
2033 if ((36 <= *pDM_Odm->pChannel) && (*pDM_Odm->pChannel <= 64))
\r
2034 AGC_DIFF_CONFIG_MP(8812A,LB);
\r
2035 else if (100 <= *pDM_Odm->pChannel)
\r
2036 AGC_DIFF_CONFIG_MP(8812A,HB);
\r
2041 #if (RTL8821A_SUPPORT == 1)
\r
2042 if(pDM_Odm->SupportICType == ODM_RTL8821)
\r
2044 if(ConfigType == CONFIG_BB_PHY_REG)
\r
2046 READ_AND_CONFIG_MP(8821A,_PHY_REG);
\r
2048 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
2050 READ_AND_CONFIG_MP(8821A,_AGC_TAB);
\r
2052 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2054 READ_AND_CONFIG_MP(8821A,_PHY_REG_PG);
\r
2058 #if (RTL8723B_SUPPORT == 1)
\r
2059 if(pDM_Odm->SupportICType == ODM_RTL8723B)
\r
2062 if(ConfigType == CONFIG_BB_PHY_REG)
\r
2064 READ_AND_CONFIG(8723B,_PHY_REG);
\r
2066 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
2068 READ_AND_CONFIG(8723B,_AGC_TAB);
\r
2070 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2072 READ_AND_CONFIG(8723B,_PHY_REG_PG);
\r
2076 #if (RTL8192E_SUPPORT == 1)
\r
2077 if(pDM_Odm->SupportICType == ODM_RTL8192E)
\r
2080 if(ConfigType == CONFIG_BB_PHY_REG)
\r
2082 READ_AND_CONFIG_MP(8192E,_PHY_REG);
\r
2084 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
2086 READ_AND_CONFIG_MP(8192E,_AGC_TAB);
\r
2088 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2090 READ_AND_CONFIG_MP(8192E,_PHY_REG_PG);
\r
2094 #if (RTL8814A_SUPPORT == 1)
\r
2095 if(pDM_Odm->SupportICType == ODM_RTL8814A)
\r
2098 if(ConfigType == CONFIG_BB_PHY_REG)
\r
2100 READ_AND_CONFIG(8813A,_PHY_REG);
\r
2102 else if(ConfigType == CONFIG_BB_AGC_TAB)
\r
2104 READ_AND_CONFIG(8813A,_AGC_TAB);
\r
2106 else if(ConfigType == CONFIG_BB_PHY_REG_PG)
\r
2108 //READ_AND_CONFIG(8813A,_PHY_REG_PG);
\r
2112 return HAL_STATUS_SUCCESS;
\r
2116 ODM_ConfigMACWithHeaderFile(
\r
2117 IN PDM_ODM_T pDM_Odm
\r
2120 #if (DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN))
\r
2121 PADAPTER Adapter = pDM_Odm->Adapter;
\r
2123 u1Byte result = HAL_STATUS_SUCCESS;
\r
2125 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
2126 ("===>ODM_ConfigMACWithHeaderFile (%s)\n", (pDM_Odm->bIsMPChip) ? "MPChip" : "TestChip"));
\r
2127 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
\r
2128 ("pDM_Odm->SupportPlatform: 0x%X, pDM_Odm->SupportInterface: 0x%X, pDM_Odm->BoardType: 0x%X\n",
\r
2129 pDM_Odm->SupportPlatform, pDM_Odm->SupportInterface, pDM_Odm->BoardType));
\r
2131 #if (RTL8723A_SUPPORT == 1)
\r
2132 if (pDM_Odm->SupportICType == ODM_RTL8723A)
\r
2134 READ_AND_CONFIG_MP(8723A,_MAC_REG);
\r
2137 #if (RTL8188E_SUPPORT == 1)
\r
2138 if (pDM_Odm->SupportICType == ODM_RTL8188E)
\r
2140 READ_AND_CONFIG_MP(8188E,_MAC_REG);
\r
2143 #if (RTL8812A_SUPPORT == 1)
\r
2144 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
2146 READ_AND_CONFIG(8812A,_MAC_REG);
\r
2149 #if (RTL8821A_SUPPORT == 1)
\r
2150 if (pDM_Odm->SupportICType == ODM_RTL8821)
\r
2152 READ_AND_CONFIG_MP(8821A,_MAC_REG);
\r
2154 ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("<===8821_ODM_ConfigMACwithHeaderFile\n"));
\r
2157 #if (RTL8723B_SUPPORT == 1)
\r
2158 if (pDM_Odm->SupportICType == ODM_RTL8723B)
\r
2160 READ_AND_CONFIG(8723B,_MAC_REG);
\r
2163 #if (RTL8192E_SUPPORT == 1)
\r
2164 if (pDM_Odm->SupportICType == ODM_RTL8192E)
\r
2166 READ_AND_CONFIG_MP(8192E,_MAC_REG);
\r
2174 ODM_ConfigFWWithHeaderFile(
\r
2175 IN PDM_ODM_T pDM_Odm,
\r
2176 IN ODM_FW_Config_Type ConfigType,
\r
2177 OUT u1Byte *pFirmware,
\r
2182 #if (RTL8188E_SUPPORT == 1)
\r
2183 if (pDM_Odm->SupportICType == ODM_RTL8188E)
\r
2185 if (ConfigType == CONFIG_FW_NIC)
\r
2187 READ_FIRMWARE_MP(8188E,_FW_NIC_T);
\r
2189 else if (ConfigType == CONFIG_FW_WoWLAN)
\r
2191 READ_FIRMWARE_MP(8188E,_FW_WoWLAN_T);
\r
2193 else if(ConfigType == CONFIG_FW_NIC_2)
\r
2195 READ_FIRMWARE_MP(8188E,_FW_NIC_S);
\r
2197 else if (ConfigType == CONFIG_FW_WoWLAN_2)
\r
2199 READ_FIRMWARE_MP(8188E,_FW_WoWLAN_S);
\r
2203 #if (RTL8723B_SUPPORT == 1)
\r
2204 if (pDM_Odm->SupportICType == ODM_RTL8723B)
\r
2206 if (ConfigType == CONFIG_FW_NIC)
\r
2208 READ_FIRMWARE(8723B,_FW_NIC);
\r
2210 else if (ConfigType == CONFIG_FW_WoWLAN)
\r
2212 READ_FIRMWARE(8723B,_FW_WoWLAN);
\r
2214 #ifdef CONFIG_AP_WOWLAN
\r
2215 else if (ConfigType == CONFIG_FW_AP_WoWLAN)
\r
2217 READ_FIRMWARE(8723B,_FW_AP_WoWLAN);
\r
2220 else if (ConfigType == CONFIG_FW_BT)
\r
2222 READ_FIRMWARE_MP(8723B,_FW_BT);
\r
2224 else if (ConfigType == CONFIG_FW_MP)
\r
2226 READ_FIRMWARE_MP(8723B,_FW_MP);
\r
2230 #if (RTL8812A_SUPPORT == 1)
\r
2231 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
2233 if (ConfigType == CONFIG_FW_NIC)
\r
2235 READ_FIRMWARE(8812A,_FW_NIC);
\r
2237 else if (ConfigType == CONFIG_FW_WoWLAN)
\r
2239 READ_FIRMWARE(8812A,_FW_WoWLAN);
\r
2241 else if (ConfigType == CONFIG_FW_BT)
\r
2243 READ_FIRMWARE(8812A,_FW_NIC_BT);
\r
2248 #if (RTL8821A_SUPPORT == 1)
\r
2249 if (pDM_Odm->SupportICType == ODM_RTL8821)
\r
2251 if (ConfigType == CONFIG_FW_NIC)
\r
2253 READ_FIRMWARE_MP(8821A,_FW_NIC);
\r
2255 else if (ConfigType == CONFIG_FW_WoWLAN)
\r
2257 READ_FIRMWARE_MP(8821A,_FW_WoWLAN);
\r
2259 else if (ConfigType == CONFIG_FW_BT)
\r
2261 READ_FIRMWARE_MP(8821A,_FW_NIC_BT);
\r
2265 #if (RTL8192E_SUPPORT == 1)
\r
2266 if (pDM_Odm->SupportICType == ODM_RTL8192E)
\r
2268 if (ConfigType == CONFIG_FW_NIC)
\r
2270 READ_FIRMWARE_MP(8192E,_FW_NIC);
\r
2272 else if (ConfigType == CONFIG_FW_WoWLAN)
\r
2274 READ_FIRMWARE_MP(8192E,_FW_WoWLAN);
\r
2276 #ifdef CONFIG_AP_WOWLAN
\r
2277 else if (ConfigType == CONFIG_FW_AP_WoWLAN)
\r
2279 READ_FIRMWARE_MP(8192E,_FW_AP_WoWLAN);
\r
2285 return HAL_STATUS_SUCCESS;
\r
2290 ODM_GetHWImgVersion(
\r
2291 IN PDM_ODM_T pDM_Odm
\r
2296 #if (RTL8723A_SUPPORT == 1)
\r
2297 if (pDM_Odm->SupportICType == ODM_RTL8723A)
\r
2298 Version = GET_VERSION_MP(8723A,_MAC_REG);
\r
2301 #if (RTL8188E_SUPPORT == 1)
\r
2302 if (pDM_Odm->SupportICType == ODM_RTL8188E)
\r
2303 Version = GET_VERSION_MP(8188E,_MAC_REG);
\r
2306 #if (RTL8821A_SUPPORT == 1)
\r
2307 if (pDM_Odm->SupportICType == ODM_RTL8821)
\r
2308 Version = GET_VERSION_MP(8821A,_MAC_REG);
\r
2311 #if (RTL8192E_SUPPORT == 1)
\r
2312 if (pDM_Odm->SupportICType == ODM_RTL8192E)
\r
2313 Version = GET_VERSION_MP(8192E,_MAC_REG);
\r
2316 #if (RTL8812A_SUPPORT == 1)
\r
2317 if (pDM_Odm->SupportICType == ODM_RTL8812)
\r
2318 Version = GET_VERSION_MP(8812A,_MAC_REG);
\r