|
@@ -1612,211 +1612,221 @@ static s8 phy_GetChannelIndexOfTxPowerLimit(u8 Band, u8 Channel)
|
|
|
return channelIndex;
|
|
|
}
|
|
|
|
|
|
-s8 phy_get_tx_pwr_lmt(struct adapter *Adapter, u32 RegPwrTblSel,
|
|
|
- enum BAND_TYPE Band, enum CHANNEL_WIDTH Bandwidth,
|
|
|
- u8 RfPath, u8 DataRate, u8 Channel)
|
|
|
+s8 phy_get_tx_pwr_lmt(struct adapter *adapter, u32 reg_pwr_tbl_sel,
|
|
|
+ enum BAND_TYPE band_type, enum CHANNEL_WIDTH bandwidth,
|
|
|
+ u8 rf_path, u8 data_rate, u8 channel)
|
|
|
{
|
|
|
- s16 band = -1;
|
|
|
- s16 regulation = -1;
|
|
|
- s16 bandwidth = -1;
|
|
|
- s16 rateSection = -1;
|
|
|
- s16 channel = -1;
|
|
|
- s8 powerLimit = MAX_POWER_INDEX;
|
|
|
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
|
|
|
-
|
|
|
- if (((Adapter->registrypriv.RegEnableTxPowerLimit == 2) &&
|
|
|
- (pHalData->EEPROMRegulatory != 1)) ||
|
|
|
- (Adapter->registrypriv.RegEnableTxPowerLimit == 0))
|
|
|
+ s16 idx_band = -1;
|
|
|
+ s16 idx_regulation = -1;
|
|
|
+ s16 idx_bandwidth = -1;
|
|
|
+ s16 idx_rate_sctn = -1;
|
|
|
+ s16 idx_channel = -1;
|
|
|
+ s8 pwr_lmt = MAX_POWER_INDEX;
|
|
|
+ struct hal_com_data *hal_data = GET_HAL_DATA(adapter);
|
|
|
+
|
|
|
+ if (((adapter->registrypriv.RegEnableTxPowerLimit == 2) &&
|
|
|
+ (hal_data->EEPROMRegulatory != 1)) ||
|
|
|
+ (adapter->registrypriv.RegEnableTxPowerLimit == 0))
|
|
|
return MAX_POWER_INDEX;
|
|
|
|
|
|
- switch (Adapter->registrypriv.RegPwrTblSel) {
|
|
|
+ switch (adapter->registrypriv.RegPwrTblSel) {
|
|
|
case 1:
|
|
|
- regulation = TXPWR_LMT_ETSI;
|
|
|
+ idx_regulation = TXPWR_LMT_ETSI;
|
|
|
break;
|
|
|
case 2:
|
|
|
- regulation = TXPWR_LMT_MKK;
|
|
|
+ idx_regulation = TXPWR_LMT_MKK;
|
|
|
break;
|
|
|
case 3:
|
|
|
- regulation = TXPWR_LMT_FCC;
|
|
|
+ idx_regulation = TXPWR_LMT_FCC;
|
|
|
break;
|
|
|
case 4:
|
|
|
- regulation = TXPWR_LMT_WW;
|
|
|
+ idx_regulation = TXPWR_LMT_WW;
|
|
|
break;
|
|
|
default:
|
|
|
- regulation = (Band == BAND_ON_2_4G) ?
|
|
|
- pHalData->Regulation2_4G :
|
|
|
- pHalData->Regulation5G;
|
|
|
+ idx_regulation = (band_type == BAND_ON_2_4G) ?
|
|
|
+ hal_data->Regulation2_4G :
|
|
|
+ hal_data->Regulation5G;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
/* DBG_871X("pMgntInfo->RegPwrTblSel %d, final regulation %d\n", */
|
|
|
- /* Adapter->registrypriv.RegPwrTblSel, regulation); */
|
|
|
-
|
|
|
- if (Band == BAND_ON_2_4G)
|
|
|
- band = 0;
|
|
|
- else if (Band == BAND_ON_5G)
|
|
|
- band = 1;
|
|
|
-
|
|
|
- if (Bandwidth == CHANNEL_WIDTH_20)
|
|
|
- bandwidth = 0;
|
|
|
- else if (Bandwidth == CHANNEL_WIDTH_40)
|
|
|
- bandwidth = 1;
|
|
|
- else if (Bandwidth == CHANNEL_WIDTH_80)
|
|
|
- bandwidth = 2;
|
|
|
- else if (Bandwidth == CHANNEL_WIDTH_160)
|
|
|
- bandwidth = 3;
|
|
|
-
|
|
|
- switch (DataRate) {
|
|
|
+ /* adapter->registrypriv.RegPwrTblSel, idx_regulation); */
|
|
|
+
|
|
|
+ if (band_type == BAND_ON_2_4G)
|
|
|
+ idx_band = 0;
|
|
|
+ else if (band_type == BAND_ON_5G)
|
|
|
+ idx_band = 1;
|
|
|
+
|
|
|
+ if (bandwidth == CHANNEL_WIDTH_20)
|
|
|
+ idx_bandwidth = 0;
|
|
|
+ else if (bandwidth == CHANNEL_WIDTH_40)
|
|
|
+ idx_bandwidth = 1;
|
|
|
+ else if (bandwidth == CHANNEL_WIDTH_80)
|
|
|
+ idx_bandwidth = 2;
|
|
|
+ else if (bandwidth == CHANNEL_WIDTH_160)
|
|
|
+ idx_bandwidth = 3;
|
|
|
+
|
|
|
+ switch (data_rate) {
|
|
|
case MGN_1M: case MGN_2M: case MGN_5_5M: case MGN_11M:
|
|
|
- rateSection = 0;
|
|
|
+ idx_rate_sctn = 0;
|
|
|
break;
|
|
|
|
|
|
case MGN_6M: case MGN_9M: case MGN_12M: case MGN_18M:
|
|
|
case MGN_24M: case MGN_36M: case MGN_48M: case MGN_54M:
|
|
|
- rateSection = 1;
|
|
|
+ idx_rate_sctn = 1;
|
|
|
break;
|
|
|
|
|
|
case MGN_MCS0: case MGN_MCS1: case MGN_MCS2: case MGN_MCS3:
|
|
|
case MGN_MCS4: case MGN_MCS5: case MGN_MCS6: case MGN_MCS7:
|
|
|
- rateSection = 2;
|
|
|
+ idx_rate_sctn = 2;
|
|
|
break;
|
|
|
|
|
|
case MGN_MCS8: case MGN_MCS9: case MGN_MCS10: case MGN_MCS11:
|
|
|
case MGN_MCS12: case MGN_MCS13: case MGN_MCS14: case MGN_MCS15:
|
|
|
- rateSection = 3;
|
|
|
+ idx_rate_sctn = 3;
|
|
|
break;
|
|
|
|
|
|
case MGN_MCS16: case MGN_MCS17: case MGN_MCS18: case MGN_MCS19:
|
|
|
case MGN_MCS20: case MGN_MCS21: case MGN_MCS22: case MGN_MCS23:
|
|
|
- rateSection = 4;
|
|
|
+ idx_rate_sctn = 4;
|
|
|
break;
|
|
|
|
|
|
case MGN_MCS24: case MGN_MCS25: case MGN_MCS26: case MGN_MCS27:
|
|
|
case MGN_MCS28: case MGN_MCS29: case MGN_MCS30: case MGN_MCS31:
|
|
|
- rateSection = 5;
|
|
|
+ idx_rate_sctn = 5;
|
|
|
break;
|
|
|
|
|
|
case MGN_VHT1SS_MCS0: case MGN_VHT1SS_MCS1: case MGN_VHT1SS_MCS2:
|
|
|
case MGN_VHT1SS_MCS3: case MGN_VHT1SS_MCS4: case MGN_VHT1SS_MCS5:
|
|
|
case MGN_VHT1SS_MCS6: case MGN_VHT1SS_MCS7: case MGN_VHT1SS_MCS8:
|
|
|
case MGN_VHT1SS_MCS9:
|
|
|
- rateSection = 6;
|
|
|
+ idx_rate_sctn = 6;
|
|
|
break;
|
|
|
|
|
|
case MGN_VHT2SS_MCS0: case MGN_VHT2SS_MCS1: case MGN_VHT2SS_MCS2:
|
|
|
case MGN_VHT2SS_MCS3: case MGN_VHT2SS_MCS4: case MGN_VHT2SS_MCS5:
|
|
|
case MGN_VHT2SS_MCS6: case MGN_VHT2SS_MCS7: case MGN_VHT2SS_MCS8:
|
|
|
case MGN_VHT2SS_MCS9:
|
|
|
- rateSection = 7;
|
|
|
+ idx_rate_sctn = 7;
|
|
|
break;
|
|
|
|
|
|
case MGN_VHT3SS_MCS0: case MGN_VHT3SS_MCS1: case MGN_VHT3SS_MCS2:
|
|
|
case MGN_VHT3SS_MCS3: case MGN_VHT3SS_MCS4: case MGN_VHT3SS_MCS5:
|
|
|
case MGN_VHT3SS_MCS6: case MGN_VHT3SS_MCS7: case MGN_VHT3SS_MCS8:
|
|
|
case MGN_VHT3SS_MCS9:
|
|
|
- rateSection = 8;
|
|
|
+ idx_rate_sctn = 8;
|
|
|
break;
|
|
|
|
|
|
case MGN_VHT4SS_MCS0: case MGN_VHT4SS_MCS1: case MGN_VHT4SS_MCS2:
|
|
|
case MGN_VHT4SS_MCS3: case MGN_VHT4SS_MCS4: case MGN_VHT4SS_MCS5:
|
|
|
case MGN_VHT4SS_MCS6: case MGN_VHT4SS_MCS7: case MGN_VHT4SS_MCS8:
|
|
|
case MGN_VHT4SS_MCS9:
|
|
|
- rateSection = 9;
|
|
|
+ idx_rate_sctn = 9;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
- DBG_871X("Wrong rate 0x%x\n", DataRate);
|
|
|
+ DBG_871X("Wrong rate 0x%x\n", data_rate);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (Band == BAND_ON_5G && rateSection == 0)
|
|
|
+ if (band_type == BAND_ON_5G && idx_rate_sctn == 0)
|
|
|
DBG_871X("Wrong rate 0x%x: No CCK in 5G Band\n", DataRate);
|
|
|
|
|
|
/* workaround for wrong index combination to obtain tx power limit, */
|
|
|
/* OFDM only exists in BW 20M */
|
|
|
- if (rateSection == 1)
|
|
|
- bandwidth = 0;
|
|
|
+ if (idx_rate_sctn == 1)
|
|
|
+ idx_bandwidth = 0;
|
|
|
|
|
|
/* workaround for wrong index combination to obtain tx power limit, */
|
|
|
/* CCK table will only be given in BW 20M */
|
|
|
- if (rateSection == 0)
|
|
|
- bandwidth = 0;
|
|
|
+ if (idx_rate_sctn == 0)
|
|
|
+ idx_bandwidth = 0;
|
|
|
|
|
|
/* workaround for wrong indxe combination to obtain tx power limit, */
|
|
|
/* HT on 80M will reference to HT on 40M */
|
|
|
- if ((rateSection == 2 || rateSection == 3) &&
|
|
|
- Band == BAND_ON_5G && bandwidth == 2) {
|
|
|
- bandwidth = 1;
|
|
|
+ if ((idx_rate_sctn == 2 || idx_rate_sctn == 3) &&
|
|
|
+ band_type == BAND_ON_5G && idx_bandwidth == 2) {
|
|
|
+ idx_bandwidth = 1;
|
|
|
}
|
|
|
|
|
|
- if (Band == BAND_ON_2_4G)
|
|
|
+ if (band_type == BAND_ON_2_4G)
|
|
|
channel = phy_GetChannelIndexOfTxPowerLimit(BAND_ON_2_4G,
|
|
|
- Channel);
|
|
|
- else if (Band == BAND_ON_5G)
|
|
|
+ channel);
|
|
|
+ else if (band_type == BAND_ON_5G)
|
|
|
channel = phy_GetChannelIndexOfTxPowerLimit(BAND_ON_5G,
|
|
|
- Channel);
|
|
|
- else if (Band == BAND_ON_BOTH) {
|
|
|
+ channel);
|
|
|
+ else if (band_type == BAND_ON_BOTH) {
|
|
|
/* BAND_ON_BOTH don't care temporarily */
|
|
|
}
|
|
|
|
|
|
- if (band == -1 || regulation == -1 || bandwidth == -1 ||
|
|
|
- rateSection == -1 || channel == -1) {
|
|
|
+ if (idx_band == -1 || idx_regulation == -1 || idx_bandwidth == -1 ||
|
|
|
+ idx_rate_sctn == -1 || idx_channel == -1) {
|
|
|
/* DBG_871X("Wrong index value to access power limit table [band %d][regulation %d][bandwidth %d][rf_path %d][rate_section %d][chnlGroup %d]\n", */
|
|
|
- /* band, regulation, bandwidth, RfPath, */
|
|
|
- /* rateSection, channelGroup); */
|
|
|
+ /* idx_band, idx_regulation, idx_bandwidth, rf_path, */
|
|
|
+ /* idx_rate_sctn, channel); */
|
|
|
|
|
|
return MAX_POWER_INDEX;
|
|
|
}
|
|
|
|
|
|
- if (Band == BAND_ON_2_4G) {
|
|
|
+ if (band_type == BAND_ON_2_4G) {
|
|
|
s8 limits[10] = {0}; u8 i = 0;
|
|
|
for (i = 0; i < MAX_REGULATION_NUM; i++)
|
|
|
- limits[i] = pHalData->TxPwrLimit_2_4G[i][bandwidth]
|
|
|
- [rateSection]
|
|
|
- [channel][RfPath];
|
|
|
+ limits[i] = hal_data->TxPwrLimit_2_4G[i]
|
|
|
+ [idx_bandwidth]
|
|
|
+ [idx_rate_sctn]
|
|
|
+ [idx_channel]
|
|
|
+ [rf_path];
|
|
|
|
|
|
- powerLimit = (regulation == TXPWR_LMT_WW) ?
|
|
|
+ pwr_lmt = (idx_regulation == TXPWR_LMT_WW) ?
|
|
|
phy_GetWorldWideLimit(limits) :
|
|
|
- pHalData->TxPwrLimit_2_4G[regulation][bandwidth]
|
|
|
- [rateSection][channel][RfPath];
|
|
|
+ hal_data->TxPwrLimit_2_4G[idx_regulation]
|
|
|
+ [idx_bandwidth]
|
|
|
+ [idx_rate_sctn]
|
|
|
+ [idx_channel]
|
|
|
+ [rf_path];
|
|
|
|
|
|
- } else if (Band == BAND_ON_5G) {
|
|
|
+ } else if (band_type == BAND_ON_5G) {
|
|
|
s8 limits[10] = {0}; u8 i = 0;
|
|
|
for (i = 0; i < MAX_REGULATION_NUM; ++i)
|
|
|
- limits[i] = pHalData->TxPwrLimit_5G[i][bandwidth]
|
|
|
- [rateSection]
|
|
|
- [channel][RfPath];
|
|
|
+ limits[i] = hal_data->TxPwrLimit_5G[i]
|
|
|
+ [idx_bandwidth]
|
|
|
+ [idx_rate_sctn]
|
|
|
+ [idx_channel]
|
|
|
+ [rf_path];
|
|
|
|
|
|
- powerLimit = (regulation == TXPWR_LMT_WW) ?
|
|
|
+ pwr_lmt = (idx_regulation == TXPWR_LMT_WW) ?
|
|
|
phy_GetWorldWideLimit(limits) :
|
|
|
- pHalData->TxPwrLimit_5G[regulation][bandwidth]
|
|
|
- [rateSection][channel][RfPath];
|
|
|
+ hal_data->TxPwrLimit_5G[idx_regulation]
|
|
|
+ [idx_bandwidth]
|
|
|
+ [idx_rate_sctn]
|
|
|
+ [idx_channel]
|
|
|
+ [rf_path];
|
|
|
} else
|
|
|
DBG_871X("No power limit table of the specified band\n");
|
|
|
|
|
|
/* combine 5G VHT & HT rate */
|
|
|
/* 5G 20M and 40M HT and VHT can cross reference */
|
|
|
/*
|
|
|
- if (Band == BAND_ON_5G && powerLimit == MAX_POWER_INDEX) {
|
|
|
- if (bandwidth == 0 || bandwidth == 1) {
|
|
|
+ if (band_type == BAND_ON_5G && pwr_lmt == MAX_POWER_INDEX) {
|
|
|
+ if (idx_bandwidth == 0 || idx_bandwidth == 1) {
|
|
|
RT_TRACE(COMP_INIT, DBG_LOUD, ("No power limit table of the specified band %d, bandwidth %d, ratesection %d, rf path %d\n",
|
|
|
- band, bandwidth,
|
|
|
- rateSection, RfPath));
|
|
|
- if (rateSection == 2)
|
|
|
- powerLimit = pHalData->TxPwrLimit_5G[regulation][bandwidth][4][channelGroup][RfPath];
|
|
|
- else if (rateSection == 4)
|
|
|
- powerLimit = pHalData->TxPwrLimit_5G[regulation][bandwidth][2][channelGroup][RfPath];
|
|
|
- else if (rateSection == 3)
|
|
|
- powerLimit = pHalData->TxPwrLimit_5G[regulation][bandwidth][5][channelGroup][RfPath];
|
|
|
- else if (rateSection == 5)
|
|
|
- powerLimit = pHalData->TxPwrLimit_5G[regulation][bandwidth][3][channelGroup][RfPath];
|
|
|
+ idx_band, idx_bandwidth,
|
|
|
+ idx_rate_sctn, rf_path));
|
|
|
+ if (idx_rate_sctn == 2)
|
|
|
+ pwr_lmt = hal_data->TxPwrLimit_5G[idx_regulation][idx_bandwidth][4][idx_channel][rf_path];
|
|
|
+ else if (idx_rate_sctn == 4)
|
|
|
+ pwr_lmt = hal_data->TxPwrLimit_5G[idx_regulation][idx_bandwidth][2][idx_channel][rf_path];
|
|
|
+ else if (idx_rate_sctn == 3)
|
|
|
+ pwr_lmt = hal_data->TxPwrLimit_5G[idx_regulation][idx_bandwidth][5][idx_channel][rf_path];
|
|
|
+ else if (idx_rate_sctn == 5)
|
|
|
+ pwr_lmt = hal_data->TxPwrLimit_5G[idx_regulation][idx_bandwidth][3][idx_channel][rf_path];
|
|
|
}
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
/* DBG_871X("TxPwrLmt[Regulation %d][Band %d][BW %d][RFPath %d][Rate 0x%x][Chnl %d] = %d\n", */
|
|
|
- /* regulation, pHalData->CurrentBandType, Bandwidth, RfPath, DataRate, Channel, powerLimit); */
|
|
|
- return powerLimit;
|
|
|
+ /* idx_regulation, hal_data->CurrentBandType, bandwidth, rf_path, data_rate, channel, pwr_lmt); */
|
|
|
+ return pwr_lmt;
|
|
|
}
|
|
|
|
|
|
static void phy_CrossReferenceHTAndVHTTxPowerLimit(struct adapter *padapter)
|