mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 01:52:51 +00:00
mac80211: fix mu-mimo vht capabilities
Fixes: WIFI-5823 Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
From 6718e9786f18dd1380e5977d224d13a5ff3df619 Mon Sep 17 00:00:00 2001
|
||||
From 3feca6da7b0571cf17afc9f0e40d0ede9059c271 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Sat, 4 Sep 2021 05:47:27 +0200
|
||||
Subject: [PATCH 02/58] mac80211: update to latest HEAD
|
||||
Subject: [PATCH 01/72] mac80211: update to latest HEAD
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
@@ -9,7 +9,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
package/kernel/mac80211/ath.mk | 5 +-
|
||||
package/kernel/mac80211/broadcom.mk | 4 +-
|
||||
.../mac80211/files/lib/netifd/mac80211.sh | 36 -
|
||||
.../files/lib/netifd/wireless/mac80211.sh | 186 ++-
|
||||
.../files/lib/netifd/wireless/mac80211.sh | 214 ++-
|
||||
.../mac80211/files/lib/wifi/mac80211.sh | 110 +-
|
||||
.../patches/ath/120-owl-loader-compat.patch | 53 -
|
||||
.../patches/ath/402-ath_regd_optional.patch | 2 +-
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
...eck-per-vif-offload_flags-in-Tx-path.patch | 26 +
|
||||
.../500-mac80211_configure_antenna_gain.patch | 16 +-
|
||||
...the-dst-buffer-to-of_get_mac_address.patch | 237 +++
|
||||
70 files changed, 2752 insertions(+), 1160 deletions(-)
|
||||
70 files changed, 2777 insertions(+), 1163 deletions(-)
|
||||
delete mode 100644 package/kernel/mac80211/files/lib/netifd/mac80211.sh
|
||||
delete mode 100644 package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch
|
||||
rename package/kernel/mac80211/patches/{ath => ath10k}/080-ath10k_thermal_config.patch (97%)
|
||||
@@ -286,7 +286,7 @@ index 92e5c0e395..0000000000
|
||||
- done
|
||||
-}
|
||||
diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
|
||||
index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
index 9a9c35fb5f..97c567031e 100644
|
||||
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
|
||||
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
|
||||
@@ -1,7 +1,6 @@
|
||||
@@ -310,7 +310,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
config_add_boolean noscan ht_coex acs_exclude_dfs
|
||||
config_add_array ht_capab
|
||||
config_add_array channels
|
||||
@@ -44,11 +43,24 @@ drv_mac80211_init_device_config() {
|
||||
@@ -44,11 +43,26 @@ drv_mac80211_init_device_config() {
|
||||
su_beamformee \
|
||||
mu_beamformer \
|
||||
mu_beamformee \
|
||||
@@ -326,6 +326,8 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
+ he_spr_sr_control \
|
||||
+ he_twt_required
|
||||
+ config_add_int \
|
||||
+ beamformer_antennas \
|
||||
+ beamformee_antennas \
|
||||
+ vht_max_a_mpdu_len_exp \
|
||||
+ vht_max_mpdu \
|
||||
+ vht_link_adapt \
|
||||
@@ -337,7 +339,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
config_add_boolean \
|
||||
ldpc \
|
||||
greenfield \
|
||||
@@ -96,6 +108,23 @@ mac80211_add_capabilities() {
|
||||
@@ -96,6 +110,23 @@ mac80211_add_capabilities() {
|
||||
export -n -- "$__var=$__out"
|
||||
}
|
||||
|
||||
@@ -361,7 +363,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
mac80211_hostapd_setup_base() {
|
||||
local phy="$1"
|
||||
|
||||
@@ -119,6 +148,9 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -119,6 +150,9 @@ mac80211_hostapd_setup_base() {
|
||||
[ "$noscan" -gt 0 ] && hostapd_noscan=1
|
||||
[ "$tx_burst" = 0 ] && tx_burst=
|
||||
|
||||
@@ -371,7 +373,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
ieee80211n=1
|
||||
ht_capab=
|
||||
case "$htmode" in
|
||||
@@ -126,7 +158,7 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -126,7 +160,7 @@ mac80211_hostapd_setup_base() {
|
||||
HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
|
||||
case "$hwmode" in
|
||||
a)
|
||||
@@ -380,7 +382,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
1) ht_capab="[HT40+]";;
|
||||
0) ht_capab="[HT40-]";;
|
||||
esac
|
||||
@@ -200,7 +232,7 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -200,7 +234,7 @@ mac80211_hostapd_setup_base() {
|
||||
case "$htmode" in
|
||||
VHT20|HE20) enable_ac=1;;
|
||||
VHT40|HE40)
|
||||
@@ -389,7 +391,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
1) idx=$(($channel + 2));;
|
||||
0) idx=$(($channel - 2));;
|
||||
esac
|
||||
@@ -208,7 +240,7 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -208,7 +242,7 @@ mac80211_hostapd_setup_base() {
|
||||
vht_center_seg0=$idx
|
||||
;;
|
||||
VHT80|HE80)
|
||||
@@ -398,7 +400,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
1) idx=$(($channel + 6));;
|
||||
2) idx=$(($channel + 2));;
|
||||
3) idx=$(($channel - 2));;
|
||||
@@ -219,15 +251,35 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -219,15 +253,35 @@ mac80211_hostapd_setup_base() {
|
||||
vht_center_seg0=$idx
|
||||
;;
|
||||
VHT160|HE160)
|
||||
@@ -438,7 +440,35 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
[ "$hwmode" = "a" ] || enable_ac=0
|
||||
|
||||
if [ "$enable_ac" != "0" ]; then
|
||||
@@ -337,16 +389,62 @@ mac80211_hostapd_setup_base() {
|
||||
@@ -242,6 +296,8 @@ mac80211_hostapd_setup_base() {
|
||||
mu_beamformee:1 \
|
||||
vht_txop_ps:1 \
|
||||
htc_vht:1 \
|
||||
+ beamformee_antennas:4 \
|
||||
+ beamformer_antennas:4 \
|
||||
rx_antenna_pattern:1 \
|
||||
tx_antenna_pattern:1 \
|
||||
vht_max_a_mpdu_len_exp:7 \
|
||||
@@ -282,6 +338,18 @@ mac80211_hostapd_setup_base() {
|
||||
RX-STBC-123:0x700:0x300:1 \
|
||||
RX-STBC-1234:0x700:0x400:1 \
|
||||
|
||||
+ [ "$(($vht_cap & 0x800))" -gt 0 -a "$su_beamformer" -gt 0 ] && {
|
||||
+ cap_ant="$(( ( ($vht_cap >> 16) & 3 ) + 1 ))"
|
||||
+ [ "$cap_ant" -gt "$beamformer_antennas" ] && cap_ant="$beamformer_antennas"
|
||||
+ [ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[SOUNDING-DIMENSION-$cap_ant]"
|
||||
+ }
|
||||
+
|
||||
+ [ "$(($vht_cap & 0x1000))" -gt 0 -a "$su_beamformee" -gt 0 ] && {
|
||||
+ cap_ant="$(( ( ($vht_cap >> 13) & 3 ) + 1 ))"
|
||||
+ [ "$cap_ant" -gt "$beamformee_antennas" ] && cap_ant="$beamformee_antennas"
|
||||
+ [ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[BF-ANTENNA-$cap_ant]"
|
||||
+ }
|
||||
+
|
||||
# supported Channel widths
|
||||
vht160_hw=0
|
||||
[ "$(($vht_cap & 12))" -eq 4 -a 1 -le "$vht160" ] && \
|
||||
@@ -337,16 +405,62 @@ mac80211_hostapd_setup_base() {
|
||||
esac
|
||||
|
||||
if [ "$enable_ax" != "0" ]; then
|
||||
@@ -504,9 +534,23 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
fi
|
||||
|
||||
hostapd_prepare_device_config "$hostapd_conf_file" nl80211
|
||||
@@ -426,7 +524,11 @@ mac80211_generate_mac() {
|
||||
local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS"
|
||||
@@ -401,6 +515,7 @@ mac80211_get_addr() {
|
||||
|
||||
mac80211_generate_mac() {
|
||||
local phy="$1"
|
||||
+ local multiple_bssid="$2"
|
||||
local id="${macidx:-0}"
|
||||
|
||||
local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)"
|
||||
@@ -424,9 +539,16 @@ mac80211_generate_mac() {
|
||||
local mask6=$6
|
||||
|
||||
local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS"
|
||||
-
|
||||
+ [ "$multiple_bssid" -eq 1 ] && {
|
||||
+ printf "02:%s:%s:%s:%s:%02x" $b1 $2 $3 $4 $5 $macidx
|
||||
+ return
|
||||
+ }
|
||||
macidx=$(($id + 1))
|
||||
- [ "$((0x$mask1))" -gt 0 ] && {
|
||||
+
|
||||
@@ -517,7 +561,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
b1="0x$1"
|
||||
[ "$id" -gt 0 ] && \
|
||||
b1=$(($b1 ^ ((($id - !($b1 & 2)) << 2)) | 0x2))
|
||||
@@ -434,7 +536,7 @@ mac80211_generate_mac() {
|
||||
@@ -434,7 +556,7 @@ mac80211_generate_mac() {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -526,7 +570,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $(( 0x$6 ^ $id ))
|
||||
return
|
||||
}
|
||||
@@ -449,7 +551,7 @@ mac80211_generate_mac() {
|
||||
@@ -449,7 +571,7 @@ mac80211_generate_mac() {
|
||||
find_phy() {
|
||||
[ -n "$phy" -a -d /sys/class/ieee80211/$phy ] && return 0
|
||||
[ -n "$path" ] && {
|
||||
@@ -535,7 +579,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
[ -n "$phy" ] && return 0
|
||||
}
|
||||
[ -n "$macaddr" ] && {
|
||||
@@ -528,7 +630,7 @@ mac80211_iw_interface_add() {
|
||||
@@ -528,11 +650,12 @@ mac80211_iw_interface_add() {
|
||||
rc="$?"
|
||||
}
|
||||
|
||||
@@ -544,7 +588,21 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
return $rc
|
||||
}
|
||||
|
||||
@@ -689,14 +791,8 @@ mac80211_prepare_iw_htmode() {
|
||||
mac80211_prepare_vif() {
|
||||
+ local multiple_bssid=$1
|
||||
json_select config
|
||||
|
||||
json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file
|
||||
@@ -546,7 +669,7 @@ mac80211_prepare_vif() {
|
||||
json_select ..
|
||||
|
||||
[ -n "$macaddr" ] || {
|
||||
- macaddr="$(mac80211_generate_mac $phy)"
|
||||
+ macaddr="$(mac80211_generate_mac $phy $multiple_bssid)"
|
||||
macidx="$(($macidx + 1))"
|
||||
}
|
||||
|
||||
@@ -689,14 +812,8 @@ mac80211_prepare_iw_htmode() {
|
||||
case "$htmode" in
|
||||
VHT20|HT20) iw_htmode=HT20;;
|
||||
HT40*|VHT40|VHT160)
|
||||
@@ -561,7 +619,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
case "$htmode" in
|
||||
HT40+) iw_htmode="HT40+";;
|
||||
HT40-) iw_htmode="HT40-";;
|
||||
@@ -709,6 +805,12 @@ mac80211_prepare_iw_htmode() {
|
||||
@@ -709,6 +826,12 @@ mac80211_prepare_iw_htmode() {
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
@@ -574,7 +632,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
esac
|
||||
[ "$auto_channel" -gt 0 ] && iw_htmode="HT40+"
|
||||
;;
|
||||
@@ -818,7 +920,6 @@ mac80211_setup_vif() {
|
||||
@@ -818,7 +941,6 @@ mac80211_setup_vif() {
|
||||
mesh)
|
||||
wireless_vif_parse_encryption
|
||||
[ -z "$htmode" ] && htmode="NOHT";
|
||||
@@ -582,7 +640,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ] || chan_is_dfs "$phy" "$channel"; then
|
||||
mac80211_setup_supplicant $vif_enable || failed=1
|
||||
else
|
||||
@@ -832,7 +933,6 @@ mac80211_setup_vif() {
|
||||
@@ -832,7 +954,6 @@ mac80211_setup_vif() {
|
||||
adhoc)
|
||||
wireless_vif_parse_encryption
|
||||
if [ "$wpa" -gt 0 -o "$auto_channel" -gt 0 ]; then
|
||||
@@ -590,7 +648,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
mac80211_setup_supplicant_noctl $vif_enable || failed=1
|
||||
else
|
||||
mac80211_setup_adhoc $vif_enable
|
||||
@@ -849,10 +949,30 @@ mac80211_setup_vif() {
|
||||
@@ -849,10 +970,30 @@ mac80211_setup_vif() {
|
||||
|
||||
get_freq() {
|
||||
local phy="$1"
|
||||
@@ -623,17 +681,18 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
chan_is_dfs() {
|
||||
local phy="$1"
|
||||
local chan="$2"
|
||||
@@ -896,7 +1016,8 @@ drv_mac80211_setup() {
|
||||
@@ -896,7 +1037,9 @@ drv_mac80211_setup() {
|
||||
country chanbw distance \
|
||||
txpower antenna_gain \
|
||||
rxantenna txantenna \
|
||||
- frag rts beacon_int:100 htmode
|
||||
+ frag rts beacon_int:100 htmode \
|
||||
+ multiple_bssid:0 \
|
||||
+ num_global_macaddr
|
||||
json_get_values basic_rate_list basic_rate
|
||||
json_get_values scan_list scan_list
|
||||
json_select ..
|
||||
@@ -933,7 +1054,7 @@ drv_mac80211_setup() {
|
||||
@@ -933,7 +1076,7 @@ drv_mac80211_setup() {
|
||||
done
|
||||
|
||||
# convert channel to frequency
|
||||
@@ -642,7 +701,7 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
|
||||
[ -n "$country" ] && {
|
||||
iw reg get | grep -q "^country $country:" || {
|
||||
@@ -958,6 +1079,7 @@ drv_mac80211_setup() {
|
||||
@@ -958,6 +1101,7 @@ drv_mac80211_setup() {
|
||||
set_default txantenna 0xffffffff
|
||||
set_default distance 0
|
||||
set_default antenna_gain 0
|
||||
@@ -650,6 +709,15 @@ index 9a9c35fb5f..a25e4ff9b2 100644
|
||||
|
||||
[ "$txantenna" = "all" ] && txantenna=0xffffffff
|
||||
[ "$rxantenna" = "all" ] && rxantenna=0xffffffff
|
||||
@@ -989,7 +1133,7 @@ drv_mac80211_setup() {
|
||||
mac80211_prepare_iw_htmode
|
||||
for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif
|
||||
NEWAPLIST=
|
||||
- for_each_interface "ap" mac80211_prepare_vif
|
||||
+ for_each_interface "ap" mac80211_prepare_vif ${multiple_bssid}
|
||||
NEW_MD5=$(test -e "${hostapd_conf_file}" && md5sum ${hostapd_conf_file})
|
||||
OLD_MD5=$(uci -q -P /var/state get wireless._${phy}.md5)
|
||||
if [ "${NEWAPLIST}" != "${OLDAPLIST}" ]; then
|
||||
diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
|
||||
index 3e99f06693..6aa46b0c74 100644
|
||||
--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
|
||||
|
||||
@@ -53,6 +53,8 @@ drv_mac80211_init_device_config() {
|
||||
he_spr_sr_control \
|
||||
he_twt_required
|
||||
config_add_int \
|
||||
beamformer_antennas \
|
||||
beamformee_antennas \
|
||||
vht_max_a_mpdu_len_exp \
|
||||
vht_max_mpdu \
|
||||
vht_link_adapt \
|
||||
@@ -294,6 +296,8 @@ mac80211_hostapd_setup_base() {
|
||||
mu_beamformee:1 \
|
||||
vht_txop_ps:1 \
|
||||
htc_vht:1 \
|
||||
beamformee_antennas:4 \
|
||||
beamformer_antennas:4 \
|
||||
rx_antenna_pattern:1 \
|
||||
tx_antenna_pattern:1 \
|
||||
vht_max_a_mpdu_len_exp:7 \
|
||||
@@ -334,6 +338,18 @@ mac80211_hostapd_setup_base() {
|
||||
RX-STBC-123:0x700:0x300:1 \
|
||||
RX-STBC-1234:0x700:0x400:1 \
|
||||
|
||||
[ "$(($vht_cap & 0x800))" -gt 0 -a "$su_beamformer" -gt 0 ] && {
|
||||
cap_ant="$(( ( ($vht_cap >> 16) & 3 ) + 1 ))"
|
||||
[ "$cap_ant" -gt "$beamformer_antennas" ] && cap_ant="$beamformer_antennas"
|
||||
[ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[SOUNDING-DIMENSION-$cap_ant]"
|
||||
}
|
||||
|
||||
[ "$(($vht_cap & 0x1000))" -gt 0 -a "$su_beamformee" -gt 0 ] && {
|
||||
cap_ant="$(( ( ($vht_cap >> 13) & 3 ) + 1 ))"
|
||||
[ "$cap_ant" -gt "$beamformee_antennas" ] && cap_ant="$beamformee_antennas"
|
||||
[ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[BF-ANTENNA-$cap_ant]"
|
||||
}
|
||||
|
||||
# supported Channel widths
|
||||
vht160_hw=0
|
||||
[ "$(($vht_cap & 12))" -eq 4 -a 1 -le "$vht160" ] && \
|
||||
|
||||
Reference in New Issue
Block a user