#!/bin/sh # vim: syntax=sh # # pci.rc mostly to recover lost boot-time pci hotplug events # # $Id: pci.rc,v 1.11 2004/04/01 07:24:31 kroah Exp $ # PATH=/sbin:/bin:/usr/sbin:/usr/bin cd /etc/hotplug . ./hotplug.functions pci_boot_events () { # 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_SLOT_NAME PCI_SUBSYS_ID if [ -d /sys/bus ]; then # 2.6 kernels if [ -d /sys/bus/pci/devices/ ]; then 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 fi 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 1 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. case "$1" in start) pci_boot_events ;; stop) # echo $"pci stop -- ignored" ;; status) echo $"PCI Status for kernel: " `uname -srm` echo '' if [ -f /proc/bus/pci/devices ]; then COUNT=`ls /proc/bus/pci | wc -l` if [ $COUNT -gt 1 ]; then COUNT=`expr $COUNT - 1` echo $"PCI up; bus count is $COUNT" if [ -x /sbin/lspci ]; then /sbin/lspci fi else echo $"no PCI busses?" fi echo '' else echo $"no PCI /proc support?" fi echo '' ;; restart) # always invoke by absolute path, else PATH=$PATH: $0 stop && $0 start ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 1 esac