1#!/usr/bin/perl 2# 3# Copyright 2007 Red Hat Inc. 4# This crappy script written by Dave Airlie to avoid hassle of adding 5# ids in every place. 6# 7use strict; 8use warnings; 9use Text::CSV_XS; 10 11my $file = $ARGV[0]; 12 13my $atioutfile = 'ati_pciids_gen.h'; 14my $radeonpcichipsetfile = 'radeon_pci_chipset_gen.h'; 15my $radeonpcidevicematchfile = 'radeon_pci_device_match_gen.h'; 16my $radeonchipsetfile = 'radeon_chipset_gen.h'; 17my $radeonchipinfofile = 'radeon_chipinfo_gen.h'; 18 19my $csv = Text::CSV_XS->new(); 20 21open (CSV, "<", $file) or die $!; 22 23open (ATIOUT, ">", $atioutfile) or die; 24open (PCICHIPSET, ">", $radeonpcichipsetfile) or die; 25open (PCIDEVICEMATCH, ">", $radeonpcidevicematchfile) or die; 26open (RADEONCHIPSET, ">", $radeonchipsetfile) or die; 27open (RADEONCHIPINFO, ">", $radeonchipinfofile) or die; 28 29print RADEONCHIPSET "/* This file is autogenerated please do not edit */\n"; 30print RADEONCHIPSET "static SymTabRec RADEONChipsets[] = {\n"; 31print PCICHIPSET "/* This file is autogenerated please do not edit */\n"; 32print PCICHIPSET "PciChipsets RADEONPciChipsets[] = {\n"; 33print PCIDEVICEMATCH "/* This file is autogenerated please do not edit */\n"; 34print PCIDEVICEMATCH "static const struct pci_id_match radeon_device_match[] = {\n"; 35print RADEONCHIPINFO "/* This file is autogenerated please do not edit */\n"; 36print RADEONCHIPINFO "static RADEONCardInfo RADEONCards[] = {\n"; 37while (<CSV>) { 38 if ($csv->parse($_)) { 39 my @columns = $csv->fields(); 40 41 if ((substr($columns[0], 0, 1) ne "#")) { 42 43 print ATIOUT "#define PCI_CHIP_$columns[1] $columns[0]\n"; 44 45 if (($columns[2] ne "R128") && ($columns[2] ne "MACH64") && ($columns[2] ne "MACH32")) { 46 print PCICHIPSET " { PCI_CHIP_$columns[1], PCI_CHIP_$columns[1], RES_SHARED_VGA },\n"; 47 48 print PCIDEVICEMATCH " ATI_DEVICE_MATCH( PCI_CHIP_$columns[1], 0 ),\n"; 49 50 print RADEONCHIPSET " { PCI_CHIP_$columns[1], \"$columns[8]\" },\n"; 51 52 print RADEONCHIPINFO " { $columns[0], CHIP_FAMILY_$columns[2], "; 53 54 if ($columns[3] eq "1") { 55 print RADEONCHIPINFO "1, "; 56 } else { 57 print RADEONCHIPINFO "0, "; 58 } 59 60 if ($columns[4] eq "1") { 61 print RADEONCHIPINFO "1, "; 62 } else { 63 print RADEONCHIPINFO "0, "; 64 } 65 66 if ($columns[5] eq "1") { 67 print RADEONCHIPINFO "1, "; 68 } else { 69 print RADEONCHIPINFO "0, "; 70 } 71 72 if ($columns[6] eq "1") { 73 print RADEONCHIPINFO "1, "; 74 } else { 75 print RADEONCHIPINFO "0, "; 76 } 77 78 if ($columns[7] eq "1") { 79 print RADEONCHIPINFO "1 "; 80 } else { 81 print RADEONCHIPINFO "0 "; 82 } 83 84 print RADEONCHIPINFO "},\n"; 85 } 86 } 87 } else { 88 my $err = $csv->error_input; 89 print "Failed to parse line: $err"; 90 } 91} 92 93print RADEONCHIPINFO "};\n"; 94print RADEONCHIPSET " { -1, NULL }\n};\n"; 95print PCICHIPSET " { -1, -1, RES_UNDEFINED }\n};\n"; 96print PCIDEVICEMATCH " { 0, 0, 0 }\n};\n"; 97close CSV; 98close ATIOUT; 99close PCICHIPSET; 100close PCIDEVICEMATCH; 101close RADEONCHIPSET; 102close RADEONCHIPINFO; 103