#!/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 = 0x$vendor\n" if $vendor; print "PCI_DEVICE_$image = 0x$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 \s*.*\s* # Driver data \)/x ) { ( my $vendor, my $device, my $image, my $desc ) = ( lc $1, lc $2, $3, $4 ); rom ( "pci", $image, $desc, $vendor, $device ); rom ( "pci", lc "${vendor}${device}", $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;