summaryrefslogtreecommitdiffstats
path: root/src/readwrite.c
diff options
context:
space:
mode:
authorGravatar Stefan Richter 2011-08-13 18:19:12 +0200
committerGravatar Stefan Richter 2011-10-22 10:58:43 +0200
commit8e433bf58413725365654c27fb4fad0aad88b516 (patch)
tree90a092118a65a1a16dc458f62195467cd68aede2 /src/readwrite.c
parentredirect Config ROM reads into the kernel's ROM cache (diff)
retry raw1394_read/write/lock/lock64 with delays after ack-busy
Applications or higher-level libraries have retry strategies of their own in place, but they don't work too well sometimes. For example, old Panasonic camcorders require pauses in the order of several milliseconds between response of a former transaction and request of the next one, but libavc1394 and libiec61883 retry already after 20 microseconds. This change cures all FCP transaction failures ("send oops") in kino and dvgrab that I was getting with Panasonic NV-DX110. According to reports, Panasonic AG-EZ30 and Grundig Scenos DLC 2000 were affected too. The additional latency in raw1394_read/write/lock/lock64 appears to be the better alternative compared to terminal I/O failures. Besides, a caller of this blocking request API should at least in theory be prepared to cope with transaction durations in the order of a few seconds. IEEE 1394 specifies split transaction timeouts of up to 8 seconds. An application which needs more control should use the non-blocking request API, i.e. raw1394_start_read/write/lock/lock64. We specifically only retry after ack-busy, not after any of the other types of transaction failures that may or may not succeed if retried. This change is only done in the firewire-core backend (a.k.a. juju). The same could be added to the raw1394 backend (a.k.a. linux1394) but is not as important there, perhaps because transaction completion latency in the ieee1394 core very much increases the success rate of existing retry code in libavc1394 and friends. Note, this does not fix every and all FCP transaction problems. There are e.g. certain JVC camcorders which do not properly complete FCP transactions if an application frequently polls for status or requests status right before a control request, even with an order of magnitude greater delays than used in this patch. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Reviewed-by: Dan Dennedy <dan@dennedy.org>
Diffstat (limited to 'src/readwrite.c')
0 files changed, 0 insertions, 0 deletions
td>2003-07-13Fix compiler warnings.Gravatar bencollins 4-12/+22 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@109 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Updates from 0.10.0 release.Gravatar bencollins 4-5/+14 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@108 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-23add libtoolize to bootstrapGravatar ddennedy 1-1/+10 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@107 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-21added Dan Maas' rawiso docsGravatar ddennedy 1-32/+295 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@106 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-07new_handle_on_port() error path fix from Jim RadfordGravatar dmaas 1-1/+3 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@105 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@104 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@103 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@102 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@101 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@100 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@99 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@98 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@97 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; ↵Gravatar anonymous 3-124/+48 brought kernel-raw1394.h back in sync with the kernel version git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@96 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 - changed return type of rawiso xmit/recv handlers from int to enum raw1394_iso_disposition - added an ioctl (RAW1394_ISO_QUEUE_ACTIVITY) to force an ISO_ACTIVITY event into the queue. This is needed for handling RAW1394_ISO_DEFER, to kick us out of the next read() instead of sleeping forever. - removed references to "8-byte" isochronous header - this is an OHCI-specific implementation detail git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@95 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@94 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@93 53a565d1-3bb7-0310-b661-cf11e63c67ab