implement simple device autodetection for wifi drivers
authorFelix Fietkau <nbd@openwrt.org>
Sun, 15 Oct 2006 15:27:34 +0000 (15:27 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 15 Oct 2006 15:27:34 +0000 (15:27 +0000)
SVN-Revision: 5113

package/base-files/brcm-2.4/etc/config/wireless [deleted file]
package/base-files/default/etc/init.d/S40network
package/base-files/default/sbin/wifi
package/broadcom-wl/files/lib/wifi/broadcom.sh

diff --git a/package/base-files/brcm-2.4/etc/config/wireless b/package/base-files/brcm-2.4/etc/config/wireless
deleted file mode 100644 (file)
index 9dc4945..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (C) 2006 OpenWrt.org
-
-config wifi-device     wl0
-       option type     broadcom
-       option channel  5
-
-config wifi-iface
-       option device   wl0
-       option mode             ap
-       option ssid     OpenWrt
-       option hidden   0
-       option encryption none
-
-
index be045045e77ab7ce6afcb12a6e2c56f950f655de..c7720369fda796bcc2a27759d97137025fa0f885 100755 (executable)
@@ -6,6 +6,8 @@ start() {
 
        include /lib/network
        setup_switch
-       /sbin/wifi
+       [ -e /etc/config/wireless ] || \
+               /sbin/wifi detect > /etc/config/wireless
+       /sbin/wifi up
 }
 
index 4a3ec8cfef259c7e620cf78d83210a102ee07fd5..759cfb0a84930c46fd798ac96c4b16efcc71c8ee 100755 (executable)
@@ -3,6 +3,49 @@
 
 . /etc/functions.sh
 
+wifi_up() {
+       for device in ${2:-$DEVICES}; do (
+               config_get iftype "$device" type
+               if eval "type enable_$iftype" 2>/dev/null >/dev/null; then
+                       eval "scan_$iftype '$device'"
+                       eval "enable_$iftype '$device'" || echo "$device($iftype): Setup failed"
+               else
+                       echo "$device($iftype): Interface type not supported"
+               fi
+       ); done
+}
+
+wifi_down() {
+       for device in ${2:-$DEVICES}; do (
+               config_get iftype "$device" type
+               if eval "type disable_$iftype" 2>/dev/null >/dev/null; then
+                       eval "scan_$iftype '$device'"
+                       eval "disable_$iftype '$device'" || echo "$device($iftype): Setup failed"
+               else
+                       echo "$device($iftype): Interface type not supported"
+               fi
+       ); done
+}
+
+wifi_detect() {
+       for driver in ${2:-$DRIVERS}; do (
+               if eval "type detect_$driver" 2>/dev/null >/dev/null; then
+                       eval "detect_$driver" || echo "$driver: Detect failed" >&2
+               else
+                       echo "$driver: Hardware detection not supported" >&2
+               fi
+       ); done
+}
+
+start_net() {(
+       local iface="$1"
+       local config="$2"
+
+       include /lib/network
+       scan_interfaces
+       setup_interface "$1" "$2"
+)}
+
 config_get_bool() {
        local _tmp
        config_get "$1" "$2" "$3"
@@ -29,16 +72,13 @@ config_cb() {
        esac
 }
 
+DEVICES=
+DRIVERS=
 config_load wireless
 include /lib/wifi
 
-for device in $DEVICES; do (
-       config_get iftype "$device" type
-       eval "type setup_$iftype" 2>/dev/null >/dev/null && {
-               eval "scan_$iftype '$device'"
-               eval "setup_$iftype '$device'" && {
-                       # TODO: set up network settings
-                       /bin/true
-               } || echo "$device($iftype): Setup failed" || true
-       } || echo "$device($iftype): Interface type not supported"
-); done
+case "$1" in
+       down) wifi_down "$2";;
+       detect) wifi_detect "$2";;
+       *) wifi_up "$2";;
+esac
index 435c440e2e02bca0b3f2a1046ab91df0eaf8709c..1ce85c4c5f474ef2577a40f6f501bb658dfc57d7 100644 (file)
@@ -1,3 +1,5 @@
+append DRIVERS "broadcom"
+
 bridge_interface() {
        (
                . /etc/functions.sh
@@ -71,8 +73,12 @@ scan_broadcom() {
        esac
 }
 
+disable_broadcom() {
+       wlc down
+       ifconfig wl0 down
+}
 
-setup_broadcom() {
+enable_broadcom() {
        local _c
        config_get channel "$device" channel
        config_get country "$device" country
@@ -175,3 +181,21 @@ EOF
 }
 
 
+detect_broadcom() {
+       [ -f /proc/net/wl0 ] || return
+       config_get type wl0 type
+       [ "$type" = broadcom ] && return
+       cat <<EOF
+config wifi-device  wl0
+       option type     broadcom
+       option channel  5
+
+config wifi-iface
+       option device   wl0
+       option mode     ap
+       option ssid     OpenWrt
+       option hidden   0
+       option encryption none
+
+EOF
+}