#!/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:
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")
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,