linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Olaf Hering <olh@suse.de>
To: linux-hotplug@vger.kernel.org
Subject: Re: pci coldplug
Date: Tue, 11 Nov 2003 20:23:05 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-106858226431741@msgid-missing> (raw)
In-Reply-To: <marc-linux-hotplug-106806874232064@msgid-missing>

 On Thu, Nov 06, Olaf Hering wrote:

>  On Wed, Nov 05, Olaf Hering wrote:
> 
> > Hello,
> > 
> > what is the purpose of pci_boot_events() in pci.rc? I mean, how can that
> > ever work in the current cvs? I did it that way and it appears to work
> > ok for a 2.4 kernel (probably also for 2.6):

Here is another try:

modules will be loaded during boot, should work for 2.4 and 2.6
make pcimodules obsolete
PCI_CLASS is matched twice
PCI_CLASS is passed as 4 digit value from the kernel.
some pci variables already have the 0x prefix in sysfs


Index: etc/hotplug/pci.agent
=================================RCS file: /cvsroot/linux-hotplug/admin/etc/hotplug/pci.agent,v
retrieving revision 1.13
diff -u -p -r1.13 pci.agent
--- etc/hotplug/pci.agent	16 Sep 2003 19:42:17 -0000	1.13
+++ etc/hotplug/pci.agent	10 Nov 2003 12:06:55 -0000
@@ -9,7 +9,7 @@
 # Kernel Cardbus/PCI params are:
 #	
 #	ACTION=%s [add or remove]
-#	PCI_CLASS=%06X
+#	PCI_CLASS=%04X
 #	PCI_ID=%04X:%04X
 #	PCI_SLOT_NAME=%s
 #	PCI_SUBSYS_ID=%04X:%04X
@@ -41,7 +41,7 @@ MAP_CURRENT=$MODULE_DIR/modules.pcimap
 # accumulates list of modules we may care about
 DRIVERS 
-if [ "$PCI_CLASS" = ""  -o "$PCI_CLASS" = "" ]; then
+if [ "$PCI_CLASS" = "" ]; then
     mesg Bad PCI agent invocation
     exit 1
 fi
@@ -69,13 +69,30 @@ pci_convert_vars ()
 	exit 1
     fi
 
-    pci_class=0x$PCI_CLASS
-
-    set `echo $PCI_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
+    case "$PCI_CLASS" in
+    	0x*) pci_class=$PCI_CLASS ;;
+	*) pci_class=0x$PCI_CLASS ;;
+    esac
+
+    case "$PCI_ID" in
+    	0x*)
+	set `echo $PCI_ID | $AWK -F: '{print $1, $2 }'` ''
+	;;
+	*)
+	set `echo $PCI_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
+    	;;
+    esac
     pci_id_vendor=$1
     pci_id_device=$2
 
-    set `echo $PCI_SUBSYS_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
+    case "$PCI_SUBSYS_ID" in
+	0x*)
+	set `echo $PCI_SUBSYS_ID | $AWK -F: '{print $1, $2 }'` ''
+	;;
+	*)
+	set `echo $PCI_SUBSYS_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
+	;;
+    esac
     pci_subid_vendor=$1
     pci_subid_device=$2
 }
Index: etc/hotplug/pci.rc
=================================RCS file: /cvsroot/linux-hotplug/admin/etc/hotplug/pci.rc,v
retrieving revision 1.7
diff -u -p -r1.7 pci.rc
--- etc/hotplug/pci.rc	6 Jun 2003 18:27:23 -0000	1.7
+++ etc/hotplug/pci.rc	10 Nov 2003 12:06:55 -0000
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # vim: syntax=sh
 #
 # pci.rc	mostly to recover lost boot-time pci hotplug events
@@ -10,61 +10,78 @@ 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 ()
-{
-    #
-    # 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=`type -p pcimodules`
-    if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then
-	    echo $"** can't synthesize pci hotplug events"
+pci_boot_events_24 () {
+	
+    if [ ! -x /sbin/lspci -o ! -f /proc/bus/pci/devices ]; then
+	    echo $" ** can't synthesize pci hotplug events"
 	    return
     fi
+    echo
+    /sbin/lspci -nm | sed 's/"//g' | while read pci_data ; do
+	set - $pci_data ''
+	ACTION­d
+	PCI_SLOT=$1
+	shift 2
+	PCI_CLASS=$1
+	shift
+	PCI_ID=$1:$2
+	shift 2
+	case "$1" in
+		-r*) shift;;
+	esac
+	case "$1" in
+		-p*) pci_progif=${1#-p} ; shift ;;
+		*) pci_progif\0 ;;
+	esac
+	if [ "$1" = "" ] ; then
+		PCI_SUBSYS_ID=0:0
+	else
+		PCI_SUBSYS_ID=$1:$2
+	fi
+	echo  PCI_CLASS=$PCI_CLASS$pci_progif PCI_ID=$PCI_ID PCI_SLOT_NAME=$PCI_SLOT PCI_SUBSYS_ID=$PCI_SUBSYS_ID
+	$ENV ACTION=$ACTION PCI_CLASS=$PCI_CLASS$pci_progif PCI_ID=$PCI_ID PCI_SLOT_NAME=$PCI_SLOT PCI_SUBSYS_ID=$PCI_SUBSYS_ID /sbin/hotplug pci
+    done
+}
 
-    # make sure the pci agent will run
-    ACTION­d
-    PCI_CLASS=0
-    PCI_ID=0:0
-    PCI_SLOT=0:0.0
-    PCI_SUBSYS_ID=0:0
-    export ACTION PCI_CLASS PCI_ID PCI_SLOT 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
-	    /sbin/hotplug pci
+pci_boot_events_26 () {
+	cd /sys/bus/pci/devices
+	echo
+	for i in * ; do
+	echo PCI_SLOT_NAME=$i PCI_CLASS=$(< $i/class) PCI_ID="$(< $i/vendor):$(< $i/device)" PCI_SUBSYS_ID="$(< $i/subsystem_vendor):$(< $i/subsystem_device)"
+	$ENV ACTION­d PCI_CLASS=$(< $i/class) PCI_ID="$(< $i/vendor):$(< $i/device)" PCI_SLOT_NAME=$i PCI_SUBSYS_ID="$(< $i/subsystem_vendor):$(< $i/subsystem_device)" /sbin/hotplug pci
 	done
-    done
+}
+
+pci_boot_events ()
+{
+	local ENV
+	if [ ! -x pci.agent ]; then
+		echo $" ** can't synthesize pci hotplug events"
+		return
+	fi
+	if [ -x /usr/bin/env ] ; then
+		ENV='env -i - '
+	else
+		ENV+	fi
+	if [ -d /sys/bus/pci/devices ] ; then
+		pci_boot_events_26
+	else
+		pci_boot_events_24
+	fi
 }
 
 # See how we were called.
 case "$1" in
   start)
-	pci_boot_events
+	pci_boot_events ; :
         ;;
   stop)
 	# echo $"pci stop -- ignored"
         ;;
   status)
+  	;;
+  status-verbose)
 	echo $"PCI Status for kernel: "  `uname -srm`
 	echo ''
 
@@ -93,4 +110,5 @@ case "$1" in
   *)
         echo $"Usage: $0 {start|stop|status|restart}"
         exit 1
+	;;
 esac

-- 
USB is for mice, FireWire is for men!

sUse lINUX ag, nÜRNBERG


-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
_______________________________________________
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

      parent reply	other threads:[~2003-11-11 20:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-05 21:43 pci coldplug Olaf Hering
2003-11-05 23:19 ` Olaf Hering
2003-11-11 20:23 ` Olaf Hering [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-106858226431741@msgid-missing \
    --to=olh@suse.de \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).