About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / dvb / README.flexcop


Based on kernel version 2.6.27. Page generated on 2008-10-13 09:53 EST.

1	This README escorted the skystar2-driver rewriting procedure. It describes the
2	state of the new flexcop-driver set and some internals are written down here
3	too.
4	
5	This document hopefully describes things about the flexcop and its
6	device-offsprings. Goal was to write an easy-to-write and easy-to-read set of
7	drivers based on the skystar2.c and other information.
8	
9	Remark: flexcop-pci.c was a copy of skystar2.c, but every line has been
10	touched and rewritten.
11	
12	History & News
13	==============
14	  2005-04-01 - correct USB ISOC transfers (thanks to Vadim Catana)
15	
16	
17	
18	
19	General coding processing
20	=========================
21	
22	We should proceed as follows (as long as no one complains):
23	
24	0) Think before start writing code!
25	
26	1) rewriting the skystar2.c with the help of the flexcop register descriptions
27	and splitting up the files to a pci-bus-part and a flexcop-part.
28	The new driver will be called b2c2-flexcop-pci.ko/b2c2-flexcop-usb.ko for the
29	device-specific part and b2c2-flexcop.ko for the common flexcop-functions.
30	
31	2) Search for errors in the leftover of flexcop-pci.c (compare with pluto2.c
32	and other pci drivers)
33	
34	3) make some beautification (see 'Improvements when rewriting (refactoring) is
35	done')
36	
37	4) Testing the new driver and maybe substitute the skystar2.c with it, to reach
38	a wider tester audience.
39	
40	5) creating an usb-bus-part using the already written flexcop code for the pci
41	card.
42	
43	Idea: create a kernel-object for the flexcop and export all important
44	functions. This option saves kernel-memory, but maybe a lot of functions have
45	to be exported to kernel namespace.
46	
47	
48	Current situation
49	=================
50	
51	0) Done :)
52	1) Done (some minor issues left)
53	2) Done
54	3) Not ready yet, more information is necessary
55	4) next to be done (see the table below)
56	5) USB driver is working (yes, there are some minor issues)
57	
58	What seems to be ready?
59	-----------------------
60	
61	1) Rewriting
62	1a) i2c is cut off from the flexcop-pci.c and seems to work
63	1b) moved tuner and demod stuff from flexcop-pci.c to flexcop-tuner-fe.c
64	1c) moved lnb and diseqc stuff from flexcop-pci.c to flexcop-tuner-fe.c
65	1e) eeprom (reading MAC address)
66	1d) sram (no dynamic sll size detection (commented out) (using default as JJ told me))
67	1f) misc. register accesses for reading parameters (e.g. resetting, revision)
68	1g) pid/mac filter (flexcop-hw-filter.c)
69	1i) dvb-stuff initialization in flexcop.c (done)
70	1h) dma stuff (now just using the size-irq, instead of all-together, to be done)
71	1j) remove flexcop initialization from flexcop-pci.c completely (done)
72	1l) use a well working dma IRQ method (done, see 'Known bugs and problems and TODO')
73	1k) cleanup flexcop-files (remove unused EXPORT_SYMBOLs, make static from
74	non-static where possible, moved code to proper places)
75	
76	2) Search for errors in the leftover of flexcop-pci.c (partially done)
77	5a) add MAC address reading
78	5c) feeding of ISOC data to the software demux (format of the isochronous data
79	and speed optimization, no real error) (thanks to Vadim Catana)
80	
81	What to do in the near future?
82	--------------------------------------
83	(no special order here)
84	
85	5) USB driver
86	5b) optimize isoc-transfer (submitting/killing isoc URBs when transfer is starting)
87	
88	Testing changes
89	---------------
90	
91	O             = item is working
92	P             = item is partially working
93	X             = item is not working
94	N             = item does not apply here
95	<empty field> = item need to be examined
96	
97	       | PCI                               | USB
98	item   | mt352 | nxt2002 | stv0299 | mt312 | mt352 | nxt2002 | stv0299 | mt312
99	-------+-------+---------+---------+-------+-------+---------+---------+-------
100	1a)    | O     |         |         |       | N     | N       | N       | N
101	1b)    | O     |         |         |       |       |         | O       |
102	1c)    | N     | N       |         |       | N     | N       | O       |
103	1d)    |                 O                 |                 O
104	1e)    |                 O                 |                 O
105	1f)    |                                   P
106	1g)    |                                   O
107	1h)    |                 P                 |
108	1i)    |                 O                 |                 N
109	1j)    |                 O                 |                 N
110	1l)    |                 O                 |                 N
111	2)     |                 O                 |                 N
112	5a)    |                 N                 |                 O
113	5b)*   |                 N                 |
114	5c)    |                 N                 |                 O
115	
116	* - not done yet
117	
118	Known bugs and problems and TODO
119	--------------------------------
120	
121	1g/h/l) when pid filtering is enabled on the pci card
122	
123	DMA 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	
144	Solved bugs :)
145	--------------
146	1g) pid-filtering (somehow pid index 4 and 5 (EMM_PID and ECM_PID) aren't
147	working)
148	SOLUTION: also index 0 was affected, because net_translation is done for
149	these indexes by default
150	
151	5b) isochronous transfer does only work in the first attempt (for the Sky2PC
152	USB, Air2PC is working) SOLUTION: the flexcop was going asleep and never really
153	woke up again (don't know if this need fixes, see
154	flexcop-fe-tuner.c:flexcop_sleep)
155	
156	NEWS: when the driver is loaded and unloaded and loaded again (w/o doing
157	anything in the while the driver is loaded the first time), no transfers take
158	place anymore.
159	
160	Improvements 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	
167	Debugging
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	
174	Everything which is identical in the following table, can be put into a common
175	flexcop-module.
176	
177			  PCI                  USB
178	-------------------------------------------------------------------------------
179	Different:
180	Register access:  accessing IO memory  USB control message
181	I2C bus:          I2C bus of the FC    USB control message
182	Data transfer:    DMA                  isochronous transfer
183	EEPROM transfer:  through i2c bus      not clear yet
184	
185	Identical:
186	Streaming:                 accessing registers
187	PID Filtering:             accessing registers
188	Sram destinations:         accessing registers
189	Tuner/Demod:                     I2C bus
190	DVB-stuff:            can be written for common use
191	
192	Acknowledgements (just for the rewriting part)
193	================
194	
195	Bjarne Steinsbo thought a lot in the first place of the pci part for this code
196	sharing idea.
197	
198	Andreas Oberritter for providing a recent PCI initialization template
199	(pluto2.c).
200	
201	Boleslaw Ciesielski for pointing out a problem with firmware loader.
202	
203	Vadim Catana for correcting the USB transfer.
204	
205	comments, critics and ideas to linux-dvb[AT]linuxtv.org[DOT]
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog