On 7/25/2023 2:24 AM, Aloka Dixit wrote:
On 7/24/2023 3:16 AM, Wen Gong wrote:
On 6/3/2023 7:58 AM, Aloka Dixit wrote:
...
+ default:
+ if (arg->peer_phymode == MODE_11BE_EHT20) {
+ const struct ieee80211_eht_mcs_nss_supp_20mhz_only
*bw_20 =
+ &eht_cap->eht_mcs_nss_supp.only_20mhz;
When ath12k used as station mode, it entered here as well as AP mode.
But remote is AP device for station mode, then remote AP device do
not have the only_20mhz data(EHT-MCS Map (20 MHz-Only Non-AP STA)).
What issue are you seeing? Please elaborate.
The default case will be entered for both AP and non-AP STA modes for
all bandwidths.
If the device is a 20-MHz-only device, it will skip 320, 160 and
directly enter the default case where 'if' condition will be true.
If the device is not a 20-MHZ-only device then it will enter the
'else' condition after processing 320 and 160 as applicable.
When I configured AP with 11BE-EHT mode for 20 MHz bandwidth on 5 GHz/6
GHz band,
and then connect to the AP with ath12k for station mode. Then the
peer_phymode
is MODE_11BE_EHT20, and then ath12k entered the default in function
ath12k_peer_assoc_h_eht() and use the bw_20 which is assigned with
eht_cap->eht_mcs_nss_supp.only_20mhz.
For station mode of ath12k, the eht_cap->eht_mcs_nss_supp is from the IE
"Supported
EHT-MCS and NSS Set" in assoc resp of AP in function
ieee80211_eht_cap_ie_to_sta_eht_cap().
Now it is "EHT-MCS Map (BW <= 80MHz): 0x222222" for the AP(11BE-EHT mode
for 20 MHz
bandwidth on 6 GHz band) in my test as below IEs.
The field only_20mhz and field _80 are union in struct
ieee80211_eht_mcs_nss_supp, the
value of field _80 is 0x222222 for this AP, then the value of field
only_20mhz is like this:
rx_tx_mcs7_max_nss=0x22,
rx_tx_mcs9_max_nss=0x22,
rx_tx_mcs11_max_nss=0x22,
rx_tx_mcs13_max_nss=0.
Then ath12k_mac_set_eht_mcs() will get value 0 fro mcs13 because it used
the field only_20mhz
passed by ath12k_peer_assoc_h_eht().
ieee80211_eht_cap_ie_to_sta_eht_cap()
{
...
/* Copy MCS/NSS which depends on the peer capabilities */
memset(&eht_cap->eht_mcs_nss_supp, 0,
sizeof(eht_cap->eht_mcs_nss_supp));
memcpy(&eht_cap->eht_mcs_nss_supp, pos, mcs_nss_size);
...
}
struct ieee80211_eht_mcs_nss_supp {
union {
struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
struct {
struct ieee80211_eht_mcs_nss_supp_bw _80;
struct ieee80211_eht_mcs_nss_supp_bw _160;
struct ieee80211_eht_mcs_nss_supp_bw _320;
} __packed bw;
} __packed;
} __packed;
struct ieee80211_eht_mcs_nss_supp_20mhz_only {
u8 rx_tx_mcs7_max_nss;
u8 rx_tx_mcs9_max_nss;
u8 rx_tx_mcs11_max_nss;
u8 rx_tx_mcs13_max_nss;
};
struct ieee80211_eht_mcs_nss_supp_bw {
u8 rx_tx_mcs9_max_nss;
u8 rx_tx_mcs11_max_nss;
u8 rx_tx_mcs13_max_nss;
};
IEs of the AP:
Ext Tag: HE Capabilities (IEEE Std 802.11ax/D3.0)
Tag Number: Element ID Extension (255)
Ext Tag length: 29
Ext Tag Number: HE Capabilities (IEEE Std 802.11ax/D3.0) (35)
HE MAC Capabilities Information: 0x10401a08010d
HE Phy Capabilities Information
.... ...0 = Reserved: 0x0
0000 000. = Channel Width Set: 0x00
.... ..0. = 40MHz in 2.4GHz band: Not supported
.... .0.. = 40 & 80MHz in the 5GHz or 6GHz band: Not
supported //20 MHz
.... 0... = 160MHz in the 5GHz or 6GHz band: Not supported
...0 .... = 160/80+80MHz in the 5GHz or 6GHz band: Not
supported
..0. .... = 242 tone RUs in the 2.4GHz band: Not supported
.0.. .... = 242 tone RUs in the 5GHz or 6GHz band: Not
supported
0... .... = Reserved: 0x0
Bits 8 to 23: 0x4063
Bits 24 to 39: 0x1f88
Bits 40 to 55: 0x8141
Bits 56 to 71: 0x111c
Bits 72 to 87: 0x0008
Supported HE-MCS and NSS Set
PPE Thresholds
Ext Tag: HE Operation (IEEE Std 802.11ax/D3.0)
Tag Number: Element ID Extension (255)
Ext Tag length: 12
Ext Tag Number: HE Operation (IEEE Std 802.11ax/D3.0) (36)
HE Operation Parameters: 0x023ff4
BSS Color Information: 0x0c
Basic HE-MCS and NSS Set: 0xfffc
6GHz Operation Information
Primary Channel: 37
6GHz Operation Information Control Field
.... ..00 = Channel Width: 20 MHz (0) //20 MHz
.... .0.. = Duplicate Beacon: False
0000 0... = Reserved: 0x00
Channel Center Frequency Segment0: 37
Channel Center Frequency Segment1: 0
Minimum rate: 1
Ext Tag: EHT Capabilities (IEEE Std 802.11be/D2.0)
Tag Number: Element ID Extension (255)
Ext Tag length: 15
Ext Tag Number: EHT Capabilities (IEEE Std 802.11be/D2.0) (108)
EHT MAC Capabilities Information: 0x0000
EHT PHY Capabilities Information
Supported EHT-MCS and NSS Set
EHT-MCS Map (BW <= 80MHz): 0x222222
.... .... .... .... .... 0010 = Rx Max Nss That Supports
EHT-MCS 0-9: 2
.... .... .... .... 0010 .... = Tx Max Nss That Supports
EHT-MCS 0-9: 2
.... .... .... 0010 .... .... = Rx Max Nss That Supports
EHT-MCS 10-11: 2
.... .... 0010 .... .... .... = Tx Max Nss That Supports
EHT-MCS 10-11: 2
.... 0010 .... .... .... .... = Rx Max Nss That Supports
EHT-MCS 12-13: 2
0010 .... .... .... .... .... = Tx Max Nss That Supports
EHT-MCS 12-13: 2
EHT PPE Thresholds: <MISSING>
call stack of ieee80211_eht_cap_ie_to_sta_eht_cap():
RIP: 0010:ieee80211_eht_cap_ie_to_sta_eht_cap+0x5a/0x110 [mac80211]
[86593.088253] RSP: 0018:ffffb5fcc1f8f990 EFLAGS: 00010206
[86593.088254] RAX: 0000000000000000 RBX: ffff8c45c2fd6b70 RCX:
0000000000000000
[86593.088256] RDX: ffff8c45c2fd710e RSI: ffff8c44cba0a408 RDI:
ffff8c45c2fd6c30
[86593.088257] RBP: ffffb5fcc1f8f9c8 R08: ffff8c45c2fd7147 R09:
000000000000000e
[86593.088258] R10: ffff8c44cba0a408 R11: ffff8c45c2fd6bd8 R12:
ffff8c45cd0989c0
[86593.088259] R13: 0000000000000000 R14: ffff8c45c2fd7147 R15:
ffff8c45c8198000
[86593.088261] FS: 0000000000000000(0000) GS:ffff8c46d6200000(0000)
knlGS:0000000000000000
[86593.088262] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[86593.088264] CR2: 0000032d89c60000 CR3: 000000000800a006 CR4:
00000000001706f0
[86593.088265] Call Trace:
[86593.088267] <TASK>
[86593.088270] ieee80211_rx_mgmt_assoc_resp.cold+0xed8/0x1b9b [mac80211]
[86593.088336] ieee80211_sta_rx_queued_mgmt+0x351/0xdd0 [mac80211]
[86593.088394] ? newidle_balance+0x252/0x410
[86593.088399] ? dequeue_entity+0x125/0x400
[86593.088402] ? preempt_count_add+0x7c/0xc0
[86593.088406] ? _raw_spin_lock_irqsave+0x28/0x60
[86593.088410] ieee80211_iface_work+0x30a/0x410 [mac80211]
[86593.088459] ? __schedule+0x319/0x9b0
[86593.088461] process_one_work+0x227/0x440
[86593.088465] worker_thread+0x31/0x3e0
[86593.088467] ? process_one_work+0x440/0x440
[86593.088469] kthread+0xfe/0x130
[86593.088471] ? kthread_complete_and_exit+0x20/0x20
[86593.088473] ret_from_fork+0x22/0x30
[86593.088479] </TASK>
Also 20 MHz should be same for 5 GHz/6 GHz(MODE_11BE_EHT20) and 2.4
GHz(MODE_11BE_EHT20_2G), right?
Good point, I will add a check for MODE_11BE_EHT20_2G as well here.
+
+ ath12k_mac_set_eht_mcs(bw_20->rx_tx_mcs7_max_nss,
+ bw_20->rx_tx_mcs9_max_nss,
+ bw_20->rx_tx_mcs11_max_nss,
+ bw_20->rx_tx_mcs13_max_nss,
+ &rx_mcs[WMI_EHTCAP_TXRX_MCS_NSS_IDX_80],
+ &tx_mcs[WMI_EHTCAP_TXRX_MCS_NSS_IDX_80]);
+ } else {
+ bw = &eht_cap->eht_mcs_nss_supp.bw._80;
+ ath12k_mac_set_eht_mcs(bw->rx_tx_mcs9_max_nss,
+ bw->rx_tx_mcs9_max_nss,
+ bw->rx_tx_mcs11_max_nss,
+ bw->rx_tx_mcs13_max_nss,
+ &rx_mcs[WMI_EHTCAP_TXRX_MCS_NSS_IDX_80],
+ &tx_mcs[WMI_EHTCAP_TXRX_MCS_NSS_IDX_80]);
+ }
+
+ arg->peer_eht_mcs_count++;
+ break;
+ }
+}
+
...