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

Linux Cross Reference
Linux-2.6.17/Documentation/dvb/README.flexcop

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

  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@linuxtv.org.

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

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.