]> git.proxmox.com Git - pve-kernel-2.6.32.git/blob - assemble-firmware.pl
remove linux-firmware-from-kernel.git
[pve-kernel-2.6.32.git] / assemble-firmware.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use File::Basename;
5 use File::Path;
6
7 my $fwsrc0 = "linux-2.6-2.6.32/firmware";
8 my $fwsrc1 = "linux-firmware.git";
9 my $fwsrc3 = "firmware-misc";
10
11 my $fwlist = shift;
12 die "no firmware list specified" if !$fwlist || ! -f $fwlist;
13
14 my $target = shift;
15 die "no target directory" if !$target || ! -d $target;
16
17 my $force_skip = {
18
19 # not needed, the HBA has burned-in firmware
20 'ql8100_fw.bin' => 1,
21 };
22
23 my $skip = {};
24 # debian squeeze also misses those files
25 foreach my $fw (qw(
26 libertas/gspi8385.bin libertas/gspi8385_hlp.bin
27 cbfw.bin ctfw.bin ct2fw.bin
28 tehuti/firmware.bin
29 cyzfirm.bin
30 isi4616.bin
31 isi4608.bin
32 isi616em.bin
33 isi608.bin
34 isi608em.bin
35 c320tunx.cod
36 cp204unx.cod
37 c218tunx.cod
38 isight.fw
39 BT3CPCC.bin
40 bfubase.frm
41 solos-db-FPGA.bin
42 solos-Firmware.bin
43 solos-FPGA.bin
44 pca200e_ecd.bin2
45 prism2_ru.fw
46 tms380tr.bin
47 FW10
48 FW13
49 comedi/jr3pci.idm
50
51 sd8686.bin
52 sd8686_helper.bin
53 usb8388.bin
54 libertas_cs_helper.fw
55 lbtf_usb.bin
56
57 wl1271-fw.bin
58 wl1251-fw.bin
59 symbol_sp24t_sec_fw
60 symbol_sp24t_prim_fw
61 prism_ap_fw.bin
62 prism_sta_fw.bin
63 ar9170.fw
64 iwmc3200wifi-lmac-sdio.bin
65 iwmc3200wifi-calib-sdio.bin
66 iwmc3200wifi-umac-sdio.bin
67 iwmc3200top.1.fw
68 zd1201.fw
69 zd1201-ap.fw
70 isl3887usb
71 isl3886usb
72 isl3886pci
73 3826.arm
74
75 rtl8168d-1.fw
76 rtl8168d-2.fw
77
78 i2400m-fw-sdio-1.3.sbcf
79
80 nx3fwmn.bin
81 nx3fwct.bin
82 nxromimg.bin
83
84 myri10ge_rss_eth_z8e.dat
85 myri10ge_rss_ethp_z8e.dat
86 myri10ge_eth_z8e.dat
87 myri10ge_ethp_z8e.dat
88
89 i1480-phy-0.0.bin
90 i1480-usb-0.0.bin
91 i1480-pre-phy-0.0.bin
92
93 go7007fw.bin
94 go7007tv.bin
95
96 sep/resident.image.bin
97 sep/cache.image.bin
98 b43legacy/ucode4.fw
99 b43legacy/ucode2.fw
100 b43/ucode9.fw
101 b43/ucode5.fw
102 b43/ucode15.fw
103 b43/ucode14.fw
104 b43/ucode13.fw
105 b43/ucode11.fw
106 orinoco_ezusb_fw
107 isl3890
108 isl3886
109 isl3877
110 mwl8k/fmimage_8366.fw
111 mwl8k/helper_8366.fw
112 mwl8k/fmimage_8363.fw
113 mwl8k/helper_8363.fw
114 iwlwifi-6000g2a-4.ucode
115 iwlwifi-130-5.ucode
116 cxgb4/t4fw.bin
117 cxgb4/t4fw-1.3.10.0.bin
118
119 )) {
120 $skip->{$fw} = 1;
121 }
122
123 sub copy_fw {
124 my ($src, $dstfw) = @_;
125
126 my $dest = "$target/$dstfw";
127
128 return if -f $dest;
129
130 mkpath dirname($dest);
131 system ("cp '$src' '$dest'") == 0 || die "copy $src to $dest failed";
132 }
133
134 my $fwdone = {};
135
136 open(TMP, $fwlist);
137 while(defined(my $line = <TMP>)) {
138 chomp $line;
139 my ($fw, $mod) = split(/\s+/, $line, 2);
140
141 next if $mod =~ m|^kernel/sound|;
142 next if $mod =~ m|^kernel/drivers/isdn|;
143
144 # skip ZyDas usb wireless, use package zd1211-firmware instead
145 next if $fw =~ m|^zd1211/|;
146
147 # skip atmel at76c50x wireless networking chips.
148 # use package atmel-firmware instead
149 next if $fw =~ m|^atmel_at76c50|;
150
151 # skip Bluetooth dongles based on the Broadcom BCM203x
152 # use package bluez-firmware instead
153 next if $fw =~ m|^BCM2033|;
154
155 next if $force_skip->{$fw};
156
157 next if $fwdone->{$fw};
158 $fwdone->{$fw} = 1;
159
160 my $fwdest = $fw;
161 if ($fw eq 'libertas/gspi8686.bin') {
162 $fw = 'libertas/gspi8686_v9.bin';
163 }
164 if ($fw eq 'libertas/gspi8686_hlp.bin') {
165 $fw = 'libertas/gspi8686_v9_helper.bin';
166 }
167
168 if ($fw eq 'PE520.cis') {
169 $fw = 'cis/PE520.cis';
170 }
171
172 if (-f "$fwsrc0/$fw") {
173 copy_fw("$fwsrc0/$fw", $fwdest);
174 next;
175 }
176 if (-f "$fwsrc1/$fw") {
177 copy_fw("$fwsrc1/$fw", $fwdest);
178 next;
179 }
180 if (-f "$fwsrc3/$fw") {
181 copy_fw("$fwsrc3/$fw", $fwdest);
182 next;
183 }
184
185 if ($fw =~ m|/|) {
186 next if $skip->{$fw};
187 die "unable to find firmware: $fw $mod\n";
188 }
189
190 my $name = basename($fw);
191
192 my $sr = `find '$fwsrc1' -name '$name'`;
193 chomp $sr;
194 if ($sr) {
195 #print "found $fw in $sr\n";
196 copy_fw($sr, $fwdest);
197 next;
198 }
199 $sr = `find '$fwsrc3' -name '$name'`;
200 chomp $sr;
201 if ($sr) {
202 #print "found $fw in $sr\n";
203 copy_fw($sr, $fwdest);
204 next;
205 }
206
207 next if $skip->{$fw};
208
209 die "unable to find firmware: $fw $mod\n";
210 }
211 close(TMP);
212
213 exit(0);