From 2d072c599779ce1b76df480b9da7cd3c3e65425c Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 15 Oct 2006 15:27:34 +0000 Subject: [PATCH] implement simple device autodetection for wifi drivers SVN-Revision: 5113 --- .../base-files/brcm-2.4/etc/config/wireless | 14 ----- .../base-files/default/etc/init.d/S40network | 4 +- package/base-files/default/sbin/wifi | 60 +++++++++++++++---- .../broadcom-wl/files/lib/wifi/broadcom.sh | 26 +++++++- 4 files changed, 78 insertions(+), 26 deletions(-) delete mode 100644 package/base-files/brcm-2.4/etc/config/wireless 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 index 9dc4945e07..0000000000 --- a/package/base-files/brcm-2.4/etc/config/wireless +++ /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 - - diff --git a/package/base-files/default/etc/init.d/S40network b/package/base-files/default/etc/init.d/S40network index be045045e7..c7720369fd 100755 --- a/package/base-files/default/etc/init.d/S40network +++ b/package/base-files/default/etc/init.d/S40network @@ -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 } diff --git a/package/base-files/default/sbin/wifi b/package/base-files/default/sbin/wifi index 4a3ec8cfef..759cfb0a84 100755 --- a/package/base-files/default/sbin/wifi +++ b/package/base-files/default/sbin/wifi @@ -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 diff --git a/package/broadcom-wl/files/lib/wifi/broadcom.sh b/package/broadcom-wl/files/lib/wifi/broadcom.sh index 435c440e2e..1ce85c4c5f 100644 --- a/package/broadcom-wl/files/lib/wifi/broadcom.sh +++ b/package/broadcom-wl/files/lib/wifi/broadcom.sh @@ -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 <