]> git.pld-linux.org Git - projects/geninitrd.git/blame - mod-sata.sh
there is no bitwise matching only DEVICE_ANY
[projects/geninitrd.git] / mod-sata.sh
CommitLineData
fb9e3ed2 1#!/bin/sh
2#
3# geninitrd mod: sata
4
8b2e8710
ER
5# setup geninitrd module
6# @access public
7setup_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
18find_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
43find_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
54 # FIXME: how to handle if multiple modules returned?
55 # i.e two modules can do same id
56 # currently we load all of them...
57 for m in $modules; do
58 find_module $m
59 done
fb9e3ed2 60}
This page took 0.040035 seconds and 4 git commands to generate.