SVN: geninitrd/trunk/mod-sata.sh

arekm arekm at pld-linux.org
Sat Oct 15 09:38:16 CEST 2011


Author: arekm
Date: Sat Oct 15 09:38:16 2011
New Revision: 12372

Modified:
   geninitrd/trunk/mod-sata.sh
Log:
Fix PCI_ANY_ID (it is 0xffffffff (~0) and not 0x0000ffff).

Change class_mask to always ignore two last digits (as these
are "program interface" and we want any program interface).

Apply class_mask to classes found by lspci. Some devices
(eg. *-hcd) have very specific program interfaces while
we want any of these.

Venrod matchin PCI_ANY_ID is also fine for us.


With these changes finding non sata classes also works eg.
finding find_modules_by_class 0c03 (usb) works.



Modified: geninitrd/trunk/mod-sata.sh
==============================================================================
--- geninitrd/trunk/mod-sata.sh	(original)
+++ geninitrd/trunk/mod-sata.sh	Sat Oct 15 09:38:16 2011
@@ -17,7 +17,7 @@
 
 # private until only mod-sata uses the function
 find_modules_by_class() {
-	local req_class=$1
+	local req_class="$1"
 
 	# no pcimap, nothing to lookup from
 	if [ ! -f "$pcimap" ]; then
@@ -30,14 +30,19 @@
 
 	set -- $($lspci -n | awk -vclass=$req_class '$2 == class":" {split($3, p, ":"); printf("0x0000%s 0x0000%s\n", p[1], p[2])}')
 
-	local PCI_ANY_ID=0x0000ffff pci_module vendor device subvendor subdevice class class_mask driver_data
+	req_class="0x${req_class}00"
+
+	local PCI_ANY_ID=0xffffffff pci_module vendor device subvendor subdevice class class_mask driver_data
 	while read pci_module vendor device subvendor subdevice class class_mask driver_data; do
-		# match class
-		[ "$(($req_class & $class_mask))" = "$(($class))" ] || continue
+		# ignore program interface (last two digits) - we want any
+		class_mask=$(($class_mask & 0xffffff00))
+		# some devices (like hcd) have very specific class
+		class=$(($class & $class_mask))
+		[ "$(($req_class & $class_mask))" = "$class" ] || continue
 		# match vendor
-		[ "$1" = "$vendor" ] || continue
+		[ "$1" = "$vendor" -o "$vendor" = "$PCI_ANY_ID" ] || continue
 		# match device, allow PCI_ANY_ID
-		[ "$2" = "$device" -o $device = $PCI_ANY_ID ] || continue
+		[ "$2" = "$device" -o "$device" = "$PCI_ANY_ID" ] || continue
 
 		echo "$pci_module"
 	done < $pcimap


More information about the pld-cvs-commit mailing list