From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Marco d'Itri" Date: Thu, 05 Feb 2004 01:05:07 +0000 Subject: hotplug patches: fixes and sysfs support Message-Id: <20040205010507.GA12825@wonderland.linux.it> MIME-Version: 1 Content-Type: multipart/mixed; boundary="a8Wt8u1KmwUX3Y2C" List-Id: To: linux-hotplug@vger.kernel.org --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 000_small_fixes: fixes for some small bugs. 001_no_bashisms: removes bashisms from all scripts. 003_no_useless_includes: remove some unused code. 004_2.6_pci_synthesis: adds sysfs support to pci.rc. Please review the usb.rc changes, there are some FIXME comments. -- ciao, | Marco | [4466 diwYqAwSWjuYU] --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=000_small_fixes diff -ruN hotplug-2004_01_05.orig/etc/hotplug/ieee1394.agent hotplug-2004_01_05/etc/hotplug/ieee1394.agent --- hotplug-2004_01_05.orig/etc/hotplug/ieee1394.agent 2003-09-16 21:42:17.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/ieee1394.agent 2004-02-04 20:53:28.000000000 +0100 @@ -98,7 +98,7 @@ load_drivers ieee1394 $MAP_CURRENT "$LABEL" fi - if [ "$DRIVERS" == "" ]; then + if [ "$DRIVERS" = "" ]; then mesg "... no drivers for $LABEL" exit 2 fi diff -ruN hotplug-2004_01_05.orig/etc/hotplug/input.agent hotplug-2004_01_05/etc/hotplug/input.agent --- hotplug-2004_01_05.orig/etc/hotplug/input.agent 2003-10-14 01:46:58.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/input.agent 2004-02-04 20:58:05.000000000 +0100 @@ -154,7 +154,7 @@ declare -i matchBits declare -i bustype vendor product version declare -i evBits driverInfo - declare relBits mscBits ledBits sndBitskeyBits absBits ffBits + declare relBits mscBits ledBits sndBits keyBits absBits ffBits while read line do @@ -172,7 +172,7 @@ bustype="$3" vendor="$4" product="$5" - product="$6" + version="$6" evBits="$7" keyBits="$8" diff -ruN hotplug-2004_01_05.orig/etc/hotplug/pci.agent hotplug-2004_01_05/etc/hotplug/pci.agent --- hotplug-2004_01_05.orig/etc/hotplug/pci.agent 2003-09-16 21:42:17.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/pci.agent 2004-02-04 20:53:28.000000000 +0100 @@ -154,7 +154,7 @@ load_drivers pci $MAP_CURRENT "$LABEL" fi - if [ "$DRIVERS" == "" ]; then + if [ "$DRIVERS" = "" ]; then mesg "... no modules for $LABEL" exit 2 fi diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.agent hotplug-2004_01_05/etc/hotplug/usb.agent --- hotplug-2004_01_05.orig/etc/hotplug/usb.agent 2003-10-14 01:52:54.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/usb.agent 2004-02-04 20:53:28.000000000 +0100 @@ -195,9 +195,9 @@ usb_bDeviceProtocol=$3 IFS="$DEFAULT_IFS" elif [ -r $SYSFS/$DEVPATH/bDeviceClass ]; then - usb_bDeviceClass=0x$(cat $SYSFS/$DEVPATH/bDeviceClass) - usb_bDeviceSubClass=0x$(cat $SYSFS/$DEVPATH/bDeviceSubClass) - usb_bDeviceProtocol=0x$(cat $SYSFS/$DEVPATH/bDeviceProtocol) + usb_bDeviceClass=$(cat $SYSFS/$DEVPATH/bDeviceClass) + usb_bDeviceSubClass=$(cat $SYSFS/$DEVPATH/bDeviceSubClass) + usb_bDeviceProtocol=$(cat $SYSFS/$DEVPATH/bDeviceProtocol) else # out-of-range values usb_bDeviceClass=1000 @@ -213,9 +213,9 @@ usb_bInterfaceProtocol=$3 IFS="$DEFAULT_IFS" elif [ -r $SYSFS/$DEVPATH/bInterfaceClass ]; then - usb_bInterfaceClass=0x$(cat $SYSFS/$DEVPATH/bInterfaceClass) - usb_bInterfaceSubClass=0x$(cat $SYSFS/$DEVPATH/bInterfaceSubClass) - usb_bInterfaceProtocol=0x$(cat $SYSFS/$DEVPATH/bInterfaceProtocol) + usb_bInterfaceClass=$(cat $SYSFS/$DEVPATH/bInterfaceClass) + usb_bInterfaceSubClass=$(cat $SYSFS/$DEVPATH/bInterfaceSubClass) + usb_bInterfaceProtocol=$(cat $SYSFS/$DEVPATH/bInterfaceProtocol) else # out-of-range values usb_bInterfaceClass=1000 diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.rc hotplug-2004_01_05/etc/hotplug/usb.rc --- hotplug-2004_01_05.orig/etc/hotplug/usb.rc 2003-09-25 02:09:08.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/usb.rc 2004-02-04 20:53:28.000000000 +0100 @@ -21,6 +21,9 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin +unset I_WANT_A_BROKEN_PS +PS_PERSONALITY=linux + STATIC_MODULE_LIST= X11_USBMICE_HACK=false --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=001_no_bashisms diff -ruN hotplug-2004_01_05.orig/etc/hotplug/firmware.agent hotplug-2004_01_05/etc/hotplug/firmware.agent --- hotplug-2004_01_05.orig/etc/hotplug/firmware.agent 2003-10-07 21:34:19.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/firmware.agent 2004-02-03 01:21:16.000000000 +0100 @@ -16,7 +16,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # DEBUG=yes export DEBUG # directory of the firmware files diff -ruN hotplug-2004_01_05.orig/etc/hotplug/hotplug.functions hotplug-2004_01_05/etc/hotplug/hotplug.functions --- hotplug-2004_01_05.orig/etc/hotplug/hotplug.functions 2003-10-07 23:15:38.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/hotplug.functions 2004-02-03 01:21:19.000000000 +0100 @@ -32,7 +32,7 @@ # # for diagnostics # -if [ -t -o -z "$LOGGER" ]; then +if [ -t 1 -o -z "$LOGGER" ]; then mesg () { echo "$@" } @@ -47,17 +47,6 @@ mesg "$@" } -# -# The modules.*map parsing uses BASH ("declare -i") and some version -# of AWK, typically /bin/gawk. Most GNU/Linux distros have these, -# but some specialized ones (floppy based, etc) may not. ("type -p" -# is also a bash-ism, more robust than "which".) -# -AWK=`type -p gawk` -if [ "$AWK" = "" ]; then - AWK=`type -p awk` -fi - # # Not "modprobe --autoclean" ... one driver module can handle many @@ -92,7 +81,7 @@ # ought to expose the data we need to find all candidate drivers. # (on 2.5.48 it does for usb; but maybe not yet for pci.) case "$KERNEL" in - 2.2*|2.3*|2.4*) LISTER=`type -p ${TYPE}modules` ;; + 2.2*|2.3*|2.4*) LISTER=`which ${TYPE}modules` ;; *) LISTER="" ;; esac diff -ruN hotplug-2004_01_05.orig/etc/hotplug/ieee1394.agent hotplug-2004_01_05/etc/hotplug/ieee1394.agent --- hotplug-2004_01_05.orig/etc/hotplug/ieee1394.agent 2004-02-03 01:21:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/ieee1394.agent 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # IEEE1394-specific hotplug policy agent. # @@ -24,7 +24,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # DEBUG=yes export DEBUG # generated by modutils 2.4.9 or later, for 2.4.10 and later kernels @@ -39,12 +39,10 @@ fi -declare -i device_vendor_id device_specifier_id device_version -device_vendor_id="0x$VENDOR_ID" -device_specifier_id="0x$SPECIFIER_ID" -device_version="0x$VERSION" +device_vendor_id=$((0x$VENDOR_ID)) +device_specifier_id=$((0x$SPECIFIER_ID)) +device_version=$((0x$VERSION)) -declare -i MATCH_VENDOR_ID MATCH_SPECIFIER_ID MATCH_VERSION MATCH_VENDOR_ID=0x0001 MATCH_SPECIFIER_ID=0x0004 MATCH_VERSION=0x0008 @@ -56,8 +54,11 @@ ieee1394_map_modules () { local module ignored - declare -i match_flags vendor_id model_id - declare -i specifier_id version + + # convert from hex to dec + match_flags=$(($match_flags)) + vendor_id=$(($vendor_id)); model_id=$(($model_id)) + specifier_id=$(($specifier_id)); version=$(($version)) # comment line lists (current) pci_device_id field names read ignored diff -ruN hotplug-2004_01_05.orig/etc/hotplug/input.agent hotplug-2004_01_05/etc/hotplug/input.agent --- hotplug-2004_01_05.orig/etc/hotplug/input.agent 2003-10-14 01:46:58.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/input.agent 2004-02-03 01:21:21.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # input-specific hotplug policy agent. # @@ -30,7 +30,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # DEBUG=yes export DEBUG # generated by module-init-tools @@ -51,21 +51,18 @@ # Each modules.inputmap format line corresponds to one entry in a # MODULE_DEVICE_TABLE(input,...) declaration in a kernel file. # -declare -i matchBits=0 -declare -i i_bustype=0 i_vendor=0 i_product=0 i_version=0 -declare -i i_evBits=0 -declare i_keyBits i_relBits i_absBits i_mscBits i_ledBits i_sndBits i_ffBits +matchBits=0; i_bustype=0; i_vendor=0; i_product=0; i_version=0; i_evBits=0 input_join_words () { - declare name=$1 array=$2 tmp + local name="$1" array="$2" tmp if [ "$array" = '' ]; then return fi set $array - tmp=$1 + tmp="$1" shift while [ "$#" -gt 0 ]; do tmp="$tmp:$1" @@ -81,14 +78,14 @@ IFS=/ set $PRODUCT '' IFS="$DEFAULT_IFS" - i_bustype=0x$1 - i_vendor=0x$2 - i_product=0x$3 - i_version=0x$4 + i_bustype=$((0x$1)) + i_vendor=$((0x$2)) + i_product=$((0x$3)) + i_version=$((0x$4)) fi if [ "$EV" != "" ]; then - i_evBits=0x$EV + i_evBits=$((0x$EV)) fi input_join_words i_keyBits "$KEY" @@ -100,27 +97,26 @@ input_join_words i_ffBits "$FF" } -declare -i INPUT_DEVICE_ID_MATCH_BUS=1 -declare -i INPUT_DEVICE_ID_MATCH_VENDOR=2 -declare -i INPUT_DEVICE_ID_MATCH_PRODUCT=4 -declare -i INPUT_DEVICE_ID_MATCH_VERSION=8 -declare -i INPUT_DEVICE_ID_MATCH_EVBIT=0x010 -declare -i INPUT_DEVICE_ID_MATCH_KEYBIT=0x020 -declare -i INPUT_DEVICE_ID_MATCH_RELBIT=0x040 -declare -i INPUT_DEVICE_ID_MATCH_ABSBIT=0x080 -declare -i INPUT_DEVICE_ID_MATCH_MSCBIT=0x100 -declare -i INPUT_DEVICE_ID_MATCH_LEDBIT=0x200 -declare -i INPUT_DEVICE_ID_MATCH_SNDBIT=0x400 -declare -i INPUT_DEVICE_ID_MATCH_FFBIT=0x800 +INPUT_DEVICE_ID_MATCH_BUS=1 +INPUT_DEVICE_ID_MATCH_VENDOR=2 +INPUT_DEVICE_ID_MATCH_PRODUCT=4 +INPUT_DEVICE_ID_MATCH_VERSION=8 +INPUT_DEVICE_ID_MATCH_EVBIT=$((0x010)) +INPUT_DEVICE_ID_MATCH_KEYBIT=$((0x020)) +INPUT_DEVICE_ID_MATCH_RELBIT=$((0x040)) +INPUT_DEVICE_ID_MATCH_ABSBIT=$((0x080)) +INPUT_DEVICE_ID_MATCH_MSCBIT=$((0x100)) +INPUT_DEVICE_ID_MATCH_LEDBIT=$((0x200)) +INPUT_DEVICE_ID_MATCH_SNDBIT=$((0x400)) +INPUT_DEVICE_ID_MATCH_FFBIT=$((0x800)) input_match_bits () { - declare mod_bits=$1 dev_bits=$2 - declare -i mword dword + local mod_bits=$1 dev_bits=$2 - mword=0x${mod_bits##*:} - dword=0x${dev_bits##*:} + mword=$((0x${mod_bits##*:})) + dword=$((0x${dev_bits##*:})) while true; do if [ $(( $mword & $dword != $mword )) -eq 1 ]; then @@ -151,10 +147,7 @@ input_map_modules () { local line module - declare -i matchBits - declare -i bustype vendor product version - declare -i evBits driverInfo - declare relBits mscBits ledBits sndBits keyBits absBits ffBits + local relBits mscBits ledBits sndBits keyBits absBits ffBits while read line do @@ -167,24 +160,24 @@ set $line module="$1" - matchBits="$2" + matchBits=$(($2)) - bustype="$3" - vendor="$4" - product="$5" - version="$6" - - evBits="$7" - keyBits="$8" - relBits="$9" + bustype=$(($3)) + vendor=$(($4)) + product=$(($5)) + version=$(($6)) + + evBits=$(($7)) + keyBits=$(($8)) + relBits=$(($9)) shift 9 - absBits="$1" - cbsBits="$2" - ledBits="$3" - sndBits="$4" - ffBits="$5" - driverInfo="$6" + absBits=$(($1)) + cbsBits=$(($2)) + ledBits=$(($3)) + sndBits=$(($4)) + ffBits=$(($5)) + driverInfo=$(($6)) : checkmatch $module diff -ruN hotplug-2004_01_05.orig/etc/hotplug/input.rc hotplug-2004_01_05/etc/hotplug/input.rc --- hotplug-2004_01_05.orig/etc/hotplug/input.rc 2003-10-14 01:46:58.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/input.rc 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # input.rc This loads handlers for those input devices # that have drivers compiled in kernel @@ -61,7 +61,7 @@ export PRODUCT NAME PHYS EV KEY REL ABS MSC LED SND FF input_reset_state - declare line + local line # # the following reads from /proc/bus/input/devices. It is inherently diff -ruN hotplug-2004_01_05.orig/etc/hotplug/net.agent hotplug-2004_01_05/etc/hotplug/net.agent --- hotplug-2004_01_05.orig/etc/hotplug/net.agent 2003-10-07 21:56:24.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/net.agent 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # Network hotplug policy agent for Linux 2.4 kernels # @@ -17,7 +17,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # DEBUG=yes export DEBUG if [ "$INTERFACE" = "" ]; then diff -ruN hotplug-2004_01_05.orig/etc/hotplug/pci.agent hotplug-2004_01_05/etc/hotplug/pci.agent --- hotplug-2004_01_05.orig/etc/hotplug/pci.agent 2004-02-03 01:21:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/pci.agent 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # PCI-specific hotplug policy agent. # @@ -33,7 +33,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # generated by modutils, for current 2.4.x kernels MAP_CURRENT=$MODULE_DIR/modules.pcimap @@ -57,31 +57,20 @@ # extra filtering. # -# inputs to the match algorithm, from kernel by way of /sbin/hotplug -declare -i pci_class -declare -i pci_id_vendor pci_id_device -declare -i pci_subid_vendor pci_subid_device - pci_convert_vars () { - if [ "$AWK" = "" ]; then - mesg "can't find awk!" - exit 1 - fi + pci_class=$((0x$PCI_CLASS)) - pci_class=0x$PCI_CLASS - - set `echo $PCI_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` '' - pci_id_vendor=$1 - pci_id_device=$2 - - set `echo $PCI_SUBSYS_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` '' - pci_subid_vendor=$1 - pci_subid_device=$2 + set $(echo $PCI_ID | sed -e 's/\([^:]*\):\(.*\)/\1 \2/') + pci_id_vendor=$((0x$1)) + pci_id_device=$((0x$2)) + + set $(echo $PCI_SUBSYS_ID | sed -e 's/\([^:]*\):\(.*\)/\1 \2/') + pci_subid_vendor=$((0x$1)) + pci_subid_device=$((0x$2)) } -declare -i PCI_ANY -PCI_ANY=0xffffffff +PCI_ANY=$((0xffffffff)) # @@ -90,12 +79,7 @@ # pci_map_modules () { - # convert the usb_device_id fields to integers as we read them local module ignored - declare -i vendor device - declare -i subvendor subdevice - declare -i class class_mask - declare -i class_temp # comment line lists (current) pci_device_id field names read ignored @@ -110,6 +94,11 @@ \#*) continue ;; esac + # convert the fields from hex to dec + vendor=$(($vendor)); device=$(($device)) + subvendor=$(($subvendor)); subdevice=$(($subdevice)) + class=$(($class)); class_mask=$(($class_mask)) + : checkmatch $module : vendor $vendor $pci_id_vendor @@ -129,7 +118,7 @@ continue fi - class_temp="$pci_class & $class_mask" + class_temp=$(($pci_class & $class_mask)) if [ $class_temp -eq $class ]; then DRIVERS="$module $DRIVERS" : drivers $DRIVERS diff -ruN hotplug-2004_01_05.orig/etc/hotplug/pci.rc hotplug-2004_01_05/etc/hotplug/pci.rc --- hotplug-2004_01_05.orig/etc/hotplug/pci.rc 2003-06-28 02:13:10.000000000 +0200 +++ hotplug-2004_01_05/etc/hotplug/pci.rc 2004-02-03 01:21:16.000000000 +0100 @@ -17,7 +17,7 @@ . /etc/rc.d/init.d/functions fi -. hotplug.functions +. ./hotplug.functions # # override any of the defaults? @@ -32,7 +32,7 @@ # information, and more can be gotten with 'lspci'. # don't expect pcimodules to exist!! # - LISTER=`type -p pcimodules` + LISTER=`which pcimodules` if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then echo $"** can't synthesize pci hotplug events" return diff -ruN hotplug-2004_01_05.orig/etc/hotplug/scsi.agent hotplug-2004_01_05/etc/hotplug/scsi.agent --- hotplug-2004_01_05.orig/etc/hotplug/scsi.agent 2002-12-11 23:05:06.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/scsi.agent 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # SCSI hotplug agent for 2.5 kernels # @@ -7,7 +7,7 @@ # cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions case $ACTION in diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.agent hotplug-2004_01_05/etc/hotplug/usb.agent --- hotplug-2004_01_05.orig/etc/hotplug/usb.agent 2004-02-03 01:21:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/usb.agent 2004-02-03 01:21:16.000000000 +0100 @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # # USB-specific hotplug policy agent. # @@ -79,7 +79,7 @@ fi cd /etc/hotplug -. hotplug.functions +. ./hotplug.functions # DEBUG=yes export DEBUG # generated by modutils, for current 2.4.x (and later) kernels @@ -165,27 +165,19 @@ # mechanism, but some driver probe() routines need to provide # extra filtering. # -declare -i usb_idVendor usb_idProduct usb_bcdDevice -declare -i usb_bDeviceClass usb_bDeviceSubClass usb_bDeviceProtocol -declare -i usb_bInterfaceClass usb_bInterfaceSubClass usb_bInterfaceProtocol usb_convert_vars () { - if [ "$AWK" = "" ]; then - mesg "can't find awk!" - exit 1 - fi - # work around 2.2.early brokenness # munges the usb_bcdDevice such that it is a integer rather # than a float: e.g. 1.0 become 0100 PRODUCT=`echo $PRODUCT | sed -e "s+\.\([0-9]\)$+.\10+" -e "s/\.$/00/" \ -e "s+/\([0-9]\)\.\([0-9][0-9]\)+/0\1\2+" \ -e "s+/\([0-9][0-9]\)\.\([0-9][0-9]\)+/\1\2+"` - set `echo $PRODUCT | $AWK -F/ '{print "0x" $1, "0x" $2, "0x" $3 }'` '' - usb_idVendor=$1 - usb_idProduct=$2 - usb_bcdDevice=$3 + set $(echo $PRODUCT | sed -e 's+\([^/]*\)/\([^/]*\)/\(.*\)+\1 \2 \3+') + usb_idVendor=$((0x$1)) + usb_idProduct=$((0x$2)) + usb_bcdDevice=$((0x$3)) if [ "$TYPE" != "" ]; then IFS=/ @@ -224,16 +216,16 @@ fi } -declare -i USB_MATCH_VENDOR=0x0001 -declare -i USB_MATCH_PRODUCT=0x0002 -declare -i USB_MATCH_DEV_LO=0x0004 -declare -i USB_MATCH_DEV_HI=0x0008 -declare -i USB_MATCH_DEV_CLASS=0x0010 -declare -i USB_MATCH_DEV_SUBCLASS=0x0020 -declare -i USB_MATCH_DEV_PROTOCOL=0x0040 -declare -i USB_MATCH_INT_CLASS=0x0080 -declare -i USB_MATCH_INT_SUBCLASS=0x0100 -declare -i USB_MATCH_INT_PROTOCOL=0x0200 +USB_MATCH_VENDOR=$((0x0001)) +USB_MATCH_PRODUCT=$((0x0002)) +USB_MATCH_DEV_LO=$((0x0004)) +USB_MATCH_DEV_HI=$((0x0008)) +USB_MATCH_DEV_CLASS=$((0x0010)) +USB_MATCH_DEV_SUBCLASS=$((0x0020)) +USB_MATCH_DEV_PROTOCOL=$((0x0040)) +USB_MATCH_INT_CLASS=$((0x0080)) +USB_MATCH_INT_SUBCLASS=$((0x0100)) +USB_MATCH_INT_PROTOCOL=$((0x0200)) # # stdin is "modules.usbmap" syntax @@ -241,12 +233,7 @@ # usb_map_modules () { - # convert the usb_device_id fields to integers as we read them local line module - declare -i match_flags - declare -i idVendor idProduct bcdDevice_lo bcdDevice_hi - declare -i bDeviceClass bDeviceSubClass bDeviceProtocol - declare -i bInterfaceClass bInterfaceSubClass bInterfaceProtocol # look at each usb_device_id entry # collect all matches in $DRIVERS @@ -262,21 +249,21 @@ set $line module=$1 - match_flags=$2 + match_flags=$(($2)) - idVendor=$3 - idProduct=$4 - bcdDevice_lo=$5 - bcdDevice_hi=$6 - - bDeviceClass=$7 - bDeviceSubClass=$8 - bDeviceProtocol=$9 + idVendor=$(($3)) + idProduct=$(($4)) + bcdDevice_lo=$(($5)) + bcdDevice_hi=$(($6)) + + bDeviceClass=$(($7)) + bDeviceSubClass=$(($8)) + bDeviceProtocol=$(($9)) shift 9 - bInterfaceClass=$1 - bInterfaceSubClass=$2 - bInterfaceProtocol=$3 + bInterfaceClass=$(($1)) + bInterfaceSubClass=$(($2)) + bInterfaceProtocol=$(($3)) : checkmatch $module @@ -350,10 +337,11 @@ # remover, or that the remove action can use to execute a remover. # if [ "$DEVICE" = "" ]; then - declare -rx REMOVER=/var/run/usb/`echo "$INTERFACE/$PRODUCT/$TYPE" | sed -e 's;/;%;g'` + REMOVER=/var/run/usb/`echo "$INTERFACE/$PRODUCT/$TYPE" | sed -e 's;/;%;g'` else - declare -rx REMOVER=/var/run/usb/`echo $DEVICE | sed -e 's;/;%;g'` + REMOVER=/var/run/usb/`echo $DEVICE | sed -e 's;/;%;g'` fi +export REMOVER # # What to do with this USB hotplug event? diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.rc hotplug-2004_01_05/etc/hotplug/usb.rc --- hotplug-2004_01_05.orig/etc/hotplug/usb.rc 2004-02-03 01:21:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/usb.rc 2004-02-03 01:21:16.000000000 +0100 @@ -79,7 +79,7 @@ # synthesize hotplug events if we can # we need (non-bash) programs to parse descriptors. - LISTER=`type -p usbmodules` + LISTER=`which usbmodules` if [ "$LISTER" = "" -o ! -f /proc/bus/usb/devices ]; then echo $"** can't synthesize root hub events" return --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=003_no_useless_includes diff -ruN hotplug-2004_01_05.orig/etc/hotplug/pci.rc hotplug-2004_01_05/etc/hotplug/pci.rc --- hotplug-2004_01_05.orig/etc/hotplug/pci.rc 2004-02-01 17:36:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/pci.rc 2004-02-01 17:34:59.000000000 +0100 @@ -9,22 +9,8 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin cd /etc/hotplug - -# source function library -if [ -f /etc/init.d/functions ]; then - . /etc/init.d/functions -elif [ -f /etc/rc.d/init.d/functions ]; then - . /etc/rc.d/init.d/functions -fi - . ./hotplug.functions - -# # override any of the defaults? -# if [ -f /etc/sysconfig/pci ]; then -# . /etc/sysconfig/pci -# fi - pci_boot_events () { # diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.rc hotplug-2004_01_05/etc/hotplug/usb.rc --- hotplug-2004_01_05.orig/etc/hotplug/usb.rc 2004-02-01 17:36:26.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/usb.rc 2004-02-01 17:36:19.000000000 +0100 @@ -27,14 +27,6 @@ STATIC_MODULE_LIST= X11_USBMICE_HACK=false -# source function library -if [ -f /etc/init.d/functions ]; then - . /etc/init.d/functions -elif [ -f /etc/rc.d/init.d/functions ]; then - . /etc/rc.d/init.d/functions -fi - - # override any of the defaults above? if [ -f /etc/sysconfig/usb ]; then . /etc/sysconfig/usb --a8Wt8u1KmwUX3Y2C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="004_2.6_pci_synthesis" diff -ruN hotplug-2004_01_05.orig/etc/hotplug/pci.rc hotplug-2004_01_05/etc/hotplug/pci.rc --- hotplug-2004_01_05.orig/etc/hotplug/pci.rc 2004-02-01 18:00:45.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/pci.rc 2004-02-01 17:49:59.000000000 +0100 @@ -13,33 +13,51 @@ pci_boot_events () { - # - # FIXME on 2.5, /sys/bus/pci/devices gives some of this - # information, and more can be gotten with 'lspci'. - # don't expect pcimodules to exist!! - # - LISTER=`which pcimodules` - if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then - echo $"** can't synthesize pci hotplug events" - return - fi - # make sure the pci agent will run ACTION=add PCI_CLASS=0 PCI_ID=0:0 PCI_SLOT=0:0.0 + PCI_SLOT_NAME=0:0.0 PCI_SUBSYS_ID=0:0 - export ACTION PCI_CLASS PCI_ID PCI_SLOT PCI_SUBSYS_ID + export ACTION PCI_CLASS PCI_ID PCI_SLOT PCI_SLOT_NAME PCI_SUBSYS_ID - # these notifications will be handled by pcimodules - for BUS in `cd /proc/bus/pci;find * -type d -print`; do - for SLOT_FUNC in `cd /proc/bus/pci/$BUS; echo *`; do - PCI_SLOT=$BUS:$SLOT_FUNC - : hotplug pci for $PCI_SLOT + if [ -d /sys/bus/pci/devices/ ]; then + # 2.6 kernels + cd /sys/bus/pci/devices/ + for PCI_DEVICE in *; do + set `echo $PCI_DEVICE \ + | sed -e 's/\([^:]*\):\(.*\):\(.*\)\.\(.*\)/\1 \2 \3 \4/'` + PCI_SLOT_NAME=$2:$3.$4 + PCI_CLASS="`cat $PCI_DEVICE/class`" + PCI_CLASS=${PCI_CLASS#0x} + vendor_id=`cat $PCI_DEVICE/vendor` + device_id=`cat $PCI_DEVICE/device` + PCI_ID="${vendor_id#0x}:${device_id#0x}" + sub_vendor_id=`cat $PCI_DEVICE/subsystem_vendor` + sub_device_id=`cat $PCI_DEVICE/subsystem_device` + PCI_SUBSYS_ID="${sub_vendor_id#0x}:${sub_device_id#0x}" /sbin/hotplug pci done - done + else + # 2.4 kernels + LISTER=`which pcimodules` + if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices + -o ! -x pci.agent ]; then + echo $"** can't synthesize pci hotplug events" + return + fi + + # these notifications will be handled by pcimodules + for BUS in `cd /proc/bus/pci;find * -type d -print`; do + for SLOT_FUNC in `cd /proc/bus/pci/$BUS; echo *`; do + PCI_SLOT=$BUS:$SLOT_FUNC + /sbin/hotplug pci + done + done + fi + + return 0 } # See how we were called. diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.agent hotplug-2004_01_05/etc/hotplug/usb.agent --- hotplug-2004_01_05.orig/etc/hotplug/usb.agent 2004-02-01 18:00:45.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/usb.agent 2004-02-01 18:00:32.000000000 +0100 @@ -361,7 +361,11 @@ usb_convert_vars FOUND=false - LABEL="USB product $PRODUCT" + if [ -f $SYSFS/$DEVPATH/manufacturer ]; then + LABEL="USB `cat $SYSFS/$DEVPATH/manufacturer` `cat $SYSFS/$DEVPATH/product`" + else + LABEL="USB product $PRODUCT" + fi if [ -e "$REMOVER" ]; then rm -f "$REMOVER" diff -ruN hotplug-2004_01_05.orig/etc/hotplug/usb.rc hotplug-2004_01_05/etc/hotplug/usb.rc --- hotplug-2004_01_05.orig/etc/hotplug/usb.rc 2004-02-01 18:00:45.000000000 +0100 +++ hotplug-2004_01_05/etc/hotplug/usb.rc 2004-02-01 17:57:41.000000000 +0100 @@ -80,11 +80,12 @@ # make sure the usb agent will run ACTION=add PRODUCT=0/0/0 - export ACTION PRODUCT - + TYPE= + INTERFACE= + DEVPATH= DEVFS=/proc/bus/usb DEVICE= - export DEVFS DEVICE + export ACTION PRODUCT TYPE INTERFACE DEVPATH DEVFS DEVICE # these notifications will be handled by usbmodules # NOTE: we're not providing a full set of hotplug @@ -95,10 +96,26 @@ # FIXME usbmodules, or something, should set real # PRODUCT and DEVICE strings so /etc/hotplug/usb/* # scripts can rely on them ... - for DEVICE in /proc/bus/usb/*/* - do + # FIXME: this comment is out of date. + if [ -d /sys/bus/usb/devices ]; then + cd /sys/bus/usb/devices + # XXX FIXME this is not the right way... + for device in /sys/bus/usb/devices/[0-9]*; do + DEVPATH=${device#/sys/} + if [ -f $device/idVendor ]; then + PRODUCT="`cat $device/idVendor`/`cat $device/idProduct`/`cat $device/bcdDevice`" +# class=`cat $device/bDeviceClass` +# TYPE="$class/`cat $device/bDeviceSubClass`/`cat $device/bDeviceProtocol`" + fi +# if [ "$class" -eq 0 -a -f $device/bInterfaceClass ]; then +# INTERFACE="`cat $device/bInterfaceClass`/`cat $device/bInterfaceSubClass`/`cat $device/bInterfaceProtocol`" +# fi + done + else + for DEVICE in /proc/bus/usb/*/*; do /etc/hotplug/usb.agent - done + done + fi } @@ -130,12 +147,14 @@ if [ -d /proc/bus/usb ]; then # if it's not mounted, try to mount it if [ ! -f /proc/bus/usb/devices ]; then - if grep -q "[ ]/proc/bus/usb[ ]" /etc/fstab ; then + if grep -q -E "^[^#][^[:space:]]+[[:space:]]+/proc/bus/usb/?[[:space:]]" /etc/fstab; then mount /proc/bus/usb else - # NOTE: name is changing to "usbfs" from "usbdevfs" - # NOTE: some versions don't create empty 'devices' files - mount -t usbdevfs usbdevfs /proc/bus/usb + if grep -q usbfs /proc/filesystems; then + mount -t usbfs usbfs /proc/bus/usb + else + mount -t usbdevfs usbdevfs /proc/bus/usb + fi fi fi fi --a8Wt8u1KmwUX3Y2C-- ------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel