firewire: sbp2: add workarounds for 2nd and 3rd generation iPods

According to https://bugs.launchpad.net/bugs/294391
  - 3rd generation iPods need the "fix capacity" workaround after all
    (apparently they crash after the last sector was accessed),
  - 2nd generation iPods need the "128 kB maximum request size"
    workaround.

Alas both iPod generations feature the same model ID in the config ROM,
hence we can only define a shared quirks list entry for them.  Luckily
the fix capacity workaround did not show a negative effect in Jarod's
tests with 2nd gen. iPod.

A side note:  Apple computers in target mode (or at least an x86 Mac
mini) don't have firmware_version and model_id, hence none of the iPod
quirks list entries is active for them.

Tested-by: Jarod Wilson <jarod@redhat.com>
Acked-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
Stefan Richter 2009-01-29 00:11:59 +01:00
parent 5e2125677f
commit c8c4707cf7

View file

@ -360,15 +360,17 @@ static const struct {
.model = SBP2_ROM_VALUE_WILDCARD, .model = SBP2_ROM_VALUE_WILDCARD,
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS, .workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
}, },
/* /*
* There are iPods (2nd gen, 3rd gen) with model_id == 0, but * iPod 2nd generation: needs 128k max transfer size workaround
* these iPods do not feature the read_capacity bug according * iPod 3rd generation: needs fix capacity workaround
* to one report. Read_capacity behaviour as well as model_id
* could change due to Apple-supplied firmware updates though.
*/ */
{
/* iPod 4th generation. */ { .firmware_revision = 0x0a2700,
.model = 0x000000,
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS |
SBP2_WORKAROUND_FIX_CAPACITY,
},
/* iPod 4th generation */ {
.firmware_revision = 0x0a2700, .firmware_revision = 0x0a2700,
.model = 0x000021, .model = 0x000021,
.workarounds = SBP2_WORKAROUND_FIX_CAPACITY, .workarounds = SBP2_WORKAROUND_FIX_CAPACITY,