diff options
-rwxr-xr-x | mdk-stage1/pci-resource/update-pci-ids.pl | 72 | ||||
-rw-r--r-- | mdk-stage1/probing.c | 8 |
2 files changed, 42 insertions, 38 deletions
diff --git a/mdk-stage1/pci-resource/update-pci-ids.pl b/mdk-stage1/pci-resource/update-pci-ids.pl index 1ea4ffc60..2a52f7b1e 100755 --- a/mdk-stage1/pci-resource/update-pci-ids.pl +++ b/mdk-stage1/pci-resource/update-pci-ids.pl @@ -1,9 +1,11 @@ #!/usr/bin/perl -require '/usr/bin/merge2pcitable.pl'; +use MDK::Common; -my $drivers = read_pcitable("/usr/share/ldetect-lst/pcitable"); +-x "../mar/mar" or die "\t*FAILED* Sorry, need ../mar/mar binary\n"; +require '/usr/bin/merge2pcitable.pl'; +my $drivers = read_pcitable("/usr/share/ldetect-lst/pcitable"); print ' #define PCI_REVISION_ID 0x08 /* Revision ID */ @@ -17,49 +19,51 @@ struct pci_module_map { '; -my %t = (scsi => 'scsi', eth => 'net'); - -my @modulz = sort grep { -d $_ } glob("../../all.modules/*"); -my $selected_mod = pop @modulz; -my ($kern) = $selected_mod =~ /.*\/([^\/]+)/; - -if (-x "../mar/mar" && -f "../../all.modules/$kern/network_modules.mar" && -f "../../all.modules/$kern/hd_modules.mar") { - $modulez{'eth'} = [ `../mar/mar -l ../../all.modules/$kern/network_modules.mar` ]; - $modulez{'scsi'} = [ `../mar/mar -l ../../all.modules/$kern/hd_modules.mar` ]; - $check_marfiles = 1; -} - +my %t = ( network => [ 'network' ], + medias => [ 'hd', 'cdrom' ] + ); +my %sanity_check = + arch() =~ /ia64/ ? + ( network => [ '3c59x', 'eepro100', 'e100', 'tulip', 'via-rhine', 'ne2k-pci', '8139too' ], + medias => [ 'aic7xxx', 'advansys', 'sym53c8xx', 'initio' ], + ) : + ( network => [ '3c59x', 'eepro100', 'e100', 'tulip', 'via-rhine', 'ne2k-pci', '8139too', 'tlan' ], + medias => [ 'aic7xxx', 'advansys', 'ncr53c8xx', 'sym53c8xx', 'initio' ], + ); foreach $type (keys %t) { - print "#ifndef DISABLE_NETWORK\n" if ($type eq 'eth'); - print "#ifndef DISABLE_MEDIAS\n" if ($type eq 'scsi'); + print STDERR $type; + my @modulez; + foreach $floppy (@{$t{$type}}) { + foreach $marfile (glob("../../all.modules/*/${floppy}_modules.mar")) { + -f $marfile or die "\t*FAILED* Sorry, need $marfile mar file\n"; + my @modz = `../mar/mar -l $marfile`; + if ($marfile !~ /2\.2\.14/) { + foreach $mandatory (@{$sanity_check{$type}}) { + grep(/\t$mandatory\.o/, @modz) or die "\t*FAILED* Sanity check should prove that $mandatory.o be part of $marfile\n" + } + } + push @modulez, @modz; + print STDERR "."; + } + } - print " + print "#ifndef DISABLE_".uc($type)." struct pci_module_map ${type}_pci_ids[] = { "; - my %l; - foreach (glob("../../all.kernels/$kern/lib/modules/*/$t{$type}/*.o"), glob("../../all.kernels/$kern/lib/modules/*/kernel/drivers/$t{$type}/{*/,}*.o")) { - m|([^/]*)\.o$|; - $l{$1} = 1; - } - my %absent; + while (my ($k, $v) = each %$drivers) { - $l{$v->[0]} or next; + grep(/^\t$v->[0]\.o/, @modulez) or next; $k =~ /^(....)(....)/; - printf qq|\t{0x%s , 0x%s , ( "%s" ), ( "%s" )} ,\n|, + printf qq|\t{ 0x%s, 0x%s, "%s", "%s" },\n|, $1, $2, $v->[1], $v->[0]; - if (defined($check_marfiles)) { - ($absent{$v->[0]} = 1) if (!grep(/^\t$v->[0]\.o\s/, @{$modulez{$type}})); - } } - if (%absent) { print STDERR "\tmissing for $type: "; foreach (keys %absent) { print STDERR "$_ " } print STDERR "\n"; }; + print "}; +int ${type}_num_ids = sizeof(${type}_pci_ids) / sizeof(struct pci_module_map); +#endif -print " -}; -int ${type}_num_ids=sizeof(${type}_pci_ids)/sizeof(struct pci_module_map); "; - print "#endif\n"; - + print STDERR "\n"; } diff --git a/mdk-stage1/probing.c b/mdk-stage1/probing.c index 2e9c1d0de..664ab159f 100644 --- a/mdk-stage1/probing.c +++ b/mdk-stage1/probing.c @@ -141,15 +141,15 @@ static void probe_that_type(enum driver_type type) switch (type) { #ifndef DISABLE_MEDIAS case SCSI_ADAPTERS: - pcidb = scsi_pci_ids; - len = scsi_num_ids; + pcidb = medias_pci_ids; + len = medias_num_ids; break; #endif #ifndef DISABLE_NETWORK #ifndef DISABLE_PCINET case NETWORK_DEVICES: - pcidb = eth_pci_ids; - len = eth_num_ids; + pcidb = network_pci_ids; + len = network_num_ids; break; #endif #endif |