summaryrefslogtreecommitdiffstats
path: root/perl-install/detect_devices.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/detect_devices.pm')
-rw-r--r--perl-install/detect_devices.pm35
1 files changed, 31 insertions, 4 deletions
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
index c5f7ff4a2..432f2736d 100644
--- a/perl-install/detect_devices.pm
+++ b/perl-install/detect_devices.pm
@@ -2,6 +2,7 @@ package detect_devices; # $Id$
use diagnostics;
use strict;
+use vars qw($pcitable_addons $usbtable_addons);
#-######################################################################################
#- misc imports
@@ -224,28 +225,54 @@ sub getNet() {
# mapgrep(sub {member (($_[0] =~ /\s*(\w*):/), @netdevices), $1 }, split(/\n/, cat_("/proc/net/dev")));
#}
+$pcitable_addons = <<'EOF';
+# add here lines conforming the pcitable format (0xXXXX\t0xXXXX\t"\w+"\t".*")
+0x10b7 0x9055 "3c90x" "3Com Corporation|3c905B 100BaseTX [Cyclone]"
+EOF
+
+$usbtable_addons = <<'EOF';
+# add here lines conforming the usbtable format (0xXXXX\t0xXXXX\t"\w+"\t".*")
+EOF
+
+sub add_addons {
+ my ($addons, @l) = @_;
+
+ foreach (split "\n", $addons) {
+ /^\s/ and die "bad detect_devices::probeall_addons line \"$_\"";
+ s/^#.*//;
+ s/"(.*?)"/$1/g;
+ next if /^$/;
+ my ($vendor, $id, $driver, $description) = split("\t", $_, 4) or die "bad detect_devices::probeall_addons line \"$_\"";
+ foreach (@l) {
+ $_->{vendor} == hex $vendor && $_->{id} == hex $id or next;
+ put_in_hash($_, { driver => $driver, description => $description });
+ }
+ }
+ @l;
+}
+
sub pci_probe {
my ($probe_type) = @_;
log::l("full pci_probe") if $probe_type;
- map {
+ add_addons($pcitable_addons, map {
my %l;
@l{qw(vendor id subvendor subid pci_bus pci_device pci_function media_type driver description)} = split "\t";
$l{$_} = hex $l{$_} foreach qw(vendor id subvendor subid);
$l{bus} = 'PCI';
\%l
- } c::pci_probe($probe_type || 0);
+ } c::pci_probe($probe_type || 0));
}
sub usb_probe {
-e "/proc/bus/usb/devices" or return ();
- map {
+ add_addons($usbtable_addons, map {
my %l;
@l{qw(vendor id media_type driver description)} = split "\t";
$l{$_} = hex $l{$_} foreach qw(vendor id);
$l{bus} = 'USB';
\%l
- } c::usb_probe();
+ } c::usb_probe());
}
sub pcmcia_probe {