libraw1394 fork
8e433bf584
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> |
||
---|---|---|
debian | ||
doc | ||
src | ||
tools | ||
AUTHORS | ||
autogen.sh | ||
ChangeLog | ||
configure.ac | ||
COPYING.LIB | ||
INSTALL | ||
libraw1394.pc.in | ||
libraw1394.spec.in | ||
Makefile.am | ||
NEWS | ||
README |
libraw1394 ========== 1. About libraw1394 libraw1394 is the only supported interface to the kernel side raw1394 of the Linux IEEE-1394 subsystem, which provides direct access to the connected 1394 buses to user space. Through libraw1394/raw1394, applications can directly send to and receive from other nodes without requiring a kernel driver for the protocol in question. The reason for making a library the interface to the kernel is to avoid a program dependency on the kernel version, which would hinder development and optimization of raw1394. If development changed the protocol and made it incompatible with previous versions only the libraw1394 has to be upgraded to match the kernel version (instead of all applications). Since version 2, libraw1394 also works with the kernel driver firewire-core. libraw1394's role has thus become that of a raw1394 compatibility layer for existing applications when running on firewire-core. 2. Copyleft libraw1394 itself is licensed under the Lesser General Public License (short LGPL, see file COPYING.LIB in the source distribution). Other files in the source archives not belonging to but being part of the build procedure of libraw1394 are under their own licenses, as stated at the top of the individual files. 3. API documentation Finally there is something, in the doc subdirectory. The file is libraw1394.sgml (it's Docbook format), and there are preformatted PostScript and HTML available. This documentation is not complete yet. 4. Multithreading This library should be multithreadable with the restriction that one raw1394handle_t may be used only within a single thread. Multiple threads operating on the same handle would royally mess up the kernel-user protocol. Simply use separate handles for each thread in which you need to use libraw1394. 5. Pkg-config The library comes with a pkg-config .pc file, so you can check for libraw1394 and its version in your configure script. For example, here is how to use the autoconf macro: PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 1.1.0) This macro sets the variables LIBRAW1394_CFLAGS and LIBRAW1394_LIBS. You have to include those into your build variables so that the build process correctly links with libraw1394. 6. Contact Send questions, suggestions, bug reports and patches to the mailing list linux1394-devel@lists.sourceforge.net. This list is open for posting without prior subscription, and replies will usually be Cc'd to you. Visit http://ieee1394.wiki.kernel.org/ for links to list subscription interfaces and list archives. Maintainer of libraw1394 is currently Stefan Richter. See the file AUTHORS for a complete list of contributors to libraw1394. Source repository: git://git.kernel.org/pub/scm/libs/ieee1394/libraw1394.git http://git.kernel.org/pub/scm/libs/ieee1394/libraw1394.git https://git.kernel.org/pub/scm/libs/ieee1394/libraw1394.git Gitweb: http://git.kernel.org/?p=libs/ieee1394/libraw1394.git Release tarballs: https://www.kernel.org/pub/linux/libs/ieee1394/ ftp://ftp.kernel.org/pub/linux/libs/ieee1394/