linux/drivers/ieee1394
Pieter Palmers cc9429bcb6 ieee1394: rawiso: requeue packet for transmission after skipped cycle
As it seems, some host controllers have issues that can cause them to
skip cycles now and then when using large packets. I suspect that this
is due to DMA not succeeding in time. If the transmit fifo can't contain
more than one packet (big packets), the DMA should provide a new packet
each cycle (125us). I am under the impression that my current PCI
express test system can't guarantee this.

In any case, the patch tries to provide a workaround as follows:
The DMA program descriptors are modified such that when an error occurs,
the DMA engine retries the descriptor the next cycle instead of
stalling. This way no data is lost. The side effect of this is that
packets are sent with one cycle delay. This however might not be that
much of a problem for certain protocols (e.g. AM824). If they use
padding packets for e.g. rate matching they can drop one of those to
resync the streams.

The amount of skips between two userspace wakeups is counted. This
number is then propagated to userspace through the upper 16 bits of the
'dropped' parameter. This allows unmodified userspace applications due
to the following:
1) libraw simply passes this dropped parameter to the user application
2) the meaning of the dropped parameter is: if it's nonzero, something
bad has happened. The actual value of the parameter at this moment does
not have a specific meaning.

A libraw client can then retrieve the number of skipped cycles and
account for them if needed.

Signed-off-by: Pieter Palmers <pieterp@joow.be>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2008-04-25 18:15:45 +02:00
..
config_roms.c ieee1394: eth1394: don't autoload by hotplug when ohci1394 starts 2007-04-30 00:00:30 +02:00
config_roms.h ieee1394: eth1394: don't autoload by hotplug when ohci1394 starts 2007-04-30 00:00:30 +02:00
csr1212.c ieee1394: csr1212: proper refcounting 2007-10-16 23:59:59 +02:00
csr1212.h ieee1394: csr1212: proper refcounting 2007-10-16 23:59:59 +02:00
csr.c ieee1394: be*_add_cpu conversion 2008-04-18 17:55:29 +02:00
csr.h
dma.c ieee1394: small cleanup after "nopage" 2008-01-30 22:22:20 +01:00
dma.h ieee1394: move some comments from declaration to definition 2007-04-30 00:00:28 +02:00
dv1394-private.h
dv1394.c ieee1394: Remove superfluous calls to kobject_set_name(). 2008-04-18 17:55:31 +02:00
dv1394.h
eth1394.c ieee1394: eth1394: fix lock imbalance 2007-10-16 23:59:54 +02:00
eth1394.h ieee1394: eth1394: handle tlabel exhaustion 2007-05-27 23:20:59 +02:00
highlevel.c ieee1394: replace remaining __FUNCTION__ occurrences 2008-04-18 17:55:30 +02:00
highlevel.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
hosts.c ieee1394: first minimal NUMA awareness 2007-07-10 00:07:40 +02:00
hosts.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
ieee1394_core.c ieee1394: limit early node speed to host interface speed 2008-04-18 17:55:31 +02:00
ieee1394_core.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
ieee1394_hotplug.h
ieee1394_transactions.c ieee1394: remove unused code 2008-01-30 22:22:20 +01:00
ieee1394_transactions.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
ieee1394_types.h
ieee1394-ioctl.h ieee1394: cycle timer read extension for raw1394 2007-02-17 14:39:33 +01:00
ieee1394.h
init_ohci1394_dma.c x86: early boot debugging via FireWire (ohci1394_dma=early) 2008-01-30 13:34:11 +01:00
iso.c ieee1394: iso.c needs sched.h 2007-04-30 00:00:29 +02:00
iso.h ieee1394: rawiso: requeue packet for transmission after skipped cycle 2008-04-25 18:15:45 +02:00
Kconfig ieee1394: sbp2: more correct Kconfig dependencies 2007-08-02 20:34:16 +02:00
Makefile x86: early boot debugging via FireWire (ohci1394_dma=early) 2008-01-30 13:34:11 +01:00
nodemgr.c ieee1394: prevent device binding of raw1394, video1394, dv1394 2008-04-18 17:55:29 +02:00
nodemgr.h ieee1394: convert ieee1394 from "struct class_device" to "struct device" 2007-07-10 00:07:39 +02:00
ohci1394.c ieee1394: rawiso: requeue packet for transmission after skipped cycle 2008-04-25 18:15:45 +02:00
ohci1394.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
pcilynx.c ieee1394: Use shorter list_splice_init() for brevity. 2008-04-18 17:55:30 +02:00
pcilynx.h
raw1394-private.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
raw1394.c ieee1394: rawiso: requeue packet for transmission after skipped cycle 2008-04-25 18:15:45 +02:00
raw1394.h ieee1394: remove old isochronous ABI 2007-07-10 00:07:41 +02:00
sbp2.c ieee1394: replace remaining __FUNCTION__ occurrences 2008-04-18 17:55:30 +02:00
sbp2.h ieee1394: sbp2: add INQUIRY delay workaround 2008-02-16 15:40:34 +01:00
video1394.c ieee1394: Remove superfluous calls to kobject_set_name(). 2008-04-18 17:55:31 +02:00
video1394.h