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