#!/usr/bin/perl # This program will show on stdout yenta_socket stuff from pcitable # which is not in probe.c use MDK::Common; my @probelines = cat_('probe.c'); my $status = 0; foreach (@probelines) { if ($status == 0) { /^pci_id_t pci_id\[\] = {/ and $status = 1; } elsif ($status == 1) { /^\s*{\s*0x([\da-f]+),\s*0x([\da-f]+),\s*"([^"]*)",\s*"([^"]*)"\s*}/ and push @probes, { vendor => $1, device => $2, tag => $3, name => $4, vd => "$1$2" }; /^};/ and last; } } require '/usr/bin/merge2pcitable.pl'; my $drivers = read_pcitable("/usr/share/ldetect-lst/pcitable"); foreach my $k (sort keys %$drivers) { $v = $drivers->{$k}; $k =~ /^(....)(....)/; push @pcitable, { vendor => $1, device => $2, driver => $v->[0], name => $v->[1], vd => "$1$2" }; } my @res; print "Missing in `probe.c':\n"; foreach my $p (@pcitable) { next if $p->{driver} ne 'yenta_socket'; member($p->{vd}, map { $_->{vd} } @probes) or push @res, " { 0x$p->{vendor}, 0x$p->{device}, \"..\", \"$p->{name}\" },\n"; } print sort @res; @res = (); print "\n"; print "Missing in pcitable:\n"; foreach my $p (@probes) { my @r = grep { $_->{vd} eq $p->{vd} } @pcitable; @r > 1 and die "duplicate entry in pcitable <$p->{vd}>\n"; if (!@r || @r && $r[0]->{driver} ne 'yenta_socket') { push @res, "0x$p->{vendor}\t0x$p->{device}\t\"yenta_socket\"\t\"" . (@r ? $r[0]->{name} : '(COMPLETELY MISSING)') . "\"\n"; @r and $r[0]->{driver} ne 'unknown' and print STDERR "WARNING, driver for <$p->{vd}> was <$r[0]->{driver}>\n"; } } print sort @res; @res = (); print "\n";