To Do

From IEEE 1394 FireWire Wiki
(Difference between revisions)
Jump to: navigation, search
m (firewire-core)
(Comment on or strike out some irrelevant bits)
Line 32: Line 32:
 
** STATE_CLEAR/STATE_SET
 
** STATE_CLEAR/STATE_SET
 
*** <s>state, dreq</s> dropped in IEEE1212:2001
 
*** <s>state, dreq</s> dropped in IEEE1212:2001
*** cmstr
+
*** cmstr (irrelevant since Linux nodes which are root transmit cycle start packets without intervention of the BM)
*** abdicate
+
*** abdicate (irrelevant in practice, used by a BM candidate to take over BM role from the current BM)
** NODE_IDS: This allows to change the bus ID. The OHCI driver must check for both "local bus" and the actual bus IDs to detect local packets, and has to send the actual bus ID in AT packets' source field, when appropriate.
+
** NODE_IDS: This allows to change the bus ID. The OHCI driver must check for both "local bus" and the actual bus IDs to detect local packets, and has to send the actual bus ID in AT packets' source field, when appropriate.  &mdash;  Irrelevant in practice since no 1394.1 bridges exist.
** RESET_START
+
** RESET_START (irrelevant to the function of Linux nodes)
 
** SPLIT_TIMEOUT
 
** SPLIT_TIMEOUT
 
*** This is desirable for some IIDC devices and necessary for [http://marc.info/?l=linux1394-devel&m=122886235721422 many audio devices] to be able to increase the timeout from userspace.
 
*** This is desirable for some IIDC devices and necessary for [http://marc.info/?l=linux1394-devel&m=122886235721422 many audio devices] to be able to increase the timeout from userspace.
Line 43: Line 43:
 
** PRIORITY_BUDGET
 
** PRIORITY_BUDGET
 
* Isochronous resource manager responsibilities:
 
* Isochronous resource manager responsibilities:
** Automatically reserve channel 31 for broadcasts.
+
** <s>Automatically reserve channel 31 for broadcasts.</s> implemented
** Set BROADCAST_CHANNEL on all nodes.
+
** <s>Set BROADCAST_CHANNEL on all nodes.</s> implemented  (We don't write BROADCAST_CHANNEL on nodes that don't need it or don't support it.  Some 1394-1995 firmwares crash when BROADCAST_CHANNEL is written.)
** Force a better node to become root if the current IRM does not support 1394a.
+
** Force a better node to become root if the current IRM does not support 1394a.  Irrelevant in practice.
 
* Bus manager responsibilities:
 
* Bus manager responsibilities:
** Force a cycle-master-capable node to be root and set its cmstr bit.
+
** <s>Force a cycle-master-capable node to be root</s> (implemented) and set its cmstr bit.
 
** Set SPLIT_TIMEOUT to the same value on all nodes.
 
** Set SPLIT_TIMEOUT to the same value on all nodes.
 
** Initialize BUS_TIME to the same value on all nodes.
 
** Initialize BUS_TIME to the same value on all nodes.
 
** Set PRIORITY_BUDGET 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 [http://www.google.com/patents/about?id=VY0GAAAAEBAJ patented] and not included in the [http://www.mpegla.com/main/programs/1394/Pages/Intro.aspx 1394 Patent Portfolio License].)
 
** 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 [http://www.google.com/patents/about?id=VY0GAAAAEBAJ patented] and not included in the [http://www.mpegla.com/main/programs/1394/Pages/Intro.aspx 1394 Patent Portfolio License].)
** Power management: Clear the linkoff bit and/or send link_on to disabled nodes if there is enough power.
+
** Power management: Clear the linkoff bit and/or send link_on to disabled nodes <s>if there is enough power</s>. (It is impossible to determine whether there is enough power since too many devices and PCs provide wrong power class information.)
  
 
=== firewire-ohci ===
 
=== firewire-ohci ===
Line 88: Line 88:
 
* Implement an SBP-2 target using the in-kernel SCSI target framework as an alternative to Endpoint (Oracle's SBP-2 target implementation in userspace).
 
* Implement an SBP-2 target using the in-kernel SCSI target framework as an alternative to Endpoint (Oracle's SBP-2 target implementation in userspace).
 
* ohci1394_earlyinit:  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 ohci1394_earlyinit to firewire-ohci.
 
* ohci1394_earlyinit:  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 ohci1394_earlyinit to firewire-ohci.
 +
  
 
== IEEE1394 Subsystem (a.k.a. Linux1394 driver stack) ==
 
== IEEE1394 Subsystem (a.k.a. Linux1394 driver stack) ==

Revision as of 17:26, 15 April 2010

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.


Contents


FireWire subsystem (a.k.a. Juju driver stack)

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/...?
  • 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.

support in userspace

  • libraw1394: Fix handling of device removal.
  • Add <linux/firewire-cdev.h> support in FFmpeg's libavformat?
  • Add <linux/firewire-cdev.h> support in libdc1394 v1?

firewire-core

  • Implement proper FCP register support: Allow multiple clients to register for listening to FCP_COMMAND and FCP_RESPONSE. Multiplex incoming FCP frames to all listeners. This is required to use more than one AV/C device on a bus at a time. — Merged in Linux 2.6.33-rc3.
  • Design and implement an FCP transactions serializing infrastructure? See this posting for requirements.
  • Fedora bug 449252: A Panasonic AG-DV 2500 tape deck is not recognized, perhaps due to an issue with unexpected config ROM contents. — Proposed fix posted, pending for Linux 2.6.34-rc1.
  • CSR registers required by the specification:
    • STATE_CLEAR/STATE_SET
      • state, dreq dropped in IEEE1212:2001
      • cmstr (irrelevant since Linux nodes which are root transmit cycle start packets without intervention of the BM)
      • abdicate (irrelevant in practice, used by a BM candidate to take over BM role from the current BM)
    • NODE_IDS: This allows to change the bus ID. The OHCI driver must check for both "local bus" and the actual bus IDs to detect local packets, and has to send the actual bus ID in AT packets' source field, when appropriate. — Irrelevant in practice since no 1394.1 bridges exist.
    • RESET_START (irrelevant to the function of Linux nodes)
    • SPLIT_TIMEOUT
      • This is desirable for some IIDC devices and necessary for many audio devices to be able to increase the timeout from userspace.
      • The transaction timeout needs to be counted from the time when the request hit the bus, not from the time when the request was handed over from upper layers to fw-core.
    • BUS_TIME
    • BUSY_TIMEOUT
    • PRIORITY_BUDGET
  • Isochronous resource manager responsibilities:
    • Automatically reserve channel 31 for broadcasts. implemented
    • Set BROADCAST_CHANNEL on all nodes. implemented (We don't write BROADCAST_CHANNEL on nodes that don't need it or don't support it. Some 1394-1995 firmwares crash when BROADCAST_CHANNEL is written.)
    • Force a better node to become root if the current IRM does not support 1394a. Irrelevant in practice.
  • Bus manager responsibilities:
    • Force a cycle-master-capable node to be root (implemented) and set its cmstr bit.
    • 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.)

firewire-ohci

  • 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.
  • 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"?

firewire-sbp2

  • Move all very time-consuming work into one-off threads (mainline's slow_work, see LWN article or documentation) or convert to concurrency-managed workqueues if the latter get merged into the mainline. Move the remaining workqueue items back into the global workqueue and remove firewire-sbp2's private workqueue.
    Notably, everything which issues SCSI commands is very time consuming: __scsi_add_device, scsi_remove_device. At the moment, __scsi_add_device may seriously block firewire-sbp2's private workqueue from reconnects to other targets, while scsi_remove_device may block system-wide work in the shared workqueue.
  • 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/ 336 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?

firewire-net

  • Stabilize.
  • Implement IPv6 support as per RFC 3146.

firedtv

  • Implement tuning of HD channels on DVB-S2 devices. (user forum thread, developer list thread)
  • Make it work with firewire alternatively to ieee1394. Merged in kernel 2.6.33-rc1.
  • Use firewire-core's channel and bandwidth allocation function in firedtv for proper cooperation with non-FireDTV AV/C devices on the same bus.

New drivers

  • Implement an audio i/o driver to enable FFADO to run smoother with less effort. There was a Google Summer of Code project registered for it which produced some initial results. — There is also a driver in the works by Clemens Ladisch.
  • 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 an SBP-2 target using the in-kernel SCSI target framework as an alternative to Endpoint (Oracle's SBP-2 target implementation in userspace).
  • ohci1394_earlyinit: 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 ohci1394_earlyinit to firewire-ohci.


IEEE1394 Subsystem (a.k.a. Linux1394 driver stack)

The new FireWire subsystem in Linux 2.6.22+ (linux/drivers/firewire) is meant to replace the old IEEE 1394 subsystem (linux/drivers/ieee1394). New development, bug fixing, and even janitorial work should therefore concentrate on the new subsystem.

There is a meta-bug in kernel.org's bugzilla which tracks items on which nobody is working anymore because these bugs don't exist in the new firewire drivers or should be fixed in them. Anybody who nevertheless wants to fix any of those superseded issues is of course welcome to do so, if it can be done with low risk of regressions.

Personal tools