1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/usr/bin/perl -w
#
# Parse PCI_ROM and ISA_ROM entries from a source file on stdin and
# output the relevant Makefile variable definitions to stdout
#
# Based upon portions of Ken Yap's genrules.pl
use strict;
use warnings;
die "Syntax: $0 driver_source.c" unless @ARGV == 1;
my $source = shift;
open DRV, "<$source" or die "Could not open $source: $!\n";
( my $family, my $driver_name ) = ( $source =~ /^(.*?([^\/]+))\..$/ )
or die "Could not parse source file name \"$source\"\n";
my $printed_family;
sub rom {
( my $type, my $image, my $desc, my $vendor, my $device ) = @_;
my $ids = $vendor ? "$vendor,$device" : "-";
unless ( $printed_family ) {
print "\n";
print "# NIC\t\n";
print "# NIC\tfamily\t$family\n";
print "DRIVERS += $driver_name\n";
$printed_family = 1;
}
print "\n";
print "# NIC\t$image\t$ids\t$desc\n";
print "DRIVER_$image = $driver_name\n";
print "ROM_TYPE_$image = $type\n";
print "ROM_DESCRIPTION_$image = \"$desc\"\n";
print "PCI_VENDOR_$image = $vendor\n" if $vendor;
print "PCI_DEVICE_$image = $device\n" if $device;
print "ROMS += $image\n";
print "ROMS_$driver_name += $image\n";
}
while ( <DRV> ) {
next unless /(PCI|ISA)_ROM\s*\(/;
if ( /^\s*PCI_ROM\s*\(
\s*(0x[0-9A-Fa-f]{4})\s*, # PCI vendor
\s*(0x[0-9A-Fa-f]{4})\s*, # PCI device
\s*\"([^\"]*)\"\s*, # Image
\s*\"([^\"]*)\"\s* # Description
\)/x ) {
( my $vendor, my $device, my $image, my $desc ) = ( lc $1, lc $2, $3, $4 );
rom ( "pci", $image, $desc, $vendor, $device );
} elsif ( /^\s*ISA_ROM\s*\(
\s*\"([^\"]*)\"\s*, # Image
\s*\"([^\"]*)\"\s* # Description
\)/x ) {
( my $image, my $desc ) = ( $1, $2 );
rom ( "isa", $image, $desc );
} else {
warn "Malformed PCI_ROM or ISA_ROM macro on line $. of $source\n";
}
}
close DRV;
|