~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/extract_xc3028.pl

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/usr/bin/env perl
  2 # SPDX-License-Identifier: GPL-2.0-only
  3 
  4 # Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org>
  5 #
  6 # In order to use, you need to:
  7 #       1) Download the windows driver with something like:
  8 #       Version 2.4
  9 #               wget http://www.twinhan.com/files/AW/BDA T/20080303_V1.0.6.7.zip
 10 #               or wget http://www.stefanringel.de/pub/20080303_V1.0.6.7.zip
 11 #       Version 2.7
 12 #               wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip
 13 #       2) Extract the files from the zip into the current dir:
 14 #               unzip -j 20080303_V1.0.6.7.zip 20080303_v1.0.6.7/UDXTTM6000.sys
 15 #               unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys
 16 #       3) run the script:
 17 #               ./extract_xc3028.pl
 18 #       4) copy the generated files:
 19 #               cp xc3028-v24.fw /lib/firmware
 20 #               cp xc3028-v27.fw /lib/firmware
 21 
 22 #use strict;
 23 use IO::Handle;
 24 
 25 my $debug=0;
 26 
 27 sub verify ($$)
 28 {
 29         my ($filename, $hash) = @_;
 30         my ($testhash);
 31 
 32         if (system("which md5sum > /dev/null 2>&1")) {
 33                 die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n";
 34         }
 35 
 36         open(CMD, "md5sum ".$filename."|");
 37         $testhash = <CMD>;
 38         $testhash =~ /([a-zA-Z0-9]*)/;
 39         $testhash = $1;
 40         close CMD;
 41                 die "Hash of extracted file does not match (found $testhash, expected $hash!\n" if ($testhash ne $hash);
 42 }
 43 
 44 sub get_hunk ($$)
 45 {
 46         my ($offset, $length) = @_;
 47         my ($chunklength, $buf, $rcount, $out);
 48 
 49         sysseek(INFILE, $offset, SEEK_SET);
 50         while ($length > 0) {
 51         # Calc chunk size
 52                 $chunklength = 2048;
 53                 $chunklength = $length if ($chunklength > $length);
 54 
 55                 $rcount = sysread(INFILE, $buf, $chunklength);
 56                 die "Ran out of data\n" if ($rcount != $chunklength);
 57                 $out .= $buf;
 58                 $length -= $rcount;
 59         }
 60         return $out;
 61 }
 62 
 63 sub write_le16($)
 64 {
 65         my $val = shift;
 66         my $msb = ($val >> 8) &0xff;
 67         my $lsb = $val & 0xff;
 68 
 69         syswrite(OUTFILE, chr($lsb).chr($msb));
 70 }
 71 
 72 sub write_le32($)
 73 {
 74         my $val = shift;
 75         my $l3 = ($val >> 24) & 0xff;
 76         my $l2 = ($val >> 16) & 0xff;
 77         my $l1 = ($val >> 8)  & 0xff;
 78         my $l0 = $val         & 0xff;
 79 
 80         syswrite(OUTFILE, chr($l0).chr($l1).chr($l2).chr($l3));
 81 }
 82 
 83 sub write_le64($$)
 84 {
 85         my $msb_val = shift;
 86         my $lsb_val = shift;
 87         my $l7 = ($msb_val >> 24) & 0xff;
 88         my $l6 = ($msb_val >> 16) & 0xff;
 89         my $l5 = ($msb_val >> 8)  & 0xff;
 90         my $l4 = $msb_val         & 0xff;
 91 
 92         my $l3 = ($lsb_val >> 24) & 0xff;
 93         my $l2 = ($lsb_val >> 16) & 0xff;
 94         my $l1 = ($lsb_val >> 8)  & 0xff;
 95         my $l0 = $lsb_val         & 0xff;
 96 
 97         syswrite(OUTFILE,
 98                  chr($l0).chr($l1).chr($l2).chr($l3).
 99                  chr($l4).chr($l5).chr($l6).chr($l7));
100 }
101 
102 sub write_hunk($$)
103 {
104         my ($offset, $length) = @_;
105         my $out = get_hunk($offset, $length);
106 
107         printf "(len %d) ",$length if ($debug);
108 
109         for (my $i=0;$i<$length;$i++) {
110                 printf "%02x ",ord(substr($out,$i,1)) if ($debug);
111         }
112         printf "\n" if ($debug);
113 
114         syswrite(OUTFILE, $out);
115 }
116 
117 sub write_hunk_fix_endian($$)
118 {
119         my ($offset, $length) = @_;
120         my $out = get_hunk($offset, $length);
121 
122         printf "(len_fix %d) ",$length if ($debug);
123 
124         for (my $i=0;$i<$length;$i++) {
125                 printf "%02x ",ord(substr($out,$i,1)) if ($debug);
126         }
127         printf "\n" if ($debug);
128 
129         my $i=0;
130         while ($i<$length) {
131                 my $size = ord(substr($out,$i,1))*256+ord(substr($out,$i+1,1));
132                 syswrite(OUTFILE, substr($out,$i+1,1));
133                 syswrite(OUTFILE, substr($out,$i,1));
134                 $i+=2;
135                 if ($size>0 && $size <0x8000) {
136                         for (my $j=0;$j<$size;$j++) {
137                                 syswrite(OUTFILE, substr($out,$j+$i,1));
138                         }
139                         $i+=$size;
140                 }
141         }
142 }
143 
144 sub main_firmware_24($$$$)
145 {
146         my $out;
147         my $j=0;
148         my $outfile = shift;
149         my $name    = shift;
150         my $version = shift;
151         my $nr_desc = shift;
152 
153         for ($j = length($name); $j <32; $j++) {
154                 $name = $name.chr(0);
155         }
156 
157         open OUTFILE, ">$outfile";
158         syswrite(OUTFILE, $name);
159         write_le16($version);
160         write_le16($nr_desc);
161 
162         #
163         # Firmware 0, type: BASE FW   F8MHZ (0x00000003), id: (0000000000000000), size: 6635
164         #
165 
166         write_le32(0x00000003);                 # Type
167         write_le64(0x00000000, 0x00000000);     # ID
168         write_le32(6635);                       # Size
169         write_hunk_fix_endian(257752, 6635);
170 
171         #
172         # Firmware 1, type: BASE FW   F8MHZ MTS (0x00000007), id: (0000000000000000), size: 6635
173         #
174 
175         write_le32(0x00000007);                 # Type
176         write_le64(0x00000000, 0x00000000);     # ID
177         write_le32(6635);                       # Size
178         write_hunk_fix_endian(264392, 6635);
179 
180         #
181         # Firmware 2, type: BASE FW   FM (0x00000401), id: (0000000000000000), size: 6525
182         #
183 
184         write_le32(0x00000401);                 # Type
185         write_le64(0x00000000, 0x00000000);     # ID
186         write_le32(6525);                       # Size
187         write_hunk_fix_endian(271040, 6525);
188 
189         #
190         # Firmware 3, type: BASE FW   FM INPUT1 (0x00000c01), id: (0000000000000000), size: 6539
191         #
192 
193         write_le32(0x00000c01);                 # Type
194         write_le64(0x00000000, 0x00000000);     # ID
195         write_le32(6539);                       # Size
196         write_hunk_fix_endian(277568, 6539);
197 
198         #
199         # Firmware 4, type: BASE FW   (0x00000001), id: (0000000000000000), size: 6633
200         #
201 
202         write_le32(0x00000001);                 # Type
203         write_le64(0x00000000, 0x00000000);     # ID
204         write_le32(6633);                       # Size
205         write_hunk_fix_endian(284120, 6633);
206 
207         #
208         # Firmware 5, type: BASE FW   MTS (0x00000005), id: (0000000000000000), size: 6617
209         #
210 
211         write_le32(0x00000005);                 # Type
212         write_le64(0x00000000, 0x00000000);     # ID
213         write_le32(6617);                       # Size
214         write_hunk_fix_endian(290760, 6617);
215 
216         #
217         # Firmware 6, type: STD FW    (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
218         #
219 
220         write_le32(0x00000000);                 # Type
221         write_le64(0x00000001, 0x00000007);     # ID
222         write_le32(161);                        # Size
223         write_hunk_fix_endian(297384, 161);
224 
225         #
226         # Firmware 7, type: STD FW    MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
227         #
228 
229         write_le32(0x00000004);                 # Type
230         write_le64(0x00000001, 0x00000007);     # ID
231         write_le32(169);                        # Size
232         write_hunk_fix_endian(297552, 169);
233 
234         #
235         # Firmware 8, type: STD FW    (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
236         #
237 
238         write_le32(0x00000000);                 # Type
239         write_le64(0x00000002, 0x00000007);     # ID
240         write_le32(161);                        # Size
241         write_hunk_fix_endian(297728, 161);
242 
243         #
244         # Firmware 9, type: STD FW    MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
245         #
246 
247         write_le32(0x00000004);                 # Type
248         write_le64(0x00000002, 0x00000007);     # ID
249         write_le32(169);                        # Size
250         write_hunk_fix_endian(297896, 169);
251 
252         #
253         # Firmware 10, type: STD FW    (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
254         #
255 
256         write_le32(0x00000000);                 # Type
257         write_le64(0x00000004, 0x00000007);     # ID
258         write_le32(161);                        # Size
259         write_hunk_fix_endian(298072, 161);
260 
261         #
262         # Firmware 11, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
263         #
264 
265         write_le32(0x00000004);                 # Type
266         write_le64(0x00000004, 0x00000007);     # ID
267         write_le32(169);                        # Size
268         write_hunk_fix_endian(298240, 169);
269 
270         #
271         # Firmware 12, type: STD FW    (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
272         #
273 
274         write_le32(0x00000000);                 # Type
275         write_le64(0x00000008, 0x00000007);     # ID
276         write_le32(161);                        # Size
277         write_hunk_fix_endian(298416, 161);
278 
279         #
280         # Firmware 13, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
281         #
282 
283         write_le32(0x00000004);                 # Type
284         write_le64(0x00000008, 0x00000007);     # ID
285         write_le32(169);                        # Size
286         write_hunk_fix_endian(298584, 169);
287 
288         #
289         # Firmware 14, type: STD FW    (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
290         #
291 
292         write_le32(0x00000000);                 # Type
293         write_le64(0x00000003, 0x000000e0);     # ID
294         write_le32(161);                        # Size
295         write_hunk_fix_endian(298760, 161);
296 
297         #
298         # Firmware 15, type: STD FW    MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
299         #
300 
301         write_le32(0x00000004);                 # Type
302         write_le64(0x00000003, 0x000000e0);     # ID
303         write_le32(169);                        # Size
304         write_hunk_fix_endian(298928, 169);
305 
306         #
307         # Firmware 16, type: STD FW    (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
308         #
309 
310         write_le32(0x00000000);                 # Type
311         write_le64(0x0000000c, 0x000000e0);     # ID
312         write_le32(161);                        # Size
313         write_hunk_fix_endian(299104, 161);
314 
315         #
316         # Firmware 17, type: STD FW    MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
317         #
318 
319         write_le32(0x00000004);                 # Type
320         write_le64(0x0000000c, 0x000000e0);     # ID
321         write_le32(169);                        # Size
322         write_hunk_fix_endian(299272, 169);
323 
324         #
325         # Firmware 18, type: STD FW    (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
326         #
327 
328         write_le32(0x00000000);                 # Type
329         write_le64(0x00000000, 0x00200000);     # ID
330         write_le32(161);                        # Size
331         write_hunk_fix_endian(299448, 161);
332 
333         #
334         # Firmware 19, type: STD FW    MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
335         #
336 
337         write_le32(0x00000004);                 # Type
338         write_le64(0x00000000, 0x00200000);     # ID
339         write_le32(169);                        # Size
340         write_hunk_fix_endian(299616, 169);
341 
342         #
343         # Firmware 20, type: STD FW    (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
344         #
345 
346         write_le32(0x00000000);                 # Type
347         write_le64(0x00000000, 0x04000000);     # ID
348         write_le32(161);                        # Size
349         write_hunk_fix_endian(299792, 161);
350 
351         #
352         # Firmware 21, type: STD FW    MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
353         #
354 
355         write_le32(0x00000004);                 # Type
356         write_le64(0x00000000, 0x04000000);     # ID
357         write_le32(169);                        # Size
358         write_hunk_fix_endian(299960, 169);
359 
360         #
361         # Firmware 22, type: STD FW    D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
362         #
363 
364         write_le32(0x00010030);                 # Type
365         write_le64(0x00000000, 0x00000000);     # ID
366         write_le32(149);                        # Size
367         write_hunk_fix_endian(300136, 149);
368 
369         #
370         # Firmware 23, type: STD FW    D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
371         #
372 
373         write_le32(0x00000068);                 # Type
374         write_le64(0x00000000, 0x00000000);     # ID
375         write_le32(149);                        # Size
376         write_hunk_fix_endian(300296, 149);
377 
378         #
379         # Firmware 24, type: STD FW    D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
380         #
381 
382         write_le32(0x00000070);                 # Type
383         write_le64(0x00000000, 0x00000000);     # ID
384         write_le32(149);                        # Size
385         write_hunk_fix_endian(300448, 149);
386 
387         #
388         # Firmware 25, type: STD FW    D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
389         #
390 
391         write_le32(0x00000088);                 # Type
392         write_le64(0x00000000, 0x00000000);     # ID
393         write_le32(149);                        # Size
394         write_hunk_fix_endian(300608, 149);
395 
396         #
397         # Firmware 26, type: STD FW    D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
398         #
399 
400         write_le32(0x00000090);                 # Type
401         write_le64(0x00000000, 0x00000000);     # ID
402         write_le32(149);                        # Size
403         write_hunk_fix_endian(300760, 149);
404 
405         #
406         # Firmware 27, type: STD FW    D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
407         #
408 
409         write_le32(0x00000108);                 # Type
410         write_le64(0x00000000, 0x00000000);     # ID
411         write_le32(149);                        # Size
412         write_hunk_fix_endian(300920, 149);
413 
414         #
415         # Firmware 28, type: STD FW    D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
416         #
417 
418         write_le32(0x00000110);                 # Type
419         write_le64(0x00000000, 0x00000000);     # ID
420         write_le32(149);                        # Size
421         write_hunk_fix_endian(301072, 149);
422 
423         #
424         # Firmware 29, type: STD FW    D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
425         #
426 
427         write_le32(0x00000208);                 # Type
428         write_le64(0x00000000, 0x00000000);     # ID
429         write_le32(149);                        # Size
430         write_hunk_fix_endian(301232, 149);
431 
432         #
433         # Firmware 30, type: STD FW    D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
434         #
435 
436         write_le32(0x00000210);                 # Type
437         write_le64(0x00000000, 0x00000000);     # ID
438         write_le32(149);                        # Size
439         write_hunk_fix_endian(301384, 149);
440 
441         #
442         # Firmware 31, type: STD FW    FM (0x00000400), id: (0000000000000000), size: 135
443         #
444 
445         write_le32(0x00000400);                 # Type
446         write_le64(0x00000000, 0x00000000);     # ID
447         write_le32(135);                        # Size
448         write_hunk_fix_endian(301554, 135);
449 
450         #
451         # Firmware 32, type: STD FW    (0x00000000), id: PAL/I (0000000000000010), size: 161
452         #
453 
454         write_le32(0x00000000);                 # Type
455         write_le64(0x00000000, 0x00000010);     # ID
456         write_le32(161);                        # Size
457         write_hunk_fix_endian(301688, 161);
458 
459         #
460         # Firmware 33, type: STD FW    MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
461         #
462 
463         write_le32(0x00000004);                 # Type
464         write_le64(0x00000000, 0x00000010);     # ID
465         write_le32(169);                        # Size
466         write_hunk_fix_endian(301856, 169);
467 
468         #
469         # Firmware 34, type: STD FW    (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
470         #
471 
472         #
473         # Firmware 35, type: STD FW    (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
474         #
475 
476         write_le32(0x00000000);                 # Type
477         write_le64(0x0000000c, 0x00400000);     # ID
478         write_le32(161);                        # Size
479         write_hunk_fix_endian(302032, 161);
480 
481         #
482         # Firmware 36, type: STD FW    (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
483         #
484 
485         write_le32(0x00000000);                 # Type
486         write_le64(0x00000000, 0x00800000);     # ID
487         write_le32(161);                        # Size
488         write_hunk_fix_endian(302200, 161);
489 
490         #
491         # Firmware 37, type: STD FW    (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
492         #
493 
494         write_le32(0x00000000);                 # Type
495         write_le64(0x00000000, 0x00008000);     # ID
496         write_le32(161);                        # Size
497         write_hunk_fix_endian(302368, 161);
498 
499         #
500         # Firmware 38, type: STD FW    LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
501         #
502 
503         write_le32(0x00001000);                 # Type
504         write_le64(0x00000000, 0x00008000);     # ID
505         write_le32(161);                        # Size
506         write_hunk_fix_endian(302536, 161);
507 
508         #
509         # Firmware 39, type: STD FW    LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
510         #
511 
512         write_le32(0x00003000);                 # Type
513         write_le64(0x00000000, 0x00008000);     # ID
514         write_le32(161);                        # Size
515         write_hunk_fix_endian(302704, 161);
516 
517         #
518         # Firmware 40, type: STD FW    MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
519         #
520 
521         write_le32(0x00000004);                 # Type
522         write_le64(0x00000000, 0x00008000);     # ID
523         write_le32(169);                        # Size
524         write_hunk_fix_endian(302872, 169);
525 
526         #
527         # Firmware 41, type: STD FW    (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
528         #
529 
530         write_le32(0x00000000);                 # Type
531         write_le64(0x00000000, 0x0000b700);     # ID
532         write_le32(161);                        # Size
533         write_hunk_fix_endian(303048, 161);
534 
535         #
536         # Firmware 42, type: STD FW    LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
537         #
538 
539         write_le32(0x00001000);                 # Type
540         write_le64(0x00000000, 0x0000b700);     # ID
541         write_le32(161);                        # Size
542         write_hunk_fix_endian(303216, 161);
543 
544         #
545         # Firmware 43, type: STD FW    LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
546         #
547 
548         write_le32(0x00003000);                 # Type
549         write_le64(0x00000000, 0x0000b700);     # ID
550         write_le32(161);                        # Size
551         write_hunk_fix_endian(303384, 161);
552 
553         #
554         # Firmware 44, type: STD FW    (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
555         #
556 
557         write_le32(0x00000000);                 # Type
558         write_le64(0x00000000, 0x00002000);     # ID
559         write_le32(161);                        # Size
560         write_hunk_fix_endian(303552, 161);
561 
562         #
563         # Firmware 45, type: STD FW    MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
564         #
565 
566         write_le32(0x00000004);                 # Type
567         write_le64(0x00000000, 0x0000b700);     # ID
568         write_le32(169);                        # Size
569         write_hunk_fix_endian(303720, 169);
570 
571         #
572         # Firmware 46, type: STD FW    MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
573         #
574 
575         write_le32(0x00001004);                 # Type
576         write_le64(0x00000000, 0x0000b700);     # ID
577         write_le32(169);                        # Size
578         write_hunk_fix_endian(303896, 169);
579 
580         #
581         # Firmware 47, type: STD FW    MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
582         #
583 
584         write_le32(0x00003004);                 # Type
585         write_le64(0x00000000, 0x0000b700);     # ID
586         write_le32(169);                        # Size
587         write_hunk_fix_endian(304072, 169);
588 
589         #
590         # Firmware 48, type: SCODE FW  HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
591         #
592 
593         write_le32(0x60000000);                 # Type
594         write_le64(0x00000000, 0x00000000);     # ID
595         write_le16(3280);                       # IF
596         write_le32(192);                        # Size
597         write_hunk(309048, 192);
598 
599         #
600         # Firmware 49, type: SCODE FW  HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
601         #
602 
603 #       write_le32(0x60000000);                 # Type
604 #       write_le64(0x00000000, 0x00000000);     # ID
605 #       write_le16(3300);                       # IF
606 #       write_le32(192);                        # Size
607 #       write_hunk(304440, 192);
608 
609         #
610         # Firmware 50, type: SCODE FW  HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
611         #
612 
613         write_le32(0x60000000);                 # Type
614         write_le64(0x00000000, 0x00000000);     # ID
615         write_le16(3440);                       # IF
616         write_le32(192);                        # Size
617         write_hunk(309432, 192);
618 
619         #
620         # Firmware 51, type: SCODE FW  HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
621         #
622 
623         write_le32(0x60000000);                 # Type
624         write_le64(0x00000000, 0x00000000);     # ID
625         write_le16(3460);                       # IF
626         write_le32(192);                        # Size
627         write_hunk(309624, 192);
628 
629         #
630         # Firmware 52, type: SCODE FW  DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
631         #
632 
633         write_le32(0x60210020);                 # Type
634         write_le64(0x00000000, 0x00000000);     # ID
635         write_le16(3800);                       # IF
636         write_le32(192);                        # Size
637         write_hunk(306936, 192);
638 
639         #
640         # Firmware 53, type: SCODE FW  HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
641         #
642 
643         write_le32(0x60000000);                 # Type
644         write_le64(0x00000000, 0x00000000);     # ID
645         write_le16(4000);                       # IF
646         write_le32(192);                        # Size
647         write_hunk(309240, 192);
648 
649         #
650         # Firmware 54, type: SCODE FW  DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
651         #
652 
653         write_le32(0x60410020);                 # Type
654         write_le64(0x00000000, 0x00000000);     # ID
655         write_le16(4080);                       # IF
656         write_le32(192);                        # Size
657         write_hunk(307128, 192);
658 
659         #
660         # Firmware 55, type: SCODE FW  HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
661         #
662 
663         write_le32(0x60000000);                 # Type
664         write_le64(0x00000000, 0x00000000);     # ID
665         write_le16(4200);                       # IF
666         write_le32(192);                        # Size
667         write_hunk(308856, 192);
668 
669         #
670         # Firmware 56, type: SCODE FW  MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
671         #
672 
673         write_le32(0x60008000);                 # Type
674         write_le64(0x00000000, 0x00008000);     # ID
675         write_le16(4320);                       # IF
676         write_le32(192);                        # Size
677         write_hunk(305208, 192);
678 
679         #
680         # Firmware 57, type: SCODE FW  HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
681         #
682 
683         write_le32(0x60000000);                 # Type
684         write_le64(0x00000000, 0x00000000);     # ID
685         write_le16(4450);                       # IF
686         write_le32(192);                        # Size
687         write_hunk(309816, 192);
688 
689         #
690         # Firmware 58, type: SCODE FW  MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
691         #
692 
693         write_le32(0x6002b004);                 # Type
694         write_le64(0x00000000, 0x0000b700);     # ID
695         write_le16(4500);                       # IF
696         write_le32(192);                        # Size
697         write_hunk(304824, 192);
698 
699         #
700         # Firmware 59, type: SCODE FW  LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
701         #
702 
703         write_le32(0x60023000);                 # Type
704         write_le64(0x00000000, 0x00008000);     # ID
705         write_le16(4600);                       # IF
706         write_le32(192);                        # Size
707         write_hunk(305016, 192);
708 
709         #
710         # Firmware 60, type: SCODE FW  DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
711         #
712 
713         write_le32(0x620003e0);                 # Type
714         write_le64(0x00000000, 0x00000000);     # ID
715         write_le16(4760);                       # IF
716         write_le32(192);                        # Size
717         write_hunk(304440, 192);
718 
719         #
720         # Firmware 61, type: SCODE FW  HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
721         #
722 
723         write_le32(0x60000000);                 # Type
724         write_le64(0x00000000, 0x00000000);     # ID
725         write_le16(4940);                       # IF
726         write_le32(192);                        # Size
727         write_hunk(308664, 192);
728 
729         #
730         # Firmware 62, type: SCODE FW  HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
731         #
732 
733         write_le32(0x60000000);                 # Type
734         write_le64(0x00000000, 0x00000000);     # ID
735         write_le16(5260);                       # IF
736         write_le32(192);                        # Size
737         write_hunk(307704, 192);
738 
739         #
740         # Firmware 63, type: SCODE FW  MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
741         #
742 
743         write_le32(0x60008000);                 # Type
744         write_le64(0x0000000f, 0x00000007);     # ID
745         write_le16(5320);                       # IF
746         write_le32(192);                        # Size
747         write_hunk(307896, 192);
748 
749         #
750         # Firmware 64, type: SCODE FW  DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
751         #
752 
753         write_le32(0x65000380);                 # Type
754         write_le64(0x00000000, 0x00000000);     # ID
755         write_le16(5400);                       # IF
756         write_le32(192);                        # Size
757         write_hunk(304248, 192);
758 
759         #
760         # Firmware 65, type: SCODE FW  DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
761         #
762 
763         write_le32(0x60110020);                 # Type
764         write_le64(0x00000000, 0x00000000);     # ID
765         write_le16(5580);                       # IF
766         write_le32(192);                        # Size
767         write_hunk(306744, 192);
768 
769         #
770         # Firmware 66, type: SCODE FW  HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
771         #
772 
773         write_le32(0x60000000);                 # Type
774         write_le64(0x00000003, 0x00000007);     # ID
775         write_le16(5640);                       # IF
776         write_le32(192);                        # Size
777         write_hunk(305592, 192);
778 
779         #
780         # Firmware 67, type: SCODE FW  HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
781         #
782 
783         write_le32(0x60000000);                 # Type
784         write_le64(0x0000000c, 0x00000007);     # ID
785         write_le16(5740);                       # IF
786         write_le32(192);                        # Size
787         write_hunk(305784, 192);
788 
789         #
790         # Firmware 68, type: SCODE FW  HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
791         #
792 
793         write_le32(0x60000000);                 # Type
794         write_le64(0x00000000, 0x00000000);     # ID
795         write_le16(5900);                       # IF
796         write_le32(192);                        # Size
797         write_hunk(307512, 192);
798 
799         #
800         # Firmware 69, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
801         #
802 
803         write_le32(0x60008000);                 # Type
804         write_le64(0x0000000c, 0x04c000f0);     # ID
805         write_le16(6000);                       # IF
806         write_le32(192);                        # Size
807         write_hunk(305576, 192);
808 
809         #
810         # Firmware 70, type: SCODE FW  DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
811         #
812 
813         write_le32(0x68050060);                 # Type
814         write_le64(0x00000000, 0x00000000);     # ID
815         write_le16(6200);                       # IF
816         write_le32(192);                        # Size
817         write_hunk(306552, 192);
818 
819         #
820         # Firmware 71, type: SCODE FW  HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
821         #
822 
823         write_le32(0x60000000);                 # Type
824         write_le64(0x00000000, 0x00000010);     # ID
825         write_le16(6240);                       # IF
826         write_le32(192);                        # Size
827         write_hunk(305400, 192);
828 
829         #
830         # Firmware 72, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
831         #
832 
833         write_le32(0x60008000);                 # Type
834         write_le64(0x00000000, 0x00200000);     # ID
835         write_le16(6320);                       # IF
836         write_le32(192);                        # Size
837         write_hunk(308472, 192);
838 
839         #
840         # Firmware 73, type: SCODE FW  HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
841         #
842 
843         write_le32(0x60000000);                 # Type
844         write_le64(0x00000000, 0x00200000);     # ID
845         write_le16(6340);                       # IF
846         write_le32(192);                        # Size
847         write_hunk(306360, 192);
848 
849         #
850         # Firmware 74, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
851         #
852 
853         write_le32(0x60008000);                 # Type
854         write_le64(0x0000000c, 0x044000e0);     # ID
855         write_le16(6500);                       # IF
856         write_le32(192);                        # Size
857         write_hunk(308280, 192);
858 
859         #
860         # Firmware 75, type: SCODE FW  DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
861         #
862 
863         write_le32(0x60090020);                 # Type
864         write_le64(0x00000000, 0x00000000);     # ID
865         write_le16(6580);                       # IF
866         write_le32(192);                        # Size
867         write_hunk(304632, 192);
868 
869         #
870         # Firmware 76, type: SCODE FW  HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
871         #
872 
873         write_le32(0x60000000);                 # Type
874         write_le64(0x00000003, 0x000000e0);     # ID
875         write_le16(6600);                       # IF
876         write_le32(192);                        # Size
877         write_hunk(306168, 192);
878 
879         #
880         # Firmware 77, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
881         #
882 
883         write_le32(0x60008000);                 # Type
884         write_le64(0x00000003, 0x000000e0);     # ID
885         write_le16(6680);                       # IF
886         write_le32(192);                        # Size
887         write_hunk(308088, 192);
888 
889         #
890         # Firmware 78, type: SCODE FW  DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
891         #
892 
893         write_le32(0x60810020);                 # Type
894         write_le64(0x00000000, 0x00000000);     # ID
895         write_le16(8140);                       # IF
896         write_le32(192);                        # Size
897         write_hunk(307320, 192);
898 
899         #
900         # Firmware 79, type: SCODE FW  HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
901         #
902 
903 #       write_le32(0x60000000);                 # Type
904 #       write_le64(0x00000000, 0x00000000);     # ID
905 #       write_le16(8200);                       # IF
906 #       write_le32(192);                        # Size
907 #       write_hunk(308088, 192);
908 }
909 
910 sub main_firmware_27($$$$)
911 {
912         my $out;
913         my $j=0;
914         my $outfile = shift;
915         my $name    = shift;
916         my $version = shift;
917         my $nr_desc = shift;
918 
919         for ($j = length($name); $j <32; $j++) {
920                 $name = $name.chr(0);
921         }
922 
923         open OUTFILE, ">$outfile";
924         syswrite(OUTFILE, $name);
925         write_le16($version);
926         write_le16($nr_desc);
927 
928         #
929         # Firmware 0, type: BASE FW   F8MHZ (0x00000003), id: (0000000000000000), size: 8718
930         #
931 
932         write_le32(0x00000003);                 # Type
933         write_le64(0x00000000, 0x00000000);     # ID
934         write_le32(8718);                       # Size
935         write_hunk_fix_endian(813432, 8718);
936 
937         #
938         # Firmware 1, type: BASE FW   F8MHZ MTS (0x00000007), id: (0000000000000000), size: 8712
939         #
940 
941         write_le32(0x00000007);                 # Type
942         write_le64(0x00000000, 0x00000000);     # ID
943         write_le32(8712);                       # Size
944         write_hunk_fix_endian(822152, 8712);
945 
946         #
947         # Firmware 2, type: BASE FW   FM (0x00000401), id: (0000000000000000), size: 8562
948         #
949 
950         write_le32(0x00000401);                 # Type
951         write_le64(0x00000000, 0x00000000);     # ID
952         write_le32(8562);                       # Size
953         write_hunk_fix_endian(830872, 8562);
954 
955         #
956         # Firmware 3, type: BASE FW   FM INPUT1 (0x00000c01), id: (0000000000000000), size: 8576
957         #
958 
959         write_le32(0x00000c01);                 # Type
960         write_le64(0x00000000, 0x00000000);     # ID
961         write_le32(8576);                       # Size
962         write_hunk_fix_endian(839440, 8576);
963 
964         #
965         # Firmware 4, type: BASE FW   (0x00000001), id: (0000000000000000), size: 8706
966         #
967 
968         write_le32(0x00000001);                 # Type
969         write_le64(0x00000000, 0x00000000);     # ID
970         write_le32(8706);                       # Size
971         write_hunk_fix_endian(848024, 8706);
972 
973         #
974         # Firmware 5, type: BASE FW   MTS (0x00000005), id: (0000000000000000), size: 8682
975         #
976 
977         write_le32(0x00000005);                 # Type
978         write_le64(0x00000000, 0x00000000);     # ID
979         write_le32(8682);                       # Size
980         write_hunk_fix_endian(856736, 8682);
981 
982         #
983         # Firmware 6, type: STD FW    (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
984         #
985 
986         write_le32(0x00000000);                 # Type
987         write_le64(0x00000001, 0x00000007);     # ID
988         write_le32(161);                        # Size
989         write_hunk_fix_endian(865424, 161);
990 
991         #
992         # Firmware 7, type: STD FW    MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
993         #
994 
995         write_le32(0x00000004);                 # Type
996         write_le64(0x00000001, 0x00000007);     # ID
997         write_le32(169);                        # Size
998         write_hunk_fix_endian(865592, 169);
999 
1000         #
1001         # Firmware 8, type: STD FW    (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
1002         #
1003 
1004         write_le32(0x00000000);                 # Type
1005         write_le64(0x00000002, 0x00000007);     # ID
1006         write_le32(161);                        # Size
1007         write_hunk_fix_endian(865424, 161);
1008 
1009         #
1010         # Firmware 9, type: STD FW    MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
1011         #
1012 
1013         write_le32(0x00000004);                 # Type
1014         write_le64(0x00000002, 0x00000007);     # ID
1015         write_le32(169);                        # Size
1016         write_hunk_fix_endian(865592, 169);
1017 
1018         #
1019         # Firmware 10, type: STD FW    (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
1020         #
1021 
1022         write_le32(0x00000000);                 # Type
1023         write_le64(0x00000004, 0x00000007);     # ID
1024         write_le32(161);                        # Size
1025         write_hunk_fix_endian(866112, 161);
1026 
1027         #
1028         # Firmware 11, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
1029         #
1030 
1031         write_le32(0x00000004);                 # Type
1032         write_le64(0x00000004, 0x00000007);     # ID
1033         write_le32(169);                        # Size
1034         write_hunk_fix_endian(866280, 169);
1035 
1036         #
1037         # Firmware 12, type: STD FW    (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
1038         #
1039 
1040         write_le32(0x00000000);                 # Type
1041         write_le64(0x00000008, 0x00000007);     # ID
1042         write_le32(161);                        # Size
1043         write_hunk_fix_endian(866112, 161);
1044 
1045         #
1046         # Firmware 13, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
1047         #
1048 
1049         write_le32(0x00000004);                 # Type
1050         write_le64(0x00000008, 0x00000007);     # ID
1051         write_le32(169);                        # Size
1052         write_hunk_fix_endian(866280, 169);
1053 
1054         #
1055         # Firmware 14, type: STD FW    (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
1056         #
1057 
1058         write_le32(0x00000000);                 # Type
1059         write_le64(0x00000003, 0x000000e0);     # ID
1060         write_le32(161);                        # Size
1061         write_hunk_fix_endian(866800, 161);
1062 
1063         #
1064         # Firmware 15, type: STD FW    MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
1065         #
1066 
1067         write_le32(0x00000004);                 # Type
1068         write_le64(0x00000003, 0x000000e0);     # ID
1069         write_le32(169);                        # Size
1070         write_hunk_fix_endian(866968, 169);
1071 
1072         #
1073         # Firmware 16, type: STD FW    (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
1074         #
1075 
1076         write_le32(0x00000000);                 # Type
1077         write_le64(0x0000000c, 0x000000e0);     # ID
1078         write_le32(161);                        # Size
1079         write_hunk_fix_endian(867144, 161);
1080 
1081         #
1082         # Firmware 17, type: STD FW    MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
1083         #
1084 
1085         write_le32(0x00000004);                 # Type
1086         write_le64(0x0000000c, 0x000000e0);     # ID
1087         write_le32(169);                        # Size
1088         write_hunk_fix_endian(867312, 169);
1089 
1090         #
1091         # Firmware 18, type: STD FW    (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
1092         #
1093 
1094         write_le32(0x00000000);                 # Type
1095         write_le64(0x00000000, 0x00200000);     # ID
1096         write_le32(161);                        # Size
1097         write_hunk_fix_endian(867488, 161);
1098 
1099         #
1100         # Firmware 19, type: STD FW    MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
1101         #
1102 
1103         write_le32(0x00000004);                 # Type
1104         write_le64(0x00000000, 0x00200000);     # ID
1105         write_le32(169);                        # Size
1106         write_hunk_fix_endian(867656, 169);
1107 
1108         #
1109         # Firmware 20, type: STD FW    (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
1110         #
1111 
1112         write_le32(0x00000000);                 # Type
1113         write_le64(0x00000000, 0x04000000);     # ID
1114         write_le32(161);                        # Size
1115         write_hunk_fix_endian(867832, 161);
1116 
1117         #
1118         # Firmware 21, type: STD FW    MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
1119         #
1120 
1121         write_le32(0x00000004);                 # Type
1122         write_le64(0x00000000, 0x04000000);     # ID
1123         write_le32(169);                        # Size
1124         write_hunk_fix_endian(868000, 169);
1125 
1126         #
1127         # Firmware 22, type: STD FW    D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
1128         #
1129 
1130         write_le32(0x00010030);                 # Type
1131         write_le64(0x00000000, 0x00000000);     # ID
1132         write_le32(149);                        # Size
1133         write_hunk_fix_endian(868176, 149);
1134 
1135         #
1136         # Firmware 23, type: STD FW    D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
1137         #
1138 
1139         write_le32(0x00000068);                 # Type
1140         write_le64(0x00000000, 0x00000000);     # ID
1141         write_le32(149);                        # Size
1142         write_hunk_fix_endian(868336, 149);
1143 
1144         #
1145         # Firmware 24, type: STD FW    D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
1146         #
1147 
1148         write_le32(0x00000070);                 # Type
1149         write_le64(0x00000000, 0x00000000);     # ID
1150         write_le32(149);                        # Size
1151         write_hunk_fix_endian(868488, 149);
1152 
1153         #
1154         # Firmware 25, type: STD FW    D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
1155         #
1156 
1157         write_le32(0x00000088);                 # Type
1158         write_le64(0x00000000, 0x00000000);     # ID
1159         write_le32(149);                        # Size
1160         write_hunk_fix_endian(868648, 149);
1161 
1162         #
1163         # Firmware 26, type: STD FW    D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
1164         #
1165 
1166         write_le32(0x00000090);                 # Type
1167         write_le64(0x00000000, 0x00000000);     # ID
1168         write_le32(149);                        # Size
1169         write_hunk_fix_endian(868800, 149);
1170 
1171         #
1172         # Firmware 27, type: STD FW    D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
1173         #
1174 
1175         write_le32(0x00000108);                 # Type
1176         write_le64(0x00000000, 0x00000000);     # ID
1177         write_le32(149);                        # Size
1178         write_hunk_fix_endian(868960, 149);
1179 
1180         #
1181         # Firmware 28, type: STD FW    D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
1182         #
1183 
1184         write_le32(0x00000110);                 # Type
1185         write_le64(0x00000000, 0x00000000);     # ID
1186         write_le32(149);                        # Size
1187         write_hunk_fix_endian(869112, 149);
1188 
1189         #
1190         # Firmware 29, type: STD FW    D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
1191         #
1192 
1193         write_le32(0x00000208);                 # Type
1194         write_le64(0x00000000, 0x00000000);     # ID
1195         write_le32(149);                        # Size
1196         write_hunk_fix_endian(868648, 149);
1197 
1198         #
1199         # Firmware 30, type: STD FW    D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
1200         #
1201 
1202         write_le32(0x00000210);                 # Type
1203         write_le64(0x00000000, 0x00000000);     # ID
1204         write_le32(149);                        # Size
1205         write_hunk_fix_endian(868800, 149);
1206 
1207         #
1208         # Firmware 31, type: STD FW    FM (0x00000400), id: (0000000000000000), size: 135
1209         #
1210 
1211         write_le32(0x00000400);                 # Type
1212         write_le64(0x00000000, 0x00000000);     # ID
1213         write_le32(135);                        # Size
1214         write_hunk_fix_endian(869584, 135);
1215 
1216         #
1217         # Firmware 32, type: STD FW    (0x00000000), id: PAL/I (0000000000000010), size: 161
1218         #
1219 
1220         write_le32(0x00000000);                 # Type
1221         write_le64(0x00000000, 0x00000010);     # ID
1222         write_le32(161);                        # Size
1223         write_hunk_fix_endian(869728, 161);
1224 
1225         #
1226         # Firmware 33, type: STD FW    MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
1227         #
1228 
1229         write_le32(0x00000004);                 # Type
1230         write_le64(0x00000000, 0x00000010);     # ID
1231         write_le32(169);                        # Size
1232         write_hunk_fix_endian(869896, 169);
1233 
1234         #
1235         # Firmware 34, type: STD FW    (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
1236         #
1237 
1238         write_le32(0x00000000);                 # Type
1239         write_le64(0x00000010, 0x00400000);     # ID
1240         write_le32(169);                        # Size
1241         write_hunk_fix_endian(870072, 169);
1242 
1243         #
1244         # Firmware 35, type: STD FW    (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
1245         #
1246 
1247         write_le32(0x00000000);                 # Type
1248         write_le64(0x0000000c, 0x00400000);     # ID
1249         write_le32(161);                        # Size
1250         write_hunk_fix_endian(870248, 161);
1251 
1252         #
1253         # Firmware 36, type: STD FW    (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
1254         #
1255 
1256         write_le32(0x00000000);                 # Type
1257         write_le64(0x00000000, 0x00800000);     # ID
1258         write_le32(161);                        # Size
1259         write_hunk_fix_endian(870416, 161);
1260 
1261         #
1262         # Firmware 37, type: STD FW    (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
1263         #
1264 
1265         write_le32(0x00000000);                 # Type
1266         write_le64(0x00000000, 0x00008000);     # ID
1267         write_le32(161);                        # Size
1268         write_hunk_fix_endian(870584, 161);
1269 
1270         #
1271         # Firmware 38, type: STD FW    LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
1272         #
1273 
1274         write_le32(0x00001000);                 # Type
1275         write_le64(0x00000000, 0x00008000);     # ID
1276         write_le32(161);                        # Size
1277         write_hunk_fix_endian(870752, 161);
1278 
1279         #
1280         # Firmware 39, type: STD FW    LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
1281         #
1282 
1283         write_le32(0x00003000);                 # Type
1284         write_le64(0x00000000, 0x00008000);     # ID
1285         write_le32(161);                        # Size
1286         write_hunk_fix_endian(870920, 161);
1287 
1288         #
1289         # Firmware 40, type: STD FW    MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
1290         #
1291 
1292         write_le32(0x00000004);                 # Type
1293         write_le64(0x00000000, 0x00008000);     # ID
1294         write_le32(169);                        # Size
1295         write_hunk_fix_endian(871088, 169);
1296 
1297         #
1298         # Firmware 41, type: STD FW    (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1299         #
1300 
1301         write_le32(0x00000000);                 # Type
1302         write_le64(0x00000000, 0x0000b700);     # ID
1303         write_le32(161);                        # Size
1304         write_hunk_fix_endian(871264, 161);
1305 
1306         #
1307         # Firmware 42, type: STD FW    LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1308         #
1309 
1310         write_le32(0x00001000);                 # Type
1311         write_le64(0x00000000, 0x0000b700);     # ID
1312         write_le32(161);                        # Size
1313         write_hunk_fix_endian(871432, 161);
1314 
1315         #
1316         # Firmware 43, type: STD FW    LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1317         #
1318 
1319         write_le32(0x00003000);                 # Type
1320         write_le64(0x00000000, 0x0000b700);     # ID
1321         write_le32(161);                        # Size
1322         write_hunk_fix_endian(871600, 161);
1323 
1324         #
1325         # Firmware 44, type: STD FW    (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
1326         #
1327 
1328         write_le32(0x00000000);                 # Type
1329         write_le64(0x00000000, 0x00002000);     # ID
1330         write_le32(161);                        # Size
1331         write_hunk_fix_endian(871264, 161);
1332 
1333         #
1334         # Firmware 45, type: STD FW    MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1335         #
1336 
1337         write_le32(0x00000004);                 # Type
1338         write_le64(0x00000000, 0x0000b700);     # ID
1339         write_le32(169);                        # Size
1340         write_hunk_fix_endian(871936, 169);
1341 
1342         #
1343         # Firmware 46, type: STD FW    MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1344         #
1345 
1346         write_le32(0x00001004);                 # Type
1347         write_le64(0x00000000, 0x0000b700);     # ID
1348         write_le32(169);                        # Size
1349         write_hunk_fix_endian(872112, 169);
1350 
1351         #
1352         # Firmware 47, type: STD FW    MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1353         #
1354 
1355         write_le32(0x00003004);                 # Type
1356         write_le64(0x00000000, 0x0000b700);     # ID
1357         write_le32(169);                        # Size
1358         write_hunk_fix_endian(872288, 169);
1359 
1360         #
1361         # Firmware 48, type: SCODE FW  HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
1362         #
1363 
1364         write_le32(0x60000000);                 # Type
1365         write_le64(0x00000000, 0x00000000);     # ID
1366         write_le16(3280);                       # IF
1367         write_le32(192);                        # Size
1368         write_hunk(811896, 192);
1369 
1370         #
1371         # Firmware 49, type: SCODE FW  HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
1372         #
1373 
1374         write_le32(0x60000000);                 # Type
1375         write_le64(0x00000000, 0x00000000);     # ID
1376         write_le16(3300);                       # IF
1377         write_le32(192);                        # Size
1378         write_hunk(813048, 192);
1379 
1380         #
1381         # Firmware 50, type: SCODE FW  HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
1382         #
1383 
1384         write_le32(0x60000000);                 # Type
1385         write_le64(0x00000000, 0x00000000);     # ID
1386         write_le16(3440);                       # IF
1387         write_le32(192);                        # Size
1388         write_hunk(812280, 192);
1389 
1390         #
1391         # Firmware 51, type: SCODE FW  HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
1392         #
1393 
1394         write_le32(0x60000000);                 # Type
1395         write_le64(0x00000000, 0x00000000);     # ID
1396         write_le16(3460);                       # IF
1397         write_le32(192);                        # Size
1398         write_hunk(812472, 192);
1399 
1400         #
1401         # Firmware 52, type: SCODE FW  DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
1402         #
1403 
1404         write_le32(0x60210020);                 # Type
1405         write_le64(0x00000000, 0x00000000);     # ID
1406         write_le16(3800);                       # IF
1407         write_le32(192);                        # Size
1408         write_hunk(809784, 192);
1409 
1410         #
1411         # Firmware 53, type: SCODE FW  HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
1412         #
1413 
1414         write_le32(0x60000000);                 # Type
1415         write_le64(0x00000000, 0x00000000);     # ID
1416         write_le16(4000);                       # IF
1417         write_le32(192);                        # Size
1418         write_hunk(812088, 192);
1419 
1420         #
1421         # Firmware 54, type: SCODE FW  DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
1422         #
1423 
1424         write_le32(0x60410020);                 # Type
1425         write_le64(0x00000000, 0x00000000);     # ID
1426         write_le16(4080);                       # IF
1427         write_le32(192);                        # Size
1428         write_hunk(809976, 192);
1429 
1430         #
1431         # Firmware 55, type: SCODE FW  HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
1432         #
1433 
1434         write_le32(0x60000000);                 # Type
1435         write_le64(0x00000000, 0x00000000);     # ID
1436         write_le16(4200);                       # IF
1437         write_le32(192);                        # Size
1438         write_hunk(811704, 192);
1439 
1440         #
1441         # Firmware 56, type: SCODE FW  MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
1442         #
1443 
1444         write_le32(0x60008000);                 # Type
1445         write_le64(0x00000000, 0x00008000);     # ID
1446         write_le16(4320);                       # IF
1447         write_le32(192);                        # Size
1448         write_hunk(808056, 192);
1449 
1450         #
1451         # Firmware 57, type: SCODE FW  HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
1452         #
1453 
1454         write_le32(0x60000000);                 # Type
1455         write_le64(0x00000000, 0x00000000);     # ID
1456         write_le16(4450);                       # IF
1457         write_le32(192);                        # Size
1458         write_hunk(812664, 192);
1459 
1460         #
1461         # Firmware 58, type: SCODE FW  MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
1462         #
1463 
1464         write_le32(0x6002b004);                 # Type
1465         write_le64(0x00000000, 0x0000b700);     # ID
1466         write_le16(4500);                       # IF
1467         write_le32(192);                        # Size
1468         write_hunk(807672, 192);
1469 
1470         #
1471         # Firmware 59, type: SCODE FW  LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
1472         #
1473 
1474         write_le32(0x60023000);                 # Type
1475         write_le64(0x00000000, 0x00008000);     # ID
1476         write_le16(4600);                       # IF
1477         write_le32(192);                        # Size
1478         write_hunk(807864, 192);
1479 
1480         #
1481         # Firmware 60, type: SCODE FW  DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
1482         #
1483 
1484         write_le32(0x620003e0);                 # Type
1485         write_le64(0x00000000, 0x00000000);     # ID
1486         write_le16(4760);                       # IF
1487         write_le32(192);                        # Size
1488         write_hunk(807288, 192);
1489 
1490         #
1491         # Firmware 61, type: SCODE FW  HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
1492         #
1493 
1494         write_le32(0x60000000);                 # Type
1495         write_le64(0x00000000, 0x00000000);     # ID
1496         write_le16(4940);                       # IF
1497         write_le32(192);                        # Size
1498         write_hunk(811512, 192);
1499 
1500         #
1501         # Firmware 62, type: SCODE FW  HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
1502         #
1503 
1504         write_le32(0x60000000);                 # Type
1505         write_le64(0x00000000, 0x00000000);     # ID
1506         write_le16(5260);                       # IF
1507         write_le32(192);                        # Size
1508         write_hunk(810552, 192);
1509 
1510         #
1511         # Firmware 63, type: SCODE FW  MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
1512         #
1513 
1514         write_le32(0x60008000);                 # Type
1515         write_le64(0x0000000f, 0x00000007);     # ID
1516         write_le16(5320);                       # IF
1517         write_le32(192);                        # Size
1518         write_hunk(810744, 192);
1519 
1520         #
1521         # Firmware 64, type: SCODE FW  DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
1522         #
1523 
1524         write_le32(0x65000380);                 # Type
1525         write_le64(0x00000000, 0x00000000);     # ID
1526         write_le16(5400);                       # IF
1527         write_le32(192);                        # Size
1528         write_hunk(807096, 192);
1529 
1530         #
1531         # Firmware 65, type: SCODE FW  DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
1532         #
1533 
1534         write_le32(0x60110020);                 # Type
1535         write_le64(0x00000000, 0x00000000);     # ID
1536         write_le16(5580);                       # IF
1537         write_le32(192);                        # Size
1538         write_hunk(809592, 192);
1539 
1540         #
1541         # Firmware 66, type: SCODE FW  HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
1542         #
1543 
1544         write_le32(0x60000000);                 # Type
1545         write_le64(0x00000003, 0x00000007);     # ID
1546         write_le16(5640);                       # IF
1547         write_le32(192);                        # Size
1548         write_hunk(808440, 192);
1549 
1550         #
1551         # Firmware 67, type: SCODE FW  HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
1552         #
1553 
1554         write_le32(0x60000000);                 # Type
1555         write_le64(0x0000000c, 0x00000007);     # ID
1556         write_le16(5740);                       # IF
1557         write_le32(192);                        # Size
1558         write_hunk(808632, 192);
1559 
1560         #
1561         # Firmware 68, type: SCODE FW  HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
1562         #
1563 
1564         write_le32(0x60000000);                 # Type
1565         write_le64(0x00000000, 0x00000000);     # ID
1566         write_le16(5900);                       # IF
1567         write_le32(192);                        # Size
1568         write_hunk(810360, 192);
1569 
1570         #
1571         # Firmware 69, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
1572         #
1573 
1574         write_le32(0x60008000);                 # Type
1575         write_le64(0x0000000c, 0x04c000f0);     # ID
1576         write_le16(6000);                       # IF
1577         write_le32(192);                        # Size
1578         write_hunk(808824, 192);
1579 
1580         #
1581         # Firmware 70, type: SCODE FW  DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
1582         #
1583 
1584         write_le32(0x68050060);                 # Type
1585         write_le64(0x00000000, 0x00000000);     # ID
1586         write_le16(6200);                       # IF
1587         write_le32(192);                        # Size
1588         write_hunk(809400, 192);
1589 
1590         #
1591         # Firmware 71, type: SCODE FW  HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
1592         #
1593 
1594         write_le32(0x60000000);                 # Type
1595         write_le64(0x00000000, 0x00000010);     # ID
1596         write_le16(6240);                       # IF
1597         write_le32(192);                        # Size
1598         write_hunk(808248, 192);
1599 
1600         #
1601         # Firmware 72, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
1602         #
1603 
1604         write_le32(0x60008000);                 # Type
1605         write_le64(0x00000000, 0x00200000);     # ID
1606         write_le16(6320);                       # IF
1607         write_le32(192);                        # Size
1608         write_hunk(811320, 192);
1609 
1610         #
1611         # Firmware 73, type: SCODE FW  HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
1612         #
1613 
1614         write_le32(0x60000000);                 # Type
1615         write_le64(0x00000000, 0x00200000);     # ID
1616         write_le16(6340);                       # IF
1617         write_le32(192);                        # Size
1618         write_hunk(809208, 192);
1619 
1620         #
1621         # Firmware 74, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
1622         #
1623 
1624         write_le32(0x60008000);                 # Type
1625         write_le64(0x0000000c, 0x044000e0);     # ID
1626         write_le16(6500);                       # IF
1627         write_le32(192);                        # Size
1628         write_hunk(811128, 192);
1629 
1630         #
1631         # Firmware 75, type: SCODE FW  DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
1632         #
1633 
1634         write_le32(0x60090020);                 # Type
1635         write_le64(0x00000000, 0x00000000);     # ID
1636         write_le16(6580);                       # IF
1637         write_le32(192);                        # Size
1638         write_hunk(807480, 192);
1639 
1640         #
1641         # Firmware 76, type: SCODE FW  HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1642         #
1643 
1644         write_le32(0x60000000);                 # Type
1645         write_le64(0x00000003, 0x000000e0);     # ID
1646         write_le16(6600);                       # IF
1647         write_le32(192);                        # Size
1648         write_hunk(809016, 192);
1649 
1650         #
1651         # Firmware 77, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1652         #
1653 
1654         write_le32(0x60008000);                 # Type
1655         write_le64(0x00000003, 0x000000e0);     # ID
1656         write_le16(6680);                       # IF
1657         write_le32(192);                        # Size
1658         write_hunk(810936, 192);
1659 
1660         #
1661         # Firmware 78, type: SCODE FW  DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
1662         #
1663 
1664         write_le32(0x60810020);                 # Type
1665         write_le64(0x00000000, 0x00000000);     # ID
1666         write_le16(8140);                       # IF
1667         write_le32(192);                        # Size
1668         write_hunk(810168, 192);
1669 
1670         #
1671         # Firmware 79, type: SCODE FW  HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
1672         #
1673 
1674         write_le32(0x60000000);                 # Type
1675         write_le64(0x00000000, 0x00000000);     # ID
1676         write_le16(8200);                       # IF
1677         write_le32(192);                        # Size
1678         write_hunk(812856, 192);
1679 }
1680 
1681 
1682 sub extract_firmware {
1683         my $sourcefile_24 = "UDXTTM6000.sys";
1684         my $hash_24 = "cb9deb5508a5e150af2880f5b0066d78";
1685         my $outfile_24 = "xc3028-v24.fw";
1686         my $name_24 = "xc2028 firmware";
1687         my $version_24 = 516;
1688         my $nr_desc_24 = 77;
1689         my $out;
1690 
1691         my $sourcefile_27 = "hcw85bda.sys";
1692         my $hash_27 = "0e44dbf63bb0169d57446aec21881ff2";
1693         my $outfile_27 = "xc3028-v27.fw";
1694         my $name_27 = "xc2028 firmware";
1695         my $version_27 = 519;
1696         my $nr_desc_27 = 80;
1697         my $out;
1698 
1699         if (-e $sourcefile_24) {
1700                 verify($sourcefile_24, $hash_24);
1701 
1702                 open INFILE, "<$sourcefile_24";
1703                 main_firmware_24($outfile_24, $name_24, $version_24, $nr_desc_24);
1704                 close INFILE;
1705         }
1706 
1707         if (-e $sourcefile_27) {
1708                 verify($sourcefile_27, $hash_27);
1709 
1710                 open INFILE, "<$sourcefile_27";
1711                 main_firmware_27($outfile_27, $name_27, $version_27, $nr_desc_27);
1712                 close INFILE;
1713         }
1714 }
1715 
1716 extract_firmware;
1717 printf "Firmwares generated.\n";

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php