merge r13031 to 8.09
[openwrt/svn-archive/archive.git] / package / madwifi / files / lib / wifi / madwifi.sh
index a3bab5b8f081b4641a4b630d760084f3abaef26f..379ec0747b437db4cdbcb635363b1305d9dcc302 100755 (executable)
@@ -85,7 +85,10 @@ enable_atheros() {
                config_get eap_type "$vif" eap_type
                config_get mode "$vif" mode
                
-               [ "$mode" = sta ] && config_get nosbeacon "$device" nosbeacon
+               case "$mode" in
+                       sta) config_get nosbeacon "$device" nosbeacon;;
+                       adhoc) config_get nosbeacon "$vif" sw_merge;;
+               esac
                
                config_get ifname "$vif" ifname
                ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon})
@@ -171,13 +174,45 @@ enable_atheros() {
                [ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan"
 
                config_get_bool antdiv "$device" diversity
-               [ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
-
                config_get antrx "$device" rxantenna
-               [ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
-
                config_get anttx "$device" txantenna
+               config_get_bool softled "$device" softled 1
+
+               devname="$(cat /proc/sys/dev/$device/dev_name)"
+               antgpio=
+               case "$devname" in
+                       NanoStation2) antgpio=7;;
+                       NanoStation5) antgpio=1;;
+               esac
+               if [ -n "$antgpio" ]; then
+                       softled=0
+                       config_get polarity "$device" polarity
+                       case "$polarity" in
+                               horizontal) antdiv=0; antrx=1; anttx=1 ;;
+                               vertical) antdiv=0; antrx=2; anttx=2 ;;
+                               auto) antdiv=1; antrx=0; anttx=0 ;;
+                       esac
+                       config_get antenna "$device" antenna
+                       [ -x "$(which gpioctl 2>/dev/null)" ] || antenna=
+                       case "$antenna" in
+                               internal)
+                                       gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+                                       gpioctl "set" "$antgpio" >/dev/null 2>&1
+                               ;;
+                               external)
+                                       gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+                                       gpioctl "clear" "$antgpio" >/dev/null 2>&1
+                                       antdiv=0
+                                       antrx=1
+                                       anttx=1
+                               ;;
+                       esac
+               fi
+
+               [ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
+               [ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
                [ -n "$anttx" ] && sysctl -w dev."$device".txantenna="$anttx" >&-
+               [ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&-
 
                config_get distance "$device" distance
                [ -n "$distance" ] && athctrl -i "$device" -d "$distance" >&-
@@ -255,6 +290,7 @@ enable_atheros() {
                        config_set "$vif" bridge "$bridge"
                        start_net "$ifname" "$net_cfg"
                }
+               [ -n "$ssid" ] && iwconfig "$ifname" essid on
                iwconfig "$ifname" essid "$ssid"
                set_wifi_up "$vif" "$ifname"
                case "$mode" in
@@ -293,12 +329,22 @@ detect_atheros() {
        [ -d ath ] || return
        for dev in $(ls -d wifi* 2>&-); do
                config_get type "$dev" type
+               devname="$(cat /proc/sys/dev/$dev/dev_name)"
+               case "$devname" in
+                       NanoStation*)
+                               EXTRA_DEV="
+# Ubiquiti NanoStation features
+       option antenna  internal
+       option polarity auto # (auto|horizontal|vertical)
+"
+                       ;;
+               esac
                [ "$type" = atheros ] && return
                cat <<EOF
 config wifi-device  $dev
        option type     atheros
        option channel  auto
-
+$EXTRA_DEV
        # REMOVE THIS LINE TO ENABLE WIFI:
        option disabled 1