Search Linux Wireless

Re: [PATCH v5 06/11] wifi: ath12k: prepare EHT peer assoc parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/27/2023 12:38 AM, Aloka Dixit wrote:
On 7/25/2023 8:43 PM, Wen Gong wrote:
On 7/26/2023 6:40 AM, Aloka Dixit wrote:
[...]
+
+static void ath12k_peer_assoc_h_eht(struct ath12k *ar,
+                    struct ieee80211_vif *vif,
+                    struct ieee80211_sta *sta,
+                    struct ath12k_wmi_peer_assoc_arg *arg)
+{
+    const struct ieee80211_sta_eht_cap *eht_cap = &sta->deflink.eht_cap;
+    const struct ieee80211_sta_he_cap *he_cap = &sta->deflink.he_cap;
[...]
+    default:
+        if ((he_cap->he_cap_elem.phy_cap_info[0] &
+ (IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
+ IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)) == 0) {
+            const struct ieee80211_eht_mcs_nss_supp_20mhz_only *bw_20 =
+ &eht_cap->eht_mcs_nss_supp.only_20mhz;
+
This is the IEs of my AP below, then it will still entered into this branch for my ath12k station mode. sta->deflink.eht_cap and sta->deflink.he_cap is copied from peer remote, for ath12k station mode, peer remote is the AP. The field only_20mhz is only valid when the IEs is from a station which only support
20 MHz.

I think the flag from_ap should be added here as well as function ieee80211_eht_mcs_nss_size().

Please correct me if wrong.


Okay, can you fix this in a follow-up patch?
I don't have a device to test the station mode to verify a fix.
Thanks.
The fix patch is simple like this (I have verified OK), you can merge it to your patch.😁

It is to not use only_20mhz when ath12k is station mode.

diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index f4226d0a4726..7e099abb99e6 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -2482,6 +2482,7 @@ static void ath12k_peer_assoc_h_eht(struct ath12k *ar,
        const struct ieee80211_eht_mcs_nss_supp_bw *mcs_nss_supp_bw;
        u8 mcs_idx = WMI_EHTCAP_TXRX_MCS_NSS_IDX_80;
+       bool is_local_sta = arvif->vif->type == NL80211_IFTYPE_STATION;

        eht_cap = &sta->link[link_id]->eht_cap;

@@ -2522,7 +2523,7 @@ static void ath12k_peer_assoc_h_eht(struct ath12k *ar,
                fallthrough;

        default:
-               if ((he_cap->he_cap_elem.phy_cap_info[0] &
+               if (!is_local_sta && (he_cap->he_cap_elem.phy_cap_info[0] &) {




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux