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