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 8use strict; 9use warnings; 10 11die "Syntax: $0 driver_source.c" unless @ARGV == 1; 12my $source = shift; 13open 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 18my $printed_family; 19 20sub 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 41while ( <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 65close DRV; 66