Linux1394 Project TODO List
This page is targeted towards users (to see which things don't work yet) as well as to developers (to pick a project which caught their interest). People new to FireWire low-level development may find our lists of specifications and books useful. Almost all FireWire related specifications are open, some of them even gratis.
See also our list of bugs at bugzilla.kernel.org for a whole lot of TODO items. There are also bugs filed in distributors' bug trackers but they are not as easy to query.
- Userspace programming documentation (for "plumbing layer" and application layer programming):
- Write some overview documentation of firewire-core's character device file interface; how to perform a few common tasks...
- Kernel programming documentation:
- Finish kerneldoc comments of all exported functions and struct types that are part of the firewire-core APIs?
- Add a template to linux/Documentation/DocBook to pull firewire-core's kerneldoc comments in? Ideally, arrange the documentation in chapters for the userspace API, high-level API, and low-level API.
- Usage documentation:
- Add documentation for individual drivers on this wiki? See Special:Wantedpages.
- Derive documentation suitable for distribution with the mainline kernel sources, i.e. linux/Documentation/...?
Support in userspace
- Fix handling of device removal. Implement hand-over to different default ioctl fd and iso ioctl fd when necessary and possible.
- Implement multichannel isochronous reception with firewire-core of kernel 2.6.36 and later, as present in the raw1394 backend.
- Add <linux/firewire-cdev.h> support in FFmpeg's libavformat?
- Add <linux/firewire-cdev.h> support in libdc1394 v1?
FireWire kernel subsystem
- Design and implement an FCP transactions serializing infrastructure? See this posting for requirements.
- Bus management:
- Set SPLIT_TIMEOUT to the same value on all nodes.
- Initialize BUS_TIME to the same value on all nodes.
- Set PRIORITY_BUDGET on all nodes.
- Implement gap count optimization based on round-trip delay measurement alternatively to the present hop count table based gap count optimization. The latter cannot be used if 1394b repeater nodes are present. (The algorithm for this is patented and not included in the 1394 Patent Portfolio License.)
- Power management: Clear the linkoff bit and/or send link_on to disabled nodes
if there is enough power. (It is impossible to determine whether there is enough power since too many devices and PCs provide wrong power class information.)
- Reduce CPU utilization.
Move all (or as much as possible) of the isochronous receive and transmit context tasklets into the IRQ handler. This is most desirable for low latency as required for audio I/O. Note, such a change may also affect other drivers. It may for example be necessary to add a tasklet to firewire-net for ARP/ broadcast/ multicast reception.(Sounds like a bad idea. Better move audio streaming into the kernel, as a set of ALSA drivers.)
- Bug 10935: ALi controllers don't work yet.
- Fedora bug 228073: Apple UniNorth v1 built-in controllers do not seem to fully work.
- Bug 8828, Fedora bug 244576: Come up with a quirk fix for NForce2. The person to do so will most certainly require direct access to this hardware. Note, the NForce2 workaround in ohci1394 is unacceptable by today's standards as it involves busy-waiting in the interrupt handler. Either we find something better for firewire-ohci, or NForce2 remains unsupported in firewire-ohci.
- Fedora bug 492718 comments 5 and 6: Implement a workaround for Texas Instruments' erratum SLLZ012, "Errata for the 1394 Physical Layer Devices"?
- Fedora bug 608544: Handle IntEvent.regAccessFail at least in ohci_enable().
- Bug 36622: Pinnacle controllers don't work yet. Similar to Fedora bug 608544.
- Make the DMA mapping more prepared for uncommon architectures:
- Allocate all DMA regions (ORBs, page tables) separately from CPU data.
- Honor Unit_Characteristics.ORB_size when allocating and mapping DMA regions for ORBs.
- Change the bus reset handling thus that scsi_block_requests/scsi_unblock_requests is no longer needed, as this is a fragile mechanism and requires nontrivial state tracking. Instead, let a SCSI transaction overlap a bus reset and either let it time out (so that the SCSI subsystem retries it) or retry it in firewire-sbp2 itself after the reset and reconnect/re-login.
- Implement dynamically appended ORB lists for performance improvement. Note, the old sbp2 driver's implementation of ORB lists is very buggy (default: off) but nevertheless results in better throughput with some hardware combinations.
Implement SBP-3 FASTSTART protocol which is rumored to be supported by newer OxSemi bridges and INIC-2430.— None of my (Stefan R.'s) OxSemi 912/ 924/ 934/ 936 or Initio 2430 based devices' firmwares offer FASTSTART support. It seems too rare to justify to add it to the driver.
- Implement operation without physical DMA.
- Implement hand-over from OpenFirmware login. When an Apple PC boots from a FireWire disk, the OpenFirmware is already logged in but does apparently not log out after it loaded the kernel image. When then the kernel's firewire-sbp2 (or sbp2, for that matter) logs in, the target may deny access. This has been observed with Momobay CX-1. The old ieee1394 driver stack somehow overcomes this because of timing subtleties, but firewire-sbp2 ends up with failed login due to denied access.
- Bug 3225: Integrate with scsi_wait_scan module?
- The PL-3507 FireWire-to-IDE bridge chip is known to sometimes become unresponsive despite our drivers sending a fetch agent reset. To do: Find a way to inject such failures; find a method which gets the PL-3507 unstuck again. (Target reset via RESET_START register perhaps?)
Other kernel drivers
- Use firewire-core's channel and bandwidth allocation function in firedtv for proper cooperation with non-FireDTV AV/C devices on the same bus.
- Add support for more architectures besides x86-64.
- Add interrupt handling to re-enable physical DMA after bus reset.
- Add hand-over of interrupt handling from init_ohci1394_dma to firewire-ohci.
- Implement an audio i/o driver to enable FFADO to run smoother with less effort. Current and previous work, in reverse chronological order:
- DICE, iSight, and OXFW970 speakers driver (snd-firewire-speakers has been released in Linux 2.6.39, snd-isight has been released in Linux 3.0)
- OXFW970 speakers driver
- Fireworks driver, original driver sources by Clemens Ladisch, further work by Takashi Sakamoto
- Google Summer of Code project with some initial results
- Implement a V4L2 driver which exposes DV and HDV devices (IEC 61883-2...-4 camcorders, tapes, analogue tuners, TV sets) as /dev/video* devices? This has been suggested in order to offer an interface that is supported by a broad variety of multimedia application programs.
- Implement a V4L2 driver for IIDC cameras, as an alternative to capturing via the low-level firewire-cdev.h interface with libdc1394. The latter way would probably stay preferred whenever more advanced modes and features of cameras need to be accessed, but a V4L2 driver would enable generic video applications to access IIDC cameras.