]> git.pld-linux.org Git - projects/geninitrd.git/blobdiff - mod-sata.sh
USB keyboard modules finding and loading at initrd level.
[projects/geninitrd.git] / mod-sata.sh
index 61bae5dce197550b64aa386d274e3f6a65092657..c77aed959af3280f3983233845114e216adf61a4 100644 (file)
@@ -1,24 +1,36 @@
 #!/bin/sh
-#
+SATA_RCSID='$Revision$ $Date::                            $'
+
 # geninitrd mod: sata
 
-find_modules_sata()
-{
-       debug "Finding SATA modules"
+# setup geninitrd module
+# @access      public
+setup_mod_sata() {
+}
 
-       if [ ! -x /sbin/lspci ]; then
-                warn "Failed to execute /sbin/lspci. Is pciutils package installed?"
-                return
-        fi
+find_modules_sata() {
+       debug "Finding SATA modules (class=0x0106)"
 
        # Classes (we want only 0106)
+       # http://pci-ids.ucw.cz/read/PD/01
+       # 0100 - SCSI
        # 0101 - IDE/PATA
        # 0106 - SATA/AHCI
        # 0107 - SAS
-       # 0100 - SCSI
-       local module
-       local vendordev
-       vendordev=$(lspci -n |awk '/0106/{ gsub(/:/," "); print "0x0000"$4 " " "0x0000"$5}')
-       module=$(grep "$vendordev" /lib/modules/$kernel/modules.pcimap |awk '{print $1}')
-       find_module "$module"
+       local m modules=$(find_modules_by_class 0106)
+
+       # sort modules that ones who depend on libata are first
+       # this is best we could think of now :)
+       local left right
+       for m in $modules; do
+               if NEW_MODINFO=1 modinfo -k $kernel -F depends $m | grep -q libata; then
+                       left="$left $m"
+               else
+                       right="$right $m"
+               fi
+       done
+
+       for m in $left $right; do
+               find_module $m
+       done
 }
This page took 0.051441 seconds and 4 git commands to generate.