branding: add LEDE branding
[openwrt/openwrt.git] / package / kernel / broadcom-wl / files / lib / wifi / broadcom.sh
index 892a415b6f8d14201412afd0e7fac0ad21874f1a..deb4ddf1d2dd3413f154d11edcfdaf339f33c616 100644 (file)
@@ -50,12 +50,6 @@ scan_broadcom() {
        done
        config_set "$device" vifs "${adhoc_if:-$sta_if $ap_if $mon_if}"
 
-       ifdown="down"
-       for vif in 0 1 2 3; do
-               append ifdown "vif $vif" "$N"
-               append ifdown "enabled 0" "$N"
-       done
-
        ap=1
        infra=1
        if [ "$_c" -gt 1 ]; then
@@ -96,7 +90,6 @@ scan_broadcom() {
 disable_broadcom() {
        local device="$1"
        set_wifi_down "$device"
-       wlc ifname "$device" down
        (
                include /lib/network
 
@@ -104,12 +97,31 @@ disable_broadcom() {
                [ -e $pid_file ] && start-stop-daemon -K -q -s SIGKILL -p $pid_file && rm $pid_file
 
                # make sure the interfaces are down and removed from all bridges
-               local dev
-               for dev in $device ${device}-1 ${device}-2 ${device}-3; do
-                       ifconfig "$dev" down 2>/dev/null >/dev/null && {
-                               unbridge "$dev"
-                       }
+               local dev ifname
+               for dev in /sys/class/net/wds${device##wl}-* /sys/class/net/${device}-* /sys/class/net/${device}; do
+                       if [ -e "$dev" ]; then
+                               ifname=${dev##/sys/class/net/}
+                               ip link set dev "$ifname" down
+                               unbridge "$ifname"
+                       fi
+               done
+
+               # make sure all of the devices are disabled in the driver
+               local ifdown=
+               local bssmax=$(wlc ifname "$device" bssmax)
+               local vif=$((${bssmax:-4} - 1))
+               append ifdown "down" "$N"
+               append ifdown "wds none" "$N"
+               while [ $vif -ge 0 ]; do
+                       append ifdown "vif $vif" "$N"
+                       append ifdown "enabled 0" "$N"
+                       vif=$(($vif - 1))
                done
+
+               wlc ifname "$device" stdin <<EOF
+$ifdown
+leddc 0xffff
+EOF
        )
        true
 }
@@ -187,21 +199,39 @@ enable_broadcom() {
        }
 
        # Use 'chanspec' instead of 'channel' for 'N' modes (See bcmwifi.h)
-       [ ${nmode:-0} -ne 0 -a -n "$band" -a -n "$channel" ] && {
+       [ -n "$nmode" -a -n "$band" -a -n "$channel" ] && {
                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=;;
+                       HT40)
+                               if [ -n "$gmode" ]; then
+                                       [ $channel -lt 7 ] && htmode="HT40+" || htmode="HT40-"
+                               else
+                                       [ $(( ($channel / 4) % 2 )) -eq 1 ] && htmode="HT40+" || htmode="HT40-"
+                               fi
+                       ;;
+               esac
+               case "$htmode" in
+                       HT40-)  chanspec=$(printf 0x%x%x%02x $band 0xe $(($channel - 2))); nmode=1; channel=;;
+                       HT40+)  chanspec=$(printf 0x%x%x%02x $band 0xd $(($channel + 2))); nmode=1; channel=;;
+                       HT20)   chanspec=$(printf 0x%x%x%02x $band 0xb $channel); nmode=1; channel=;;
                        *) ;;
                esac
        }
 
+       local leddc=$(wlc ifname "$device" leddc)
+       [ $((leddc)) -eq $((0xffff)) ] && {
+               leddc=0x005a000a;
+       }
+
        local _c=0
        local nas="$(which nas)"
        local if_pre_up if_up nas_cmd
        local vif vif_pre_up vif_post_up vif_do_up vif_txpower
+       local bssmax=$(wlc ifname "$device" bssmax)
+       bssmax=${bssmax:-4}
 
        for vif in $vifs; do
+               [ $_c -ge $bssmax ] && break
+
                config_get vif_txpower "$vif" txpower
 
                local mode
@@ -342,10 +372,12 @@ enable_broadcom() {
                local if_cmd="if_pre_up"
                [ "$ifname" != "${ifname##${device}-}" ] && if_cmd="if_up"
                append $if_cmd "macaddr=\$(wlc ifname '$ifname' cur_etheraddr)" ";$N"
-               append $if_cmd "ifconfig '$ifname' \${macaddr:+hw ether \$macaddr}" ";$N"
+               append $if_cmd "ip link set dev '$ifname' address \$macaddr" ";$N"
+               append if_up "ip link set dev '$ifname' up" ";$N"
 
                local net_cfg="$(find_net_config "$vif")"
                [ -z "$net_cfg" ] || {
+                       ubus -t 30 wait_for network.interface."$net_cfg"
                        append if_up "set_wifi_up '$vif' '$ifname'" ";$N"
                        append if_up "start_net '$ifname' '$net_cfg'" ";$N"
                }
@@ -362,14 +394,13 @@ enable_broadcom() {
                _c=$(($_c + 1))
        done
        wlc ifname "$device" stdin <<EOF
-$ifdown
-
 ${macaddr:+bssid $macaddr}
 ${macaddr:+cur_etheraddr $macaddr}
 band ${band:-0}
 ${nmode:+nmode $nmode}
 ${nmode:+${nreqd:+nreqd $nreqd}}
 ${gmode:+gmode $gmode}
+leddc $leddc
 apsta $apsta
 ap $ap
 ${mssid:+mssid $mssid}
@@ -387,7 +418,6 @@ monitor ${monitor:-0}
 radio ${radio:-1}
 macfilter ${macfilter:-0}
 maclist ${maclist:-none}
-wds none
 ${wds:+wds $wds}
 country ${country:-US}
 ${channel:+channel $channel}
@@ -430,7 +460,8 @@ detect_broadcom() {
 config wifi-device  wl${i}
        option type     broadcom
        option channel  ${channel:-11}
-
+       option txantenna 3
+       option rxantenna 3
        # REMOVE THIS LINE TO ENABLE WIFI:
        option disabled 1
 
@@ -438,7 +469,7 @@ config wifi-iface
        option device   wl${i}
        option network  lan
        option mode     ap
-       option ssid     OpenWrt${i#0}
+       option ssid     Lede${i#0}
        option encryption none
 
 EOF