]> git.proxmox.com Git - pve-firmware.git/blame - assemble-firmware.pl
minimize skip list for current fw submodule version
[pve-firmware.git] / assemble-firmware.pl
CommitLineData
7bbca2e6
FG
1#!/usr/bin/perl -w
2
3use strict;
4use File::Basename;
5use File::Path;
6
7my $fwsrc0 = "linux-2.6-3.10.0/firmware";
8my $fwsrc1 = "linux-firmware.git";
9my $fwsrc2 = "dvb-firmware.git";
10my $fwsrc3 = "firmware-misc";
11
12my $fwlist = shift;
13die "no firmware list specified" if !$fwlist || ! -f $fwlist;
14
15my $target = shift;
16die "no target directory" if !$target || ! -d $target;
17
18my $force_skip = {
19
20 # not needed, the HBA has burned-in firmware
21 'ql2600_fw.bin' => 1,
22 'ql2700_fw.bin' => 1,
23 'ql8100_fw.bin' => 1,
24 'ql8300_fw.bin' => 1,
25};
26
27my $skip = {};
28# debian squeeze also misses those files
29foreach my $fw (qw(
11262e92
TL
303826.arm
31BT3CPCC.bin
32FW10
33FW13
34RTL8192U/boot.img
35RTL8192U/data.img
36RTL8192U/main.img
11262e92
TL
37ar9170.fw
38ast_dp501_fw.bin
11262e92 39ath10k/QCA6174/hw2.1/firmware-4.bin
11262e92 40ath10k/QCA6174/hw3.0/firmware-5.bin
11262e92
TL
41ath10k/QCA9887/hw1.0/board-2.bin
42ath10k/QCA988X/hw2.0/board-2.bin
11262e92
TL
43ath10k/QCA988X/hw2.0/firmware-2.bin
44ath10k/QCA988X/hw2.0/firmware-3.bin
11262e92
TL
45ath10k/QCA988X/hw2.0/firmware.bin
46ath6k/AR6003/hw2.0/bdata.bin
47ath6k/AR6003/hw2.1.1/bdata.bin
48ath6k/AR6004/hw1.0/bdata.DB132.bin
49ath6k/AR6004/hw1.0/bdata.bin
50ath6k/AR6004/hw1.0/fw.ram.bin
51ath6k/AR6004/hw1.1/bdata.DB132.bin
52ath6k/AR6004/hw1.1/bdata.bin
53ath6k/AR6004/hw1.1/fw.ram.bin
54ath6k/AR6004/hw1.2/fw.ram.bin
55ath6k/AR6004/hw1.3/fw.ram.bin
56b43/ucode11.fw
57b43/ucode13.fw
58b43/ucode14.fw
59b43/ucode15.fw
60b43/ucode16_lp.fw
61b43/ucode16_mimo.fw
62b43/ucode24_lcn.fw
63b43/ucode25_lcn.fw
64b43/ucode25_mimo.fw
65b43/ucode26_mimo.fw
66b43/ucode29_mimo.fw
67b43/ucode30_mimo.fw
68b43/ucode33_lcn40.fw
69b43/ucode40.fw
70b43/ucode42.fw
71b43/ucode5.fw
72b43/ucode9.fw
73b43legacy/ucode2.fw
74b43legacy/ucode4.fw
75bfubase.frm
7bbca2e6 76brcm/brcmfmac-sdio.bin
11262e92
TL
77brcm/brcmfmac-sdio.txt
78brcm/brcmfmac43143-sdio.txt
7bbca2e6 79brcm/brcmfmac43241b0-sdio.txt
11262e92
TL
80brcm/brcmfmac43241b4-sdio.txt
81brcm/brcmfmac43241b5-sdio.txt
11262e92
TL
82brcm/brcmfmac4329-sdio.txt
83brcm/brcmfmac4330-sdio.txt
84brcm/brcmfmac4334-sdio.txt
85brcm/brcmfmac43340-sdio.txt
86brcm/brcmfmac4335-sdio.txt
87brcm/brcmfmac43362-sdio.txt
11262e92 88brcm/brcmfmac4339-sdio.txt
11262e92 89brcm/brcmfmac43430-sdio.txt
11262e92
TL
90brcm/brcmfmac43455-sdio.txt
91brcm/brcmfmac4350-pcie.txt
92brcm/brcmfmac4354-pcie.bin
93brcm/brcmfmac4354-pcie.txt
94brcm/brcmfmac4354-sdio.txt
7bbca2e6 95brcm/brcmfmac4356-pcie.txt
11262e92 96brcm/brcmfmac43570-pcie.txt
11262e92
TL
97brcm/brcmfmac4358-pcie.txt
98brcm/brcmfmac4359-pcie.bin
99brcm/brcmfmac43602-pcie.txt
100brcm/brcmfmac4365b-pcie.bin
101brcm/brcmfmac4365b-pcie.txt
102brcm/brcmfmac4365c-pcie.bin
103brcm/brcmfmac4366b-pcie.txt
11262e92
TL
104brcm/brcmfmac4371-pcie.txt
105c218tunx.cod
106c320tunx.cod
433982b1
TL
107cbfw-3.0.3.1.bin
108cbfw.bin
11262e92
TL
109comedi/jr3pci.idm
110cp204unx.cod
433982b1
TL
111ct2fw-3.0.3.1.bin
112ct2fw.bin
113ctfw-3.0.3.1.bin
114ctfw.bin
11262e92 115cxgb4/t4fw-1.3.10.0.bin
7bbca2e6 116cyzfirm.bin
11262e92
TL
117daqboard2000_firmware.bin
118fw.ram.bin
11262e92
TL
119i1480-phy-0.0.bin
120i1480-pre-phy-0.0.bin
121i1480-usb-0.0.bin
122i2400m-fw-sdio-1.3.sbcf
7bbca2e6 123isi4608.bin
11262e92 124isi4616.bin
7bbca2e6
FG
125isi608.bin
126isi608em.bin
11262e92 127isi616em.bin
7bbca2e6 128isight.fw
7bbca2e6 129isl3886pci
11262e92
TL
130isl3886usb
131isl3887usb
7bbca2e6
FG
132iwlwifi-100-6.ucode
133iwlwifi-1000-6.ucode
11262e92 134iwlwifi-130-5.ucode
11262e92
TL
135iwlwifi-3165-10.ucode
136iwlwifi-3168-26.ucode
137iwlwifi-6000-6.ucode
11262e92
TL
138iwlwifi-7265D-26.ucode
139iwlwifi-8000-10.ucode
140iwlwifi-8000-12.ucode
141iwlwifi-8000-13.ucode
7bbca2e6 142iwlwifi-8000-8.ucode
11262e92
TL
143iwlwifi-8000C-26.ucode
144iwlwifi-8000C-33.ucode
145iwlwifi-8265-26.ucode
146iwlwifi-8265-33.ucode
147iwlwifi-9000-pu-a0-jf-a0--26.ucode
148iwlwifi-9000-pu-a0-jf-a0--33.ucode
149iwlwifi-9000-pu-a0-jf-a0-34.ucode
150iwlwifi-9000-pu-a0-jf-b0--33.ucode
151iwlwifi-9000-pu-a0-jf-b0-34.ucode
152iwlwifi-9000-pu-a0-lc-a0--26.ucode
153iwlwifi-9260-th-a0-jf-a0--26.ucode
154iwlwifi-9260-th-a0-jf-a0--33.ucode
155iwlwifi-9260-th-a0-jf-a0-34.ucode
156iwlwifi-9260-th-b0-jf-b0--33.ucode
157iwlwifi-Qu-a0-hr-a0--33.ucode
158iwlwifi-Qu-a0-hr-a0-34.ucode
159iwlwifi-Qu-a0-jf-b0--26.ucode
160iwlwifi-Qu-a0-jf-b0--33.ucode
161iwlwifi-Qu-a0-jf-b0-34.ucode
162iwlwifi-QuQnj-a0-hr-a0-34.ucode
163iwlwifi-QuQnj-a0-jf-b0-34.ucode
164iwlwifi-QuQnj-f0-hr-a0-34.ucode
11262e92
TL
165iwmc3200wifi-calib-sdio.bin
166iwmc3200wifi-lmac-sdio.bin
167iwmc3200wifi-umac-sdio.bin
168ks7010sd.rom
169lattice-ecp3.bit
11262e92 170libertas/cf8305.bin
433982b1 171libertas/gspi8385.bin
11262e92 172libertas/gspi8385_helper.bin
433982b1 173libertas/gspi8385_hlp.bin
11262e92
TL
174libertas/usb8388.bin
175libertas_cs.fw
176libertas_cs_helper.fw
177liquidio/lio_210nv.bin
178liquidio/lio_210sv.bin
179liquidio/lio_23xx.bin
180liquidio/lio_410nv.bin
7bbca2e6
FG
181me2600_firmware.bin
182me4000_firmware.bin
11262e92
TL
183mrvl/pcie8766_uapsta.bin
184mrvl/pcie8997_uapsta.bin
185mrvl/sd8786_uapsta.bin
11262e92 186mrvl/sd8997_uapsta.bin
11262e92 187mrvl/usb8997_uapsta.bin
11262e92 188mwl8k/fmimage_8363.fw
11262e92 189mwl8k/helper_8363.fw
11262e92
TL
190ni6534a.bin
191niscrb01.bin
192niscrb02.bin
193nx3fwct.bin
194nx3fwmn.bin
195nxromimg.bin
196orinoco_ezusb_fw
197pca200e_ecd.bin2
198phanfw-4.0.579.bin
199prism2_ru.fw
200prism_ap_fw.bin
201prism_sta_fw.bin
7bbca2e6 202rtlwifi/rtl8723bu_bt.bin
11262e92
TL
203rtlwifi/rtl8723efw.bin
204sd8686.bin
205sd8686_helper.bin
11262e92
TL
206softing-4.6/bcard.bin
207softing-4.6/bcard2.bin
208softing-4.6/cancard.bin
209softing-4.6/cancrd2.bin
210softing-4.6/cansja.bin
211softing-4.6/ldcard.bin
212softing-4.6/ldcard2.bin
213solos-FPGA.bin
214solos-Firmware.bin
215solos-db-FPGA.bin
216symbol_sp24t_prim_fw
217symbol_sp24t_sec_fw
218tehuti/firmware.bin
219ti-connectivity/wl18xx-conf.bin
220tms380tr.bin
221usb8388.bin
222wd719x-risc.bin
223wd719x-wcs.bin
faefccd2 224wil6210_sparrow_plus.fw
11262e92
TL
225wlan/prima/WCNSS_qcom_wlan_nv.bin
226zd1201-ap.fw
227zd1201.fw
7bbca2e6
FG
228)) {
229 $skip->{$fw} = 1;
230}
231
232sub copy_fw {
233 my ($src, $dstfw) = @_;
234
235 my $dest = "$target/$dstfw";
236
237 return if -f $dest;
238
239 mkpath dirname($dest);
240 system ("cp '$src' '$dest'") == 0 || die "copy $src to $dest failed";
241}
242
243my $fwdone = {};
244
6bc6bdcb
FG
245my $error = 0;
246
7bbca2e6
FG
247open(TMP, $fwlist);
248while(defined(my $line = <TMP>)) {
249 chomp $line;
250 my ($fw, $mod) = split(/\s+/, $line, 2);
251
252 next if $mod =~ m|^kernel/sound|;
253 next if $mod =~ m|^kernel/drivers/isdn|;
254
255 # skip ZyDas usb wireless, use package zd1211-firmware instead
256 next if $fw =~ m|^zd1211/|;
257
258 # skip atmel at76c50x wireless networking chips.
259 # use package atmel-firmware instead
260 next if $fw =~ m|^atmel_at76c50|;
261
262 # skip Bluetooth dongles based on the Broadcom BCM203x
263 # use package bluez-firmware instead
264 next if $fw =~ m|^BCM2033|;
265
266 next if $fw =~ m|^xc3028-v27\.fw|; # found twice!
267 next if $fw =~ m|.inp|; # where are those files?
268 next if $fw =~ m|^ueagle-atm/|; # where are those files?
269
270 next if $force_skip->{$fw};
271
272 next if $fwdone->{$fw};
273 $fwdone->{$fw} = 1;
274
275 my $fwdest = $fw;
276 if ($fw eq 'libertas/gspi8686.bin') {
277 $fw = 'libertas/gspi8686_v9.bin';
278 }
279 if ($fw eq 'libertas/gspi8686_hlp.bin') {
280 $fw = 'libertas/gspi8686_v9_helper.bin';
281 }
282
283 if ($fw eq 'PE520.cis') {
284 $fw = 'cis/PE520.cis';
285 }
286
287 # the rtl_nic/rtl8168d-1.fw file is buggy in current kernel tree
288 if (-f "$fwsrc0/$fw" &&
289 ($fw ne 'rtl_nic/rtl8168d-1.fw')) {
290 copy_fw("$fwsrc0/$fw", $fwdest);
291 next;
292 }
293 if (-f "$fwsrc1/$fw") {
294 copy_fw("$fwsrc1/$fw", $fwdest);
295 next;
296 }
297 if (-f "$fwsrc3/$fw") {
298 copy_fw("$fwsrc3/$fw", $fwdest);
299 next;
300 }
301
302 if ($fw =~ m|/|) {
303 next if $skip->{$fw};
304
6bc6bdcb
FG
305 warn "unable to find firmware: $fw $mod\n";
306 $error++;
307 next;
7bbca2e6
FG
308 }
309
310 my $name = basename($fw);
311
312 my $sr = `find '$fwsrc1' -type f -name '$name'`;
313 chomp $sr;
314 if ($sr) {
33e03db5 315 print "found $fw in $sr\n";
7bbca2e6
FG
316 copy_fw($sr, $fwdest);
317 next;
318 }
319
320 $sr = `find '$fwsrc2' -type f -name '$name'`;
321 chomp $sr;
322 if ($sr) {
323 print "found $fw in $sr\n";
324 copy_fw($sr, $fwdest);
325 next;
326 }
327
328 $sr = `find '$fwsrc3' -type f -name '$name'`;
329 chomp $sr;
330 if ($sr) {
33e03db5 331 print "found $fw in $sr\n";
7bbca2e6
FG
332 copy_fw($sr, $fwdest);
333 next;
334 }
335
336 next if $skip->{$fw};
337 next if $fw =~ m|^dvb-|;
338
6bc6bdcb
FG
339 warn "unable to find firmware: $fw $mod\n";
340 $error++;
341 next;
7bbca2e6
FG
342}
343close(TMP);
344
6bc6bdcb 345exit($error);