]>
Commit | Line | Data |
---|---|---|
fb9e3ed2 | 1 | #!/bin/sh |
2 | # | |
3 | # geninitrd mod: sata | |
4 | ||
8b2e8710 ER |
5 | # setup geninitrd module |
6 | # @access public | |
7 | setup_mod_sata() { | |
8 | lspci=$(find_tool /sbin/lspci) | |
9 | ||
10 | pcimap="/lib/modules/$kernel/modules.pcimap" | |
11 | ||
12 | if [ ! -x "$lspci" ]; then | |
13 | warn "Failed to execute lspci. Is pciutils package installed?" | |
14 | fi | |
15 | } | |
16 | ||
13639229 ER |
17 | # private until only mod-sata uses the function |
18 | find_modules_by_class() { | |
19 | local class=$1 | |
20 | ||
13639229 ER |
21 | # no pcimap, nothing to lookup from |
22 | if [ ! -f "$pcimap" ]; then | |
23 | return | |
24 | fi | |
fb9e3ed2 | 25 | |
8b2e8710 | 26 | if [ -z "$lspci" ]; then |
79348345 | 27 | return |
28 | fi | |
fb9e3ed2 | 29 | |
8b2e8710 | 30 | set -- $($lspci -n | awk -vclass=$class '$2 == class":" {split($3, p, ":"); printf("0x0000%s 0x0000%s\n", p[1], p[2])}') |
52042665 | 31 | |
5dc8215f | 32 | local PCI_ANY_ID=0x0000ffff pci_module vendor device subvendor subdevice class class_mask driver_data |
52042665 | 33 | while read pci_module vendor device subvendor subdevice class class_mask driver_data; do |
5dc8215f | 34 | # match vendor |
52042665 | 35 | [ "$1" = "$vendor" ] || continue |
5dc8215f ER |
36 | # match device, allow PCI_ANY_ID |
37 | [ "$2" = "$device" -o $device = $PCI_ANY_ID ] || continue | |
52042665 ER |
38 | |
39 | echo "$pci_module" | |
40 | done < $pcimap | |
13639229 ER |
41 | } |
42 | ||
43 | find_modules_sata() { | |
44 | debug "Finding SATA modules (class=0x0106)" | |
45 | ||
fb9e3ed2 | 46 | # Classes (we want only 0106) |
13639229 ER |
47 | # http://pci-ids.ucw.cz/read/PD/01 |
48 | # 0100 - SCSI | |
fb9e3ed2 | 49 | # 0101 - IDE/PATA |
50 | # 0106 - SATA/AHCI | |
51 | # 0107 - SAS | |
8b2e8710 ER |
52 | local m modules=$(find_modules_by_class 0106) |
53 | ||
944bba65 ER |
54 | # sort modules that ones who depend on libata are first |
55 | # this is best we could think of now :) | |
56 | local left right | |
8b2e8710 | 57 | for m in $modules; do |
944bba65 ER |
58 | if NEW_MODINFO=1 modinfo -k $kernel -F depends $m | grep -q libata; then |
59 | left="$left $m" | |
60 | else | |
61 | right="$right $m" | |
62 | fi | |
63 | done | |
64 | ||
65 | for m in $left $right; do | |
8b2e8710 ER |
66 | find_module $m |
67 | done | |
fb9e3ed2 | 68 | } |