summaryrefslogtreecommitdiffstats
path: root/kernel/list_modules.pm
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/list_modules.pm')
-rw-r--r--kernel/list_modules.pm190
1 files changed, 190 insertions, 0 deletions
diff --git a/kernel/list_modules.pm b/kernel/list_modules.pm
new file mode 100644
index 000000000..2b8dfd2d8
--- /dev/null
+++ b/kernel/list_modules.pm
@@ -0,0 +1,190 @@
+package list_modules;
+
+use MDK::Common;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(load_dependencies dependencies_closure category2modules module2category sub_categories);
+
+# the categories have 2 purposes
+# - choosing modules to include on stage1's (cf update_kernel)
+# (scsi/main scsi/main+hardware_raid
+# - performing a load_thiskind or get_that_type
+# (usb scsi|disk net isdn tv scanner photo sound)
+
+our %l = (
+ ################################################################################
+ network =>
+ {
+ main => [
+ if_(arch() =~ /ppc/, qw(mace bmac gmac)),
+ if_(arch() =~ /^sparc/, qw(myri_sbus sunbmac sunhme sunqe)),
+ if_(arch() !~ /alpha/ && arch() !~ /sparc/,
+ qw(3c501 3c503 3c505 3c507 3c509 3c515), # 3c90x
+ qw(82596 abyss ac3200 acenic aironet4500_card at1700 atp com20020-pci),
+ qw(cs89x0 de600 de620),
+ qw(defxx), # most unused
+ qw(depca dgrs dmfe e100 e1000 e2100 eepro eepro100 eexpress epic100 eth16i),
+ qw(ewrk3 hamachi hp hp-plus hp100 ibmtr),
+ qw(lance natsemi ne ne2k-pci ni5010 ni52 ni65 olympic pcnet32 plip rcpci), #old_tulip
+ qw(sb1000 sis900 sk98lin smc-ultra smc9194 starfire tlan tmspci tulip via-rhine), #sktr
+ qw(wd winbond-840 yellowfin ns83820),
+ ),
+ qw(3c59x 8139too sundance dl2k), #rtl8139
+ ],
+ raw => [
+ qw(8390 mii),
+ qw(ppp_generic ppp_async slhc aironet4500_core),
+ ],
+ pcmcia => [
+ qw(3c574_cs 3c589_cs airo airo_cs aironet4500_cs axnet_cs fmvj18x_cs),
+ qw(ibmtr_cs netwave_cs nmclan_cs pcnet_cs ray_cs smc91c92_cs wavelan_cs wvlan_cs),
+ qw(xirc2ps_cs xircom_cb xircom_tulip_cb),
+ ],
+ usb => [
+ qw(pegasus kaweth usbnet catc CDCEther),
+ ],
+ isdn => [
+ qw(hisax hysdn b1pci t1pci c4),
+ ],
+ },
+
+ ################################################################################
+ disk =>
+ {
+ scsi => [
+ if_(arch() =~ /ppc/, qw(mesh mac53c94)),
+ if_(arch() =~ /^sparc/, qw(qlogicpti)),
+ if_(arch() !~ /alpha/ && arch() !~ /sparc/,
+ qw(3w-xxxx AM53C974 BusLogic NCR53c406a a100u2w advansys aha152x aha1542 aha1740),
+ qw(atp870u dc395x_trm dtc fdomain g_NCR5380 in2000 initio pci2220i psi240i),
+ qw(qla1280 qla2x00 qlogicfas qlogicfc),
+ qw(seagate sim710 sym53c416 t128 tmscsim u14-34f ultrastor wd7000),
+ qw(eata eata_pio eata_dma),
+ ),
+ '53c7,8xx',
+ qw(aic7xxx pci2000 qlogicisp sym53c8xx), # ncr53c8xx
+ ],
+ hardware_raid => [
+ if_(arch() =~ /^sparc/, qw(pluto)),
+ if_(arch() !~ /alpha/ && arch() !~ /sparc/,
+ qw(DAC960 dpt_i2o megaraid aacraid ataraid cciss cpqarray gdth i2o_block),
+ qw(ips ppa imm),
+ ),
+ ],
+ pcmcia => [ qw(aha152x_cs fdomain_cs nsp_cs qlogic_cs ide-cs) ], #ide_cs
+ raw => [ qw(scsi_mod sd_mod) ],
+ usb => [ qw(usb-storage) ],
+ cdrom => [ qw(ide-cd sr_mod cdrom) ],
+ },
+
+ ################################################################################
+
+ bus =>
+ {
+ usb => [ qw(usbcore usb-uhci usb-ohci ehci-hcd usbkbd keybdev input) ],
+ pcmcia => [
+ if_(arch() !~ /^sparc/, qw(pcmcia_core tcic ds i82365 yenta_socket)), # cb_enabler
+ ],
+ #serial_cs
+ #ftl_cs 3c575_cb apa1480_cb epic_cb serial_cb tulip_cb iflash2+_mtd iflash2_mtd
+ #cb_enabler
+ },
+
+ fs =>
+ {
+ network => [ qw(af_packet nfs lockd sunrpc) ],
+ cdrom => [ qw(isofs) ],
+ loopback => [ qw(isofs loop) ],
+ local => [
+ if_(arch() =~ /^i.86/, qw(vfat fat)),
+ if_(arch() =~ /^ppc/, qw(hfs)),
+ qw(reiserfs),
+ ],
+ various => [ qw(smbfs romfs jbd xfs) ],
+
+ },
+
+ ################################################################################
+ multimedia =>
+ {
+ sound => [
+ if_(arch() =~ /ppc/, qw(dmasound_awacs)),
+ if_(arch() !~ /^sparc/,
+ qw(cmpci cs46xx cs4281 es1370 es1371 esssolo1 i810_audio maestro maestro3),
+ qw(nm256_audio pas16 trident via82cxxx_audio sonicvibes emu10k1 ymfpci),
+
+ qw(snd-ice1712 snd-cmipci snd-ens1371),
+ qw(snd-es1938 snd-fm801 snd-intel8x0 snd-rme96),
+ qw(snd-trident snd-ymfpci),
+ ),
+ ],
+ tv => [ qw(bttv cpia_usb ibmcam mod_quickcam ov511 ultracam usbvideo) ],
+ photo => [ qw(dc2xx mdc800) ],
+ radio => [ qw(radio-maxiradio) ],
+ scanner => [ qw(scanner microtek) ],
+ joystick => [ qw(ns558) ],
+ },
+
+ various =>
+ # just here for classification, unused categories (nor auto-detect, nor load_thiskind)
+ {
+ raid => [
+ qw(linear raid0 raid1 raid5 lvm-mod md multipath xor),
+ ],
+ mouse => [
+ qw(busmouse msbusmouse logibusmouse serial qpmouse atixlmouse),
+ ],
+ char => [
+ qw(amd768_rng applicom n_r3964 nvram pc110pad ppdev amd768_pm),
+ ],
+ other => [
+ qw(agpgart defxx i810_rng i810fb ide-floppy ide-scsi ide-tape loop lp nbd sg st parport parport_pc),
+ ],
+ },
+);
+
+my %dependencies;
+
+sub load_dependencies {
+ my ($file) = @_;
+
+ %dependencies = map {
+ my ($f, $deps) = split ':';
+ $f => [ split ' ', $deps ];
+ } cat_($file);
+}
+
+sub dependencies_closure {
+ my @l = map { dependencies_closure($_) } @{$dependencies{$_[0]} || []};
+ (@l, $_[0]);
+}
+
+sub category2modules {
+ map {
+ my ($t1, $t2s) = m|(.*)/(.*)|;
+ map {
+ my $l = $l{$t1}{$_} or die "bad category $t1/$_\n" . backtrace();
+ @$l;
+ } split('\|', $t2s);
+ } split(' ', $_[0]);
+}
+
+sub module2category {
+ my ($module) = @_;
+ my ($t1, $t2);
+ while (($t1, my $h) = each %l) {
+ while (($t2, my $l) = each %$h) {
+ $module eq $_ and goto found foreach @$l;
+ }
+ }
+ return;
+ found:
+ "$t1/$t2";
+}
+
+sub sub_categories {
+ my ($t1) = @_;
+ keys %{$l{$t1}};
+}
+
+1;