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