Files
immortalwrt-mt798x/package/mtk/drivers/mt_wifi/patches-7672/011-fix-wext-txpwr.patch

97 lines
3.0 KiB
Diff

--- a/mt_wifi/embedded/ap/ap_cfg.c
+++ b/mt_wifi/embedded/ap/ap_cfg.c
@@ -29235,6 +29235,46 @@ INT32 rtmp_get_macPower(IN VOID *pAdSrc)
return retPwr;
}
+INT32 rtmp_get_mgmtpwr(IN VOID *pAdSrc)
+{
+ INT8 BandIdx;
+ INT32 Tx_Pwr = 0;
+ PRTMP_ADAPTER ad = (PRTMP_ADAPTER)pAdSrc;
+ POS_COOKIE pObj = NULL;
+ UCHAR apidx = 0;
+ struct wifi_dev *wdev = NULL;
+
+ if (ad == NULL) {
+ MTWF_DBG(NULL, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_ERROR, "ad null!\n");
+ return -EFAULT;
+ }
+ pObj = (POS_COOKIE)ad->OS_Cookie;
+ if (pObj == NULL) {
+ MTWF_DBG(NULL, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_ERROR, "pObj null!\n");
+ return -EFAULT;
+ }
+
+ if ((pObj->ioctl_if_type == INT_MBSSID) || (pObj->ioctl_if_type == INT_MAIN))
+ {
+ apidx = pObj->ioctl_if;
+ if (apidx >= ad->ApCfg.BssidNum)
+ return -EFAULT;
+
+ wdev = &ad->ApCfg.MBSSID[apidx].wdev;
+
+ if (wdev)
+ BandIdx = HcGetBandByWdev(wdev);
+ else
+ BandIdx = BAND0;
+
+ Tx_Pwr = (ad->ApCfg.MgmtTxPwr[BandIdx] + ad->ApCfg.EpaFeGain[BandIdx] + (wdev->TxPwrDelta)) / 2;
+
+ return Tx_Pwr;
+ }
+
+ return -EFAULT;
+}
+
#ifdef CONFIG_6G_SUPPORT
INT show_bssmnger_info(RTMP_ADAPTER *pAd, RTMP_STRING *arg)
{
--- a/mt_wifi/os/linux/ap_ioctl.c
+++ b/mt_wifi/os/linux/ap_ioctl.c
@@ -574,6 +574,8 @@ const struct iw_handler_def rt28xx_ap_iw
};
#endif /* CONFIG_APSTA_MIXED_SUPPORT */
+INT32 rtmp_get_mgmtpwr(IN VOID *pAdSrc);
+
INT rt28xx_ap_ioctl(void *net_dev_obj, void *data_obj, int cmd) /* snowpin for ap/sta */
{
struct net_device *net_dev;
@@ -801,18 +803,24 @@ INT rt28xx_ap_ioctl(void *net_dev_obj, v
{
INT32 powerval = 0;
- wdev = pIoctlConfig->wdev;
- if (wdev->if_up_down_state == FALSE) {
- MTWF_DBG(pAd, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_ERROR,
- "RT_PRIV_IOCTL interface is down, cmd [%x] return!!!\n", cmd);
- return -ENETDOWN;
+ if (RT_DEV_PRIV_FLAGS_GET(net_dev) == INT_MAIN ||
+ RT_DEV_PRIV_FLAGS_GET(net_dev) == INT_MBSSID) {
+ wdev = pIoctlConfig->wdev;
+ if (wdev->if_up_down_state == FALSE) {
+ MTWF_DBG(pAd, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_INFO,
+ "RT_PRIV_IOCTL interface is down, cmd [%x] return!!!\n", cmd);
+ return -ENETDOWN;
+ }
+ powerval = rtmp_get_mgmtpwr(pAd);
+ MTWF_DBG(pAd, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_INFO, "power = %d\n", powerval);
+ wrqin->u.txpower.value = powerval;/* The value of the parameter itself */
+ wrqin->u.txpower.disabled = 0;/* Disable the feature */
+ wrqin->u.txpower.flags = 0;/* dBm */
+ wrqin->u.txpower.fixed = 0;/* Hardware should not use auto select */
+ } else {
+ Status = RTMP_IO_EOPNOTSUPP;
}
- powerval = rtmp_get_macPower(pAd);
- MTWF_DBG(pAd, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_INFO, "power = %d\n", powerval);
- wrqin->u.txpower.value = powerval;/* The value of the parameter itself */
- wrqin->u.txpower.disabled = 0;/* Disable the feature */
- wrqin->u.txpower.flags = 0;/* dBm */
- wrqin->u.txpower.fixed = 0;/* Hardware should not use auto select */
+
break;
}
case SIOCGIWRANGE: /*Get range of parameters */