mac80211: Add some missing 802.11n capabilities to hostapd configuration
authorJohn Crispin <john@openwrt.org>
Wed, 28 Jan 2015 12:07:21 +0000 (12:07 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 28 Jan 2015 12:07:21 +0000 (12:07 +0000)
Add some missing 802.11n capabilities to the hostapd ht_capab string when
supported by the hardware: Spatial Multiplexing Power-Save and 7935-byte AMSDUs.

Signed-off-by: Robert Hancock <hancockrwd@gmail.com>
SVN-Revision: 44173

package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index 1a85d15ed62d8ffe544adb453e7f8563a5324df5..72f9936b40abf619d8a679d8a8abac4d92ce051a 100644 (file)
@@ -42,6 +42,8 @@ drv_mac80211_init_device_config() {
                greenfield \
                short_gi_20 \
                short_gi_40 \
+               smps \
+               max_amsdu \
                dsss_cck_40
 }
 
@@ -130,8 +132,10 @@ mac80211_hostapd_setup_base() {
                        greenfield:0 \
                        short_gi_20:1 \
                        short_gi_40:1 \
+                       smps:1 \
                        tx_stbc:1 \
                        rx_stbc:3 \
+                       max_amsdu:1 \
                        dsss_cck_40:1
 
                ht_cap_mask=0
@@ -139,6 +143,8 @@ mac80211_hostapd_setup_base() {
                        ht_cap_mask="$(($ht_cap_mask | $cap))"
                done
 
+               cap_smps=$((($ht_cap_mask >> 2) & 3))
+
                cap_rx_stbc=$((($ht_cap_mask >> 8) & 3))
                [ "$rx_stbc" -lt "$cap_rx_stbc" ] && cap_rx_stbc="$rx_stbc"
                ht_cap_mask="$(( ($ht_cap_mask & ~(0x300)) | ($cap_rx_stbc << 8) ))"
@@ -152,8 +158,13 @@ mac80211_hostapd_setup_base() {
                        RX-STBC1:0x300:0x100:1 \
                        RX-STBC12:0x300:0x200:1 \
                        RX-STBC123:0x300:0x300:1 \
+                       MAX-AMSDU-7935:0x800::$max_amsdu \
                        DSSS_CCK-40:0x1000::$dsss_cck_40
 
+               # SM Power Save: 0=static, 1=dynamic, 3=disabled
+               [ "$smps" = 1 -a "$cap_smps" = 0 ] && ht_capab_flags="$ht_capab_flags[SMPS-STATIC]"
+               [ "$smps" = 1 -a "$cap_smps" = 1 ] && ht_capab_flags="$ht_capab_flags[SMPS-DYNAMIC]"
+
                ht_capab="$ht_capab$ht_capab_flags"
                [ -n "$ht_capab" ] && append base_cfg "ht_capab=$ht_capab" "$N"
        }