broadcom-wl: Add 'N' mode support to broadcom-wl

This is partly based on patches sent by Łukasz Kwestarz (See https://lists.openwrt.org/pipermail/openwrt-devel/2012-March/014356.html).

Signed-off-by: Nathan Hintz <nlhintz@hotmail.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>

SVN-Revision: 37802
This commit is contained in:
Hauke Mehrtens
2013-08-17 13:38:30 +00:00
parent 449d7ef460
commit e12b5ec8df
3 changed files with 76 additions and 11 deletions

View File

@@ -131,6 +131,7 @@ enable_broadcom() {
config_get frag "$device" frag
config_get rts "$device" rts
config_get hwmode "$device" hwmode
config_get htmode "$device" htmode
local vif_pre_up vif_post_up vif_do_up vif_txpower
local doth=0
local wmm=1
@@ -161,15 +162,40 @@ enable_broadcom() {
;;
esac
[ ${channel:-0} -ge 1 -a ${channel:-0} -le 14 ] && band=2
[ ${channel:-0} -ge 36 ] && band=1
case "$hwmode" in
*b) hwmode=0;;
*bg) hwmode=1;;
*g) hwmode=2;;
*gst) hwmode=4;;
*lrs) hwmode=5;;
*) hwmode=1;;
*na) nmode=1; nreqd=0;;
*a) nmode=0;;
*ng) gmode=1; nmode=1; nreqd=0;;
*n) nmode=1; nreqd=1;;
*b) gmode=0; nmode=0;;
*bg) gmode=1; nmode=0;;
*g) gmode=2; nmode=0;;
*gst) gmode=4; nmode=0;;
*lrs) gmode=5; nmode=0;;
*) case "$band" in
2) gmode=1; nmode=1; nreqd=0;;
1) nmode=1; nreqd=0;;
*) gmode=1; nmode=1; nreqd=0;;
esac
;;
esac
# Use 'nmode' for N-Phy only
[ "$(wlc ifname $device phytype)" = 4 ] || nmode=
# Use 'chanspec' instead of 'channel' for 'N' modes (See bcmwifi.h)
[ ${nmode:-0} -ne 0 -a -n "$band" ] && {
case "$htmode" in
HT40-) chanspec=$(printf 0x%x%x%02x $band 0xe $(($channel - 2))); channel=;;
HT40+) chanspec=$(printf 0x%x%x%02x $band 0xd $(($channel + 2))); channel=;;
HT20) chanspec=$(printf 0x%x%x%02x $band 0xb $channel); channel=;;
*) ;;
esac
}
for vif in $vifs; do
config_get vif_txpower "$vif" txpower
@@ -322,7 +348,10 @@ enable_broadcom() {
wlc ifname "$device" stdin <<EOF
$ifdown
gmode ${hwmode:-1}
${nmode:+band ${band:-0}}
${nmode:+nmode $nmode}
${nmode:+${nreqd:+nreqd $nreqd}}
${gmode:+gmode $gmode}
apsta $apsta
ap $ap
${mssid:+mssid $mssid}
@@ -344,6 +373,7 @@ wds none
${wds:+wds $wds}
country ${country:-US}
${channel:+channel $channel}
${chanspec:+chanspec $chanspec}
maxassoc ${maxassoc:-128}
slottime ${slottime:--1}
${frameburst:+frameburst $frameburst}