odm_HWConfig.c revision f7c92d2cc2beb3367f244480300eaecdd9502932
1f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/****************************************************************************** 2f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * 3f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 4f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * 5f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * This program is free software; you can redistribute it and/or modify it 6f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * under the terms of version 2 of the GNU General Public License as 7f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * published by the Free Software Foundation. 8f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * 9f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 10f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * more details. 13f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger * 14f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ******************************************************************************/ 15f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 16f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/* */ 17f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/* include files */ 18f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/* */ 19f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 20f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger#include "odm_precomp.h" 21f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 22f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger#define READ_AND_CONFIG READ_AND_CONFIG_MP 23f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 24f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig##txt##ic(pDM_Odm)) 25f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC##txt##ic(pDM_Odm)) 26f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 27f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic u8 odm_QueryRxPwrPercentage(s8 AntPower) 28f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 29f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((AntPower <= -100) || (AntPower >= 20)) 30f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return 0; 31f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (AntPower >= 0) 32f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return 100; 33f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 34f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return 100 + AntPower; 35f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 36f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 37f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic s32 odm_SignalScaleMapping_92CSeries(struct dm_odm_t *pDM_Odm, s32 CurrSig) 38f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 39f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s32 RetSig = 0; 40f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 41f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((pDM_Odm->SupportInterface == ODM_ITRF_USB) || (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)) { 42f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (CurrSig >= 51 && CurrSig <= 100) 43f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 100; 44f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 41 && CurrSig <= 50) 45f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 80 + ((CurrSig - 40)*2); 46f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 31 && CurrSig <= 40) 47f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 66 + (CurrSig - 30); 48f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 21 && CurrSig <= 30) 49f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 54 + (CurrSig - 20); 50f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 10 && CurrSig <= 20) 51f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 42 + (((CurrSig - 10) * 2) / 3); 52f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 5 && CurrSig <= 9) 53f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 22 + (((CurrSig - 5) * 3) / 2); 54f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (CurrSig >= 1 && CurrSig <= 4) 55f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = 6 + (((CurrSig - 1) * 3) / 2); 56f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 57f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RetSig = CurrSig; 58f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 59f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return RetSig; 60f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 61f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 62f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic s32 odm_SignalScaleMapping(struct dm_odm_t *pDM_Odm, s32 CurrSig) 63f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 64f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return odm_SignalScaleMapping_92CSeries(pDM_Odm, CurrSig); 65f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 66f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 67f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic u8 68f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerodm_EVMdbToPercentage( 69f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s8 Value 70f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ) 71f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 72f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* */ 73f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* -33dB~0dB to 0%~99% */ 74f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* */ 75f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s8 ret_val; 76f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 77f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val = Value; 78f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 79f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (ret_val >= 0) 80f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val = 0; 81f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (ret_val <= -33) 82f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val = -33; 83f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 84f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val = 0 - ret_val; 85f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val *= 3; 86f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 87f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (ret_val == 99) 88f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ret_val = 100; 89f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 90f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return ret_val; 91f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 92f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 93f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic void odm_RxPhyStatus92CSeries_Parsing(struct dm_odm_t *pDM_Odm, 94f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_phy_info *pPhyInfo, 95f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 *pPhyStatus, 96f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_packet_info *pPktinfo) 97f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 98f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct phy_status_rpt *pPhyStaRpt = (struct phy_status_rpt *)pPhyStatus; 99f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 i, Max_spatial_stream; 100f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s8 rx_pwr[4], rx_pwr_all = 0; 101f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 EVM, PWDB_ALL = 0, PWDB_ALL_BT; 102f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 RSSI, total_rssi = 0; 103f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 isCCKrate = 0; 104f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 rf_rx_num = 0; 105f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 cck_highpwr = 0; 106f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 107f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger isCCKrate = (pPktinfo->Rate <= DESC92C_RATE11M) ? true : false; 108f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalQuality[RF_PATH_A] = -1; 109f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalQuality[RF_PATH_B] = -1; 110f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 111f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (isCCKrate) { 112f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 report; 113f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 cck_agc_rpt; 114f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 115f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++; 116f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (1)Hardware does not provide RSSI for CCK */ 117f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive) */ 118f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 119f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger cck_highpwr = pDM_Odm->bCckHighPower; 120f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 121f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger cck_agc_rpt = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ; 122f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 123f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* The RSSI formula should be modified according to the gain table */ 124f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (!cck_highpwr) { 125f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger report = (cck_agc_rpt & 0xc0)>>6; 126f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger switch (report) { 127f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion */ 128f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Note: different RF with the different RNA gain. */ 129f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x3: 130f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -46 - (cck_agc_rpt & 0x3e); 131f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 132f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x2: 133f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -26 - (cck_agc_rpt & 0x3e); 134f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 135f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x1: 136f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -12 - (cck_agc_rpt & 0x3e); 137f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 138f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x0: 139f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = 16 - (cck_agc_rpt & 0x3e); 140f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 141f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 142f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 143f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger report = (cck_agc_rpt & 0x60)>>5; 144f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger switch (report) { 145f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x3: 146f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1) ; 147f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 148f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x2: 149f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1); 150f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 151f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x1: 152f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1) ; 153f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 154f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger case 0x0: 155f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1) ; 156f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger break; 157f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 158f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 159f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 160f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all); 161f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 162f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Modification for ext-LNA board */ 163f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) { 164f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((cck_agc_rpt>>7) == 0) { 165f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL = (PWDB_ALL > 94) ? 100 : (PWDB_ALL+6); 166f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 167f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (PWDB_ALL > 38) 168f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL -= 16; 169f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 170f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL = (PWDB_ALL <= 16) ? (PWDB_ALL>>2) : (PWDB_ALL-12); 171f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 172f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 173f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* CCK modification */ 174f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (PWDB_ALL > 25 && PWDB_ALL <= 60) 175f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL += 6; 176f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { /* Modification for int-LNA board */ 177f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (PWDB_ALL > 99) 178f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL -= 8; 179f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (PWDB_ALL > 50 && PWDB_ALL <= 68) 180f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL += 4; 181f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 182f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxPWDBAll = PWDB_ALL; 183f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->BTRxRSSIPercentage = PWDB_ALL; 184f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RecvSignalPower = rx_pwr_all; 185f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (3) Get Signal Quality (EVM) */ 186f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->bPacketMatchBSSID) { 187f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 SQ, SQ_rpt; 188f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 189f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all; 190f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 191f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (SQ_rpt > 64) 192f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger SQ = 0; 193f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (SQ_rpt < 20) 194f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger SQ = 100; 195f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 196f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger SQ = ((64-SQ_rpt) * 100) / 44; 197f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 198f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->SignalQuality = SQ; 199f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalQuality[RF_PATH_A] = SQ; 200f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalQuality[RF_PATH_B] = -1; 201f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 202f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { /* is OFDM rate */ 203f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++; 204f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 205f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (1)Get RSSI for HT rate */ 206f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 207f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger for (i = RF_PATH_A; i < RF_PATH_MAX; i++) { 208f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* 2008/01/30 MH we will judge RF RX path now. */ 209f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->RFPathRxEnable & BIT(i)) 210f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rf_rx_num++; 211f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 212f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain & 0x3F)*2) - 110; 213f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 214f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxPwr[i] = rx_pwr[i]; 215f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 216f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Translate DBM to percentage. */ 217f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]); 218f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger total_rssi += RSSI; 219f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 220f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Modification for ext-LNA board */ 221f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) { 222f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((pPhyStaRpt->path_agc[i].trsw) == 1) 223f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI = (RSSI > 94) ? 100 : (RSSI+6); 224f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 225f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI = (RSSI <= 16) ? (RSSI>>3) : (RSSI-16); 226f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 227f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((RSSI <= 34) && (RSSI >= 4)) 228f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI -= 4; 229f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 230f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 231f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalStrength[i] = (u8) RSSI; 232f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 233f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Get Rx snr value in DB */ 234f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s32)(pPhyStaRpt->path_rxsnr[i]/2); 235f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 236f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 237f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive) */ 238f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1) & 0x7f)-110; 239f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 240f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all); 241f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger PWDB_ALL_BT = PWDB_ALL; 242f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 243f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxPWDBAll = PWDB_ALL; 244f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT; 245f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxPower = rx_pwr_all; 246f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RecvSignalPower = rx_pwr_all; 247f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 248f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* (3)EVM of HT rate */ 249f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->Rate >= DESC92C_RATEMCS8 && pPktinfo->Rate <= DESC92C_RATEMCS15) 250f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger Max_spatial_stream = 2; /* both spatial stream make sense */ 251f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 252f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger Max_spatial_stream = 1; /* only spatial stream 1 makes sense */ 253f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 254f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger for (i = 0; i < Max_spatial_stream; i++) { 255f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment */ 256f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* fill most significant bit to "zero" when doing shifting operation which may change a negative */ 257f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore. */ 258f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger EVM = odm_EVMdbToPercentage((pPhyStaRpt->stream_rxevm[i])); /* dbm */ 259f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 260f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->bPacketMatchBSSID) { 261f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (i == RF_PATH_A) { 262f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Fill value in RFD, Get the first spatial stream only */ 263f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->SignalQuality = (u8)(EVM & 0xff); 264f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 265f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->RxMIMOSignalQuality[i] = (u8)(EVM & 0xff); 266f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 267f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 268f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 269f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* UI BSS List signal strength(in percentage), make it good looking, from 0~100. */ 270f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp(). */ 271f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (isCCKrate) { 272f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->SignalStrength = (u8)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/* PWDB_ALL; */ 273f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 274f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (rf_rx_num != 0) 275f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyInfo->SignalStrength = (u8)(odm_SignalScaleMapping(pDM_Odm, total_rssi /= rf_rx_num)); 276f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 277f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 278f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 279f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingervoid odm_Init_RSSIForDM23a(struct dm_odm_t *pDM_Odm) 280f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 281f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 282f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 283f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic void odm_Process_RSSIForDM(struct dm_odm_t *pDM_Odm, 284f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_phy_info *pPhyInfo, 285f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_packet_info *pPktinfo) 286f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 287f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s32 UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK; 288f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger s32 UndecoratedSmoothedOFDM, RSSI_Ave; 289f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 isCCKrate = 0; 290f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 RSSI_max, RSSI_min, i; 291f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u32 OFDM_pkt = 0; 292f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u32 Weighting = 0; 293f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct sta_info *pEntry; 294f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 295f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->StationID == 0xFF) 296f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return; 297f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 298f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID]; 299f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (!IS_STA_VALID(pEntry)) 300f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return; 301f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((!pPktinfo->bPacketMatchBSSID)) 302f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return; 303f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 304f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger isCCKrate = (pPktinfo->Rate <= DESC92C_RATE11M) ? true : false; 305f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 306f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Smart Antenna Debug Message------------------*/ 307f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 308f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK; 309f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM; 310f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB; 311f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 312f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) { 313f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (!isCCKrate) { /* ofdm rate */ 314f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_B] == 0) { 315f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A]; 316f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 317f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[RF_PATH_B]) { 318f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A]; 319f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B]; 320f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 321f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B]; 322f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A]; 323f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 324f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if ((RSSI_max - RSSI_min) < 3) 325f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = RSSI_max; 326f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if ((RSSI_max - RSSI_min) < 6) 327f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = RSSI_max - 1; 328f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if ((RSSI_max - RSSI_min) < 10) 329f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = RSSI_max - 2; 330f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 331f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = RSSI_max - 3; 332f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 333f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 334f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* 1 Process OFDM RSSI */ 335f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (UndecoratedSmoothedOFDM <= 0) { 336f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* initialize */ 337f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll; 338f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 339f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedOFDM) { 340f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedOFDM = 341f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + 342f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (RSSI_Ave)) / (Rx_Smooth_Factor); 343f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1; 344f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 345f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedOFDM = 346f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) + 347f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (RSSI_Ave)) / (Rx_Smooth_Factor); 348f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 349f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 350f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0; 351f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 352f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger RSSI_Ave = pPhyInfo->RxPWDBAll; 353f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 354f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* 1 Process CCK RSSI */ 355f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (UndecoratedSmoothedCCK <= 0) { 356f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* initialize */ 357f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll; 358f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 359f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedCCK) { 360f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedCCK = 361f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + 362f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (pPhyInfo->RxPWDBAll)) / (Rx_Smooth_Factor); 363f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1; 364f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 365f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedCCK = 366f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) + 367f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (pPhyInfo->RxPWDBAll)) / (Rx_Smooth_Factor); 368f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 369f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 370f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1; 371f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 372f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 373f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* 2011.07.28 LukeLee: modified to prevent unstable CCK RSSI */ 374f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pEntry->rssi_stat.ValidBit >= 64) 375f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.ValidBit = 64; 376f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 377f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.ValidBit++; 378f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 379f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger for (i = 0; i < pEntry->rssi_stat.ValidBit; i++) 380f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger OFDM_pkt += (u8)(pEntry->rssi_stat.PacketMap>>i)&BIT0; 381f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 382f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pEntry->rssi_stat.ValidBit == 64) { 383f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4); 384f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6; 385f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 386f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pEntry->rssi_stat.ValidBit != 0) 387f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit; 388f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else 389f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger UndecoratedSmoothedPWDB = 0; 390f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 391f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK; 392f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM; 393f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB; 394f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 395f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 396f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 397f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/* Endianness before calling this API */ 398f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerstatic void ODM_PhyStatusQuery23a_92CSeries(struct dm_odm_t *pDM_Odm, 399f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_phy_info *pPhyInfo, 400f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 *pPhyStatus, 401f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct odm_packet_info *pPktinfo) 402f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 403f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger odm_RxPhyStatus92CSeries_Parsing(pDM_Odm, pPhyInfo, 404f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger pPhyStatus, pPktinfo); 405f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->RSSI_test) { 406f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* Select the packets to do RSSI checking for antenna switching. */ 407f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) 408f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_SwAntDivChkPerPktRssi(pDM_Odm, pPktinfo->StationID, pPhyInfo); 409f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } else { 410f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo); 411f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 412f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 413f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 414f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingervoid ODM_PhyStatusQuery23a(struct dm_odm_t *pDM_Odm, struct odm_phy_info *pPhyInfo, 415f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 *pPhyStatus, struct odm_packet_info *pPktinfo) 416f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 417f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_PhyStatusQuery23a_92CSeries(pDM_Odm, pPhyInfo, pPhyStatus, pPktinfo); 418f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 419f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 420f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger/* For future use. */ 421f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingervoid ODM_MacStatusQuery23a(struct dm_odm_t *pDM_Odm, u8 *pMacStatus, u8 MacID, 422f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger bool bPacketMatchBSSID, bool bPacketToSelf, 423f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger bool bPacketBeacon) 424f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 425f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger /* 2011/10/19 Driver team will handle in the future. */ 426f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 427f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 428f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 429f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerenum hal_status 430f7c92d2cc2beb3367f244480300eaecdd9502932Larry FingerODM_ConfigRFWithHeaderFile23a( 431f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct dm_odm_t *pDM_Odm, 432f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger enum RF_RADIO_PATH Content, 433f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger enum RF_RADIO_PATH eRFPath 434f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ) 435f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 436f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, 437f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ("===>ODM_ConfigRFWithHeaderFile23a\n")); 438f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->SupportICType == ODM_RTL8723A) { 439f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (eRFPath == RF_PATH_A) 440f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger READ_AND_CONFIG_MP(8723A, _RadioA_1T_); 441f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 442f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, 443f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (" ===> ODM_ConfigRFWithHeaderFile23a() Radio_A:Rtl8723RadioA_1TArray\n")); 444f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, 445f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (" ===> ODM_ConfigRFWithHeaderFile23a() Radio_B:Rtl8723RadioB_1TArray\n")); 446f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 447f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, 448f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ("ODM_ConfigRFWithHeaderFile23a: Radio No %x\n", eRFPath)); 449f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return HAL_STATUS_SUCCESS; 450f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 451f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 452f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerenum hal_status 453f7c92d2cc2beb3367f244480300eaecdd9502932Larry FingerODM_ConfigBBWithHeaderFile23a( 454f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct dm_odm_t *pDM_Odm, 455f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger enum odm_bb_config_type ConfigType 456f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ) 457f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 458f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->SupportICType == ODM_RTL8723A) { 459f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (ConfigType == CONFIG_BB_PHY_REG) 460f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger READ_AND_CONFIG_MP(8723A, _PHY_REG_1T_); 461f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger else if (ConfigType == CONFIG_BB_AGC_TAB) 462f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger READ_AND_CONFIG_MP(8723A, _AGC_TAB_1T_); 463f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, 464f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n")); 465f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, 466f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n")); 467f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger } 468f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return HAL_STATUS_SUCCESS; 469f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 470f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 471f7c92d2cc2beb3367f244480300eaecdd9502932Larry Fingerenum hal_status 472f7c92d2cc2beb3367f244480300eaecdd9502932Larry FingerODM_ConfigMACWithHeaderFile23a( 473f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger struct dm_odm_t *pDM_Odm 474f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger ) 475f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger{ 476f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger u8 result = HAL_STATUS_SUCCESS; 477f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger 478f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger if (pDM_Odm->SupportICType == ODM_RTL8723A) 479f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger READ_AND_CONFIG_MP(8723A, _MAC_REG_); 480f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger return result; 481f7c92d2cc2beb3367f244480300eaecdd9502932Larry Finger} 482