]> git.pld-linux.org Git - projects/geninitrd.git/blobdiff - mod-sata.sh
luks: initial support for luks2 tokens
[projects/geninitrd.git] / mod-sata.sh
index 570922679cf0ea6c9323d66fbaf4b062e91ad467..cf8af5f4af4fc46f9457b1252bf9c3b9b99fcaf2 100644 (file)
@@ -1,28 +1,8 @@
 #!/bin/sh
-#
 # geninitrd mod: sata
 
-# private until only mod-sata uses the function
-find_modules_by_class() {
-       local class=$1
-
-       local pcimap="/lib/modules/$kernel/modules.pcimap"
-       # no pcimap, nothing to lookup from
-       if [ ! -f "$pcimap" ]; then
-               return
-       fi
-
-       if [ ! -x /sbin/lspci ]; then
-               warn "Failed to execute /sbin/lspci. Is pciutils package installed?"
-               return
-       fi
-
-       set -- $(/sbin/lspci -n | awk -vclass=$class '$2 == class":" {split($3, p, ":"); printf("0x0000%s 0x0000%s\n", p[1], p[2])}')
-       awk -vvendor=$1 -vdevice=$2 '$2 == vendor && $3 == device {print $1}' $pcimap
-}
-
 find_modules_sata() {
-       debug "Finding SATA modules (class=0x0106)"
+       verbose "Finding SATA modules (class=0x0106)"
 
        # Classes (we want only 0106)
        # http://pci-ids.ucw.cz/read/PD/01
@@ -30,12 +10,20 @@ find_modules_sata() {
        # 0101 - IDE/PATA
        # 0106 - SATA/AHCI
        # 0107 - SAS
-       local module
-       module=$(find_modules_by_class 0106)
+       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
 
-       if [ "$module" ]; then
-               # FIXME: how to handle if multiple modules returned?
-               # i.e two modules can do same id
-               find_module "$module"
-       fi
+       for m in $left $right; do
+               find_module $m
+       done
 }
This page took 0.072307 seconds and 4 git commands to generate.