Module changed names.
[bootcd.git] / conf_files / pl_hwinit
index 8654708..225d48b 100755 (executable)
@@ -1,14 +1,20 @@
 #!/usr/bin/python
 
 import sys
-import pypciscan
+import pypci
 import pypcimap
 import os
 import time
 
-def modprobe(module):
-    ret = os.system("/sbin/modprobe %s" % module)
-    return os.WEXITSTATUS(ret) == 0
+loadedmodules = None
+
+def modprobe(module, args = ""):
+    ret = os.system("/sbin/modprobe %s %s" % (module, args))
+    if os.WEXITSTATUS(ret) == 0:
+        globals()['loadedmodules'].write("%s\n" % module)
+        return True
+    else:
+        return False
 
 def main(argv):
     if len(argv) == 0:
@@ -23,20 +29,36 @@ def main(argv):
 
     pcimap = pypcimap.PCIMap(path)
     print "pl_hwinit: loading applicable modules"
-    devices = pypciscan.get_devices()
+    devices = pypci.get_devices()
+    storage_devices = 0
+    network_devices = 0
     missing = []
+    globals()['loadedmodules'] = file('/tmp/loadedmodules', 'w')
     for (slot, dev) in devices.iteritems():
         modules = pcimap.get(dev)
+        base = (dev[4] & 0xff0000) >> 16
         if len(modules) == 0:
-            base = (dev[4] & 0xff00) >> 8
             if base == 0x01 or base == 0x02:
                 # storage or network device, in that order
                 missing.append((slot, dev))
         else:
+            if base == 0x01:
+                storage_devices += 1
+            elif base == 0x02:
+                network_devices += 1
+
             # FIXME: This needs improved logic in the case of multiple matching modules
             for module in modules:
+                print "pl_hwinit: found and loading module %s (%s)" % (module, slot)
                 modprobe(module)
 
+    if network_devices == 0:
+        print "pl_hwinit: no supported network devices found!"
+        print "pl_hwinit: the following devices were found, but have no driver:"
+        print "pl_hwinit: ", "\npl_hwinit: ".join(missing)
+
+    # XXX: could check for storage devices too, but older kernels have a lot of that built-in
+
     # sd_mod won't get loaded automatically
     print "pl_hwinit: loading sd_mod"
     modprobe("sd_mod")
@@ -46,7 +68,7 @@ def main(argv):
     modprobe("usb_storage")
 
     print "pl_hwinit: loading floppy device driver"
-    modprobe("floppy")
+    modprobe("floppy","floppy=0,allowed_drive_mask")
 
     # always wait a bit between loading the usb drivers, and checking /sys/
     # for usb devices (this isn't necessarily for waiting for mass storage files,