|
@@ -6541,95 +6541,6 @@ VOID AsicAdjustTxPower(
|
|
|
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1);
|
|
|
BbpR1 &= 0xFC;
|
|
|
|
|
|
-#ifdef SINGLE_SKU
|
|
|
- // Handle regulatory max tx power constrain
|
|
|
- do
|
|
|
- {
|
|
|
- UCHAR TxPwrInEEPROM = 0xFF, CountryTxPwr = 0xFF, criterion;
|
|
|
- UCHAR AdjustMaxTxPwr[40];
|
|
|
-
|
|
|
- if (pAd->CommonCfg.Channel > 14) // 5G band
|
|
|
- TxPwrInEEPROM = ((pAd->CommonCfg.DefineMaxTxPwr & 0xFF00) >> 8);
|
|
|
- else // 2.4G band
|
|
|
- TxPwrInEEPROM = (pAd->CommonCfg.DefineMaxTxPwr & 0x00FF);
|
|
|
- CountryTxPwr = GetCuntryMaxTxPwr(pAd, pAd->CommonCfg.Channel);
|
|
|
-
|
|
|
- // error handling, range check
|
|
|
- if ((TxPwrInEEPROM > 0x50) || (CountryTxPwr > 0x50))
|
|
|
- {
|
|
|
- DBGPRINT(RT_DEBUG_ERROR,("AsicAdjustTxPower - Invalid max tx power (=0x%02x), CountryTxPwr=%d\n", TxPwrInEEPROM, CountryTxPwr));
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- criterion = *((PUCHAR)TxPwr + 2) & 0xF; // FAE use OFDM 6M as criterion
|
|
|
-
|
|
|
- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (criterion=%d, TxPwrInEEPROM=%d, CountryTxPwr=%d)\n", criterion, TxPwrInEEPROM, CountryTxPwr));
|
|
|
-
|
|
|
- // Adjust max tx power according to the relationship of tx power in E2PROM
|
|
|
- for (i=0; i<5; i++)
|
|
|
- {
|
|
|
- // CCK will have 4dBm larger than OFDM
|
|
|
- // Therefore, we should separate to parse the tx power field
|
|
|
- if (i == 0)
|
|
|
- {
|
|
|
- for (j=0; j<8; j++)
|
|
|
- {
|
|
|
- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
|
|
|
-
|
|
|
- if (j < 4)
|
|
|
- {
|
|
|
- // CCK will have 4dBm larger than OFDM
|
|
|
- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion) + 4;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion);
|
|
|
- }
|
|
|
- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (j=0; j<8; j++)
|
|
|
- {
|
|
|
- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
|
|
|
-
|
|
|
- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion);
|
|
|
- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // Adjust tx power according to the relationship
|
|
|
- for (i=0; i<5; i++)
|
|
|
- {
|
|
|
- if (TxPwr[i] != 0xffffffff)
|
|
|
- {
|
|
|
- for (j=0; j<8; j++)
|
|
|
- {
|
|
|
- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
|
|
|
-
|
|
|
- // The system tx power is larger than the regulatory, the power should be restrain
|
|
|
- if (AdjustMaxTxPwr[i*8+j] > CountryTxPwr)
|
|
|
- {
|
|
|
- // decrease to zero and don't need to take care BBPR1
|
|
|
- if ((Value - (AdjustMaxTxPwr[i*8+j] - CountryTxPwr)) > 0)
|
|
|
- Value -= (AdjustMaxTxPwr[i*8+j] - CountryTxPwr);
|
|
|
- else
|
|
|
- Value = 0;
|
|
|
-
|
|
|
- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
|
|
|
- }
|
|
|
- else
|
|
|
- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d, no change)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
|
|
|
-
|
|
|
- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } while (FALSE);
|
|
|
-#endif // SINGLE_SKU //
|
|
|
-
|
|
|
/* calculate delta power based on the percentage specified from UI */
|
|
|
// E2PROM setting is calibrated for maximum TX power (i.e. 100%)
|
|
|
// We lower TX power here according to the percentage specified from UI
|