summaryrefslogtreecommitdiffstats
path: root/src/readwrite.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2012-06-30testlibraw: Fix printing of card nameGravatar Stefan Richter 1-3/+9
Testlibraw always showed the name of the first card rather than the name of the current card. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-30Add raw1394_get_speed() APIGravatar Stefan Richter 5-5/+76
This lets initiators of isochronous streams or asynchronous streams from or to the local node figure out what maximum speed can be configured. Furthermore it can be used to display connection speeds for informative purposes without having to perform topology analysis (in case of 1394a buses) or extensive phy port status queries (in case of 1394b buses). To be in line with other existing libraw1394 APIs which use nodeid_t variables, this API identifies a node only via a card:nodeID tuple which is unsafe against generation changes. A node can only be properly identified by card:generation:nodeID tuples. However, since this new API extension and libraw1394 as a whole is mainly aimed towards existing libraw1394 client code bases rather than new developments, I decided against making this call race free but somewhat more difficult to use in typical existing client code. A unit test for the new call is added to testlibraw as well. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-30Trivial whitespace normalization in ieee1394.h and raw1394.hGravatar Stefan Richter 2-157/+151
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-30Add 1394b speed codes to <libraw1394/{ieee,raw}1394.h>Gravatar Stefan Richter 2-3/+12
This catapults the libraw1394 API into the year 2002. Actually, passing speed codes of 3...5 into the relevant libraw1394 functions should be working already since the kernel gained 1394b support a long time ago and libraw1394 does not check values. The added definitions are only for clarity and to fully match the argument type in the function declarations. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-30Fix documentation of raw1394_iso_multichannel_recv_init()Gravatar Stefan Richter 1-1/+0
There is no speed argument. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-24Remove now unused codeGravatar Stefan Richter 1-26/+2
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-24Disable power-of-2 alignment of isochronous I/O buffersGravatar Igor Kuzmin 1-1/+1
This can save some memory. (The library user can always round max packet size himself if it's needed for some reason.) Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-24Enable write access to isochronous reception bufferGravatar Igor Kuzmin 1-1/+1
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-18Increase libtool version to 2.1.0Gravatar Stefan Richter 1-4/+4
due to the API additions since 2.0.9: raw1394_add_config_rom_descriptor() raw1394_remove_config_rom_descriptor() raw1394_read_cycle_timer_and_clock() Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-18Add raw1394_read_cycle_timer_and_clock() APIGravatar Stefan Richter 5-9/+89
This is an extension relative to raw1394_read_cycle_timer(). It lets the client choose a system clock other than CLOCK_REALTIME. Use case: http://subversion.ffado.org/ticket/242 The underlying ioctl supports reading the system clock with nanoseconds resolution. The new libraw1394 call sticks with microseconds resolution though. This makes transition from (or parallel use with) raw1394_read_cycle_timer() easier. Besides, the call itself takes longer than a microsecond, primarily due to a costly MMIO read (on many controllers even three or more MMIO reads). Unit tests with CLOCK_MONOTONIC and CLOCK_MONOTONIC_RAW are added to testlibraw as well. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-18Tweak raw1394_add_config_rom_descriptor() API, add documentation and test caseGravatar Stefan Richter 5-41/+128
To conform with 'size' arguments of other libraw1394 calls, change the one in raw1394_add_config_rom_descriptor() from quadlets to bytes. This breaks runtime compatibility with potential clients that were written against B.J.'s original patch, hence reorder arguments just to break compatibility also at compile time. Change errno to ENOSYS (function not implemented) when called while running on top of raw1394. Allow &token to be NULL for convenience of clients which don't require raw1394_remove_config_rom_descriptor(). Add exhaustive documentation. Much of it is copied from the documentation of the underlying ioctl. Add example code which doubles as unit test in testlibraw. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-06-17Add raw1394_add_config_rom_descriptor() and ↵Gravatar B.J. Buchalter 4-0/+85
raw1394_remove_config_rom_descriptor() API This adds support of the firewire-core (juju) ABI to add and remove config ROM directories or descriptors. The raw1394 ABI supports similar requests, but for now we leave the two functions unimplemented when running on top of raw1394. Signed-off-by: Benjamin Buchalter <bj@mhlabs.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (whitespace changes)
2012-06-02configure.ac, Changelog, NEWS etc.: update to version 2.0.9v2.0.9Gravatar Stefan Richter 3-1/+29
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-05-25Remove unused codeGravatar Stefan Richter 2-66/+7
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-05-25Include local firewire-*.h instead of system-wide <linux/firewire-*.h>Gravatar Stefan Richter 4-17/+6
This guarantees that all features of libraw1394 are actually built in. Before, some features and fixes would be silently dropped if too old system headers (typically provided by a package called linux-headers) were present. An alternative would be to keep using system headers but add warnings during the ./configure stage if old headers were encountered. But this helps only the person who builds libraw1394 (if there is a person involved at all), not the users who have no reliable way to determine how the library binary was built. Another alternative would be to change the former soft dependency on certain linux-headers versions into a hard dependency, i.e. fail the build in absence of too old headers. This would add an inconvenience in setting up the build environment though: The system headers would have to be updated or a private copy of linux/firewire-*.h be specified by way of the --with-fw-dir configure switch. Anyhow. The libraw1394 sources now already bring a suitable copy of the two header files. The --with-fw-dir configure switch is no longer useful and is removed. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-05-25Add firewire-{cdev,constants}.h from Linux v3.4Gravatar Stefan Richter 2-0/+1131
Add copies of the Linux kernel header files but don't #include them just yet. These are exact copies of the files from linux-3.4. In case that we eventually want updates from later kernels, a diff of the kernel's firewire-c*.h between v3.4 and then should do the trick. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-03-19Implement raw1394_iso_recv_flush() on JujuGravatar Clemens Ladisch 1-1/+6
Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-19Fix incorrect use of == instead of =.Gravatar Guus Sliepen 1-1/+1
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-19Remove UTF-8 whitespace.Gravatar Guus Sliepen 1-1/+1
Found by cppcheck. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-19configure.ac, Changelog, NEWS etc.: update to version 2.0.8v2.0.8Gravatar Stefan Richter 3-1/+34
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-05Make a symbol staticGravatar Stefan Richter 1-1/+1
This symbol should not be exported. Fixes commit db5f202d5d0. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-05Continue inotify event handling even after failure in one eventGravatar Stefan Richter 1-4/+2
If read() on the inotify handle gave us several events at once, and handling one of them resulted in whatever error, there is little reason not to try handling the rest of the events. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-05Process multiple inotify eventsGravatar Peter Hurley 1-8/+27
If multiple inotify events are presented, process *all* of them. This can happen when several device adds are pushed simultaneously. handle_inotify() was refactored. Signed-off-by: Peter Hurley <phurley@charter.net> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2012-02-05Reset device fd upon error condition in handle_inotify()Gravatar Peter Hurley 1-0/+1
If an error is encountered while adding a new device in inotify handling, make sure the fd is marked invalid (-1). Signed-off-by: Peter Hurley <phurley@charter.net> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2011-10-22retry raw1394_read/write/lock/lock64 with delays after ack-busyGravatar Stefan Richter 1-1/+29
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>
2011-08-21redirect Config ROM reads into the kernel's ROM cacheGravatar Stefan Richter 1-0/+52
The kernel already read each node's Configuration ROM and cached it. So let all libraw1394 clients read from that cache instead of having to perform all those transactions all over again. This reduces bus traffic at application start-up and at each bus reset. It also makes all Configuration ROM accesses fool-proof and robust. This together with the kernel patch "firewire: core: handle ack_busy when fetching the Config ROM" lets me use an old Panasonic camcorder which requires us to keep pauses between response and request --- longer than librom1394's retry pause --- with dvgrab (though still with frequent failures of write requests to FCP_COMMAND, i.e. with lots of "send oops" noise in the console and occasionally having to repeat key-presses in interactive mode). For simplicity of implementation, only the blocking raw1394_read() is modified, not the nonblocking raw1394_start_read(). Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Dan Dennedy <dan@dennedy.org>
2011-03-08configure.ac, Changelog, NEWS: update to version 2.0.7v2.0.7Gravatar Stefan Richter 3-1/+16
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2011-02-25fix start_on_cycle on firewire-coreGravatar Clemens Ladisch 1-3/+32
Libraw1394 uses raw1394's convention of cycle numbers always being less than one second, i.e., in the range 0..7999. Firewire-core uses raw cycle numbers as used by the hardware, i.e., with several additional bits for the seconds. This was correctly handled when presenting timestamps returned by the kernel to the application, but the application's start_on_cycle value was passed directly to the kernel. To fix this, do the same calculations that ohci1394 did internally, i.e., interpret the start_on_cycle value as relative to the current seconds value of the cycle timer. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2011-02-25do not delay iso packet queueingGravatar Clemens Ladisch 1-4/+2
Libraw1394's attempt to optimize away the packet queueing ioctl syscall overhead was a little bit too successful: when used with FFADO's streaming system, it ended up delaying packets after their intended transmission time. For now, to ensure correctness, don't try to optimize anything. This makes FFADO playback on Juju with my DICE work. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-11-01configure.ac, Changelog, NEWS etc.: update to version 2.0.6v2.0.6Gravatar Stefan Richter 5-11/+91
Also update repo info and maintainer status per Dan's suggestion. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-10-20arm on firewire-core: Remove leftover debug printfsGravatar Stefan Richter 1-6/+0
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Be more careful when copying response payloads on firewire-coreGravatar Stefan Richter 2-9/+7
When faced with bogus config ROM read responses from an audio device that did not support block requests as advertized, libffado's csr1212 code was able to recover when running on top of raw1394 but corrupted its config ROM cache when running on top of firewire-core. http://subversion.ffado.org/ticket/299 While the actual cause was a combination of firmware bug of the device and flaw in csr1212.c of libffado, the much less graceful behavior when running on firewire-core was obviously due to libraw1394's firewire-core backend. Hence, - do not write into the client's buffer if rcode != RCODE_COMPLETE, - do not copy more data than the actual response contained. The latter safeguard is not overly effective though. The libraw1394 API has no means to inform a client about the error case that a responder node sent less bytes than were requested. (The case that the responder sent more bytes than requested is covered up by the kernel already.) Should we synthesize an I/O failure? Does not sound ideal either. However, such a size mismatch should never happen; the important part of this change is the RCODE_COMPLETE check. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Implement raw1394_(start_)phy_packet_write() on firewire-coreGravatar Stefan Richter 3-18/+81
Requires kernel 2.6.36 or newer at runtime and linux-headers 2.6.36 or newer at build time. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Filter incoming requests per cardGravatar Stefan Richter 2-3/+17
If multiple cards are installed, firewire-core will emit requests from nodes on any of the cards to clients. This is not expected by libraw1394 clients since a raw1394handle_t is bound to a single card alias port. On kernel 2.6.36 and newer we can filter out requests from other cards. Note that we still need to call the response ioctl in order to release kernel resources associated with an inbound transaction. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Fix FCP and ARM source node ID on firewire-coreGravatar Stefan Richter 1-42/+75
The firewire-core (juju) backend of libraw1394 installs address range mappings on the default ioctl fd, i.e. a file that represents a random device on the chosen port. It receives incoming requests from any sender node via this address range mapping. Due to a kernel ABI limitation, the sender node ID is not known though. So far libraw1394 simply assumed the node ID of the device that provided the default ioctl fd. This only works if there is only one accessible fd on the entire bus. This limitation caused for example libffado to fail to work with another AV/C or IIDC device attached to the bus, because node IDs of FCP requests and FCP responses did not match since the latter were wrong. FCP clients which did not check sender node IDs were seemingly not affected by this bug. The bug is fixed by a kernel ABI extension in Linux 2.6.36. This libraw1394 change implements libraw1394's counterpart to this ABI extension. Hence this libraw1394 fix requires - kernel-headers 2.6.36 or later at build time of libraw1394 - kernel 2.6.36 or later at runtime. Otherwise, libraw1394 simply degrades to the faulty previous behaviour. Side note: The change of IMPLEMENTED_CDEV_ABI_VERSION to 4 requires that we fill in struct fw_cdev_allocate.region_end which was added in the ABI v4. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Rename a few kernel ABI testing helpersGravatar Stefan Richter 2-9/+14
Use more uniform names along the lines of abi_has_some_feature(...). Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Do not use a random FW_CDEV_VERSION as our implemented ABI versionGravatar Stefan Richter 1-4/+9
Since linux/firewire-cdev.h header file and libraw1394 sources are distributed separately, it is wrong to fill in a constant from that header into the FW_CDEV_IOC_GET_INFO ioctl as the ABI version which libraw1394 supports. This may not be forward compatible if an old libraw1394 is compiled with a new kernel header and ran on top of a kernel that implements new features that require a compatible userland. OK, the damage is already done in released versions of libraw1394. Hence the FW_CDEV_VERSION of the kernel header file is not going to be updated anymore in future kernel versions. (Only the version internally to firewire-core will be incremented further.) But let's remove the buggy usage of FW_CDEV_VERSION nevertheless. Developers of other firewire-cdev client programs might look at libraw1394 sources. The libraw1394 sources should not teach them how to do it wrong. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07tools/dumpiso: Add write() return code checks, fix harmless format string bugGravatar Stefan Richter 1-10/+12
Addresses a few compiler warnings about unused results and format string mismatch. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07tools/testlibraw: Fix a harmless format string bugGravatar Stefan Richter 1-2/+2
The compiler warned that size_t and %d don't go well together. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Always imply iso shutdown in fw_destroy_handleGravatar Stefan Richter 2-2/+4
because ieee1394_destroy_handle does it too. Otherwise, clients which rely on the ieee1394 backend behaviour leak memory when running on the juju backend. Also add the ability to call fw_iso_shutdown multiple times or before a successful context initialization. Faulty clients might rely on it based on ieee1394 backend behaviour. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Treat the kernel's iso context handle as opaque itemGravatar Stefan Richter 2-6/+8
Libraw1394 must not rely on the kernel always handing out the value 0 as handle of the (first) allocated isochronous I/O context. For now this assumption is true but it may not stay that way forever. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Fix raw1394_iso_stop on firewire-coreGravatar Stefan Richter 1-1/+1
The argument to FW_CDEV_IOC_STOP_ISO was missing. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-09-07Add missing malloc failure checksGravatar Stefan Richter 2-5/+19
Also add errno = ENOMEM because it is said that that some malloc implementations might miss to do so. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-04-17Fix for overlooked device HUP with 'firewire' stackGravatar Peter Hurley 1-1/+1
When EPOLLHUP event is received in fw_loop_iterate(), it is or'd with EPOLLERR. The EPOLLHUP event was then overlooked in handle_device_event() with unpredictable-but-generally bad results. This problem has been rediscovered several times. http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13330 http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13779 Reported-by: B.J. Buchalter <bj@mhlabs.com> Reported-by: Michael Thireos <mthireos@vanteon.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-02-01Fix documentation of return values of raw1394_start_ family of functionsGravatar Stefan Richter 1-7/+7
If running on top of the raw1394 kernel driver (any kernel version) or on top of firewire-core (kernel version <= 2.6.29), raw1394_start_* functions will return a value > 0 on success, not == 0. Only with firewire-core of kernel 2.6.30 or later, == 0 is returned on success. The exact value depends on which driver is used, on CPU architecture, and on request payload size in case of some types of requests. In any case, only that the value is > or == 0 on success (but == -1 on failure) is significant to libraw1394 client applications. This mismatch between documentation and implementation was already present in older libraw1394 versions, including v1.x. For the time being, do not change the implementation, only adjust the documentation. Reported-by: Dr. David Alan Gilbert Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-02-01doc: let "make clean" remove generated HTML filesGravatar Stefan Richter 1-1/+1
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-02-01Document contact address (linux1394-devel) more clearlyGravatar Stefan Richter 2-5/+13
Questions and patches should be posted to the list rather than just sent as personal mail to Dan. That way, more people can answer or review it without Dan having to forward libraw1394 mails to the list all the time. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-02-01update README: replace outdated link to wikiGravatar Sebastian Schüppel 1-1/+1
Signed-off-by: Sebastian <schseb@ubuntu.(none)> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-01-10Fix "make doc".Gravatar Stefan Richter 2-16/+12
Reported by Guus Sliepen: "make doc" failed due to missing doctype, unknown elements, and duplicate element IDs in libraw1394.sgml. The fix is to declare a recent DTD (matching the one which is used in current Linux kernel documentation docbooks) and to make the conflicting element IDs unique. The latter part of the fix is just temporary. In order to avoid the conflict when the documentation is updated the next time, also fix the kerneldoc comments of the respective API elements: These are typedefs, hence kernel-doc needs their comments prepended by "typedef ". Tested with Gentoo's docbook-xml-dtd 4.5, docbook-xsl-stylesheets 1.75.2, docbook-sgml-utils 0.6.14, and openjade 1.3.2-r1. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Dan Dennedy <dan@dennedy.org>
2009-12-26Update ChangeLog for release.v2.0.5Gravatar Dan Dennedy 1-0/+4
Signed-off-by: Dan Dennedy <dan@dennedy.org>