diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2000-12-15 23:54:39 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2000-12-15 23:54:39 +0000 |
commit | 795cbb9daaaccff2e81422fa266e095767d8e5f8 (patch) | |
tree | 7ce0b5ab7ff28e5059893512d1aa82245be4521f /merge2pcitable | |
parent | 96db78ac384ac0119eadea1f296567a34912f592 (diff) | |
download | ldetect-lst-795cbb9daaaccff2e81422fa266e095767d8e5f8.tar ldetect-lst-795cbb9daaaccff2e81422fa266e095767d8e5f8.tar.gz ldetect-lst-795cbb9daaaccff2e81422fa266e095767d8e5f8.tar.bz2 ldetect-lst-795cbb9daaaccff2e81422fa266e095767d8e5f8.tar.xz ldetect-lst-795cbb9daaaccff2e81422fa266e095767d8e5f8.zip |
move to convert directory the convert tools
Diffstat (limited to 'merge2pcitable')
-rwxr-xr-x | merge2pcitable | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/merge2pcitable b/merge2pcitable deleted file mode 100755 index a5d85046..00000000 --- a/merge2pcitable +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/perl - -$ARGV[0] eq '-f' and $force = shift; -$ARGV[0] eq '-a' and $all = shift; - -my $formats = join '|', grep {$_} map { /^read_(.*)/ ? $1 : '' } keys %main::; - -@ARGV == 3 or die "usage: $0 [-f] [-a] $formats <in_file> <mdk_pcitable>\n"; - -($format, $in, $pcitable) = @ARGV; - -my $read = $main::{"read_$format"} or die "unknown format $format (must be one of $formats)\n"; -my $d_pci = read_pcitable($pcitable); -my $d_in = $read->($in); -merge($d_pci, $d_in); -write_pcitable($d_pci); - -sub to_string { - my ($id, $driver) = @_; - my ($module, $text) = map { qq("$_") } @$driver; - my ($id1, $id2, $subid1, $subid2) = map { "0x$_" } ($id =~ /(....)/g); - join "\t", $id1, $id2, "$subid1 $subid2" ne "0xffff 0xffff" ? ($subid1, $subid2) : (), $module, $text; -} - -# works for RedHat's pcitable old and new format, + mdk format (alike RedHat's old one) -# (the new format has ending .o's and double quotes are removed) -sub read_pcitable { - my ($f) = @_; - my %drivers; - my $rm_quote = sub { s/^"//; s/"$//; $_ }; - open F, $f or die "read_pcitable: can't open $f\n"; - my $line = 0; - foreach (<F>) { - chomp; $line++; - next if /^#/ || /^\s*$/; - if (my ($id1, $id2, @l) = split /\t+/) { - my ($subid1, $subid2) = ('ffff', 'ffff'); - ($subid1, $subid2, @l) = @l if @l == 4; - @l == 2 or die "$f $line: bad number of fields (in $_)\n"; - my ($module, $text) = @l; - - my $class = $text =~ /(.*?)|/; - my $id1_ = $rm_quote->($id1); - if ($class{$id1_}) { - print STDERR "$f $line: class $id1_ named both $class and $class{$id1_}, taking $class{$id1_}\n"; - $class{$id1_} ||= $1; - $text =~ s/(.*?)|/$class{$id1_}|/; - } - - $module =~ s/\.o$//; - $module = "unknown" if $module =~ /alsa|ignore/; # stupid rh stuff - my $id = join '', map { s/^0x//; $_ } $id1, $id2, $subid1, $subid2; - $drivers{$id} and print STDERR "$f $line: multiple entry for $id (skipping $module $text)\n"; - $drivers{$id} ||= [ map &$rm_quote, $module, $text ]; - } - } - \%drivers; -} - -sub read_kernel_pcimap { - my ($f) = @_; - my %drivers; - open F, $f or die "read_kernel_pcimap: can't open $f\n"; - foreach (<F>) { - chomp; - next if /^#/ || /^\s*$/; - my ($module, $id1, $id2, $subid1, $subid2) = split; - $drivers{join '', map { /(....)$/ } $id1, $id2, $subid1, $subid2} = [ $module, '' ]; - } - \%drivers; -} - -sub read_pciids { - my ($f) = @_; - my %drivers; - my ($id1, $id2, $class, $line); - open F, $f or die "read_pciids: can't open $f\n"; - foreach (<F>) { - chomp; $line++; - next if /^#/ || /^;/ || /^\s*$/; - if (/^C\s/) { - last; - } elsif (/^\t\t(\S+)\s+(\S+)\s+(.*)/) { - $id1 && $id2 or die "$f $line: unexpected device\n"; - $drivers{"$id1$id2$1$2"} = [ "unknown", "$class|$3" ]; - } elsif (/^\t(\S+)\s+(.*)/) { - $id2 = $1; - $id1 && $id2 or die "$f $line: unexpected device\n"; - $drivers{"$id1${id2}ffffffff"} = [ "unknown", "$class|$2" ]; - } elsif (/^(\S+)\s+(.*)/) { - $id1 = $1; - $class = $class{$2} || $2; - } else { - die "bad line: $_"; - } - } - \%drivers; -} - -sub read_pcitablepm { - my ($f) = @_; - open F, $f or die "read_pcitablepm: can't open $f\n"; - eval join('', <F>); - - %pci_probing::pcitable::ids or die; - while (my ($k, $v) = each %pci_probing::pcitable::ids) { - $drivers{sprintf qq(%08xffffffff), $k >> 32} = [ $v->[1], $v->[0] ]; - } - \%drivers; -} - -# write in RedHat's pcitable old format (mdk one) -sub write_pcitable { - my ($drivers) = @_; - foreach (sort keys %$drivers) { - print to_string($_, $drivers->{$_}), "\n"; - } -} - -sub merge { - my ($drivers, $new) = @_; - - foreach (keys %$new) { - next if $new->{$_}[0] =~ /parport_pc|i810_ng/; - if ($drivers->{$_}) { - if ($new->{$_}[0] !~ /unknown|ignore/) { - if ($drivers->{$_}[0] =~ /unknown|ignore/ || $force) { - $drivers->{$_}[0] = $new->{$_}[0]; - } elsif ($drivers->{$_}[0] ne $new->{$_}[0]) { - print STDERR "different($drivers->{$_}[0] $new->{$_}[0]): ", to_string($_, $drivers->{$_}), "\n" - # special case for framebuffer modules - unless $new->{$_}[0] =~ /fb/ && $drivers->{$_}[0] =~ /^(Card|Server):/; - } - } - } else { - $drivers->{$_} = $new->{$_} - # don't keep sub-entries with unknown drivers - if $all || /ffffffff$/ || $new->{$_}[0] !~ /(unknown|ignore)/; - } - } -} |