diff options
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/DocBook/videobook.tmpl | 9 | ||||
-rw-r--r-- | Documentation/RCU/RTFP.txt | 210 | ||||
-rw-r--r-- | Documentation/RCU/rcu.txt | 19 | ||||
-rw-r--r-- | Documentation/RCU/torture.txt | 11 | ||||
-rw-r--r-- | Documentation/cpu-hotplug.txt | 11 | ||||
-rw-r--r-- | Documentation/dvb/bt8xx.txt | 12 | ||||
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 10 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx23885 | 4 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx88 | 1 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.em28xx | 17 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.ivtv | 6 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.saa7134 | 17 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.tuner | 5 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.usbvision | 1 | ||||
-rw-r--r-- | Documentation/video4linux/extract_xc3028.pl | 926 | ||||
-rw-r--r-- | Documentation/video4linux/sn9c102.txt | 1 |
16 files changed, 1205 insertions, 55 deletions
diff --git a/Documentation/DocBook/videobook.tmpl b/Documentation/DocBook/videobook.tmpl index b629da33951d..b3d93ee27693 100644 --- a/Documentation/DocBook/videobook.tmpl +++ b/Documentation/DocBook/videobook.tmpl | |||
@@ -96,7 +96,6 @@ static struct video_device my_radio | |||
96 | { | 96 | { |
97 | "My radio", | 97 | "My radio", |
98 | VID_TYPE_TUNER, | 98 | VID_TYPE_TUNER, |
99 | VID_HARDWARE_MYRADIO, | ||
100 | radio_open. | 99 | radio_open. |
101 | radio_close, | 100 | radio_close, |
102 | NULL, /* no read */ | 101 | NULL, /* no read */ |
@@ -119,13 +118,6 @@ static struct video_device my_radio | |||
119 | way to change channel so it is tuneable. | 118 | way to change channel so it is tuneable. |
120 | </para> | 119 | </para> |
121 | <para> | 120 | <para> |
122 | The VID_HARDWARE_ types are unique to each device. Numbers are assigned by | ||
123 | <email>alan@redhat.com</email> when device drivers are going to be released. Until then you | ||
124 | can pull a suitably large number out of your hat and use it. 10000 should be | ||
125 | safe for a very long time even allowing for the huge number of vendors | ||
126 | making new and different radio cards at the moment. | ||
127 | </para> | ||
128 | <para> | ||
129 | We declare an open and close routine, but we do not need read or write, | 121 | We declare an open and close routine, but we do not need read or write, |
130 | which are used to read and write video data to or from the card itself. As | 122 | which are used to read and write video data to or from the card itself. As |
131 | we have no read or write there is no poll function. | 123 | we have no read or write there is no poll function. |
@@ -844,7 +836,6 @@ static struct video_device my_camera | |||
844 | "My Camera", | 836 | "My Camera", |
845 | VID_TYPE_OVERLAY|VID_TYPE_SCALES|\ | 837 | VID_TYPE_OVERLAY|VID_TYPE_SCALES|\ |
846 | VID_TYPE_CAPTURE|VID_TYPE_CHROMAKEY, | 838 | VID_TYPE_CAPTURE|VID_TYPE_CHROMAKEY, |
847 | VID_HARDWARE_MYCAMERA, | ||
848 | camera_open. | 839 | camera_open. |
849 | camera_close, | 840 | camera_close, |
850 | camera_read, /* no read */ | 841 | camera_read, /* no read */ |
diff --git a/Documentation/RCU/RTFP.txt b/Documentation/RCU/RTFP.txt index 6221464d1a7e..39ad8f56783a 100644 --- a/Documentation/RCU/RTFP.txt +++ b/Documentation/RCU/RTFP.txt | |||
@@ -9,8 +9,8 @@ The first thing resembling RCU was published in 1980, when Kung and Lehman | |||
9 | [Kung80] recommended use of a garbage collector to defer destruction | 9 | [Kung80] recommended use of a garbage collector to defer destruction |
10 | of nodes in a parallel binary search tree in order to simplify its | 10 | of nodes in a parallel binary search tree in order to simplify its |
11 | implementation. This works well in environments that have garbage | 11 | implementation. This works well in environments that have garbage |
12 | collectors, but current production garbage collectors incur significant | 12 | collectors, but most production garbage collectors incur significant |
13 | read-side overhead. | 13 | overhead. |
14 | 14 | ||
15 | In 1982, Manber and Ladner [Manber82,Manber84] recommended deferring | 15 | In 1982, Manber and Ladner [Manber82,Manber84] recommended deferring |
16 | destruction until all threads running at that time have terminated, again | 16 | destruction until all threads running at that time have terminated, again |
@@ -99,16 +99,25 @@ locking, reduces contention, reduces memory latency for readers, and | |||
99 | parallelizes pipeline stalls and memory latency for writers. However, | 99 | parallelizes pipeline stalls and memory latency for writers. However, |
100 | these techniques still impose significant read-side overhead in the | 100 | these techniques still impose significant read-side overhead in the |
101 | form of memory barriers. Researchers at Sun worked along similar lines | 101 | form of memory barriers. Researchers at Sun worked along similar lines |
102 | in the same timeframe [HerlihyLM02,HerlihyLMS03]. These techniques | 102 | in the same timeframe [HerlihyLM02]. These techniques can be thought |
103 | can be thought of as inside-out reference counts, where the count is | 103 | of as inside-out reference counts, where the count is represented by the |
104 | represented by the number of hazard pointers referencing a given data | 104 | number of hazard pointers referencing a given data structure (rather than |
105 | structure (rather than the more conventional counter field within the | 105 | the more conventional counter field within the data structure itself). |
106 | data structure itself). | 106 | |
107 | By the same token, RCU can be thought of as a "bulk reference count", | ||
108 | where some form of reference counter covers all reference by a given CPU | ||
109 | or thread during a set timeframe. This timeframe is related to, but | ||
110 | not necessarily exactly the same as, an RCU grace period. In classic | ||
111 | RCU, the reference counter is the per-CPU bit in the "bitmask" field, | ||
112 | and each such bit covers all references that might have been made by | ||
113 | the corresponding CPU during the prior grace period. Of course, RCU | ||
114 | can be thought of in other terms as well. | ||
107 | 115 | ||
108 | In 2003, the K42 group described how RCU could be used to create | 116 | In 2003, the K42 group described how RCU could be used to create |
109 | hot-pluggable implementations of operating-system functions. Later that | 117 | hot-pluggable implementations of operating-system functions [Appavoo03a]. |
110 | year saw a paper describing an RCU implementation of System V IPC | 118 | Later that year saw a paper describing an RCU implementation of System |
111 | [Arcangeli03], and an introduction to RCU in Linux Journal [McKenney03a]. | 119 | V IPC [Arcangeli03], and an introduction to RCU in Linux Journal |
120 | [McKenney03a]. | ||
112 | 121 | ||
113 | 2004 has seen a Linux-Journal article on use of RCU in dcache | 122 | 2004 has seen a Linux-Journal article on use of RCU in dcache |
114 | [McKenney04a], a performance comparison of locking to RCU on several | 123 | [McKenney04a], a performance comparison of locking to RCU on several |
@@ -117,10 +126,19 @@ number of operating-system kernels [PaulEdwardMcKenneyPhD], a paper | |||
117 | describing how to make RCU safe for soft-realtime applications [Sarma04c], | 126 | describing how to make RCU safe for soft-realtime applications [Sarma04c], |
118 | and a paper describing SELinux performance with RCU [JamesMorris04b]. | 127 | and a paper describing SELinux performance with RCU [JamesMorris04b]. |
119 | 128 | ||
120 | 2005 has seen further adaptation of RCU to realtime use, permitting | 129 | 2005 brought further adaptation of RCU to realtime use, permitting |
121 | preemption of RCU realtime critical sections [PaulMcKenney05a, | 130 | preemption of RCU realtime critical sections [PaulMcKenney05a, |
122 | PaulMcKenney05b]. | 131 | PaulMcKenney05b]. |
123 | 132 | ||
133 | 2006 saw the first best-paper award for an RCU paper [ThomasEHart2006a], | ||
134 | as well as further work on efficient implementations of preemptible | ||
135 | RCU [PaulEMcKenney2006b], but priority-boosting of RCU read-side critical | ||
136 | sections proved elusive. An RCU implementation permitting general | ||
137 | blocking in read-side critical sections appeared [PaulEMcKenney2006c], | ||
138 | Robert Olsson described an RCU-protected trie-hash combination | ||
139 | [RobertOlsson2006a]. | ||
140 | |||
141 | |||
124 | Bibtex Entries | 142 | Bibtex Entries |
125 | 143 | ||
126 | @article{Kung80 | 144 | @article{Kung80 |
@@ -203,6 +221,41 @@ Bibtex Entries | |||
203 | ,Address="New Orleans, LA" | 221 | ,Address="New Orleans, LA" |
204 | } | 222 | } |
205 | 223 | ||
224 | @conference{Pu95a, | ||
225 | Author = "Calton Pu and Tito Autrey and Andrew Black and Charles Consel and | ||
226 | Crispin Cowan and Jon Inouye and Lakshmi Kethana and Jonathan Walpole and | ||
227 | Ke Zhang", | ||
228 | Title = "Optimistic Incremental Specialization: Streamlining a Commercial | ||
229 | Operating System", | ||
230 | Booktitle = "15\textsuperscript{th} ACM Symposium on | ||
231 | Operating Systems Principles (SOSP'95)", | ||
232 | address = "Copper Mountain, CO", | ||
233 | month="December", | ||
234 | year="1995", | ||
235 | pages="314-321", | ||
236 | annotation=" | ||
237 | Uses a replugger, but with a flag to signal when people are | ||
238 | using the resource at hand. Only one reader at a time. | ||
239 | " | ||
240 | } | ||
241 | |||
242 | @conference{Cowan96a, | ||
243 | Author = "Crispin Cowan and Tito Autrey and Charles Krasic and | ||
244 | Calton Pu and Jonathan Walpole", | ||
245 | Title = "Fast Concurrent Dynamic Linking for an Adaptive Operating System", | ||
246 | Booktitle = "International Conference on Configurable Distributed Systems | ||
247 | (ICCDS'96)", | ||
248 | address = "Annapolis, MD", | ||
249 | month="May", | ||
250 | year="1996", | ||
251 | pages="108", | ||
252 | isbn="0-8186-7395-8", | ||
253 | annotation=" | ||
254 | Uses a replugger, but with a counter to signal when people are | ||
255 | using the resource at hand. Allows multiple readers. | ||
256 | " | ||
257 | } | ||
258 | |||
206 | @techreport{Slingwine95 | 259 | @techreport{Slingwine95 |
207 | ,author="John D. Slingwine and Paul E. McKenney" | 260 | ,author="John D. Slingwine and Paul E. McKenney" |
208 | ,title="Apparatus and Method for Achieving Reduced Overhead Mutual | 261 | ,title="Apparatus and Method for Achieving Reduced Overhead Mutual |
@@ -312,6 +365,49 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell" | |||
312 | [Viewed June 23, 2004]" | 365 | [Viewed June 23, 2004]" |
313 | } | 366 | } |
314 | 367 | ||
368 | @conference{Michael02a | ||
369 | ,author="Maged M. Michael" | ||
370 | ,title="Safe Memory Reclamation for Dynamic Lock-Free Objects Using Atomic | ||
371 | Reads and Writes" | ||
372 | ,Year="2002" | ||
373 | ,Month="August" | ||
374 | ,booktitle="{Proceedings of the 21\textsuperscript{st} Annual ACM | ||
375 | Symposium on Principles of Distributed Computing}" | ||
376 | ,pages="21-30" | ||
377 | ,annotation=" | ||
378 | Each thread keeps an array of pointers to items that it is | ||
379 | currently referencing. Sort of an inside-out garbage collection | ||
380 | mechanism, but one that requires the accessing code to explicitly | ||
381 | state its needs. Also requires read-side memory barriers on | ||
382 | most architectures. | ||
383 | " | ||
384 | } | ||
385 | |||
386 | @conference{Michael02b | ||
387 | ,author="Maged M. Michael" | ||
388 | ,title="High Performance Dynamic Lock-Free Hash Tables and List-Based Sets" | ||
389 | ,Year="2002" | ||
390 | ,Month="August" | ||
391 | ,booktitle="{Proceedings of the 14\textsuperscript{th} Annual ACM | ||
392 | Symposium on Parallel | ||
393 | Algorithms and Architecture}" | ||
394 | ,pages="73-82" | ||
395 | ,annotation=" | ||
396 | Like the title says... | ||
397 | " | ||
398 | } | ||
399 | |||
400 | @InProceedings{HerlihyLM02 | ||
401 | ,author={Maurice Herlihy and Victor Luchangco and Mark Moir} | ||
402 | ,title="The Repeat Offender Problem: A Mechanism for Supporting Dynamic-Sized, | ||
403 | Lock-Free Data Structures" | ||
404 | ,booktitle={Proceedings of 16\textsuperscript{th} International | ||
405 | Symposium on Distributed Computing} | ||
406 | ,year=2002 | ||
407 | ,month="October" | ||
408 | ,pages="339-353" | ||
409 | } | ||
410 | |||
315 | @article{Appavoo03a | 411 | @article{Appavoo03a |
316 | ,author="J. Appavoo and K. Hui and C. A. N. Soules and R. W. Wisniewski and | 412 | ,author="J. Appavoo and K. Hui and C. A. N. Soules and R. W. Wisniewski and |
317 | D. M. {Da Silva} and O. Krieger and M. A. Auslander and D. J. Edelsohn and | 413 | D. M. {Da Silva} and O. Krieger and M. A. Auslander and D. J. Edelsohn and |
@@ -447,3 +543,95 @@ Oregon Health and Sciences University" | |||
447 | Realtime turns into making RCU yet more realtime friendly. | 543 | Realtime turns into making RCU yet more realtime friendly. |
448 | " | 544 | " |
449 | } | 545 | } |
546 | |||
547 | @conference{ThomasEHart2006a | ||
548 | ,Author="Thomas E. Hart and Paul E. McKenney and Angela Demke Brown" | ||
549 | ,Title="Making Lockless Synchronization Fast: Performance Implications | ||
550 | of Memory Reclamation" | ||
551 | ,Booktitle="20\textsuperscript{th} {IEEE} International Parallel and | ||
552 | Distributed Processing Symposium" | ||
553 | ,month="April" | ||
554 | ,year="2006" | ||
555 | ,day="25-29" | ||
556 | ,address="Rhodes, Greece" | ||
557 | ,annotation=" | ||
558 | Compares QSBR (AKA "classic RCU"), HPBR, EBR, and lock-free | ||
559 | reference counting. | ||
560 | " | ||
561 | } | ||
562 | |||
563 | @Conference{PaulEMcKenney2006b | ||
564 | ,Author="Paul E. McKenney and Dipankar Sarma and Ingo Molnar and | ||
565 | Suparna Bhattacharya" | ||
566 | ,Title="Extending RCU for Realtime and Embedded Workloads" | ||
567 | ,Booktitle="{Ottawa Linux Symposium}" | ||
568 | ,Month="July" | ||
569 | ,Year="2006" | ||
570 | ,pages="v2 123-138" | ||
571 | ,note="Available: | ||
572 | \url{http://www.linuxsymposium.org/2006/view_abstract.php?content_key=184} | ||
573 | \url{http://www.rdrop.com/users/paulmck/RCU/OLSrtRCU.2006.08.11a.pdf} | ||
574 | [Viewed January 1, 2007]" | ||
575 | ,annotation=" | ||
576 | Described how to improve the -rt implementation of realtime RCU. | ||
577 | " | ||
578 | } | ||
579 | |||
580 | @unpublished{PaulEMcKenney2006c | ||
581 | ,Author="Paul E. McKenney" | ||
582 | ,Title="Sleepable {RCU}" | ||
583 | ,month="October" | ||
584 | ,day="9" | ||
585 | ,year="2006" | ||
586 | ,note="Available: | ||
587 | \url{http://lwn.net/Articles/202847/} | ||
588 | Revised: | ||
589 | \url{http://www.rdrop.com/users/paulmck/RCU/srcu.2007.01.14a.pdf} | ||
590 | [Viewed August 21, 2006]" | ||
591 | ,annotation=" | ||
592 | LWN article introducing SRCU. | ||
593 | " | ||
594 | } | ||
595 | |||
596 | @unpublished{RobertOlsson2006a | ||
597 | ,Author="Robert Olsson and Stefan Nilsson" | ||
598 | ,Title="{TRASH}: A dynamic {LC}-trie and hash data structure" | ||
599 | ,month="August" | ||
600 | ,day="18" | ||
601 | ,year="2006" | ||
602 | ,note="Available: | ||
603 | \url{http://www.nada.kth.se/~snilsson/public/papers/trash/trash.pdf} | ||
604 | [Viewed February 24, 2007]" | ||
605 | ,annotation=" | ||
606 | RCU-protected dynamic trie-hash combination. | ||
607 | " | ||
608 | } | ||
609 | |||
610 | @unpublished{ThomasEHart2007a | ||
611 | ,Author="Thomas E. Hart and Paul E. McKenney and Angela Demke Brown and Jonathan Walpole" | ||
612 | ,Title="Performance of memory reclamation for lockless synchronization" | ||
613 | ,journal="J. Parallel Distrib. Comput." | ||
614 | ,year="2007" | ||
615 | ,note="To appear in J. Parallel Distrib. Comput. | ||
616 | \url{doi=10.1016/j.jpdc.2007.04.010}" | ||
617 | ,annotation={ | ||
618 | Compares QSBR (AKA "classic RCU"), HPBR, EBR, and lock-free | ||
619 | reference counting. Journal version of ThomasEHart2006a. | ||
620 | } | ||
621 | } | ||
622 | |||
623 | @unpublished{PaulEMcKenney2007QRCUspin | ||
624 | ,Author="Paul E. McKenney" | ||
625 | ,Title="Using Promela and Spin to verify parallel algorithms" | ||
626 | ,month="August" | ||
627 | ,day="1" | ||
628 | ,year="2007" | ||
629 | ,note="Available: | ||
630 | \url{http://lwn.net/Articles/243851/} | ||
631 | [Viewed September 8, 2007]" | ||
632 | ,annotation=" | ||
633 | LWN article describing Promela and spin, and also using Oleg | ||
634 | Nesterov's QRCU as an example (with Paul McKenney's fastpath). | ||
635 | " | ||
636 | } | ||
637 | |||
diff --git a/Documentation/RCU/rcu.txt b/Documentation/RCU/rcu.txt index f84407cba816..95821a29ae41 100644 --- a/Documentation/RCU/rcu.txt +++ b/Documentation/RCU/rcu.txt | |||
@@ -36,6 +36,14 @@ o How can the updater tell when a grace period has completed | |||
36 | executed in user mode, or executed in the idle loop, we can | 36 | executed in user mode, or executed in the idle loop, we can |
37 | safely free up that item. | 37 | safely free up that item. |
38 | 38 | ||
39 | Preemptible variants of RCU (CONFIG_PREEMPT_RCU) get the | ||
40 | same effect, but require that the readers manipulate CPU-local | ||
41 | counters. These counters allow limited types of blocking | ||
42 | within RCU read-side critical sections. SRCU also uses | ||
43 | CPU-local counters, and permits general blocking within | ||
44 | RCU read-side critical sections. These two variants of | ||
45 | RCU detect grace periods by sampling these counters. | ||
46 | |||
39 | o If I am running on a uniprocessor kernel, which can only do one | 47 | o If I am running on a uniprocessor kernel, which can only do one |
40 | thing at a time, why should I wait for a grace period? | 48 | thing at a time, why should I wait for a grace period? |
41 | 49 | ||
@@ -46,7 +54,10 @@ o How can I see where RCU is currently used in the Linux kernel? | |||
46 | Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu", | 54 | Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu", |
47 | "rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh", | 55 | "rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh", |
48 | "srcu_read_lock", "srcu_read_unlock", "synchronize_rcu", | 56 | "srcu_read_lock", "srcu_read_unlock", "synchronize_rcu", |
49 | "synchronize_net", and "synchronize_srcu". | 57 | "synchronize_net", "synchronize_srcu", and the other RCU |
58 | primitives. Or grab one of the cscope databases from: | ||
59 | |||
60 | http://www.rdrop.com/users/paulmck/RCU/linuxusage/rculocktab.html | ||
50 | 61 | ||
51 | o What guidelines should I follow when writing code that uses RCU? | 62 | o What guidelines should I follow when writing code that uses RCU? |
52 | 63 | ||
@@ -67,7 +78,11 @@ o I hear that RCU is patented? What is with that? | |||
67 | 78 | ||
68 | o I hear that RCU needs work in order to support realtime kernels? | 79 | o I hear that RCU needs work in order to support realtime kernels? |
69 | 80 | ||
70 | Yes, work in progress. | 81 | This work is largely completed. Realtime-friendly RCU can be |
82 | enabled via the CONFIG_PREEMPT_RCU kernel configuration parameter. | ||
83 | However, work is in progress for enabling priority boosting of | ||
84 | preempted RCU read-side critical sections.This is needed if you | ||
85 | have CPU-bound realtime threads. | ||
71 | 86 | ||
72 | o Where can I find more information on RCU? | 87 | o Where can I find more information on RCU? |
73 | 88 | ||
diff --git a/Documentation/RCU/torture.txt b/Documentation/RCU/torture.txt index 25a3c3f7d378..2967a65269d8 100644 --- a/Documentation/RCU/torture.txt +++ b/Documentation/RCU/torture.txt | |||
@@ -46,12 +46,13 @@ stat_interval The number of seconds between output of torture | |||
46 | 46 | ||
47 | shuffle_interval | 47 | shuffle_interval |
48 | The number of seconds to keep the test threads affinitied | 48 | The number of seconds to keep the test threads affinitied |
49 | to a particular subset of the CPUs. Used in conjunction | 49 | to a particular subset of the CPUs, defaults to 5 seconds. |
50 | with test_no_idle_hz. | 50 | Used in conjunction with test_no_idle_hz. |
51 | 51 | ||
52 | test_no_idle_hz Whether or not to test the ability of RCU to operate in | 52 | test_no_idle_hz Whether or not to test the ability of RCU to operate in |
53 | a kernel that disables the scheduling-clock interrupt to | 53 | a kernel that disables the scheduling-clock interrupt to |
54 | idle CPUs. Boolean parameter, "1" to test, "0" otherwise. | 54 | idle CPUs. Boolean parameter, "1" to test, "0" otherwise. |
55 | Defaults to omitting this test. | ||
55 | 56 | ||
56 | torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API, | 57 | torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API, |
57 | "rcu_sync" for rcu_read_lock() with synchronous reclamation, | 58 | "rcu_sync" for rcu_read_lock() with synchronous reclamation, |
@@ -82,8 +83,6 @@ be evident. ;-) | |||
82 | 83 | ||
83 | The entries are as follows: | 84 | The entries are as follows: |
84 | 85 | ||
85 | o "ggp": The number of counter flips (or batches) since boot. | ||
86 | |||
87 | o "rtc": The hexadecimal address of the structure currently visible | 86 | o "rtc": The hexadecimal address of the structure currently visible |
88 | to readers. | 87 | to readers. |
89 | 88 | ||
@@ -117,8 +116,8 @@ o "Reader Pipe": Histogram of "ages" of structures seen by readers. | |||
117 | o "Reader Batch": Another histogram of "ages" of structures seen | 116 | o "Reader Batch": Another histogram of "ages" of structures seen |
118 | by readers, but in terms of counter flips (or batches) rather | 117 | by readers, but in terms of counter flips (or batches) rather |
119 | than in terms of grace periods. The legal number of non-zero | 118 | than in terms of grace periods. The legal number of non-zero |
120 | entries is again two. The reason for this separate view is | 119 | entries is again two. The reason for this separate view is that |
121 | that it is easier to get the third entry to show up in the | 120 | it is sometimes easier to get the third entry to show up in the |
122 | "Reader Batch" list than in the "Reader Pipe" list. | 121 | "Reader Batch" list than in the "Reader Pipe" list. |
123 | 122 | ||
124 | o "Free-Block Circulation": Shows the number of torture structures | 123 | o "Free-Block Circulation": Shows the number of torture structures |
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt index a741f658a3c9..fb94f5a71b68 100644 --- a/Documentation/cpu-hotplug.txt +++ b/Documentation/cpu-hotplug.txt | |||
@@ -109,12 +109,13 @@ Never use anything other than cpumask_t to represent bitmap of CPUs. | |||
109 | for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. | 109 | for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. |
110 | 110 | ||
111 | #include <linux/cpu.h> | 111 | #include <linux/cpu.h> |
112 | lock_cpu_hotplug() and unlock_cpu_hotplug(): | 112 | get_online_cpus() and put_online_cpus(): |
113 | 113 | ||
114 | The above calls are used to inhibit cpu hotplug operations. While holding the | 114 | The above calls are used to inhibit cpu hotplug operations. While the |
115 | cpucontrol mutex, cpu_online_map will not change. If you merely need to avoid | 115 | cpu_hotplug.refcount is non zero, the cpu_online_map will not change. |
116 | cpus going away, you could also use preempt_disable() and preempt_enable() | 116 | If you merely need to avoid cpus going away, you could also use |
117 | for those sections. Just remember the critical section cannot call any | 117 | preempt_disable() and preempt_enable() for those sections. |
118 | Just remember the critical section cannot call any | ||
118 | function that can sleep or schedule this process away. The preempt_disable() | 119 | function that can sleep or schedule this process away. The preempt_disable() |
119 | will work as long as stop_machine_run() is used to take a cpu down. | 120 | will work as long as stop_machine_run() is used to take a cpu down. |
120 | 121 | ||
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt index ecb47adda063..b7b1d1b1da46 100644 --- a/Documentation/dvb/bt8xx.txt +++ b/Documentation/dvb/bt8xx.txt | |||
@@ -78,6 +78,18 @@ Example: | |||
78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. | 78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. |
79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. | 79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. |
80 | 80 | ||
81 | 2c) Probing the cards with broken PCI subsystem ID | ||
82 | -------------------------------------------------- | ||
83 | There are some TwinHan cards that the EEPROM has become corrupted for some | ||
84 | reason. The cards do not have correct PCI subsystem ID. But we can force | ||
85 | probing the cards with broken PCI subsystem ID | ||
86 | |||
87 | $ echo 109e 0878 $subvendor $subdevice > \ | ||
88 | /sys/bus/pci/drivers/bt878/new_id | ||
89 | |||
90 | 109e: PCI_VENDOR_ID_BROOKTREE | ||
91 | 0878: PCI_DEVICE_ID_BROOKTREE_878 | ||
92 | |||
81 | Authors: Richard Walker, | 93 | Authors: Richard Walker, |
82 | Jamie Honan, | 94 | Jamie Honan, |
83 | Michael Hunold, | 95 | Michael Hunold, |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 20c4c8bac9d7..9b8291f4c211 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -295,16 +295,6 @@ Who: linuxppc-dev@ozlabs.org | |||
295 | 295 | ||
296 | --------------------------- | 296 | --------------------------- |
297 | 297 | ||
298 | What: mthca driver's MSI support | ||
299 | When: January 2008 | ||
300 | Files: drivers/infiniband/hw/mthca/*.[ch] | ||
301 | Why: All mthca hardware also supports MSI-X, which provides | ||
302 | strictly more functionality than MSI. So there is no point in | ||
303 | having both MSI-X and MSI support in the driver. | ||
304 | Who: Roland Dreier <rolandd@cisco.com> | ||
305 | |||
306 | --------------------------- | ||
307 | |||
308 | What: sk98lin network driver | 298 | What: sk98lin network driver |
309 | When: Feburary 2008 | 299 | When: Feburary 2008 |
310 | Why: In kernel tree version of driver is unmaintained. Sk98lin driver | 300 | Why: In kernel tree version of driver is unmaintained. Sk98lin driver |
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885 index 00cb646a4bde..0924e6e142c4 100644 --- a/Documentation/video4linux/CARDLIST.cx23885 +++ b/Documentation/video4linux/CARDLIST.cx23885 | |||
@@ -1,5 +1,7 @@ | |||
1 | 0 -> UNKNOWN/GENERIC [0070:3400] | 1 | 0 -> UNKNOWN/GENERIC [0070:3400] |
2 | 1 -> Hauppauge WinTV-HVR1800lp [0070:7600] | 2 | 1 -> Hauppauge WinTV-HVR1800lp [0070:7600] |
3 | 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801] | 3 | 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801,0070:7809] |
4 | 3 -> Hauppauge WinTV-HVR1250 [0070:7911] | 4 | 3 -> Hauppauge WinTV-HVR1250 [0070:7911] |
5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] | 5 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] |
6 | 5 -> Hauppauge WinTV-HVR1500Q [0070:7790,0070:7797] | ||
7 | 6 -> Hauppauge WinTV-HVR1500 [0070:7710,0070:7717] | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 82ac8250e978..bc5593bd9704 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -56,3 +56,4 @@ | |||
56 | 55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980] | 56 | 55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980] |
57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] | 57 | 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] |
58 | 57 -> ADS Tech Instant Video PCI [1421:0390] | 58 | 57 -> ADS Tech Instant Video PCI [1421:0390] |
59 | 58 -> Pinnacle PCTV HD 800i [11bd:0051] | ||
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx index 37f0e3cedf43..6a8469f2bcae 100644 --- a/Documentation/video4linux/CARDLIST.em28xx +++ b/Documentation/video4linux/CARDLIST.em28xx | |||
@@ -1,14 +1,17 @@ | |||
1 | 0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800] | 1 | 0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800] |
2 | 1 -> Unknown EM2820/2840 video grabber (em2820/em2840) | 2 | 1 -> Unknown EM2750/28xx video grabber (em2820/em2840) [eb1a:2750,eb1a:2820,eb1a:2821,eb1a:2860,eb1a:2861,eb1a:2870,eb1a:2881,eb1a:2883] |
3 | 2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036] | 3 | 2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036] |
4 | 3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208] | 4 | 3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208] |
5 | 4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200] | 5 | 4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200,2040:4201] |
6 | 5 -> MSI VOX USB 2.0 (em2820/em2840) [eb1a:2820] | 6 | 5 -> MSI VOX USB 2.0 (em2820/em2840) |
7 | 6 -> Terratec Cinergy 200 USB (em2800) | 7 | 6 -> Terratec Cinergy 200 USB (em2800) |
8 | 7 -> Leadtek Winfast USB II (em2800) | 8 | 7 -> Leadtek Winfast USB II (em2800) |
9 | 8 -> Kworld USB2800 (em2800) | 9 | 8 -> Kworld USB2800 (em2800) |
10 | 9 -> Pinnacle Dazzle DVC 90 (em2820/em2840) [2304:0207] | 10 | 9 -> Pinnacle Dazzle DVC 90/DVC 100 (em2820/em2840) [2304:0207,2304:021a] |
11 | 10 -> Hauppauge WinTV HVR 900 (em2880) | 11 | 10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500] |
12 | 11 -> Terratec Hybrid XS (em2880) | 12 | 11 -> Terratec Hybrid XS (em2880) [0ccd:0042] |
13 | 12 -> Kworld PVR TV 2800 RF (em2820/em2840) | 13 | 12 -> Kworld PVR TV 2800 RF (em2820/em2840) |
14 | 13 -> Terratec Prodigy XS (em2880) | 14 | 13 -> Terratec Prodigy XS (em2880) [0ccd:0047] |
15 | 14 -> Pixelview Prolink PlayTV USB 2.0 (em2820/em2840) | ||
16 | 15 -> V-Gear PocketTV (em2800) | ||
17 | 16 -> Hauppauge WinTV HVR 950 (em2880) [2040:6513] | ||
diff --git a/Documentation/video4linux/CARDLIST.ivtv b/Documentation/video4linux/CARDLIST.ivtv index ddd76a0eb100..a019e27e42b3 100644 --- a/Documentation/video4linux/CARDLIST.ivtv +++ b/Documentation/video4linux/CARDLIST.ivtv | |||
@@ -16,3 +16,9 @@ | |||
16 | 16 -> GOTVIEW PCI DVD2 Deluxe [ffac:0600] | 16 | 16 -> GOTVIEW PCI DVD2 Deluxe [ffac:0600] |
17 | 17 -> Yuan MPC622 [ff01:d998] | 17 | 17 -> Yuan MPC622 [ff01:d998] |
18 | 18 -> Digital Cowboy DCT-MTVP1 [1461:bfff] | 18 | 18 -> Digital Cowboy DCT-MTVP1 [1461:bfff] |
19 | 19 -> Yuan PG600V2/GotView PCI DVD Lite [ffab:0600,ffad:0600] | ||
20 | 20 -> Club3D ZAP-TV1x01 [ffab:0600] | ||
21 | 21 -> AverTV MCE 116 Plus [1461:c439] | ||
22 | 22 -> ASUS Falcon2 [1043:4b66,1043:462e,1043:4b2e] | ||
23 | 23 -> AverMedia PVR-150 Plus [1461:c035] | ||
24 | 24 -> AverMedia EZMaker PCI Deluxe [1461:c03f] | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index a14545300e4c..5d3b6b4d2515 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -80,7 +80,7 @@ | |||
80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) | 80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) |
81 | 80 -> ASUS Digimatrix TV [1043:0210] | 81 | 80 -> ASUS Digimatrix TV [1043:0210] |
82 | 81 -> Philips Tiger reference design [1131:2018] | 82 | 81 -> Philips Tiger reference design [1131:2018] |
83 | 82 -> MSI TV@Anywhere plus [1462:6231] | 83 | 82 -> MSI TV@Anywhere plus [1462:6231,1462:8624] |
84 | 83 -> Terratec Cinergy 250 PCI TV [153b:1160] | 84 | 83 -> Terratec Cinergy 250 PCI TV [153b:1160] |
85 | 84 -> LifeView FlyDVB Trio [5168:0319] | 85 | 84 -> LifeView FlyDVB Trio [5168:0319] |
86 | 85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05] | 86 | 85 -> AverTV DVB-T 777 [1461:2c05,1461:2c05] |
@@ -102,7 +102,7 @@ | |||
102 | 101 -> Pinnacle PCTV 310i [11bd:002f] | 102 | 101 -> Pinnacle PCTV 310i [11bd:002f] |
103 | 102 -> Avermedia AVerTV Studio 507 [1461:9715] | 103 | 102 -> Avermedia AVerTV Studio 507 [1461:9715] |
104 | 103 -> Compro Videomate DVB-T200A | 104 | 103 -> Compro Videomate DVB-T200A |
105 | 104 -> Hauppauge WinTV-HVR1110 DVB-T/Hybrid [0070:6701] | 105 | 104 -> Hauppauge WinTV-HVR1110 DVB-T/Hybrid [0070:6700,0070:6701,0070:6702,0070:6703,0070:6704,0070:6705] |
106 | 105 -> Terratec Cinergy HT PCMCIA [153b:1172] | 106 | 105 -> Terratec Cinergy HT PCMCIA [153b:1172] |
107 | 106 -> Encore ENLTV [1131:2342,1131:2341,3016:2344] | 107 | 106 -> Encore ENLTV [1131:2342,1131:2341,3016:2344] |
108 | 107 -> Encore ENLTV-FM [1131:230f] | 108 | 107 -> Encore ENLTV-FM [1131:230f] |
@@ -116,3 +116,16 @@ | |||
116 | 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] | 116 | 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] |
117 | 116 -> 10MOONS TM300 TV Card [1131:2304] | 117 | 116 -> 10MOONS TM300 TV Card [1131:2304] |
118 | 117 -> Avermedia Super 007 [1461:f01d] | 118 | 117 -> Avermedia Super 007 [1461:f01d] |
119 | 118 -> Beholder BeholdTV 401 [0000:4016] | ||
120 | 119 -> Beholder BeholdTV 403 [0000:4036] | ||
121 | 120 -> Beholder BeholdTV 403 FM [0000:4037] | ||
122 | 121 -> Beholder BeholdTV 405 [0000:4050] | ||
123 | 122 -> Beholder BeholdTV 405 FM [0000:4051] | ||
124 | 123 -> Beholder BeholdTV 407 [0000:4070] | ||
125 | 124 -> Beholder BeholdTV 407 FM [0000:4071] | ||
126 | 125 -> Beholder BeholdTV 409 [0000:4090] | ||
127 | 126 -> Beholder BeholdTV 505 FM/RDS [0000:5051,0000:505B,5ace:5050] | ||
128 | 127 -> Beholder BeholdTV 507 FM/RDS / BeholdTV 509 FM [0000:5071,0000:507B,5ace:5070,5ace:5090] | ||
129 | 128 -> Beholder BeholdTV Columbus TVFM [0000:5201] | ||
130 | 129 -> Beholder BeholdTV 607 / BeholdTV 609 [5ace:6070,5ace:6071,5ace:6072,5ace:6073,5ace:6090,5ace:6091,5ace:6092,5ace:6093] | ||
131 | 130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193] | ||
diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index a88c02d23805..0e2394695bb8 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner | |||
@@ -52,7 +52,7 @@ tuner=50 - TCL 2002N | |||
52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) | 52 | tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) |
53 | tuner=52 - Thomson DTT 7610 (ATSC/NTSC) | 53 | tuner=52 - Thomson DTT 7610 (ATSC/NTSC) |
54 | tuner=53 - Philips FQ1286 | 54 | tuner=53 - Philips FQ1286 |
55 | tuner=54 - tda8290+75 | 55 | tuner=54 - Philips/NXP TDA 8290/8295 + 8275/8275A/18271 |
56 | tuner=55 - TCL 2002MB | 56 | tuner=55 - TCL 2002MB |
57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) | 57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) |
58 | tuner=57 - Philips FQ1236A MK4 | 58 | tuner=57 - Philips FQ1236A MK4 |
@@ -69,7 +69,8 @@ tuner=67 - Philips TD1316 Hybrid Tuner | |||
69 | tuner=68 - Philips TUV1236D ATSC/NTSC dual in | 69 | tuner=68 - Philips TUV1236D ATSC/NTSC dual in |
70 | tuner=69 - Tena TNF 5335 and similar models | 70 | tuner=69 - Tena TNF 5335 and similar models |
71 | tuner=70 - Samsung TCPN 2121P30A | 71 | tuner=70 - Samsung TCPN 2121P30A |
72 | tuner=71 - Xceive xc3028 | 72 | tuner=71 - Xceive xc2028/xc3028 tuner |
73 | tuner=72 - Thomson FE6600 | 73 | tuner=72 - Thomson FE6600 |
74 | tuner=73 - Samsung TCPG 6121P30A | 74 | tuner=73 - Samsung TCPG 6121P30A |
75 | tuner=75 - Philips TEA5761 FM Radio | 75 | tuner=75 - Philips TEA5761 FM Radio |
76 | tuner=76 - Xceive 5000 tuner | ||
diff --git a/Documentation/video4linux/CARDLIST.usbvision b/Documentation/video4linux/CARDLIST.usbvision index 3d6850ef0245..0b72d3fee17e 100644 --- a/Documentation/video4linux/CARDLIST.usbvision +++ b/Documentation/video4linux/CARDLIST.usbvision | |||
@@ -62,3 +62,4 @@ | |||
62 | 61 -> Pinnacle Studio Linx Video input cable (PAL) [2304:0301] | 62 | 61 -> Pinnacle Studio Linx Video input cable (PAL) [2304:0301] |
63 | 62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419] | 63 | 62 -> Pinnacle PCTV Bungee USB (PAL) FM [2304:0419] |
64 | 63 -> Hauppauge WinTv-USB [2400:4200] | 64 | 63 -> Hauppauge WinTv-USB [2400:4200] |
65 | 64 -> Pinnacle Studio PCTV USB (NTSC) FM V3 [2304:0113] | ||
diff --git a/Documentation/video4linux/extract_xc3028.pl b/Documentation/video4linux/extract_xc3028.pl new file mode 100644 index 000000000000..cced8ac5c543 --- /dev/null +++ b/Documentation/video4linux/extract_xc3028.pl | |||
@@ -0,0 +1,926 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Copyright (c) Mauro Carvalho Chehab <mchehab@infradead.org> | ||
4 | # Released under GPLv2 | ||
5 | # | ||
6 | # In order to use, you need to: | ||
7 | # 1) Download the windows driver with something like: | ||
8 | # wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip | ||
9 | # 2) Extract the file hcw85bda.sys from the zip into the current dir: | ||
10 | # unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys | ||
11 | # 3) run the script: | ||
12 | # ./extract_xc3028.pl | ||
13 | # 4) copy the generated file: | ||
14 | # cp xc3028-v27.fw /lib/firmware | ||
15 | |||
16 | #use strict; | ||
17 | use IO::Handle; | ||
18 | |||
19 | my $debug=0; | ||
20 | |||
21 | sub verify ($$) | ||
22 | { | ||
23 | my ($filename, $hash) = @_; | ||
24 | my ($testhash); | ||
25 | |||
26 | if (system("which md5sum > /dev/null 2>&1")) { | ||
27 | die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n"; | ||
28 | } | ||
29 | |||
30 | open(CMD, "md5sum ".$filename."|"); | ||
31 | $testhash = <CMD>; | ||
32 | $testhash =~ /([a-zA-Z0-9]*)/; | ||
33 | $testhash = $1; | ||
34 | close CMD; | ||
35 | die "Hash of extracted file does not match (found $testhash, expected $hash!\n" if ($testhash ne $hash); | ||
36 | } | ||
37 | |||
38 | sub get_hunk ($$) | ||
39 | { | ||
40 | my ($offset, $length) = @_; | ||
41 | my ($chunklength, $buf, $rcount, $out); | ||
42 | |||
43 | sysseek(INFILE, $offset, SEEK_SET); | ||
44 | while ($length > 0) { | ||
45 | # Calc chunk size | ||
46 | $chunklength = 2048; | ||
47 | $chunklength = $length if ($chunklength > $length); | ||
48 | |||
49 | $rcount = sysread(INFILE, $buf, $chunklength); | ||
50 | die "Ran out of data\n" if ($rcount != $chunklength); | ||
51 | $out .= $buf; | ||
52 | $length -= $rcount; | ||
53 | } | ||
54 | return $out; | ||
55 | } | ||
56 | |||
57 | sub write_le16($) | ||
58 | { | ||
59 | my $val = shift; | ||
60 | my $msb = ($val >> 8) &0xff; | ||
61 | my $lsb = $val & 0xff; | ||
62 | |||
63 | syswrite(OUTFILE, chr($lsb).chr($msb)); | ||
64 | } | ||
65 | |||
66 | sub write_le32($) | ||
67 | { | ||
68 | my $val = shift; | ||
69 | my $l3 = ($val >> 24) & 0xff; | ||
70 | my $l2 = ($val >> 16) & 0xff; | ||
71 | my $l1 = ($val >> 8) & 0xff; | ||
72 | my $l0 = $val & 0xff; | ||
73 | |||
74 | syswrite(OUTFILE, chr($l0).chr($l1).chr($l2).chr($l3)); | ||
75 | } | ||
76 | |||
77 | sub write_le64($$) | ||
78 | { | ||
79 | my $msb_val = shift; | ||
80 | my $lsb_val = shift; | ||
81 | my $l7 = ($msb_val >> 24) & 0xff; | ||
82 | my $l6 = ($msb_val >> 16) & 0xff; | ||
83 | my $l5 = ($msb_val >> 8) & 0xff; | ||
84 | my $l4 = $msb_val & 0xff; | ||
85 | |||
86 | my $l3 = ($lsb_val >> 24) & 0xff; | ||
87 | my $l2 = ($lsb_val >> 16) & 0xff; | ||
88 | my $l1 = ($lsb_val >> 8) & 0xff; | ||
89 | my $l0 = $lsb_val & 0xff; | ||
90 | |||
91 | syswrite(OUTFILE, | ||
92 | chr($l0).chr($l1).chr($l2).chr($l3). | ||
93 | chr($l4).chr($l5).chr($l6).chr($l7)); | ||
94 | } | ||
95 | |||
96 | sub write_hunk($$) | ||
97 | { | ||
98 | my ($offset, $length) = @_; | ||
99 | my $out = get_hunk($offset, $length); | ||
100 | |||
101 | printf "(len %d) ",$length if ($debug); | ||
102 | |||
103 | for (my $i=0;$i<$length;$i++) { | ||
104 | printf "%02x ",ord(substr($out,$i,1)) if ($debug); | ||
105 | } | ||
106 | printf "\n" if ($debug); | ||
107 | |||
108 | syswrite(OUTFILE, $out); | ||
109 | } | ||
110 | |||
111 | sub write_hunk_fix_endian($$) | ||
112 | { | ||
113 | my ($offset, $length) = @_; | ||
114 | my $out = get_hunk($offset, $length); | ||
115 | |||
116 | printf "(len_fix %d) ",$length if ($debug); | ||
117 | |||
118 | for (my $i=0;$i<$length;$i++) { | ||
119 | printf "%02x ",ord(substr($out,$i,1)) if ($debug); | ||
120 | } | ||
121 | printf "\n" if ($debug); | ||
122 | |||
123 | my $i=0; | ||
124 | while ($i<$length) { | ||
125 | my $size = ord(substr($out,$i,1))*256+ord(substr($out,$i+1,1)); | ||
126 | syswrite(OUTFILE, substr($out,$i+1,1)); | ||
127 | syswrite(OUTFILE, substr($out,$i,1)); | ||
128 | $i+=2; | ||
129 | if ($size>0 && $size <0x8000) { | ||
130 | for (my $j=0;$j<$size;$j++) { | ||
131 | syswrite(OUTFILE, substr($out,$j+$i,1)); | ||
132 | } | ||
133 | $i+=$size; | ||
134 | } | ||
135 | } | ||
136 | } | ||
137 | |||
138 | sub main_firmware($$$$) | ||
139 | { | ||
140 | my $out; | ||
141 | my $j=0; | ||
142 | my $outfile = shift; | ||
143 | my $name = shift; | ||
144 | my $version = shift; | ||
145 | my $nr_desc = shift; | ||
146 | |||
147 | for ($j = length($name); $j <32; $j++) { | ||
148 | $name = $name.chr(0); | ||
149 | } | ||
150 | |||
151 | open OUTFILE, ">$outfile"; | ||
152 | syswrite(OUTFILE, $name); | ||
153 | write_le16($version); | ||
154 | write_le16($nr_desc); | ||
155 | |||
156 | # | ||
157 | # Firmware 0, type: BASE FW F8MHZ (0x00000003), id: (0000000000000000), size: 8718 | ||
158 | # | ||
159 | |||
160 | write_le32(0x00000003); # Type | ||
161 | write_le64(0x00000000, 0x00000000); # ID | ||
162 | write_le32(8718); # Size | ||
163 | write_hunk_fix_endian(813432, 8718); | ||
164 | |||
165 | # | ||
166 | # Firmware 1, type: BASE FW F8MHZ MTS (0x00000007), id: (0000000000000000), size: 8712 | ||
167 | # | ||
168 | |||
169 | write_le32(0x00000007); # Type | ||
170 | write_le64(0x00000000, 0x00000000); # ID | ||
171 | write_le32(8712); # Size | ||
172 | write_hunk_fix_endian(822152, 8712); | ||
173 | |||
174 | # | ||
175 | # Firmware 2, type: BASE FW FM (0x00000401), id: (0000000000000000), size: 8562 | ||
176 | # | ||
177 | |||
178 | write_le32(0x00000401); # Type | ||
179 | write_le64(0x00000000, 0x00000000); # ID | ||
180 | write_le32(8562); # Size | ||
181 | write_hunk_fix_endian(830872, 8562); | ||
182 | |||
183 | # | ||
184 | # Firmware 3, type: BASE FW FM INPUT1 (0x00000c01), id: (0000000000000000), size: 8576 | ||
185 | # | ||
186 | |||
187 | write_le32(0x00000c01); # Type | ||
188 | write_le64(0x00000000, 0x00000000); # ID | ||
189 | write_le32(8576); # Size | ||
190 | write_hunk_fix_endian(839440, 8576); | ||
191 | |||
192 | # | ||
193 | # Firmware 4, type: BASE FW (0x00000001), id: (0000000000000000), size: 8706 | ||
194 | # | ||
195 | |||
196 | write_le32(0x00000001); # Type | ||
197 | write_le64(0x00000000, 0x00000000); # ID | ||
198 | write_le32(8706); # Size | ||
199 | write_hunk_fix_endian(848024, 8706); | ||
200 | |||
201 | # | ||
202 | # Firmware 5, type: BASE FW MTS (0x00000005), id: (0000000000000000), size: 8682 | ||
203 | # | ||
204 | |||
205 | write_le32(0x00000005); # Type | ||
206 | write_le64(0x00000000, 0x00000000); # ID | ||
207 | write_le32(8682); # Size | ||
208 | write_hunk_fix_endian(856736, 8682); | ||
209 | |||
210 | # | ||
211 | # Firmware 6, type: STD FW (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161 | ||
212 | # | ||
213 | |||
214 | write_le32(0x00000000); # Type | ||
215 | write_le64(0x00000001, 0x00000007); # ID | ||
216 | write_le32(161); # Size | ||
217 | write_hunk_fix_endian(865424, 161); | ||
218 | |||
219 | # | ||
220 | # Firmware 7, type: STD FW MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169 | ||
221 | # | ||
222 | |||
223 | write_le32(0x00000004); # Type | ||
224 | write_le64(0x00000001, 0x00000007); # ID | ||
225 | write_le32(169); # Size | ||
226 | write_hunk_fix_endian(865592, 169); | ||
227 | |||
228 | # | ||
229 | # Firmware 8, type: STD FW (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161 | ||
230 | # | ||
231 | |||
232 | write_le32(0x00000000); # Type | ||
233 | write_le64(0x00000002, 0x00000007); # ID | ||
234 | write_le32(161); # Size | ||
235 | write_hunk_fix_endian(865424, 161); | ||
236 | |||
237 | # | ||
238 | # Firmware 9, type: STD FW MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169 | ||
239 | # | ||
240 | |||
241 | write_le32(0x00000004); # Type | ||
242 | write_le64(0x00000002, 0x00000007); # ID | ||
243 | write_le32(169); # Size | ||
244 | write_hunk_fix_endian(865592, 169); | ||
245 | |||
246 | # | ||
247 | # Firmware 10, type: STD FW (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161 | ||
248 | # | ||
249 | |||
250 | write_le32(0x00000000); # Type | ||
251 | write_le64(0x00000004, 0x00000007); # ID | ||
252 | write_le32(161); # Size | ||
253 | write_hunk_fix_endian(866112, 161); | ||
254 | |||
255 | # | ||
256 | # Firmware 11, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169 | ||
257 | # | ||
258 | |||
259 | write_le32(0x00000004); # Type | ||
260 | write_le64(0x00000004, 0x00000007); # ID | ||
261 | write_le32(169); # Size | ||
262 | write_hunk_fix_endian(866280, 169); | ||
263 | |||
264 | # | ||
265 | # Firmware 12, type: STD FW (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161 | ||
266 | # | ||
267 | |||
268 | write_le32(0x00000000); # Type | ||
269 | write_le64(0x00000008, 0x00000007); # ID | ||
270 | write_le32(161); # Size | ||
271 | write_hunk_fix_endian(866112, 161); | ||
272 | |||
273 | # | ||
274 | # Firmware 13, type: STD FW MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169 | ||
275 | # | ||
276 | |||
277 | write_le32(0x00000004); # Type | ||
278 | write_le64(0x00000008, 0x00000007); # ID | ||
279 | write_le32(169); # Size | ||
280 | write_hunk_fix_endian(866280, 169); | ||
281 | |||
282 | # | ||
283 | # Firmware 14, type: STD FW (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161 | ||
284 | # | ||
285 | |||
286 | write_le32(0x00000000); # Type | ||
287 | write_le64(0x00000003, 0x000000e0); # ID | ||
288 | write_le32(161); # Size | ||
289 | write_hunk_fix_endian(866800, 161); | ||
290 | |||
291 | # | ||
292 | # Firmware 15, type: STD FW MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169 | ||
293 | # | ||
294 | |||
295 | write_le32(0x00000004); # Type | ||
296 | write_le64(0x00000003, 0x000000e0); # ID | ||
297 | write_le32(169); # Size | ||
298 | write_hunk_fix_endian(866968, 169); | ||
299 | |||
300 | # | ||
301 | # Firmware 16, type: STD FW (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161 | ||
302 | # | ||
303 | |||
304 | write_le32(0x00000000); # Type | ||
305 | write_le64(0x0000000c, 0x000000e0); # ID | ||
306 | write_le32(161); # Size | ||
307 | write_hunk_fix_endian(867144, 161); | ||
308 | |||
309 | # | ||
310 | # Firmware 17, type: STD FW MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169 | ||
311 | # | ||
312 | |||
313 | write_le32(0x00000004); # Type | ||
314 | write_le64(0x0000000c, 0x000000e0); # ID | ||
315 | write_le32(169); # Size | ||
316 | write_hunk_fix_endian(867312, 169); | ||
317 | |||
318 | # | ||
319 | # Firmware 18, type: STD FW (0x00000000), id: SECAM/K1 (0000000000200000), size: 161 | ||
320 | # | ||
321 | |||
322 | write_le32(0x00000000); # Type | ||
323 | write_le64(0x00000000, 0x00200000); # ID | ||
324 | write_le32(161); # Size | ||
325 | write_hunk_fix_endian(867488, 161); | ||
326 | |||
327 | # | ||
328 | # Firmware 19, type: STD FW MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169 | ||
329 | # | ||
330 | |||
331 | write_le32(0x00000004); # Type | ||
332 | write_le64(0x00000000, 0x00200000); # ID | ||
333 | write_le32(169); # Size | ||
334 | write_hunk_fix_endian(867656, 169); | ||
335 | |||
336 | # | ||
337 | # Firmware 20, type: STD FW (0x00000000), id: SECAM/K3 (0000000004000000), size: 161 | ||
338 | # | ||
339 | |||
340 | write_le32(0x00000000); # Type | ||
341 | write_le64(0x00000000, 0x04000000); # ID | ||
342 | write_le32(161); # Size | ||
343 | write_hunk_fix_endian(867832, 161); | ||
344 | |||
345 | # | ||
346 | # Firmware 21, type: STD FW MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169 | ||
347 | # | ||
348 | |||
349 | write_le32(0x00000004); # Type | ||
350 | write_le64(0x00000000, 0x04000000); # ID | ||
351 | write_le32(169); # Size | ||
352 | write_hunk_fix_endian(868000, 169); | ||
353 | |||
354 | # | ||
355 | # Firmware 22, type: STD FW D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149 | ||
356 | # | ||
357 | |||
358 | write_le32(0x00010030); # Type | ||
359 | write_le64(0x00000000, 0x00000000); # ID | ||
360 | write_le32(149); # Size | ||
361 | write_hunk_fix_endian(868176, 149); | ||
362 | |||
363 | # | ||
364 | # Firmware 23, type: STD FW D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149 | ||
365 | # | ||
366 | |||
367 | write_le32(0x00000068); # Type | ||
368 | write_le64(0x00000000, 0x00000000); # ID | ||
369 | write_le32(149); # Size | ||
370 | write_hunk_fix_endian(868336, 149); | ||
371 | |||
372 | # | ||
373 | # Firmware 24, type: STD FW D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149 | ||
374 | # | ||
375 | |||
376 | write_le32(0x00000070); # Type | ||
377 | write_le64(0x00000000, 0x00000000); # ID | ||
378 | write_le32(149); # Size | ||
379 | write_hunk_fix_endian(868488, 149); | ||
380 | |||
381 | # | ||
382 | # Firmware 25, type: STD FW D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149 | ||
383 | # | ||
384 | |||
385 | write_le32(0x00000088); # Type | ||
386 | write_le64(0x00000000, 0x00000000); # ID | ||
387 | write_le32(149); # Size | ||
388 | write_hunk_fix_endian(868648, 149); | ||
389 | |||
390 | # | ||
391 | # Firmware 26, type: STD FW D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149 | ||
392 | # | ||
393 | |||
394 | write_le32(0x00000090); # Type | ||
395 | write_le64(0x00000000, 0x00000000); # ID | ||
396 | write_le32(149); # Size | ||
397 | write_hunk_fix_endian(868800, 149); | ||
398 | |||
399 | # | ||
400 | # Firmware 27, type: STD FW D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149 | ||
401 | # | ||
402 | |||
403 | write_le32(0x00000108); # Type | ||
404 | write_le64(0x00000000, 0x00000000); # ID | ||
405 | write_le32(149); # Size | ||
406 | write_hunk_fix_endian(868960, 149); | ||
407 | |||
408 | # | ||
409 | # Firmware 28, type: STD FW D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149 | ||
410 | # | ||
411 | |||
412 | write_le32(0x00000110); # Type | ||
413 | write_le64(0x00000000, 0x00000000); # ID | ||
414 | write_le32(149); # Size | ||
415 | write_hunk_fix_endian(869112, 149); | ||
416 | |||
417 | # | ||
418 | # Firmware 29, type: STD FW D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149 | ||
419 | # | ||
420 | |||
421 | write_le32(0x00000208); # Type | ||
422 | write_le64(0x00000000, 0x00000000); # ID | ||
423 | write_le32(149); # Size | ||
424 | write_hunk_fix_endian(868648, 149); | ||
425 | |||
426 | # | ||
427 | # Firmware 30, type: STD FW D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149 | ||
428 | # | ||
429 | |||
430 | write_le32(0x00000210); # Type | ||
431 | write_le64(0x00000000, 0x00000000); # ID | ||
432 | write_le32(149); # Size | ||
433 | write_hunk_fix_endian(868800, 149); | ||
434 | |||
435 | # | ||
436 | # Firmware 31, type: STD FW FM (0x00000400), id: (0000000000000000), size: 135 | ||
437 | # | ||
438 | |||
439 | write_le32(0x00000400); # Type | ||
440 | write_le64(0x00000000, 0x00000000); # ID | ||
441 | write_le32(135); # Size | ||
442 | write_hunk_fix_endian(869584, 135); | ||
443 | |||
444 | # | ||
445 | # Firmware 32, type: STD FW (0x00000000), id: PAL/I (0000000000000010), size: 161 | ||
446 | # | ||
447 | |||
448 | write_le32(0x00000000); # Type | ||
449 | write_le64(0x00000000, 0x00000010); # ID | ||
450 | write_le32(161); # Size | ||
451 | write_hunk_fix_endian(869728, 161); | ||
452 | |||
453 | # | ||
454 | # Firmware 33, type: STD FW MTS (0x00000004), id: PAL/I (0000000000000010), size: 169 | ||
455 | # | ||
456 | |||
457 | write_le32(0x00000004); # Type | ||
458 | write_le64(0x00000000, 0x00000010); # ID | ||
459 | write_le32(169); # Size | ||
460 | write_hunk_fix_endian(869896, 169); | ||
461 | |||
462 | # | ||
463 | # Firmware 34, type: STD FW (0x00000000), id: SECAM/L AM (0000001000400000), size: 169 | ||
464 | # | ||
465 | |||
466 | write_le32(0x00000000); # Type | ||
467 | write_le64(0x00000010, 0x00400000); # ID | ||
468 | write_le32(169); # Size | ||
469 | write_hunk_fix_endian(870072, 169); | ||
470 | |||
471 | # | ||
472 | # Firmware 35, type: STD FW (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161 | ||
473 | # | ||
474 | |||
475 | write_le32(0x00000000); # Type | ||
476 | write_le64(0x0000000c, 0x00400000); # ID | ||
477 | write_le32(161); # Size | ||
478 | write_hunk_fix_endian(870248, 161); | ||
479 | |||
480 | # | ||
481 | # Firmware 36, type: STD FW (0x00000000), id: SECAM/Lc (0000000000800000), size: 161 | ||
482 | # | ||
483 | |||
484 | write_le32(0x00000000); # Type | ||
485 | write_le64(0x00000000, 0x00800000); # ID | ||
486 | write_le32(161); # Size | ||
487 | write_hunk_fix_endian(870416, 161); | ||
488 | |||
489 | # | ||
490 | # Firmware 37, type: STD FW (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
491 | # | ||
492 | |||
493 | write_le32(0x00000000); # Type | ||
494 | write_le64(0x00000000, 0x00008000); # ID | ||
495 | write_le32(161); # Size | ||
496 | write_hunk_fix_endian(870584, 161); | ||
497 | |||
498 | # | ||
499 | # Firmware 38, type: STD FW LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
500 | # | ||
501 | |||
502 | write_le32(0x00001000); # Type | ||
503 | write_le64(0x00000000, 0x00008000); # ID | ||
504 | write_le32(161); # Size | ||
505 | write_hunk_fix_endian(870752, 161); | ||
506 | |||
507 | # | ||
508 | # Firmware 39, type: STD FW LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161 | ||
509 | # | ||
510 | |||
511 | write_le32(0x00003000); # Type | ||
512 | write_le64(0x00000000, 0x00008000); # ID | ||
513 | write_le32(161); # Size | ||
514 | write_hunk_fix_endian(870920, 161); | ||
515 | |||
516 | # | ||
517 | # Firmware 40, type: STD FW MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169 | ||
518 | # | ||
519 | |||
520 | write_le32(0x00000004); # Type | ||
521 | write_le64(0x00000000, 0x00008000); # ID | ||
522 | write_le32(169); # Size | ||
523 | write_hunk_fix_endian(871088, 169); | ||
524 | |||
525 | # | ||
526 | # Firmware 41, type: STD FW (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
527 | # | ||
528 | |||
529 | write_le32(0x00000000); # Type | ||
530 | write_le64(0x00000000, 0x0000b700); # ID | ||
531 | write_le32(161); # Size | ||
532 | write_hunk_fix_endian(871264, 161); | ||
533 | |||
534 | # | ||
535 | # Firmware 42, type: STD FW LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
536 | # | ||
537 | |||
538 | write_le32(0x00001000); # Type | ||
539 | write_le64(0x00000000, 0x0000b700); # ID | ||
540 | write_le32(161); # Size | ||
541 | write_hunk_fix_endian(871432, 161); | ||
542 | |||
543 | # | ||
544 | # Firmware 43, type: STD FW LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161 | ||
545 | # | ||
546 | |||
547 | write_le32(0x00003000); # Type | ||
548 | write_le64(0x00000000, 0x0000b700); # ID | ||
549 | write_le32(161); # Size | ||
550 | write_hunk_fix_endian(871600, 161); | ||
551 | |||
552 | # | ||
553 | # Firmware 44, type: STD FW (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161 | ||
554 | # | ||
555 | |||
556 | write_le32(0x00000000); # Type | ||
557 | write_le64(0x00000000, 0x00002000); # ID | ||
558 | write_le32(161); # Size | ||
559 | write_hunk_fix_endian(871264, 161); | ||
560 | |||
561 | # | ||
562 | # Firmware 45, type: STD FW MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
563 | # | ||
564 | |||
565 | write_le32(0x00000004); # Type | ||
566 | write_le64(0x00000000, 0x0000b700); # ID | ||
567 | write_le32(169); # Size | ||
568 | write_hunk_fix_endian(871936, 169); | ||
569 | |||
570 | # | ||
571 | # Firmware 46, type: STD FW MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
572 | # | ||
573 | |||
574 | write_le32(0x00001004); # Type | ||
575 | write_le64(0x00000000, 0x0000b700); # ID | ||
576 | write_le32(169); # Size | ||
577 | write_hunk_fix_endian(872112, 169); | ||
578 | |||
579 | # | ||
580 | # Firmware 47, type: STD FW MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169 | ||
581 | # | ||
582 | |||
583 | write_le32(0x00003004); # Type | ||
584 | write_le64(0x00000000, 0x0000b700); # ID | ||
585 | write_le32(169); # Size | ||
586 | write_hunk_fix_endian(872288, 169); | ||
587 | |||
588 | # | ||
589 | # Firmware 48, type: SCODE FW HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192 | ||
590 | # | ||
591 | |||
592 | write_le32(0x60000000); # Type | ||
593 | write_le64(0x00000000, 0x00000000); # ID | ||
594 | write_le16(3280); # IF | ||
595 | write_le32(192); # Size | ||
596 | write_hunk(811896, 192); | ||
597 | |||
598 | # | ||
599 | # Firmware 49, type: SCODE FW HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192 | ||
600 | # | ||
601 | |||
602 | write_le32(0x60000000); # Type | ||
603 | write_le64(0x00000000, 0x00000000); # ID | ||
604 | write_le16(3300); # IF | ||
605 | write_le32(192); # Size | ||
606 | write_hunk(813048, 192); | ||
607 | |||
608 | # | ||
609 | # Firmware 50, type: SCODE FW HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192 | ||
610 | # | ||
611 | |||
612 | write_le32(0x60000000); # Type | ||
613 | write_le64(0x00000000, 0x00000000); # ID | ||
614 | write_le16(3440); # IF | ||
615 | write_le32(192); # Size | ||
616 | write_hunk(812280, 192); | ||
617 | |||
618 | # | ||
619 | # Firmware 51, type: SCODE FW HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192 | ||
620 | # | ||
621 | |||
622 | write_le32(0x60000000); # Type | ||
623 | write_le64(0x00000000, 0x00000000); # ID | ||
624 | write_le16(3460); # IF | ||
625 | write_le32(192); # Size | ||
626 | write_hunk(812472, 192); | ||
627 | |||
628 | # | ||
629 | # Firmware 52, type: SCODE FW DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192 | ||
630 | # | ||
631 | |||
632 | write_le32(0x60210020); # Type | ||
633 | write_le64(0x00000000, 0x00000000); # ID | ||
634 | write_le16(3800); # IF | ||
635 | write_le32(192); # Size | ||
636 | write_hunk(809784, 192); | ||
637 | |||
638 | # | ||
639 | # Firmware 53, type: SCODE FW HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192 | ||
640 | # | ||
641 | |||
642 | write_le32(0x60000000); # Type | ||
643 | write_le64(0x00000000, 0x00000000); # ID | ||
644 | write_le16(4000); # IF | ||
645 | write_le32(192); # Size | ||
646 | write_hunk(812088, 192); | ||
647 | |||
648 | # | ||
649 | # Firmware 54, type: SCODE FW DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192 | ||
650 | # | ||
651 | |||
652 | write_le32(0x60410020); # Type | ||
653 | write_le64(0x00000000, 0x00000000); # ID | ||
654 | write_le16(4080); # IF | ||
655 | write_le32(192); # Size | ||
656 | write_hunk(809976, 192); | ||
657 | |||
658 | # | ||
659 | # Firmware 55, type: SCODE FW HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192 | ||
660 | # | ||
661 | |||
662 | write_le32(0x60000000); # Type | ||
663 | write_le64(0x00000000, 0x00000000); # ID | ||
664 | write_le16(4200); # IF | ||
665 | write_le32(192); # Size | ||
666 | write_hunk(811704, 192); | ||
667 | |||
668 | # | ||
669 | # Firmware 56, type: SCODE FW MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192 | ||
670 | # | ||
671 | |||
672 | write_le32(0x60008000); # Type | ||
673 | write_le64(0x00000000, 0x00008000); # ID | ||
674 | write_le16(4320); # IF | ||
675 | write_le32(192); # Size | ||
676 | write_hunk(808056, 192); | ||
677 | |||
678 | # | ||
679 | # Firmware 57, type: SCODE FW HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192 | ||
680 | # | ||
681 | |||
682 | write_le32(0x60000000); # Type | ||
683 | write_le64(0x00000000, 0x00000000); # ID | ||
684 | write_le16(4450); # IF | ||
685 | write_le32(192); # Size | ||
686 | write_hunk(812664, 192); | ||
687 | |||
688 | # | ||
689 | # Firmware 58, type: SCODE FW HAS IF (0x60000000), IF = 4.50 MHz id: NTSC/M Jp (0000000000002000), size: 192 | ||
690 | # | ||
691 | |||
692 | write_le32(0x60000000); # Type | ||
693 | write_le64(0x00000000, 0x00002000); # ID | ||
694 | write_le16(4500); # IF | ||
695 | write_le32(192); # Size | ||
696 | write_hunk(807672, 192); | ||
697 | |||
698 | # | ||
699 | # Firmware 59, type: SCODE FW LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192 | ||
700 | # | ||
701 | |||
702 | write_le32(0x60023000); # Type | ||
703 | write_le64(0x00000000, 0x00008000); # ID | ||
704 | write_le16(4600); # IF | ||
705 | write_le32(192); # Size | ||
706 | write_hunk(807864, 192); | ||
707 | |||
708 | # | ||
709 | # Firmware 60, type: SCODE FW DTV78 ZARLINK456 HAS IF (0x62000100), IF = 4.76 MHz id: (0000000000000000), size: 192 | ||
710 | # | ||
711 | |||
712 | write_le32(0x62000100); # Type | ||
713 | write_le64(0x00000000, 0x00000000); # ID | ||
714 | write_le16(4760); # IF | ||
715 | write_le32(192); # Size | ||
716 | write_hunk(807288, 192); | ||
717 | |||
718 | # | ||
719 | # Firmware 61, type: SCODE FW HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192 | ||
720 | # | ||
721 | |||
722 | write_le32(0x60000000); # Type | ||
723 | write_le64(0x00000000, 0x00000000); # ID | ||
724 | write_le16(4940); # IF | ||
725 | write_le32(192); # Size | ||
726 | write_hunk(811512, 192); | ||
727 | |||
728 | # | ||
729 | # Firmware 62, type: SCODE FW DTV7 ZARLINK456 HAS IF (0x62000080), IF = 5.26 MHz id: (0000000000000000), size: 192 | ||
730 | # | ||
731 | |||
732 | write_le32(0x62000080); # Type | ||
733 | write_le64(0x00000000, 0x00000000); # ID | ||
734 | write_le16(5260); # IF | ||
735 | write_le32(192); # Size | ||
736 | write_hunk(810552, 192); | ||
737 | |||
738 | # | ||
739 | # Firmware 63, type: SCODE FW MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | ||
740 | # | ||
741 | |||
742 | write_le32(0x60008000); # Type | ||
743 | write_le64(0x00000008, 0x00000007); # ID | ||
744 | write_le16(5320); # IF | ||
745 | write_le32(192); # Size | ||
746 | write_hunk(810744, 192); | ||
747 | |||
748 | # | ||
749 | # Firmware 64, type: SCODE FW DTV8 CHINA HAS IF (0x64000200), IF = 5.40 MHz id: (0000000000000000), size: 192 | ||
750 | # | ||
751 | |||
752 | write_le32(0x64000200); # Type | ||
753 | write_le64(0x00000000, 0x00000000); # ID | ||
754 | write_le16(5400); # IF | ||
755 | write_le32(192); # Size | ||
756 | write_hunk(807096, 192); | ||
757 | |||
758 | # | ||
759 | # Firmware 65, type: SCODE FW DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192 | ||
760 | # | ||
761 | |||
762 | write_le32(0x60110020); # Type | ||
763 | write_le64(0x00000000, 0x00000000); # ID | ||
764 | write_le16(5580); # IF | ||
765 | write_le32(192); # Size | ||
766 | write_hunk(809592, 192); | ||
767 | |||
768 | # | ||
769 | # Firmware 66, type: SCODE FW HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2/B (0000000200000007), size: 192 | ||
770 | # | ||
771 | |||
772 | write_le32(0x60000000); # Type | ||
773 | write_le64(0x00000002, 0x00000007); # ID | ||
774 | write_le16(5640); # IF | ||
775 | write_le32(192); # Size | ||
776 | write_hunk(808440, 192); | ||
777 | |||
778 | # | ||
779 | # Firmware 67, type: SCODE FW HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM/B (0000000800000007), size: 192 | ||
780 | # | ||
781 | |||
782 | write_le32(0x60000000); # Type | ||
783 | write_le64(0x00000008, 0x00000007); # ID | ||
784 | write_le16(5740); # IF | ||
785 | write_le32(192); # Size | ||
786 | write_hunk(808632, 192); | ||
787 | |||
788 | # | ||
789 | # Firmware 68, type: SCODE FW DTV7 DIBCOM52 HAS IF (0x61000080), IF = 5.90 MHz id: (0000000000000000), size: 192 | ||
790 | # | ||
791 | |||
792 | write_le32(0x61000080); # Type | ||
793 | write_le64(0x00000000, 0x00000000); # ID | ||
794 | write_le16(5900); # IF | ||
795 | write_le32(192); # Size | ||
796 | write_hunk(810360, 192); | ||
797 | |||
798 | # | ||
799 | # Firmware 69, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/I (0000000000000010), size: 192 | ||
800 | # | ||
801 | |||
802 | write_le32(0x60008000); # Type | ||
803 | write_le64(0x00000000, 0x00000010); # ID | ||
804 | write_le16(6000); # IF | ||
805 | write_le32(192); # Size | ||
806 | write_hunk(808824, 192); | ||
807 | |||
808 | # | ||
809 | # Firmware 70, type: SCODE FW DTV6 QAM F6MHZ HAS IF (0x68000060), IF = 6.20 MHz id: (0000000000000000), size: 192 | ||
810 | # | ||
811 | |||
812 | write_le32(0x68000060); # Type | ||
813 | write_le64(0x00000000, 0x00000000); # ID | ||
814 | write_le16(6200); # IF | ||
815 | write_le32(192); # Size | ||
816 | write_hunk(809400, 192); | ||
817 | |||
818 | # | ||
819 | # Firmware 71, type: SCODE FW HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192 | ||
820 | # | ||
821 | |||
822 | write_le32(0x60000000); # Type | ||
823 | write_le64(0x00000000, 0x00000010); # ID | ||
824 | write_le16(6240); # IF | ||
825 | write_le32(192); # Size | ||
826 | write_hunk(808248, 192); | ||
827 | |||
828 | # | ||
829 | # Firmware 72, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192 | ||
830 | # | ||
831 | |||
832 | write_le32(0x60008000); # Type | ||
833 | write_le64(0x00000000, 0x00200000); # ID | ||
834 | write_le16(6320); # IF | ||
835 | write_le32(192); # Size | ||
836 | write_hunk(811320, 192); | ||
837 | |||
838 | # | ||
839 | # Firmware 73, type: SCODE FW HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192 | ||
840 | # | ||
841 | |||
842 | write_le32(0x60000000); # Type | ||
843 | write_le64(0x00000000, 0x00200000); # ID | ||
844 | write_le16(6340); # IF | ||
845 | write_le32(192); # Size | ||
846 | write_hunk(809208, 192); | ||
847 | |||
848 | # | ||
849 | # Firmware 74, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.50 MHz id: SECAM/K3 (0000000004000000), size: 192 | ||
850 | # | ||
851 | |||
852 | write_le32(0x60008000); # Type | ||
853 | write_le64(0x00000000, 0x04000000); # ID | ||
854 | write_le16(6500); # IF | ||
855 | write_le32(192); # Size | ||
856 | write_hunk(811128, 192); | ||
857 | |||
858 | # | ||
859 | # Firmware 75, type: SCODE FW DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192 | ||
860 | # | ||
861 | |||
862 | write_le32(0x60090020); # Type | ||
863 | write_le64(0x00000000, 0x00000000); # ID | ||
864 | write_le16(6580); # IF | ||
865 | write_le32(192); # Size | ||
866 | write_hunk(807480, 192); | ||
867 | |||
868 | # | ||
869 | # Firmware 76, type: SCODE FW HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192 | ||
870 | # | ||
871 | |||
872 | write_le32(0x60000000); # Type | ||
873 | write_le64(0x00000003, 0x000000e0); # ID | ||
874 | write_le16(6600); # IF | ||
875 | write_le32(192); # Size | ||
876 | write_hunk(809016, 192); | ||
877 | |||
878 | # | ||
879 | # Firmware 77, type: SCODE FW MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192 | ||
880 | # | ||
881 | |||
882 | write_le32(0x60008000); # Type | ||
883 | write_le64(0x00000003, 0x000000e0); # ID | ||
884 | write_le16(6680); # IF | ||
885 | write_le32(192); # Size | ||
886 | write_hunk(810936, 192); | ||
887 | |||
888 | # | ||
889 | # Firmware 78, type: SCODE FW DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192 | ||
890 | # | ||
891 | |||
892 | write_le32(0x60810020); # Type | ||
893 | write_le64(0x00000000, 0x00000000); # ID | ||
894 | write_le16(8140); # IF | ||
895 | write_le32(192); # Size | ||
896 | write_hunk(810168, 192); | ||
897 | |||
898 | # | ||
899 | # Firmware 79, type: SCODE FW HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192 | ||
900 | # | ||
901 | |||
902 | write_le32(0x60000000); # Type | ||
903 | write_le64(0x00000000, 0x00000000); # ID | ||
904 | write_le16(8200); # IF | ||
905 | write_le32(192); # Size | ||
906 | write_hunk(812856, 192); | ||
907 | } | ||
908 | |||
909 | sub extract_firmware { | ||
910 | my $sourcefile = "hcw85bda.sys"; | ||
911 | my $hash = "0e44dbf63bb0169d57446aec21881ff2"; | ||
912 | my $outfile = "xc3028-v27.fw"; | ||
913 | my $name = "xc2028 firmware"; | ||
914 | my $version = 519; | ||
915 | my $nr_desc = 80; | ||
916 | my $out; | ||
917 | |||
918 | verify($sourcefile, $hash); | ||
919 | |||
920 | open INFILE, "<$sourcefile"; | ||
921 | main_firmware($outfile, $name, $version, $nr_desc); | ||
922 | close INFILE; | ||
923 | } | ||
924 | |||
925 | extract_firmware; | ||
926 | printf "Firmwares generated.\n"; | ||
diff --git a/Documentation/video4linux/sn9c102.txt b/Documentation/video4linux/sn9c102.txt index 1ffad19ce891..b26f5195af51 100644 --- a/Documentation/video4linux/sn9c102.txt +++ b/Documentation/video4linux/sn9c102.txt | |||
@@ -568,6 +568,7 @@ the fingerprint is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. | |||
568 | Many thanks to following persons for their contribute (listed in alphabetical | 568 | Many thanks to following persons for their contribute (listed in alphabetical |
569 | order): | 569 | order): |
570 | 570 | ||
571 | - David Anderson for the donation of a webcam; | ||
571 | - Luca Capello for the donation of a webcam; | 572 | - Luca Capello for the donation of a webcam; |
572 | - Philippe Coval for having helped testing the PAS202BCA image sensor; | 573 | - Philippe Coval for having helped testing the PAS202BCA image sensor; |
573 | - Joao Rodrigo Fuzaro, Joao Limirio, Claudio Filho and Caio Begotti for the | 574 | - Joao Rodrigo Fuzaro, Joao Limirio, Claudio Filho and Caio Begotti for the |