firewire: sbp2: define some magic numbers as macros
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
a08e100aec
commit
f746072abc
|
@ -311,14 +311,16 @@ struct sbp2_command_orb {
|
||||||
dma_addr_t page_table_bus;
|
dma_addr_t page_table_bus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define SBP2_ROM_VALUE_WILDCARD ~0 /* match all */
|
||||||
|
#define SBP2_ROM_VALUE_MISSING 0xff000000 /* not present in the unit dir. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List of devices with known bugs.
|
* List of devices with known bugs.
|
||||||
*
|
*
|
||||||
* The firmware_revision field, masked with 0xffff00, is the best
|
* The firmware_revision field, masked with 0xffff00, is the best
|
||||||
* indicator for the type of bridge chip of a device. It yields a few
|
* indicator for the type of bridge chip of a device. It yields a few
|
||||||
* false positives but this did not break correctly behaving devices
|
* false positives but this did not break correctly behaving devices
|
||||||
* so far. We use ~0 as a wildcard, since the 24 bit values we get
|
* so far.
|
||||||
* from the config rom can never match that.
|
|
||||||
*/
|
*/
|
||||||
static const struct {
|
static const struct {
|
||||||
u32 firmware_revision;
|
u32 firmware_revision;
|
||||||
|
@ -340,22 +342,22 @@ static const struct {
|
||||||
},
|
},
|
||||||
/* Initio bridges, actually only needed for some older ones */ {
|
/* Initio bridges, actually only needed for some older ones */ {
|
||||||
.firmware_revision = 0x000200,
|
.firmware_revision = 0x000200,
|
||||||
.model = ~0,
|
.model = SBP2_ROM_VALUE_WILDCARD,
|
||||||
.workarounds = SBP2_WORKAROUND_INQUIRY_36,
|
.workarounds = SBP2_WORKAROUND_INQUIRY_36,
|
||||||
},
|
},
|
||||||
/* PL-3507 bridge with Prolific firmware */ {
|
/* PL-3507 bridge with Prolific firmware */ {
|
||||||
.firmware_revision = 0x012800,
|
.firmware_revision = 0x012800,
|
||||||
.model = ~0,
|
.model = SBP2_ROM_VALUE_WILDCARD,
|
||||||
.workarounds = SBP2_WORKAROUND_POWER_CONDITION,
|
.workarounds = SBP2_WORKAROUND_POWER_CONDITION,
|
||||||
},
|
},
|
||||||
/* Symbios bridge */ {
|
/* Symbios bridge */ {
|
||||||
.firmware_revision = 0xa0b800,
|
.firmware_revision = 0xa0b800,
|
||||||
.model = ~0,
|
.model = SBP2_ROM_VALUE_WILDCARD,
|
||||||
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
|
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
|
||||||
},
|
},
|
||||||
/* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ {
|
/* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ {
|
||||||
.firmware_revision = 0x002600,
|
.firmware_revision = 0x002600,
|
||||||
.model = ~0,
|
.model = SBP2_ROM_VALUE_WILDCARD,
|
||||||
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
|
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1093,7 +1095,7 @@ static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (sbp2_workarounds_table[i].model != model &&
|
if (sbp2_workarounds_table[i].model != model &&
|
||||||
sbp2_workarounds_table[i].model != ~0)
|
sbp2_workarounds_table[i].model != SBP2_ROM_VALUE_WILDCARD)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
w |= sbp2_workarounds_table[i].workarounds;
|
w |= sbp2_workarounds_table[i].workarounds;
|
||||||
|
@ -1143,14 +1145,13 @@ static int sbp2_probe(struct device *dev)
|
||||||
fw_device_get(device);
|
fw_device_get(device);
|
||||||
fw_unit_get(unit);
|
fw_unit_get(unit);
|
||||||
|
|
||||||
/* Initialize to values that won't match anything in our table. */
|
|
||||||
firmware_revision = 0xff000000;
|
|
||||||
model = 0xff000000;
|
|
||||||
|
|
||||||
/* implicit directory ID */
|
/* implicit directory ID */
|
||||||
tgt->directory_id = ((unit->directory - device->config_rom) * 4
|
tgt->directory_id = ((unit->directory - device->config_rom) * 4
|
||||||
+ CSR_CONFIG_ROM) & 0xffffff;
|
+ CSR_CONFIG_ROM) & 0xffffff;
|
||||||
|
|
||||||
|
firmware_revision = SBP2_ROM_VALUE_MISSING;
|
||||||
|
model = SBP2_ROM_VALUE_MISSING;
|
||||||
|
|
||||||
if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
|
if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
|
||||||
&firmware_revision) < 0)
|
&firmware_revision) < 0)
|
||||||
goto fail_tgt_put;
|
goto fail_tgt_put;
|
||||||
|
|
Loading…
Reference in New Issue