linux-uconsole/drivers/firewire
Stefan Richter 2a6705430f firewire: core: check for 1394a compliant IRM, fix inaccessibility of Sony camcorder
commit 1038953674 upstream.

Per IEEE 1394 clause 8.4.2.3, a contender for the IRM role shall check
whether the current IRM complies to 1394a-2000 or later.  If not force a
compliant node (e.g. itself) to become IRM.  This was implemented in the
older ieee1394 driver but not yet in firewire-core.

An older Sony camcorder (Sony DCR-TRV25) which implements 1394-1995 IRM
but neither 1394a-2000 IRM nor BM was now found to cause an
interoperability bug:
  - Camcorder becomes root node when plugged in, hence gets IRM role.
  - firewire-core successfully contends for BM role, proceeds to perform
    gap count optimization and resets the bus.
  - Sony camcorder ignores presence of a BM (against the spec, this is
    a firmware bug), performs its idea of gap count optimization and
    resets the bus.
  - Preceding two steps are repeated endlessly, bus never settles,
    regular I/O is practically impossible.
http://thread.gmane.org/gmane.linux.kernel.firewire.user/3913

This is an interoperability regression from the old to the new drivers.
Fix it indirectly by adding the 1394a IRM check.  The spec suggests
three and a half methods to determine 1394a compliance of a remote IRM;
we choose the method of testing the Config_ROM.Bus_Info.generation
field.  This is data that firewire-core should have readily available at
this point, i.e. does not require extra I/O.

Reported-by: Clemens Ladisch <clemens@ladisch.de> (missing 1394a check)
Reported-by: H. S. <hs.samix@gmail.com> (issue with Sony DCR-TRV25)
Tested-by: H. S. <hs.samix@gmail.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-07-05 11:11:04 -07:00
..
core-card.c firewire: core: check for 1394a compliant IRM, fix inaccessibility of Sony camcorder 2010-07-05 11:11:04 -07:00
core-cdev.c headers: remove sched.h from poll.h 2009-10-04 15:05:10 -07:00
core-device.c driver model: constify attribute groups 2009-09-15 09:50:47 -07:00
core-iso.c firewire: core: fix crash in iso resource management 2009-09-05 15:59:34 +02:00
core-topology.c firewire: rename source files 2009-06-05 16:26:18 +02:00
core-transaction.c firewire: core: fix topology map response handler 2009-09-12 14:48:40 +02:00
core.h firewire: core: header file cleanup 2009-09-12 14:48:40 +02:00
Kconfig firewire: new stack is no longer experimental 2009-06-21 10:53:26 +02:00
Makefile firewire: net: add Kconfig item, rename driver 2009-06-14 14:26:29 +02:00
net.c drivers: Kill now superfluous ->last_rx stores 2009-09-02 23:07:36 -07:00
ohci.c firewire: ohci: fix crashes with TSB43AB23 on 64bit systems 2010-02-09 04:50:42 -08:00
ohci.h firewire: reorganize header files 2009-06-05 16:26:18 +02:00
sbp2.c firewire: sbp2: provide fallback if mgt_ORB_timeout is missing 2009-10-14 21:55:19 +02:00