IEEE 1394 updates for Linux 2.6.39.y (v1349 2012-01-20) Documentation/ABI/stable/firewire-cdev | 103 Documentation/ABI/stable/sysfs-bus-firewire | 122 Documentation/ioctl/ioctl-number.txt | 1 Documentation/sound/alsa/ALSA-Configuration.txt | 7 drivers/firewire/core-card.c | 27 drivers/firewire/core-cdev.c | 51 drivers/firewire/core-device.c | 48 drivers/firewire/core-iso.c | 27 drivers/firewire/core-transaction.c | 23 drivers/firewire/core.h | 15 drivers/firewire/net.c | 24 drivers/firewire/ohci.c | 530 ++- drivers/firewire/sbp2.c | 374 +- drivers/media/dvb/firewire/firedtv-avc.c | 17 drivers/media/dvb/firewire/firedtv-ci.c | 34 drivers/media/dvb/firewire/firedtv-fw.c | 1 include/asm-generic/dma-mapping-common.h | 14 include/linux/firewire-cdev.h | 78 include/linux/firewire.h | 18 include/sound/Kbuild | 1 include/sound/asound.h | 3 include/sound/firewire.h | 51 sound/firewire/Kconfig | 40 sound/firewire/Makefile | 6 sound/firewire/amdtp.c | 212 + sound/firewire/amdtp.h | 46 sound/firewire/cmp.c | 51 sound/firewire/dice-interface.h | 371 ++ sound/firewire/dice.c | 1485 ++++++++++ sound/firewire/fcp.c | 2 sound/firewire/fireworks.c | 2283 ++++++++++++++++ sound/firewire/fireworks.h | 201 + sound/firewire/isight.c | 750 +++++ sound/firewire/iso-resources.c | 17 sound/firewire/iso-resources.h | 1 sound/firewire/lib.c | 24 sound/firewire/lib.h | 7 sound/firewire/packets-buffer.c | 2 sound/firewire/speakers.c | 20 39 files changed, 6461 insertions(+), 626 deletions(-) From 526795d69f5be6d058bdf89a65a303a1ee136aba Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 8 Jan 2012 22:18:00 +0100 [PATCH 9/9] ALSA: dice: document quadlet alignment Doing accesses without quadlet alignment is a bad idea because the firmware's byte-swapping would garble the data; clarify this in the documentation. Signed-off-by: Clemens Ladisch --- sound/firewire/dice-interface.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) From e27d3a9eb7b1faad9df75de68db9879ea54efd19 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 5 Jan 2012 22:36:08 +0100 [PATCH 8/9] ALSA: dice: add a proc file to show device information For easier debugging, add a proc file to show the device's capabilities and current status. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 246 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) From 1684cef612a7295667fcb8348257eaabb54cf29e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 5 Jan 2012 22:16:24 +0100 [PATCH 7/9] ALSA: dice: check clock change timeout Output a warning if the wait for the clock change notification times out. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) From 5e36fef41579d62c45111dd5bde2f9685b301b0e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 4 Dec 2011 22:07:01 +0100 [PATCH 5/9] ALSA: dice: dynamic sample rate selection Instead of relying of some control panel application to configure some fixed sample rate, allow applications to set it automatically. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 137 +++++++++++++++++++++++++++++++----------- 1 file changed, 102 insertions(+), 35 deletions(-) From 4eedb5b4f608f4a932a23967186aa87f8b41293a Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 4 Dec 2011 22:23:59 +0100 [PATCH 4/9] ALSA: dice: get rate-dependent parameters In preparation for sample rate selection support, read the stream parameters that might change when running at different sample rates. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 93 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) From ed30098478b23478e2bed0d4b8e526216edbdd67 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 5 Dec 2011 22:09:42 +0100 [PATCH 3/9] ALSA: dice: allow notifications during initialization Reorganize the initialization order so that the driver can receive notifications earlier. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) From 4cacc66e7690c21a837f52e868c76baa42f344b3 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 4 Dec 2011 21:47:00 +0100 [PATCH 2/9] ALSA: dice: get clock capabilities In preparation for sample rate selection support, ensure that the driver knows about the device's clock capabilities. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) From 018d4b379496d2530095993d696acb0c4191f323 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 16 Oct 2011 21:39:00 +0200 [PATCH 1/9] ALSA: dice: make amdtp_rates[] const Signed-off-by: Clemens Ladisch --- sound/firewire/amdtp.c | 2 +- sound/firewire/amdtp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) Date: Tue, 20 Dec 2011 21:34:12 +0100 From: Stefan Richter firewire: sbp2: use dev_printk API All messages are uniformly prefixed by driver name and device name now. Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 93 ++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 42 deletions(-) Date: Tue, 20 Dec 2011 21:32:46 +0100 From: Stefan Richter firewire: ohci: use dev_printk API All messages are uniformly prefixed by driver name and device name now. Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 185 +++++++++++++++++++++++----------------- 1 file changed, 106 insertions(+), 79 deletions(-) From f29bf150b7ba0624142496c84bb48ddba561c0e2 Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Sat, 27 Aug 2011 20:05:15 +0200 ALSA: dice: fix locking Avoid a lock inversion between dice->mutex and pcm->open_mutex. Signed-off-by: Stefan Richter Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) From d79b51cb3e1ff55e0d7d87a0b57e54e16fcf29ab Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 11 Oct 2011 17:51:16 +0200 ALSA: dice: remove superfluous field The pcm field was not actually used. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) Date: Sat, 15 Oct 2011 23:12:23 +0200 From: Clemens Ladisch firewire: ohci: fix isochronous DMA synchronization Add the dma_sync_single_* calls necessary to ensure proper cache synchronization for isochronous data buffers on non-coherent architectures. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) Date: Sat, 15 Oct 2011 23:09:51 +0200 From: Clemens Ladisch dma-mapping: fix sync_single_range_* DMA debugging Commit 5fd75a7850b5 (dma-mapping: remove unnecessary sync_single_range_* in dma_map_ops) unified not only the dma_map_ops but also the corresponding debug_dma_sync_* calls. This led to spurious WARN()ings like the following because the DMA debug code was no longer able to detect the DMA buffer base address without the separate offset parameter: WARNING: at lib/dma-debug.c:911 check_sync+0xce/0x446() firewire_ohci 0000:04:00.0: DMA-API: device driver tries to sync DMA memory it has not allocated [device address=0x00000000cedaa400] [size=1024 bytes] Call Trace: ... [] check_sync+0xce/0x446 [] debug_dma_sync_single_for_device+0x39/0x3b [] ohci_queue_iso+0x4f3/0x77d [firewire_ohci] ... To fix this, unshare the sync_single_* and sync_single_range_* implementations so that we are able to call the correct debug_dma_sync_* functions. Signed-off-by: Clemens Ladisch --- include/asm-generic/dma-mapping-common.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) Date: Sat, 15 Oct 2011 18:14:39 +0200 From: Clemens Ladisch firewire: ohci: work around selfID junk due to wrong gap count If a device's firmware initiates a bus reset by setting the IBR bit in PHY register 1 without resetting the gap count field to 63 (and without having sent a PHY configuration packet beforehand), the gap count of this node will remain at the old value after the bus reset and thus be inconsistent with the gap count on all other nodes. The bus manager is supposed to detect the inconsistent gap count values in the self ID packets and correct them by issuing another bus reset. However, if the buggy device happens to be the cycle master, and if it sends a cycle start packet immediately after the bus reset (which is likely after a long bus reset), then the time between the end of the selfID phase and the start of the cycle start packet will be based on the too-small gap count value, so this gap will be too short to be detected as a subaction gap by the other nodes. This means that the cycle start packet will be assumed to be self ID data, and will be stored after the actual self ID quadlets in the self ID buffer. This garbage in the self ID buffer made firewire-core ignore all of the self ID data, and thus prevented the Linux bus manager from correcting the problem. Furthermore, because the bus reset handling was aborted completely, asynchronous transfers would be no longer handled correctly, and fw_run_transaction() would hang until the next bus reset. To fix this, make the detection of inconsistent self IDs more discriminating: If the invalid data in the self ID buffer looks like a cycle start packet, we can assume that the previous data in the buffer is correctly received self ID information, and process it normally. (We inspect only the first quadlet of the cycle start packet, because this value is different enough from any valid self ID quadlet, and many controllers do not store the cycle start packet in five quadlets because they expect self ID data to have an even number of quadlets.) This bug has been observed when a bus-powered DesktopKonnekt6 is switched off with its power button. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) Date: Mon, 26 Sep 2011 21:44:30 +0200 From: Stephan Gatzka firewire: net: Use posted writes Change memory region to ohci "middle address space". This effectively reduces the number of packets by 50%. [Stefan R.:] This eliminates 1394 ack packets and improved throughput by a few percent in some tests with an S400a connection with and without gap count optimization. Since firewire-net taxes the AR-req DMA unit of a FireWire controller much more than firewire-sbp2 (which uses the middle address space with PCI posted writes too), this commit also changes a related error printk into a ratelimited one as a precaution. Side note: The IPv4-over-1394 drivers of Mac OS X 10.4, Windows XP SP3, and the Thesycon 1394 bus driver for Windows all use the middle address space too. Signed-off-by: Stephan Gatzka Signed-off-by: Stefan Richter --- drivers/firewire/net.c | 9 ++------- drivers/firewire/ohci.c | 3 ++- 2 files changed, 4 insertions(+), 8 deletions(-) Date: Sun, 19 Jun 2011 10:10:43 +0000 (+0200) From: Clemens Ladisch ALSA: isight: remove superfluous field Remove a field that is not used at all. This remained from earlier tests, but the current driver has decided not to handle iris notifications. Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 1 - 1 file changed, 1 deletion(-) Date: Mon, 19 Sep 2011 00:20:48 +0200 From: Stefan Richter firewire: use clamp and min3 macros Use kernel.h's convenience macros. Also omit a printk that should never happen and won't matter much if it ever happened. Signed-off-by: Stefan Richter --- drivers/firewire/core-transaction.c | 4 ++-- drivers/firewire/net.c | 6 +----- drivers/firewire/sbp2.c | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) Date: Mon, 19 Sep 2011 09:29:30 +0200 From: Stefan Richter firewire: ohci: optimize TSB41BA3D detection Takes less source code and machine code, and less runtime with PHYs other than TSB41BA3D (e.g. TSB81BA3 with device ID 0x831304 which takes one instead of six read_paged_phy_reg now). Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) Date: Mon, 19 Sep 2011 00:17:37 +0200 From: Stefan Richter firewire: ohci: TSB41BA3D support tweaks Fix: phy_reg_mutex must be held over the write/read_phy_reg pair which gets PHY port status. Only print to the log when a TSB41BA3D was found. By far most TSB82AA2 cards have a TSB81BA3, and firewire-ohci can keep quiet about that. Shorten some strings and comments. Change some whitespace. Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 74 ++++++++++++---------------------------- 1 file changed, 23 insertions(+), 51 deletions(-) Date: Mon, 12 Sep 2011 22:23:53 +0200 From: Stephan Gatzka firewire: ohci: Add support for TSB41BA3D phy This patch implements a work around for the Texas Instruments PHY TSB41BA3D. This phy has a bug at least in combination with the TI LLCs TSB82AA2B and TSB12LV26. The selfid coming from the locally connected phy is not propagated into the selfid buffer of the OHCI (see http://www.ti.com/litv/pdf/sllz059 for details). The main idea is to construct the selfid ourselves. Signed-off-by: Stephan Gatzka Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 185 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+), 2 deletions(-) Date: Mon, 25 Jul 2011 22:16:24 +0200 From: Stephan Gatzka firewire: ohci: Move code from the bus reset tasklet into a workqueue Code inside bus_reset_work may now sleep. This is a prerequisite to support a phy from Texas Instruments cleanly. The patch to support this phy will be submitted later. Signed-off-by: Stephan Gatzka Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) Date: Wed, 31 Aug 2011 10:45:46 +0800 From: Ming Lei firewire: ohci: add no MSI quirk for O2Micro controller This fixes https://bugs.launchpad.net/ubuntu/+source/linux/+bug/801719 . An O2Micro PCI Express FireWire controller, "FireWire (IEEE 1394) [0c00]: O2 Micro, Inc. Device [1217:11f7] (rev 05)" which is a combination device together with an SDHCI controller and some sort of storage controller, misses SBP-2 status writes from an attached FireWire HDD. This problem goes away if MSI is disabled for this FireWire controller. The device reportedly does not require QUIRK_CYCLE_TIMER. Signed-off-by: Ming Lei Signed-off-by: Stefan Richter (amended changelog) Cc: --- drivers/firewire/ohci.c | 3 +++ 1 file changed, 3 insertions(+) From fdc9cca4a7ffb213425fee7cdc3bf16ca5e72313 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 19:02:32 +0200 [PATCH 8/8] ALSA: dice: remove 10s period length limit Since commit f2b3614cefb6 (Don't check DMA time-out too shortly), we need no longer to restrict the period length to less than 10 s. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) From 87406ea1b9c8486c4e16d2c6c61f0fe3e3c20d53 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 18:32:44 +0200 [PATCH 7/8] ALSA: dice: avoid superflous write at bus reset When a bus reset happens, the enable register is automatically cleared, so we do not need to clear it manually when stopping the stream. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 5 +++++ 1 file changed, 5 insertions(+) From 7f5cede774247f6a5cb0d32083ed104dfaeb1212 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 18:25:54 +0200 [PATCH 6/8] ALSA: firewire: extend snd_fw_transaction() Add a flag to snd_fw_transaction() to allow it to abort when a bus reset happens. This removes most of the duplicated error handling loops that were required around calls to the low-level fw_run_transaction(). Also add a flag to suppress error messages; errors are expected when we attempt to clean up after the device was unplugged. Signed-off-by: Clemens Ladisch --- sound/firewire/cmp.c | 48 ++++----- sound/firewire/dice.c | 207 ++++++++++++-------------------------- sound/firewire/fcp.c | 2 sound/firewire/isight.c | 43 ++++---- sound/firewire/lib.c | 24 +++- sound/firewire/lib.h | 7 + sound/firewire/speakers.c | 2 7 files changed, 130 insertions(+), 203 deletions(-) From 3c5079443753f50618422e9a0203781f06a1a89a Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 18:12:28 +0200 [PATCH 5/8] ALSA: dice: optimize reading of consecutive registers Instead of reading two consecutive register with two quadlet requests, use one block read request. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) From 30aea89da4b916306c602f34c5b19f5bc5dfeca5 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sat, 25 Jun 2011 21:43:10 +0200 [PATCH 4/8] ALSA: dice: support dual-wire stream format at 192 kHz Change the AMDTP streaming code to handle the non-standard stream format that DICE devices use at sample rates greater than 96 kHz. Signed-off-by: Clemens Ladisch --- sound/firewire/amdtp.c | 157 +++++++++++++++++++++++++++++++------- sound/firewire/amdtp.h | 41 +++------- sound/firewire/dice.c | 29 +++++-- sound/firewire/speakers.c | 6 + 4 files changed, 165 insertions(+), 68 deletions(-) From f9e0df98ff3ad1146ee67738ed061386727f1991 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 17:29:29 +0200 [PATCH 3/8] ALSA: dice: fix device detection for other vendors DICE devices do not have a unique specifier ID in their unit directory (it's always the same as the device vendor's ID), so rely on just the version ID for driver loading, and use a heuristic in the probe callback to detect actual DICE devices. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 102 +++++++++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 18 deletions(-) From 5d3de9436c06691a22d0605fa373302eab985cb3 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 17:18:48 +0200 [PATCH 2/8] ALSA: dice: reorganize interface definitions Move the DICE interface symbols into a separate header file, and add more documentation. Signed-off-by: Clemens Ladisch --- sound/firewire/dice-interface.h | 371 ++++++++++++++++++++++++++++++++ sound/firewire/dice.c | 209 ------------------ 2 files changed, 373 insertions(+), 207 deletions(-) create mode 100644 sound/firewire/dice-interface.h From 5ac97683122b2d326d1d644a42f8343f85fdfd70 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Sun, 19 Jun 2011 15:23:04 +0200 [PATCH 1/8] ALSA: firewire: introduce amdtp_out_stream_running() Introduce the helper function amdtp_out_stream_running(). This makes many checks in amdtp.c clearer and frees the device drivers from having to track this with a separate variable. Signed-off-by: Clemens Ladisch --- sound/firewire/amdtp.c | 10 +++++----- sound/firewire/amdtp.h | 6 ++++++ sound/firewire/dice.c | 17 +++++------------ sound/firewire/speakers.c | 8 ++------ 4 files changed, 18 insertions(+), 23 deletions(-) Date: Sat, 27 Aug 2011 18:53:03 +0200 From: Stefan Richter firewire: move fw_device reference counting from drivers to core fw_unit device drivers invariably need to talk to the fw_unit's parent (an fw_device) and grandparent (an fw_card). firewire-core already maintains an fw_card reference for the entire lifetime of an fw_device. Likewise, let firewire-core maintain an fw_device reference for the entire lifetime of an fw_unit so that fw_unit drivers don't have to. Signed-off-by: Stefan Richter --- drivers/firewire/core-device.c | 2 ++ drivers/firewire/core.h | 13 +++++++++++++ include/linux/firewire.h | 12 ------------ sound/firewire/dice.c | 5 ----- sound/firewire/isight.c | 4 +--- sound/firewire/speakers.c | 4 ---- 6 files changed, 16 insertions(+), 24 deletions(-) Date: Sat, 27 Aug 2011 15:35:23 +0200 From: Stefan Richter firewire: sbp2: fold two functions into one sbp2_release_target() is folded into its primary user, sbp2_remove(). The only other caller, a failure path in sbp2_probe(), now uses sbp2_remove(). This adds unnecessary cancel_delayed_work_sync() calls to that failure path but results in less code and text. Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) Date: Sat, 27 Aug 2011 15:34:32 +0200 From: Stefan Richter firewire: sbp2: move some code to more sensible places Implement sbp2_queue_work(), which is now a very simple accessor to one of the struct sbp2_logical_unit members, right after the definition of struct sbp2_logical_unit. Put the sbp2_reconnect() implementation right after the sbp2_login() implementation. They are both part of the SBP-2 access protocol. Implement the driver methods sbp2_probe(), spp2_update(), sbp2_remove() in this order, reflecting the lifetime of an SBP-2 target. Place the sbp2_release_target() implementation right next to sbp2_remove() which is its primary user, and after sbp2_probe() which is the counterpart to sbp2_release_target(). There are no changes to the implementations here, or at least not meant to be. Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 213 ++++++++++++++++++++-------------------- 1 file changed, 107 insertions(+), 106 deletions(-) Date: Sat, 27 Aug 2011 15:33:34 +0200 From: Stefan Richter firewire: sbp2: remove obsolete reference counting Since commit 0278ccd9d53e07c4e699432b2fed9de6c56f506c "firewire: sbp2: fix panic after rmmod with slow targets", the lifetime of an sbp2_target instance does no longer extent past the return of sbp2_remove(). Therefore it is no longer necessary to call fw_unit_get/put() and fw_device_get/put() in sbp2_probe/remove(). Furthermore, said commit also ensures that lu->work is not going to be executed or requeued at a time when the sbp2_target is no longer in use. Hence there is no need for sbp2_target reference counting for lu->work. Other concurrent contexts: - Processes which access the sysfs of the SCSI host device or of one of its subdevices are safe because these interfaces are all removed by scsi_remove_device/host() in sbp2_release_target(). - SBP-2 command block ORB transactions are finished when scsi_remove_device() in sbp2_release_target() returns. - SBP-2 management ORB transactions are finished when cancel_delayed_work_sync(&lu->work) before sbp2_release_target() returns. Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 57 ++++++++++++---------------------------- 1 file changed, 17 insertions(+), 40 deletions(-) Date: Mon, 22 Aug 2011 21:38:38 +0100 From: Chris Boot firewire: sbp2: fix panic after rmmod with slow targets If firewire-sbp2 starts a login to a target that doesn't complete ORBs in a timely manner (and has to retry the login), and the module is removed before the operation times out, you end up with a null-pointer dereference and a kernel panic. [SR: This happens because sbp2_target_get/put() do not maintain module references. scsi_device_get/put() do, but at occasions like Chris describes one, nobody holds a reference to an SBP-2 sdev.] This patch cancels pending work for each unit in sbp2_remove(), which hopefully means there are no extra references around that prevent us from unloading. This fixes my crash. Signed-off-by: Chris Boot Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 4 ++++ 1 file changed, 4 insertions(+) Date: Sun, 7 Aug 2011 15:20:18 +0200 From: Stefan Richter firewire: core: handle ack_busy when fetching the Config ROM Some older Panasonic made camcorders (Panasonic AG-EZ30 and NV-DX110, Grundig Scenos DLC 2000) reject requests with ack_busy_X if a request is sent immediately after they sent a response to a prior transaction. This causes firewire-core to fail probing of the camcorder with "giving up on config rom for node id ...". Consequently, programs like kino or dvgrab are unaware of the presence of a camcorder. Such transaction failures happen also with the ieee1394 driver stack (of the 2.4...2.6 kernel series until 2.6.36 inclusive) but with a lower likelihood, such that kino or dvgrab are generally able to use these camcorders via the older driver stack. The cause for firewire-ohci's or firewire-core's worse behavior is not yet known. Gap count optimization in firewire-core is not the cause. Perhaps the slightly higher latency of transaction completion in the older stack plays a role. (ieee1394: AR-resp DMA context tasklet -> packet completion ktread -> user process; firewire-core: tasklet -> user process.) This change introduces retries and delays after ack_busy_X into firewire-core's Config ROM reader, such that at least firewire-core's probing and /dev/fw* creation are successful. This still leaves the problem that userland processes are facing transaction failures. gscanbus's built-in retry routines deal with them successfully, but neither kino's nor dvgrab's do ever succeed. But at least DV capture with "dvgrab -noavc -card 0" works now. Live video preview in kino works too, but not actual capture. One way to prevent Configuration ROM reading failures in application programs is to modify libraw1394 to synthesize read responses by means of firewire-core's Configuration ROM cache. This would only leave CMP and FCP transaction failures as a potential problem source for applications. Reported-and-tested-by: Thomas Seilund Reported-and-tested-by: René Fritz Signed-off-by: Stefan Richter --- drivers/firewire/core-device.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) Date: Thu, 11 Aug 2011 20:40:42 +0200 From: Stefan Richter firewire: ohci: fix DMA unmapping in an error path If request_irq failed, we would pass wrong arguments to dma_free_coherent. https://bugzilla.redhat.com/show_bug.cgi?id=728185 Reported-by: Mads Kiilerich Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) Date: Thu, 11 Aug 2011 00:06:04 +0200 From: Stefan Richter firewire: cdev: fix 32 bit userland on 64 bit kernel compat corner cases Clemens points out that we need to use compat_ptr() in order to safely cast from u64 to addresses of a 32-bit usermode client. Before, our conversion went wrong - in practice if the client cast from pointer to integer such that sign-extension happened, (libraw1394 and libdc1394 at least were not doing that, IOW were not affected) or - in theory on s390 (which doesn't have FireWire though) and on the tile architecture, regardless of what the client does. The bug would usually be observed as the initial get_info ioctl failing with "Bad address" (EFAULT). Reported-by: Carl Karsten Reported-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/core-cdev.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) Date: Sat, 9 Jul 2011 16:48:29 +0200 From: Stefan Richter firewire: document the sysfs ABIs of firewire-core and firewire-sbp2. Signed-off-by: Stefan Richter --- Documentation/ABI/stable/sysfs-bus-firewire | 122 ++++++++++++++++++++ 1 file changed, 122 insertions(+) Date: Thu, 14 Jul 2011 21:08:39 +0200 From: Stefan Richter firewire: cdev: ABI documentation enhancements Add overview documentation in Documentation/ABI/stable/firewire-cdev. Improve the inline reference documentation in firewire-cdev.h: - Add /* available since kernel... */ comments to event numbers consistent with the comments on ioctl numbers. - Shorten some documentation on an event and an ioctl that are less interesting to current programming because there are newer preferable variants. - Spell Configuration ROM (name of an IEEE 1212 register) in upper case. - Move the dummy FW_CDEV_VERSION out of the reader's field of vision. We should remove it from the header next year or so. Signed-off-by: Stefan Richter --- Documentation/ABI/stable/firewire-cdev | 103 +++++++++++++++++++++++++ include/linux/firewire-cdev.h | 75 ++++++++---------- 2 files changed, 137 insertions(+), 41 deletions(-) Date: Sat, 9 Jul 2011 16:43:22 +0200 From: Stefan Richter firewire: cdev: prevent race between first get_info ioctl and bus reset event queuing Between open(2) of a /dev/fw* and the first FW_CDEV_IOC_GET_INFO ioctl(2) on it, the kernel already queues FW_CDEV_EVENT_BUS_RESET events to be read(2) by the client. The get_info ioctl is practically always issued right away after open, hence this condition only occurs if the client opens during a bus reset, especially during a rapid series of bus resets. The problem with this condition is twofold: - These bus reset events carry the (as yet undocumented) @closure value of 0. But it is not the kernel's place to choose closures; they are privat to the client. E.g., this 0 value forced from the kernel makes it unsafe for clients to dereference it as a pointer to a closure object without NULL pointer check. - It is impossible for clients to determine the relative order of bus reset events from get_info ioctl(2) versus those from read(2), except in one way: By comparison of closure values. Again, such a procedure imposes complexity on clients and reduces freedom in use of the bus reset closure. So, change the ABI to suppress queuing of bus reset events before the first FW_CDEV_IOC_GET_INFO ioctl was issued by the client. Note, this ABI change cannot be version-controlled. The kernel cannot distinguish old from new clients before the first FW_CDEV_IOC_GET_INFO ioctl. We will try to back-merge this change into currently maintained stable/ longterm series, and we only document the new behaviour. The old behavior is now considered a kernel bug, which it basically is. Signed-off-by: Stefan Richter Cc: --- drivers/firewire/core-cdev.c | 18 ++++++++++-------- include/linux/firewire-cdev.h | 3 +++ 2 files changed, 13 insertions(+), 8 deletions(-) Date: Sat, 9 Jul 2011 16:42:26 +0200 From: Stefan Richter firewire: cdev: return -ENOTTY for unimplemented ioctls, not -EINVAL On Jun 27 Linus Torvalds wrote: > The correct error code for "I don't understand this ioctl" is ENOTTY. > The naming may be odd, but you should think of that error value as a > "unrecognized ioctl number, you're feeding me random numbers that I > don't understand and I assume for historical reasons that you tried to > do some tty operation on me". [...] > The EINVAL thing goes way back, and is a disaster. It predates Linux > itself, as far as I can tell. You'll find lots of man-pages that have > this line in it: > > EINVAL Request or argp is not valid. > > and it shows up in POSIX etc. And sadly, it generally shows up > _before_ the line that says > > ENOTTY The specified request does not apply to the kind of object > that the descriptor d references. > > so a lot of people get to the EINVAL, and never even notice the ENOTTY. [...] > At least glibc (and hopefully other C libraries) use a _string_ that > makes much more sense: strerror(ENOTTY) is "Inappropriate ioctl for > device" So let's correct this in the ABI while it is still young, relative to distributor adoption. Side note: We return -ENOTTY not only on _IOC_TYPE or _IOC_NR mismatch, but also on _IOC_SIZE mismatch. An ioctl with an unsupported size of argument structure can be seen as an unsupported version of that ioctl. Signed-off-by: Stefan Richter Cc: --- drivers/firewire/core-cdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Date: Wed, 6 Jul 2011 19:33:15 +0200 From: Stefan Richter [media] firedtv: change some -EFAULT returns to more fitting error codes Mauro Carvalho Chehab wrote: > I'm validating if all drivers are behaving equally with respect to the > error codes returned to userspace, and double-checking with the API. > > On almost all places, -EFAULT code is used only to indicate when > copy_from_user/copy_to_user fails. However, firedtv uses a lot of > -EFAULT, where it seems to me that other error codes should be used > instead (like -EIO for bus transfer errors and -EINVAL/-ERANGE for > invalid/out of range parameters). This concerns only the CI (CAM) related code of firedtv of which I know little. Let's just pass through the error returns of lower level I/O code where applicable, and -EACCES (permission denied) when a seemingly valid but negative FCP response or an unknown-to-firedtv CA message is received. Signed-off-by: Stefan Richter Cc: Henrik Kurelid --- drivers/media/dvb/firewire/firedtv-avc.c | 2 drivers/media/dvb/firewire/firedtv-ci.c | 34 +++++++++++------------ 2 files changed, 17 insertions(+), 19 deletions(-) Date: Sun, 3 Jul 2011 17:39:26 +0200 From: Stefan Richter firewire: ohci: skip soft reset retries after card ejection The software reset in firewire-ohci's pci_remove does not have a great prospect of success if the card was already physically removed at this point. So let's skip the 500 ms that were spent in retries here. Also, replace a defined constant by its open-coded value. This is not a constant from a specification but an arbitrarily chosen retry limit. It was only used in this single place. Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) Date: Wed, 22 Jun 2011 21:05:08 +0200 From: Stefan Richter firewire: ohci: fix PHY reg access after card ejection Detect and handle ejection of FireWire CardBus cards in PHY register accesses: - The last attempt of firewire-core to reset the bus during shutdown caused a spurious "firewire_ohci: failed to write phy reg" error message in the log. Skip this message as well as the prior retry loop that needlessly took 100 milliseconds. - In the unlikely case that a PHY register was read right after card ejection, a bogus value was obtained and possibly acted upon. Instead, fail the read attempt. Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 6 ++++++ 1 file changed, 6 insertions(+) Date: Tue, 21 Jun 2011 15:24:26 +0200 From: Stefan Richter firewire: ohci: add a comment on PHY reg access serialization Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 6 ++++++ 1 file changed, 6 insertions(+) From cf6f1ff17f56c275424c5a341fc4d27ccbbfa71c Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Fri, 17 Jun 2011 08:18:35 +0200 [PATCH] ALSA: isight: adjust for new queueing API Since commit 13882a82ee16 (optimize iso queueing by setting wake only after the last packet), drivers are required to call fw_iso_context_queue_flush() after queueing a batch of packets. The missing call would have an effect only if the controller queue underruns, but then the DMA would stop completely. Signed-off-by: Clemens Ladisch Signed-off-by: Takashi Iwai --- sound/firewire/isight.c | 1 + 1 file changed, 1 insertion(+) Date: Wed, 22 Jun 2011 20:39:03 +0200 From: Stefan Richter ALSA: fireworks: adjust for new queueing API --- sound/firewire/fireworks.c | 6 ++++++ 1 file changed, 6 insertions(+) Date: Sun, 12 Jun 2011 17:00:56 +0200 From: Stefan Richter ALSA: fireworks: avoid duplicate variable name 'index' Pointed out by sparse: "symbol 'index' shadows an earlier one". Could also be fixed by static int interface_index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; module_param_array_named(index, interface_index, int, NULL, 0444); [...] err = snd_card_create(interface_index[card_index], id[card_index], THIS_MODULE, --- sound/firewire/fireworks.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) Date: Sun, 12 Jun 2011 17:00:56 +0200 From: Stefan Richter ALSA: fireworks: fix lock imbalance in an error path Pointed out by sparse: "context imbalance in 'capture_iso_callback' - different lock contexts for basic block". --- sound/firewire/fireworks.c | 1 + 1 file changed, 1 insertion(+) From 2a2405fac5f900608eff5ea89926480aad475877 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:49:53 +0200 [PATCH 12/12] ALSA: fireworks: add MIDI output --- sound/firewire/fireworks.c | 195 ++++++++++++++++++++++++++++++------- 1 file changed, 158 insertions(+), 37 deletions(-) From 331f4c14546bbfd5ab42dc646b087898bc18df62 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:49:42 +0200 [PATCH 11/12] ALSA: fireworks: allow PCM streams to be started synchronously --- sound/firewire/fireworks.c | 75 ++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 42 deletions(-) From bad1f8034d68fd4c7d722cf7cd27573d4d556277 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:49:31 +0200 [PATCH 10/12] ALSA: fireworks: add PCM playback --- sound/firewire/fireworks.c | 627 ++++++++++++++++++++++++++++++++++++- 1 file changed, 617 insertions(+), 10 deletions(-) From 513450c9e03dbf56f238019f232dcad2b6016470 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:49:19 +0200 [PATCH 09/12] ALSA: fireworks: check received CIP headers for consistency --- sound/firewire/fireworks.c | 97 ++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 19 deletions(-) From 4c0e62d5d862d187b2e92070e6016a7037380da9 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:49:07 +0200 [PATCH 08/12] ALSA: fireworks: add identify control --- sound/firewire/fireworks.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) From b5fcebfec4f6e6a8858e708d97979d83d2ccb471 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:48:55 +0200 [PATCH 07/12] ALSA: fireworks: add polled values control --- sound/firewire/fireworks.c | 60 +++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) From 86b939359167083c1e6d6edc3181ee2fb3229a66 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:48:43 +0200 [PATCH 06/12] ALSA: fireworks: add hardware capabilities control --- sound/firewire/fireworks.c | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) From dd80a554f38649b8768717e772e8b0d0b8dd0e49 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:48:26 +0200 [PATCH 05/12] ALSA: fireworks: synchronize PCM stream start with fw data --- sound/firewire/fireworks.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) From 6afe12c0d1ef003fb6e57e6d34df01b1f391a50d Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:48:10 +0200 [PATCH 04/12] ALSA: fireworks: add PCM capture --- sound/firewire/fireworks.c | 236 +++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) From 38d7d9f0974b2265ba50931b9d0be3066d0bb210 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:47:49 +0200 [PATCH 03/12] ALSA: fireworks: fix bus reset handling --- sound/firewire/fireworks.c | 74 +++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) From bfd3510a4340c9cf2d3722baf262d84756acd970 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:46:27 +0200 [PATCH 02/12] ALSA: fireworks: add MIDI capture --- sound/firewire/fireworks.c | 431 +++++++++++++++++++++++++++++++++++++ 1 file changed, 431 insertions(+) From fb9ed6a705e827f49f65de123d698171ad72d6e3 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 30 Sep 2010 14:46:10 +0200 [PATCH 01/12] ALSA: add Echo Fireworks support skeleton driver only [StefanR: - forward-merge to 2.6.39 + firewire patches + snd-dice patches, - added #include ] --- Documentation/sound/alsa/ALSA-Configuration.txt | 7 + sound/firewire/Kconfig | 15 + sound/firewire/Makefile | 2 + sound/firewire/fireworks.c | 606 ++++++++++++++++ sound/firewire/fireworks.h | 201 +++++ 5 files changed, 831 insertions(+) create mode 100644 sound/firewire/Kconfig create mode 100644 sound/firewire/Makefile create mode 100644 sound/firewire/fireworks.c create mode 100644 sound/firewire/fireworks.h Date: Sun, 12 Jun 2011 14:30:57 +0200 From: Stefan Richter firewire: ohci: reduce potential context_stop latency Stopping an isochronous reception DMA context takes two loop iterations in context_stop on several controllers (JMicron, NEC, VIA). But there is no extra delay necessary between these two reg_read trials; the MMIO reads themselves are slow enough. Hence bring back the behavior from before commit dd6254e5c0efe01ad255188898cb3dadf98cb56d "firewire: ohci: remove superfluous posted write flushes" on these controllers by means of an "if (i)" condition. Isochronous context stop is performed in preemptible contexts (and only rarely), hence this change is of little impact. (Besides, Agere and TI controllers always, or almost always, have the context stopped already at the first ContextControl read.) More important is asynchronous transmit context stop, which is performed while local interrupts are disabled (on the two AT DMAs in bus_reset_tasklet, i.e. after a self-ID-complete event). In my experience with several controllers, tested with a usermode AT-request transmitter as well as with FTP transmission over firewire-net, the AT contexts were luckily already stopped at the first ContextControl read, i.e. never required another MMIO read let alone mdelay. A possible explanation for this is that the controllers which I tested perhaps stop AT DMA before they perform the self-ID reception DMA. But we cannot be sure about that and should keep the interrupts-disabled busy loop as short as possible. Hence, query the ContextControl register in 1000 udelay(10) intervals instead of 10 udelay(1000) intervals. I understand from an estimation by Clemens Ladisch that stopping a busy DMA context should take microseconds or at worst tens of microseconds, not milliseconds. Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) Date: Mon, 16 May 2011 08:10:10 +0200 From: Clemens Ladisch firewire: ohci: remove superfluous posted write flushes The call to flush_writes() in context_stop() is superfluous because another register read is done immediately afterwards. The call to flush_writes() in ar_context_run() does not need to be done individually for each AR context, so move it to ohci_enable(). This also makes ohci_enable() clearer because it no longer depends on a side effect of ar_context_run() to flush its own register writes. Finally, the setting of a context's wake bit does not need to be flushed because neither the driver logic nor the API require the CPU to wait for this action. This removes the last MMIO reads from the packet queueing code paths. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) Date: Sun, 29 May 2011 19:07:19 +0200 From: August Lilleaas firewire: net: replacing deprecated __attribute__((packed)) with __packed Fixing a deprecation, replacing __attribute__((packed)) with __packed. It was deprecated for portability, specifically to avoid GCC specific code. See commit 82ddcb040570411fc2d421d96b3e69711c670328. Signed-off-by: August Lilleaas Signed-off-by: Stefan Richter (added include compiler.h) --- drivers/firewire/net.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) From ed4d975dde2fd0ea129d7043f0c98c90b96dcb2e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 28 Apr 2011 08:03:43 +0200 ALSA: dice: clear device lock when closing hwdep device Ensure that misbehaving or aborted userspace programs do not accidentally keep the lock. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) Date: Wed, 11 May 2011 11:07:09 +0200 From: Clemens Ladisch ALSA: isight: fix locking Lockdep complains about conflicts between isight->mutex, ALSA's register_mutex, mm->mmap_sem, and pcm->open_mutex. This can be fixed by moving the calls to isight_pcm_abort(), snd_card_disconnect(), and fw_iso_resources_update() out of isight->mutex. These functions are designed to be called asynchronously; the mutex needs to protect only the device streaming state modified by isight_start/stop_streaming(). Signed-off-by: Clemens Ladisch Reported-by: Stefan Richter Signed-off-by: Takashi Iwai --- sound/firewire/isight.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) Date: Wed, 11 May 2011 10:54:41 +0200 From: Clemens Ladisch ALSA: isight: remove experimental status Experiments have shown this driver to work now. Signed-off-by: Clemens Ladisch Tested-by: Stefan Richter Signed-off-by: Takashi Iwai --- sound/firewire/Kconfig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) Date: Mon, 02 May 2011 09:33:56 +0200 From: Clemens Ladisch firewire: optimize iso queueing by setting wake only after the last packet When queueing iso packets, the run time is dominated by the two MMIO accesses that set the DMA context's wake bit. Because most drivers submit packets in batches, we can save much time by removing all but the last wakeup. The internal kernel API is changed to require a call to fw_iso_context_queue_flush() after a batch of queued packets. The user space API does not change, so one call to FW_CDEV_IOC_QUEUE_ISO must specify multiple packets to take advantage of this optimization. In my measurements, this patch reduces the time needed to queue fifty skip packets from userspace to one sixth on a 2.5 GHz CPU, or to one third at 800 MHz. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/core-card.c | 5 +++++ drivers/firewire/core-cdev.c | 1 + drivers/firewire/core-iso.c | 6 ++++++ drivers/firewire/core.h | 2 ++ drivers/firewire/net.c | 4 +++- drivers/firewire/ohci.c | 19 +++++++++++++++---- drivers/media/dvb/firewire/firedtv-fw.c | 1 + include/linux/firewire.h | 1 + sound/firewire/amdtp.c | 1 + 9 files changed, 35 insertions(+), 5 deletions(-) Date: Sun, 1 May 2011 20:50:31 +0200 From: Stefan Richter firewire: sbp2: parallelize login, reconnect, logout The struct sbp2_logical_unit.work items can all be executed in parallel but are not reentrant. Furthermore, reconnect or re-login work must be executed in a WQ_MEM_RECLAIM workqueue. Hence replace the old single-threaded firewire-sbp2 workqueue by a concurrency-managed but non-reentrant workqueue with rescuer. firewire-core already maintains one, hence use this one. In earlier versions of this change, I observed occasional failures of parallel INQUIRY to an Initio INIC-2430 FireWire 800 to dual IDE bridge. More testing indicates that parallel INQUIRY is not actually a problem, but too quick successions of logout and login + INQUIRY, e.g. a quick sequence of cable plugout and plugin, can result in failed INQUIRY. This does not seem to be something that should or could be addressed by serialization. Another dual-LU device to which I currently have access to, an OXUF924DSB FireWire 800 to dual SATA bridge with firmware from MacPower, has been successfully tested with this too. This change is beneficial to environments with two or more FireWire storage devices, especially if they are located on the same bus. Management tasks that should be performed as soon and as quickly as possible, especially reconnect, are no longer held up by tasks on other devices that may take a long time, especially login with INQUIRY and sd or sr driver probe. Signed-off-by: Stefan Richter --- drivers/firewire/core-card.c | 4 ++-- drivers/firewire/core-cdev.c | 2 +- drivers/firewire/core-device.c | 5 +++-- drivers/firewire/core-transaction.c | 12 ++++++------ drivers/firewire/core.h | 2 -- drivers/firewire/sbp2.c | 9 +-------- include/linux/firewire.h | 2 ++ 7 files changed, 15 insertions(+), 21 deletions(-) Date: Sun, 1 May 2011 21:06:42 +0200 From: Stefan Richter firewire: sbp2: octlet AT payloads can be stack-allocated We do not need slab allocations for ORB pointer write transactions anymore in order to satisfy streaming DMA mapping constraints, thanks to commit da28947e7e36 "firewire: ohci: avoid separate DMA mapping for small AT payloads". (Besides, the slab-allocated buffers that firewire-sbp2 used to provide for 8-byte write requests were still not fully portable since they shared a cacheline with unrelated CPU-accessed data.) Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) Date: Wed Oct 13 13:39:46 CEST 2010 From: Stefan Richter firewire: core: use non-reentrant workqueue with rescuer firewire-core manages the following types of work items: fw_card.br_work: - resets the bus on a card and possibly sends a PHY packet before that - does not sleep for long or not at all - is scheduled via fw_schedule_bus_reset() by - firewire-ohci's pci_probe method - firewire-ohci's set_config_rom method, called by kernelspace protocol drivers and userspace drivers which add/remove Configuration ROM descriptors - userspace drivers which use the bus reset ioctl - itself if the last reset happened less than 2 seconds ago fw_card.bm_work: - performs bus management duties - usually does not (but may in corner cases) sleep for long - is scheduled via fw_schedule_bm_work() by - firewire-ohci's self-ID-complete IRQ handler tasklet - firewire-core's fw_device.work instances whenever the root node device was (successfully or unsuccessfully) discovered, refreshed, or rediscovered - itself in case of resource allocation failures or in order to obey the 125ms bus manager arbitration interval fw_device.work: - performs node probe, update, shutdown, revival, removal; including kernel driver probe, update, shutdown and bus reset notification to userspace drivers - usually sleeps moderately long, in corner cases very long - is scheduled by - firewire-ohci's self-ID-complete IRQ handler tasklet via the core's fw_node_event - firewire-ohci's pci_remove method via core's fw_destroy_nodes/ fw_node_event - itself during retries, e.g. while a node is powering up iso_resource.work: - accesses registers at the Isochronous Resource Manager node - usually does not (but may in corner cases) sleep for long - is scheduled via schedule_iso_resource() by - the owning userspace driver at addition and removal of the resource - firewire-core's fw_device.work instances after bus reset - itself in case of resource allocation if necessary to obey the 1000ms reallocation period after bus reset fw_card.br_work instances should not, and instances of the others must not, be executed in parallel by multiple CPUs -- but were not protected against that. Hence allocate a non-reentrant workqueue for them. fw_device.work may be used in the memory reclaim path in case of SBP-2 device updates. Hence we need a workqueue with rescuer and cannot use system_nrt_wq. Signed-off-by: Stefan Richter Reviewed-by: Tejun Heo --- drivers/firewire/core-card.c | 6 +++--- drivers/firewire/core-cdev.c | 2 +- drivers/firewire/core-device.c | 30 ++++++++++++++++++---------- drivers/firewire/core-transaction.c | 12 ++++++++++- drivers/firewire/core.h | 2 ++ 5 files changed, 36 insertions(+), 16 deletions(-) Date: Fri, 22 Apr 2011 15:13:54 +0200 From: Stefan Richter firewire: octlet AT payloads can be stack-allocated We do not need slab allocations anymore in order to satisfy streaming DMA mapping constraints, thanks to commit da28947e7e36 "firewire: ohci: avoid separate DMA mapping for small AT payloads". (Besides, the slab-allocated buffers that firewire-core, firewire-sbp2, and firedtv used to provide for 8-byte write and lock requests were still not fully portable since they crossed cacheline boundaries or shared a cacheline with unrelated CPU-accessed data. snd-firewire-lib got this aspect right by using an extra kmalloc/ kfree just for the 8-byte transaction buffer.) This change replaces kmalloc'ed lock transaction scratch buffers in firewire-core, firedtv, and snd-firewire-lib by local stack allocations. Perhaps the most notable result of the change is simpler locking because there is no need to serialize usages of preallocated per-device buffers anymore. Also, allocations and deallocations are simpler. Signed-off-by: Stefan Richter Acked-by: Clemens Ladisch --- drivers/firewire/core-card.c | 16 ++++++++-------- drivers/firewire/core-cdev.c | 4 +--- drivers/firewire/core-iso.c | 21 +++++++++++---------- drivers/firewire/core-transaction.c | 7 ++++--- drivers/media/dvb/firewire/firedtv-avc.c | 15 +-------------- include/linux/firewire.h | 3 +-- sound/firewire/cmp.c | 3 +-- sound/firewire/iso-resources.c | 12 +++--------- sound/firewire/iso-resources.h | 1 - 9 files changed, 30 insertions(+), 52 deletions(-) Date: Fri, 22 Apr 2011 12:21:44 +0200 From: Stefan Richter firewire: sbp2: omit Scsi_Host lock from queuecommand firewire-sbp2 already takes care for internal serialization where required (ORB list accesses), and it does not use cmd->serial_number internally. Hence it is safe to not grab the shost lock around queuecommand. While we are at housekeeping, drop a redundant struct member: sbp2_command_orb.done is set once in a hot path and dereferenced once in a hot path. We can as well dereference sbp2_command_orb.cmd->scsi_done instead. Signed-off-by: Stefan Richter --- drivers/firewire/sbp2.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) Date: Tue, 12 Apr 2011 07:54:59 +0200 From: Clemens Ladisch firewire: ohci: optimize find_branch_descriptor() When z==2, the condition "key == 2" is superfluous because it cannot occur without "b == 3", as a descriptor with b!=3 and key==2 would be an OUTPUT_MORE_IMMEDIATE descriptor which cannot be used alone. Also remove magic numbers and needless computations on the b field. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) Date: Mon, 11 Apr 2011 09:57:54 +0200 From: Clemens Ladisch firewire: ohci: avoid separate DMA mapping for small AT payloads For AT packet payloads of up to eight bytes, we have enough unused space in the DMA descriptors list so that we can put a copy of the payload there and thus avoid having to create a separate streaming DMA mapping for the payload buffer. In a CPU-bound microbenchmark that just sends 8-byte packets, bandwidth was measured to increase by 5.7 %, from 1009 KB/s to 1067 KB/s. In practice, the only performance-sensitive usage of small asynchronous packets is the SBP-2 driver's write to the ORB_POINTER register during SCSI command submission. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) Date: Mon, 11 Apr 2011 09:56:12 +0200 From: Clemens Ladisch firewire: ohci: do not start DMA contexts before link is enabled OHCI 1.1 5.7.3 not only forbids enabling or starting any DMA contexts before the linkEnable bit is set, but also explicitly warns of undefined behaviour if this order is violated. Don't violate it then. Signed-off-by: Clemens Ladisch Signed-off-by: Stefan Richter --- drivers/firewire/ohci.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) From 619f53e05526e5edaf8ac0c198f25cc650161524 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 4 Apr 2011 08:48:06 +0200 ALSA: dice: implement hwdep device Implement the hwdep locking and notification mechanisms. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 225 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 203 insertions(+), 22 deletions(-) From 4546822e8450e4d13a19c447f4c544d575df16c2 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 4 Apr 2011 08:44:30 +0200 ALSA: dice: fix typo in firewire.h Signed-off-by: Clemens Ladisch --- include/sound/firewire.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) From f8e8bb824aac9472b0a40d195e14f13877715c4b Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 31 Mar 2011 08:07:13 +0200 ALSA: dice: change ioctl numbers Change the (fortunately not yet implemented) ioctl numbers from F1..F3 to F8..FA to prevent a conflict with the new hid-roccat driver. Signed-off-by: Clemens Ladisch --- Documentation/ioctl/ioctl-number.txt | 2 +- include/sound/firewire.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) From f075c67d8bd5736fd612e5cec5ceafa4d58ef47d Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Wed, 30 Mar 2011 08:28:09 +0200 ALSA: dice: fix hang when unplugging a running device When aborting a PCM stream, the xrun is signaled only if the stream is running. When disconnecting a PCM stream, calling snd_card_disconnect() too early would change the stream into a non-running state and thus prevent the xrun from being noticed by user space. To prevent this, move the snd_card_disconnect() call after the xrun. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) From 8a495f6184eb533d5641d7dd5703d5582fa834a5 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Wed, 30 Mar 2011 08:27:46 +0200 ALSA: isight: fix hang when unplugging a running device When aborting a PCM stream, the xrun is signaled only if the stream is running. When disconnecting a PCM stream, calling snd_card_disconnect() too early would change the stream into a non-running state and thus prevent the xrun from being noticed by user space. To prevent this, move the snd_card_disconnect() call after the xrun. Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) From 7365ec51bd8653d141bc98b5632f2c53580d2b36 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 29 Mar 2011 10:12:55 +0200 ALSA: dice, firewire-lib: add blocking mode Allow AMDTP output streams to use blocking mode. Use it for DICE devices, because the old DICE-II chip will in some cases not be able to lock to non-blocking streams (erratum E7). Signed-off-by: Clemens Ladisch --- sound/firewire/amdtp.c | 54 ++++++++++++++++++++++------------------- sound/firewire/amdtp.h | 7 ++++- sound/firewire/dice.c | 2 +- 3 files changed, 36 insertions(+), 27 deletions(-) From bc0bfef119e31d419e65b6758260e9d26e4828f8 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 29 Mar 2011 10:11:40 +0200 ALSA: dice: reduce noisy logging The notification bits are not of general interest; log them only when debugging. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) From 00725b6b475b19d1146543003675e76b5d01d926 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 29 Mar 2011 10:11:15 +0200 ALSA: dice: allow all sample rates Instead of forcing a constant 44.1 kHz, read the current sample rate from the device when opening the PCM device. Actually changing the sample rate requires some separate controller application. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 55 ++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 13 deletions(-) From 7184c2aeb0e086f1e574951f89729d94e5ca864b Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Tue, 29 Mar 2011 10:03:12 +0200 ALSA: isight: wrap up register accesses Signed-off-by: Stefan Richter [cl: removed superfluous variable] Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 76 ++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 46 deletions(-) From d0c2f9d61f33aed11c9f15d92aeddb9a373afb18 Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Tue, 29 Mar 2011 09:58:05 +0200 ALSA: isight: add AudioEnable register write which is needed to get the iSight to talk. Signed-off-by: Stefan Richter Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) From e7e8eaf935563e2aa15980702c2737294f5b04b0 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Fri, 25 Mar 2011 08:04:20 +0100 ALSA: isight: fix divide error when queueing packets Set the .header_size field when queueing packets to avoid a division by zero. Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 1 + 1 file changed, 1 insertion(+) From 2101f62975990add05d60ae70f93422722c3aaef Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Fri, 25 Mar 2011 07:59:49 +0100 ALSA: isight: fix packet requeueing After handling a received packet, we want to resubmit the same packet, so do not increase the packet index too early. Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) From afb74299dd59eace12ccd7f1e79fdf6c6c867076 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 22 Mar 2011 17:14:47 +0100 ALSA: isight: fix isight_pcm_abort() crashes Fix crashes in isight_pcm_abort() that happen when the driver tries to access isight->pcm->runtime which does not exist when the device is not open. Introduce a new field pcm_active to track this state. Signed-off-by: Clemens Ladisch Reported-by: Stefan Richter --- sound/firewire/isight.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) From 5f2e1b69fadb9dbe23215e3cdee4643ceec41dbf Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Fri, 18 Mar 2011 11:12:50 +0100 ALSA: dice: optimize bus reset handling After a bus reset, do not stop the stream completely to avoid having to reconfigure the device when restarting the stream. Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 148 ++++++++++++++++++++++++++---------------- 1 file changed, 93 insertions(+), 55 deletions(-) From 49120234746353325aedf5148f71997a264fda6f Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Mon, 21 Mar 2011 08:34:20 +0100 ALSA: dice: depends on snd_hwdep Signed-off-by: Stefan Richter Signed-off-by: Clemens Ladisch --- sound/firewire/Kconfig | 1 + 1 file changed, 1 insertion(+) From 793175a06225da8a2c06102092bf7ab97c8eeb8c Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Wed, 13 Apr 2011 08:25:04 +0200 ALSA: dice: msleep needs delay.h build requirement on 2.6.39 x86-64 Signed-off-by: Stefan Richter Signed-off-by: Clemens Ladisch --- sound/firewire/dice.c | 1 + 1 file changed, 1 insertion(+) From c9d4b44721322a091f358466342fcee1b7ba0e4e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 17 Mar 2011 08:39:29 +0100 ALSA: add DICE driver incomplete driver for DICE devices: * only playback (so no clock source except the bus clock) * only 44.1 kHz * no MIDI * recovery after bus reset is slow * hwdep device is created, but not actually implemented Signed-off-by: Clemens Ladisch --- Documentation/ioctl/ioctl-number.txt | 1 + include/sound/Kbuild | 1 + include/sound/asound.h | 3 + include/sound/firewire.h | 51 + sound/firewire/Kconfig | 13 + sound/firewire/Makefile | 2 + sound/firewire/dice.c | 1017 +++++++++++++++++++++++++++ 7 files changed, 1087 insertions(+), 1 deletion(-) create mode 100644 include/sound/firewire.h create mode 100644 sound/firewire/dice.c From 86b653383da011338ead9e6cfc2fcda26d49b3d4 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 29 Mar 2011 10:05:07 +0200 ALSA: isight: msleep needs delay.h Fixes compilation on some non-x86 architectures. Signed-off-by: Clemens Ladisch --- sound/firewire/isight.c | 1 + 1 file changed, 1 insertion(+) From 876f1d82e2f62bbfa99d75176f637f2669cc4320 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 17 Mar 2011 08:37:14 +0100 ALSA: add Apple iSight microphone driver WARNING: extremely untested! Signed-off-by: Clemens Ladisch --- sound/firewire/Kconfig | 12 + sound/firewire/Makefile | 2 + sound/firewire/isight.c | 743 ++++++++++++++++++++++++++++++++ sound/firewire/iso-resources.c | 5 + sound/firewire/packets-buffer.c | 2 + 5 files changed, 764 insertions(+) create mode 100644 sound/firewire/isight.c