From 9c09c7f0d2444b1fecf0fb633748af685361fbca Mon Sep 17 00:00:00 2001 From: Shaun Ren Date: Sat, 25 Feb 2017 18:37:45 -0500 Subject: [PATCH] Implement txpwr control --- hal/rtl8812a/rtl8812a_dm.c | 2 +- hal/rtl8812a/rtl8812a_phycfg.c | 2 ++ include/hal_data.h | 1 + os_dep/linux/ioctl_cfg80211.c | 49 +++++++++++++++------------------- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/hal/rtl8812a/rtl8812a_dm.c b/hal/rtl8812a/rtl8812a_dm.c index 82467bf5b..126882f04 100755 --- a/hal/rtl8812a/rtl8812a_dm.c +++ b/hal/rtl8812a/rtl8812a_dm.c @@ -496,7 +496,7 @@ void rtl8812_init_dm_priv(IN PADAPTER Adapter) PHYDM_InitDebugSetting(podmpriv); pHalData->TxPwrInPercentage = TX_PWR_PERCENTAGE_3; - + pHalData->CurrentTxPwrIdx = 18; } void rtl8812_deinit_dm_priv(IN PADAPTER Adapter) diff --git a/hal/rtl8812a/rtl8812a_phycfg.c b/hal/rtl8812a/rtl8812a_phycfg.c index 21599428e..0a5646c19 100755 --- a/hal/rtl8812a/rtl8812a_phycfg.c +++ b/hal/rtl8812a/rtl8812a_phycfg.c @@ -565,6 +565,8 @@ phy_TxPwrAdjInPercentage( *pTxPwrIdx -=6; } + *pTxPwrIdx += pHalData->CurrentTxPwrIdx; + if(*pTxPwrIdx > RF6052_MAX_TX_PWR) // Avoid underflow condition. *pTxPwrIdx = RF6052_MAX_TX_PWR; } diff --git a/include/hal_data.h b/include/hal_data.h index 7a788d2a7..dbfc9e541 100755 --- a/include/hal_data.h +++ b/include/hal_data.h @@ -389,6 +389,7 @@ typedef struct hal_com_data u8 CurrentOfdm24GTxPwrIdx; u8 CurrentBW2024GTxPwrIdx; u8 CurrentBW4024GTxPwrIdx; + u8 CurrentTxPwrIdx; // Read/write are allow for following hardware information variables u8 pwrGroupCnt; diff --git a/os_dep/linux/ioctl_cfg80211.c b/os_dep/linux/ioctl_cfg80211.c index c92dd77e5..3425a165f 100755 --- a/os_dep/linux/ioctl_cfg80211.c +++ b/os_dep/linux/ioctl_cfg80211.c @@ -20,6 +20,7 @@ #define _IOCTL_CFG80211_C_ #include +#include #ifdef CONFIG_IOCTL_CFG80211 @@ -3427,38 +3428,29 @@ static int cfg80211_rtw_set_txpower(struct wiphy *wiphy, struct wireless_dev *wdev, #endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE) - enum nl80211_tx_power_setting type, int mbm) + enum nl80211_tx_power_setting type, int value) #else - enum tx_power_setting type, int dbm) + enum tx_power_setting type, int value) #endif { -#if 0 - struct iwm_priv *iwm = wiphy_to_iwm(wiphy); - int ret; + if (type != NL80211_TX_POWER_FIXED) + return -EOPNOTSUPP; - switch (type) { - case NL80211_TX_POWER_AUTOMATIC: - return 0; - case NL80211_TX_POWER_FIXED: - if (mbm < 0 || (mbm % 100)) - return -EOPNOTSUPP; + _adapter *padapter = wiphy_to_adapter(wiphy); + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); - if (!test_bit(IWM_STATUS_READY, &iwm->status)) - return 0; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE) + value /= 100; +#endif - ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX, - CFG_TX_PWR_LIMIT_USR, - MBM_TO_DBM(mbm) * 2); - if (ret < 0) - return ret; + if(value < 0) + value = 0; + if(value > 40) + value = 40; + + pHalData->CurrentTxPwrIdx = value; + rtw_hal_set_tx_power_level(padapter, pHalData->CurrentChannel); - return iwm_tx_power_trigger(iwm); - default: - IWM_ERR(iwm, "Unsupported power type: %d\n", type); - return -EOPNOTSUPP; - } -#endif - DBG_8192C("%s\n", __func__); return 0; } @@ -3468,10 +3460,11 @@ static int cfg80211_rtw_get_txpower(struct wiphy *wiphy, #endif int *dbm) { - DBG_8192C("%s\n", __func__); + _adapter *padapter = wiphy_to_adapter(wiphy); + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); + + *dbm = pHalData->CurrentTxPwrIdx; - *dbm = (12); - return 0; }