#!/bin/sh # # Firmware-specific hotplug policy agent. # # Kernel firmware hotplug params include: # # ACTION=%s [add or remove] # DEVPATH=%s [in 2.5 kernels, /sys/$DEVPATH] # FIRMWARE=%s # # HISTORY: # # 24-Jul-2003 Initial version of “new” hotplug agent. # # $Id: firmware.agent,v 1.3 2004/03/14 15:52:56 ukai Exp $ # cd /etc/hotplug . ./hotplug.functions load() { echo 1 > $SYSFS/$DEVPATH/loading cat “$1″ > $SYSFS/$DEVPATH/data echo 0 > $SYSFS/$DEVPATH/loading exit } # DEBUG=yes export DEBUG # directories with the firmware files FIRMWARE_DIRS=”/lib/hotplug/firmware /usr/local/lib/hotplug/firmware /usr/lib/hotplug/firmware” # mountpoint of sysfs SYSFS=$(sed -n ’s/^.* \([^ ]*\) sysfs .*$/\1/p’ /proc/mounts | sed -e ‘2,$d’) # use /proc for 2.4 kernels if [ “$SYSFS” = “” ]; then SYSFS=/proc fi VERSION=$(uname -r) # # What to do with this firmware hotplug event? # case “$ACTION” in add) counter=5 while [ ! -e $SYSFS/$DEVPATH/loading -a $counter -gt 0 ]; do sleep 1 counter=$(($counter - 1)) done if [ $counter -eq 0 ]; then mesg “$SYSFS/$DEVPATH/ does not exist” exit 1 fi for DIR in $FIRMWARE_DIRS; do if [ -e “$DIR/$FIRMWARE-$VERSION” ]; then load “$DIR/$FIRMWARE-$VERSION” elif [ -e “$DIR/$FIRMWARE” ]; then load “$DIR/$FIRMWARE” fi done # the firmware was not found echo -1 > $SYSFS/$DEVPATH/loading ;; remove) ;; *) mesg “Firmware ‘$ACTION’ event not supported” exit 1 ;; esac