aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/dvb
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/dvb')
-rw-r--r--Documentation/dvb/README.flexcop205
-rw-r--r--Documentation/dvb/bt8xx.txt69
-rw-r--r--Documentation/dvb/ci.txt219
-rw-r--r--Documentation/dvb/get_dvb_firmware4
4 files changed, 450 insertions, 47 deletions
diff --git a/Documentation/dvb/README.flexcop b/Documentation/dvb/README.flexcop
new file mode 100644
index 000000000000..a50c70f9ca72
--- /dev/null
+++ b/Documentation/dvb/README.flexcop
@@ -0,0 +1,205 @@
1This README escorted the skystar2-driver rewriting procedure. It describes the
2state of the new flexcop-driver set and some internals are written down here
3too.
4
5This document hopefully describes things about the flexcop and its
6device-offsprings. Goal was to write an easy-to-write and easy-to-read set of
7drivers based on the skystar2.c and other information.
8
9Remark: flexcop-pci.c was a copy of skystar2.c, but every line has been
10touched and rewritten.
11
12History & News
13==============
14 2005-04-01 - correct USB ISOC transfers (thanks to Vadim Catana)
15
16
17
18
19General coding processing
20=========================
21
22We should proceed as follows (as long as no one complains):
23
240) Think before start writing code!
25
261) rewriting the skystar2.c with the help of the flexcop register descriptions
27and splitting up the files to a pci-bus-part and a flexcop-part.
28The new driver will be called b2c2-flexcop-pci.ko/b2c2-flexcop-usb.ko for the
29device-specific part and b2c2-flexcop.ko for the common flexcop-functions.
30
312) Search for errors in the leftover of flexcop-pci.c (compare with pluto2.c
32and other pci drivers)
33
343) make some beautification (see 'Improvements when rewriting (refactoring) is
35done')
36
374) Testing the new driver and maybe substitute the skystar2.c with it, to reach
38a wider tester audience.
39
405) creating an usb-bus-part using the already written flexcop code for the pci
41card.
42
43Idea: create a kernel-object for the flexcop and export all important
44functions. This option saves kernel-memory, but maybe a lot of functions have
45to be exported to kernel namespace.
46
47
48Current situation
49=================
50
510) Done :)
521) Done (some minor issues left)
532) Done
543) Not ready yet, more information is necessary
554) next to be done (see the table below)
565) USB driver is working (yes, there are some minor issues)
57
58What seems to be ready?
59-----------------------
60
611) Rewriting
621a) i2c is cut off from the flexcop-pci.c and seems to work
631b) moved tuner and demod stuff from flexcop-pci.c to flexcop-tuner-fe.c
641c) moved lnb and diseqc stuff from flexcop-pci.c to flexcop-tuner-fe.c
651e) eeprom (reading MAC address)
661d) sram (no dynamic sll size detection (commented out) (using default as JJ told me))
671f) misc. register accesses for reading parameters (e.g. resetting, revision)
681g) pid/mac filter (flexcop-hw-filter.c)
691i) dvb-stuff initialization in flexcop.c (done)
701h) dma stuff (now just using the size-irq, instead of all-together, to be done)
711j) remove flexcop initialization from flexcop-pci.c completely (done)
721l) use a well working dma IRQ method (done, see 'Known bugs and problems and TODO')
731k) cleanup flexcop-files (remove unused EXPORT_SYMBOLs, make static from
74non-static where possible, moved code to proper places)
75
762) Search for errors in the leftover of flexcop-pci.c (partially done)
775a) add MAC address reading
785c) feeding of ISOC data to the software demux (format of the isochronous data
79and speed optimization, no real error) (thanks to Vadim Catana)
80
81What to do in the near future?
82--------------------------------------
83(no special order here)
84
855) USB driver
865b) optimize isoc-transfer (submitting/killing isoc URBs when transfer is starting)
87
88Testing changes
89---------------
90
91O = item is working
92P = item is partially working
93X = item is not working
94N = item does not apply here
95<empty field> = item need to be examined
96
97 | PCI | USB
98item | mt352 | nxt2002 | stv0299 | mt312 | mt352 | nxt2002 | stv0299 | mt312
99-------+-------+---------+---------+-------+-------+---------+---------+-------
1001a) | O | | | | N | N | N | N
1011b) | O | | | | | | O |
1021c) | N | N | | | N | N | O |
1031d) | O | O
1041e) | O | O
1051f) | P
1061g) | O
1071h) | P |
1081i) | O | N
1091j) | O | N
1101l) | O | N
1112) | O | N
1125a) | N | O
1135b)* | N |
1145c) | N | O
115
116* - not done yet
117
118Known bugs and problems and TODO
119--------------------------------
120
1211g/h/l) when pid filtering is enabled on the pci card
122
123DMA usage currently:
124 The DMA is splitted in 2 equal-sized subbuffers. The Flexcop writes to first
125 address and triggers an IRQ when it's full and starts writing to the second
126 address. When the second address is full, the IRQ is triggered again, and
127 the flexcop writes to first address again, and so on.
128 The buffersize of each address is currently 640*188 bytes.
129
130 Problem is, when using hw-pid-filtering and doing some low-bandwidth
131 operation (like scanning) the buffers won't be filled enough to trigger
132 the IRQ. That's why:
133
134 When PID filtering is activated, the timer IRQ is used. Every 1.97 ms the IRQ
135 is triggered. Is the current write address of DMA1 different to the one
136 during the last IRQ, then the data is passed to the demuxer.
137
138 There is an additional DMA-IRQ-method: packet count IRQ. This isn't
139 implemented correctly yet.
140
141 The solution is to disable HW PID filtering, but I don't know how the DVB
142 API software demux behaves on slow systems with 45MBit/s TS.
143
144Solved bugs :)
145--------------
1461g) pid-filtering (somehow pid index 4 and 5 (EMM_PID and ECM_PID) aren't
147working)
148SOLUTION: also index 0 was affected, because net_translation is done for
149these indexes by default
150
1515b) isochronous transfer does only work in the first attempt (for the Sky2PC
152USB, Air2PC is working) SOLUTION: the flexcop was going asleep and never really
153woke up again (don't know if this need fixes, see
154flexcop-fe-tuner.c:flexcop_sleep)
155
156NEWS: when the driver is loaded and unloaded and loaded again (w/o doing
157anything in the while the driver is loaded the first time), no transfers take
158place anymore.
159
160Improvements when rewriting (refactoring) is done
161=================================================
162
163- split sleeping of the flexcop (misc_204.ACPI3_sig = 1;) from lnb_control
164 (enable sleeping for other demods than dvb-s)
165- add support for CableStar (stv0297 Microtune 203x/ALPS) (almost done, incompatibilities with the Nexus-CA)
166
167Debugging
168---------
169- add verbose debugging to skystar2.c (dump the reg_dw_data) and compare it
170 with this flexcop, this is important, because i2c is now using the
171 flexcop_ibi_value union from flexcop-reg.h (do you have a better idea for
172 that, please tell us so).
173
174Everything which is identical in the following table, can be put into a common
175flexcop-module.
176
177 PCI USB
178-------------------------------------------------------------------------------
179Different:
180Register access: accessing IO memory USB control message
181I2C bus: I2C bus of the FC USB control message
182Data transfer: DMA isochronous transfer
183EEPROM transfer: through i2c bus not clear yet
184
185Identical:
186Streaming: accessing registers
187PID Filtering: accessing registers
188Sram destinations: accessing registers
189Tuner/Demod: I2C bus
190DVB-stuff: can be written for common use
191
192Acknowledgements (just for the rewriting part)
193================
194
195Bjarne Steinsbo thought a lot in the first place of the pci part for this code
196sharing idea.
197
198Andreas Oberritter for providing a recent PCI initialization template
199(pluto2.c).
200
201Boleslaw Ciesielski for pointing out a problem with firmware loader.
202
203Vadim Catana for correcting the USB transfer.
204
205comments, critics and ideas to linux-dvb@linuxtv.org.
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt
index e3cacf4f2345..d64430bf4bb6 100644
--- a/Documentation/dvb/bt8xx.txt
+++ b/Documentation/dvb/bt8xx.txt
@@ -17,74 +17,53 @@ Because of this, you need to enable
17"Device drivers" => "Multimedia devices" 17"Device drivers" => "Multimedia devices"
18 => "Video For Linux" => "BT848 Video For Linux" 18 => "Video For Linux" => "BT848 Video For Linux"
19 19
20Furthermore you need to enable
21"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices"
22 => "DVB for Linux" "DVB Core Support" "Nebula/Pinnacle PCTV/TwinHan PCI Cards"
23
202) Loading Modules 242) Loading Modules
21================== 25==================
22 26
23In general you need to load the bttv driver, which will handle the gpio and 27In general you need to load the bttv driver, which will handle the gpio and
24i2c communication for us. Next you need the common dvb-bt8xx device driver 28i2c communication for us, plus the common dvb-bt8xx device driver.
25and one frontend driver. 29The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110) and
26 30TwinHan (dst) are loaded automatically by the dvb-bt8xx device driver.
27The bttv driver will HANG YOUR SYSTEM IF YOU DO NOT SPECIFY THE CORRECT
28CARD ID!
29
30(If you don't get your card running and you suspect that the card id you're
31using is wrong, have a look at "bttv-cards.c" for a list of possible card
32ids.)
33
34Pay attention to failures when you load the frontend drivers
35(e.g. dmesg, /var/log/messages).
36 31
373a) Nebula / Pinnacle PCTV 323a) Nebula / Pinnacle PCTV
38-------------------------- 33--------------------------
39 34
40 $ modprobe bttv i2c_hw=1 card=0x68 35 $ modprobe bttv (normally bttv is being loaded automatically by kmod)
41 $ modprobe dvb-bt8xx 36 $ modprobe dvb-bt8xx (or just place dvb-bt8xx in /etc/modules for automatic loading)
42
43For Nebula cards use the "nxt6000" frontend driver:
44 $ modprobe nxt6000
45 37
46For Pinnacle PCTV cards use the "cx24110" frontend driver:
47 $ modprobe cx24110
48 38
493b) TwinHan 393b) TwinHan and Clones
50----------- 40--------------------------
51 41
52 $ modprobe bttv i2c_hw=1 card=0x71 42 $ modprobe bttv i2c_hw=1 card=0x71
53 $ modprobe dvb-bt8xx 43 $ modprobe dvb-bt8xx
54 $ modprobe dst 44 $ modprobe dst
55 45
56The value 0x71 will override the PCI type detection for dvb-bt8xx, which 46The value 0x71 will override the PCI type detection for dvb-bt8xx,
57is necessary for TwinHan cards.# 47which is necessary for TwinHan cards.
58 48
59If you're having an older card (blue color circuit) and card=0x71 locks your 49If you're having an older card (blue color circuit) and card=0x71 locks
60machine, try using 0x68, too. If that does not work, ask on the DVB mailing list. 50your machine, try using 0x68, too. If that does not work, ask on the
51mailing list.
61 52
62The DST module takes a couple of useful parameters, in case the 53The DST module takes a couple of useful parameters.
63dst drivers fails to detect your type of card correctly.
64 54
65dst_type takes values 0 (satellite), 1 (terrestial TV), 2 (cable). 55verbose takes values 0 to 5. These values control the verbosity level.
66 56
67dst_type_flags takes bit combined values: 57debug takes values 0 and 1. You can either disable or enable debugging.
681 = new tuner type packets. You can use this if your card is detected
69 and you have debug and you continually see the tuner packets not
70 working (make sure not a basic problem like dish alignment etc.)
71 58
722 = TS 204. If your card tunes OK, but the picture is terrible, seemingly 59dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card.
73 breaking up in one half continually, and crc fails a lot, then 600x20 means it has a Conditional Access slot.
74 this is worth a try (or trying to turn off)
75 61
764 = has symdiv. Some cards, mostly without new tuner packets, require 62The autodected values are determined bythe cards 'response
77 a symbol division algorithm. Doesn't apply to terrestial TV.
78
79You can also specify a value to have the autodetected values turned off
80(e.g. 0). The autodected values are determined bythe cards 'response
81string' which you can see in your logs e.g. 63string' which you can see in your logs e.g.
82 64
83dst_check_ci: recognize DST-MOT 65dst_get_device_id: Recognise [DSTMCI]
84
85or
86 66
87dst_check_ci: unable to recognize DSTXCI or STXCI
88 67
89-- 68--
90Authors: Richard Walker, Jamie Honan, Michael Hunold 69Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham
diff --git a/Documentation/dvb/ci.txt b/Documentation/dvb/ci.txt
new file mode 100644
index 000000000000..62e0701b542a
--- /dev/null
+++ b/Documentation/dvb/ci.txt
@@ -0,0 +1,219 @@
1* For the user
2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3NOTE: This document describes the usage of the high level CI API as
4in accordance to the Linux DVB API. This is a not a documentation for the,
5existing low level CI API.
6~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7
8To utilize the High Level CI capabilities,
9
10(1*) This point is valid only for the Twinhan/clones
11 For the Twinhan/Twinhan clones, the dst_ca module handles the CI
12 hardware handling.This module is loaded automatically if a CI
13 (Common Interface, that holds the CAM (Conditional Access Module)
14 is detected.
15
16(2) one requires a userspace application, ca_zap. This small userland
17 application is in charge of sending the descrambling related information
18 to the CAM.
19
20This application requires the following to function properly as of now.
21
22 (a) Tune to a valid channel, with szap.
23 eg: $ szap -c channels.conf -r "TMC" -x
24
25 (b) a channels.conf containing a valid PMT PID
26
27 eg: TMC:11996:h:0:27500:278:512:650:321
28
29 here 278 is a valid PMT PID. the rest of the values are the
30 same ones that szap uses.
31
32 (c) after running a szap, you have to run ca_zap, for the
33 descrambler to function,
34
35 eg: $ ca_zap patched_channels.conf "TMC"
36
37 The patched means a patch to apply to scan, such that scan can
38 generate a channels.conf_with pmt, which has this PMT PID info
39 (NOTE: szap cannot use this channels.conf with the PMT_PID)
40
41
42 (d) Hopeflly Enjoy your favourite subscribed channel as you do with
43 a FTA card.
44
45(3) Currently ca_zap, and dst_test, both are meant for demonstration
46 purposes only, they can become full fledged applications if necessary.
47
48
49* Cards that fall in this category
50~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51At present the cards that fall in this category are the Twinhan and it's
52clones, these cards are available as VVMER, Tomato, Hercules, Orange and
53so on.
54
55* CI modules that are supported
56~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57The CI module support is largely dependant upon the firmware on the cards
58Some cards do support almost all of the available CI modules. There is
59nothing much that can be done in order to make additional CI modules
60working with these cards.
61
62Modules that have been tested by this driver at present are
63
64(1) Irdeto 1 and 2 from SCM
65(2) Viaccess from SCM
66(3) Dragoncam
67
68* The High level CI API
69~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70
71* For the programmer
72~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73With the High Level CI approach any new card with almost any random
74architecture can be implemented with this style, the definitions
75insidethe switch statement can be easily adapted for any card, thereby
76eliminating the need for any additional ioctls.
77
78The disadvantage is that the driver/hardware has to manage the rest. For
79the application programmer it would be as simple as sending/receiving an
80array to/from the CI ioctls as defined in the Linux DVB API. No changes
81have been made in the API to accomodate this feature.
82
83
84* Why the need for another CI interface ?
85~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
86This is one of the most commonly asked question. Well a nice question.
87Strictly speaking this is not a new interface.
88
89The CI interface is defined in the DVB API in ca.h as
90
91typedef struct ca_slot_info {
92 int num; /* slot number */
93
94 int type; /* CA interface this slot supports */
95#define CA_CI 1 /* CI high level interface */
96#define CA_CI_LINK 2 /* CI link layer level interface */
97#define CA_CI_PHYS 4 /* CI physical layer level interface */
98#define CA_DESCR 8 /* built-in descrambler */
99#define CA_SC 128 /* simple smart card interface */
100
101 unsigned int flags;
102#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
103#define CA_CI_MODULE_READY 2
104} ca_slot_info_t;
105
106
107
108This CI interface follows the CI high level interface, which is not
109implemented by most applications. Hence this area is revisited.
110
111This CI interface is quite different in the case that it tries to
112accomodate all other CI based devices, that fall into the other categories
113
114This means that this CI interface handles the EN50221 style tags in the
115Application layer only and no session management is taken care of by the
116application. The driver/hardware will take care of all that.
117
118This interface is purely an EN50221 interface exchanging APDU's. This
119means that no session management, link layer or a transport layer do
120exist in this case in the application to driver communication. It is
121as simple as that. The driver/hardware has to take care of that.
122
123
124With this High Level CI interface, the interface can be defined with the
125regular ioctls.
126
127All these ioctls are also valid for the High level CI interface
128
129#define CA_RESET _IO('o', 128)
130#define CA_GET_CAP _IOR('o', 129, ca_caps_t)
131#define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t)
132#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
133#define CA_GET_MSG _IOR('o', 132, ca_msg_t)
134#define CA_SEND_MSG _IOW('o', 133, ca_msg_t)
135#define CA_SET_DESCR _IOW('o', 134, ca_descr_t)
136#define CA_SET_PID _IOW('o', 135, ca_pid_t)
137
138
139On querying the device, the device yields information thus
140
141CA_GET_SLOT_INFO
142----------------------------
143Command = [info]
144APP: Number=[1]
145APP: Type=[1]
146APP: flags=[1]
147APP: CI High level interface
148APP: CA/CI Module Present
149
150CA_GET_CAP
151----------------------------
152Command = [caps]
153APP: Slots=[1]
154APP: Type=[1]
155APP: Descrambler keys=[16]
156APP: Type=[1]
157
158CA_SEND_MSG
159----------------------------
160Descriptors(Program Level)=[ 09 06 06 04 05 50 ff f1]
161Found CA descriptor @ program level
162
163(20) ES type=[2] ES pid=[201] ES length =[0 (0x0)]
164(25) ES type=[4] ES pid=[301] ES length =[0 (0x0)]
165ca_message length is 25 (0x19) bytes
166EN50221 CA MSG=[ 9f 80 32 19 03 01 2d d1 f0 08 01 09 06 06 04 05 50 ff f1 02 e0 c9 00 00 04 e1 2d 00 00]
167
168
169Not all ioctl's are implemented in the driver from the API, the other
170features of the hardware that cannot be implemented by the API are achieved
171using the CA_GET_MSG and CA_SEND_MSG ioctls. An EN50221 style wrapper is
172used to exchange the data to maintain compatibility with other hardware.
173
174
175/* a message to/from a CI-CAM */
176typedef struct ca_msg {
177 unsigned int index;
178 unsigned int type;
179 unsigned int length;
180 unsigned char msg[256];
181} ca_msg_t;
182
183
184The flow of data can be described thus,
185
186
187
188
189
190 App (User)
191 -----
192 parse
193 |
194 |
195 v
196 en50221 APDU (package)
197 --------------------------------------
198 | | | High Level CI driver
199 | | |
200 | v |
201 | en50221 APDU (unpackage) |
202 | | |
203 | | |
204 | v |
205 | sanity checks |
206 | | |
207 | | |
208 | v |
209 | do (H/W dep) |
210 --------------------------------------
211 | Hardware
212 |
213 v
214
215
216
217
218The High Level CI interface uses the EN50221 DVB standard, following a
219standard ensures futureproofness.
diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware
index 3ffdcb394299..a750f0101d9d 100644
--- a/Documentation/dvb/get_dvb_firmware
+++ b/Documentation/dvb/get_dvb_firmware
@@ -107,7 +107,7 @@ sub tda10045 {
107sub tda10046 { 107sub tda10046 {
108 my $sourcefile = "tt_budget_217g.zip"; 108 my $sourcefile = "tt_budget_217g.zip";
109 my $url = "http://www.technotrend.de/new/217g/$sourcefile"; 109 my $url = "http://www.technotrend.de/new/217g/$sourcefile";
110 my $hash = "a25b579e37109af60f4a36c37893957c"; 110 my $hash = "6a7e1e2f2644b162ff0502367553c72d";
111 my $outfile = "dvb-fe-tda10046.fw"; 111 my $outfile = "dvb-fe-tda10046.fw";
112 my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); 112 my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
113 113
@@ -115,7 +115,7 @@ sub tda10046 {
115 115
116 wgetfile($sourcefile, $url); 116 wgetfile($sourcefile, $url);
117 unzip($sourcefile, $tmpdir); 117 unzip($sourcefile, $tmpdir);
118 extract("$tmpdir/software/OEM/PCI/App/ttlcdacc.dll", 0x3f731, 24479, "$tmpdir/fwtmp"); 118 extract("$tmpdir/software/OEM/PCI/App/ttlcdacc.dll", 0x3f731, 24478, "$tmpdir/fwtmp");
119 verify("$tmpdir/fwtmp", $hash); 119 verify("$tmpdir/fwtmp", $hash);
120 copy("$tmpdir/fwtmp", $outfile); 120 copy("$tmpdir/fwtmp", $outfile);
121 121