wifi: ath11k: fix Tx power value during active CAC
authorAditya Kumar Singh <quic_adisi@quicinc.com>
Tue, 3 Oct 2023 14:26:54 +0000 (17:26 +0300)
committerKalle Valo <quic_kvalo@quicinc.com>
Thu, 5 Oct 2023 06:22:45 +0000 (09:22 +0300)
Tx power is fetched from firmware's pdev stats. However, during active
CAC, firmware does not fill the current Tx power and sends the max
initialised value filled during firmware init. If host sends this power
to user space, this is wrong since in certain situations, the Tx power
could be greater than the max allowed by the regulatory. Hence, host
should not be fetching the Tx power during an active CAC.

Fix this issue by returning -EAGAIN error so that user space knows that there's
no valid value available.

Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1

Fixes: 9a2aa68afe3d ("wifi: ath11k: add get_txpower mac ops")
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230912051857.2284-4-quic_adisi@quicinc.com
drivers/net/wireless/ath/ath11k/mac.c

index 7c530ada05cffeea5e8ace9171f6da54f68adf4b..a36208a0aab5d543a3360280b5075a6d4543d3c6 100644 (file)
@@ -9060,6 +9060,14 @@ static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
        if (ar->state != ATH11K_STATE_ON)
                goto err_fallback;
 
+       /* Firmware doesn't provide Tx power during CAC hence no need to fetch
+        * the stats.
+        */
+       if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) {
+               mutex_unlock(&ar->conf_mutex);
+               return -EAGAIN;
+       }
+
        req_param.pdev_id = ar->pdev->pdev_id;
        req_param.stats_id = WMI_REQUEST_PDEV_STAT;