firewire: sbp2: define some magic numbers as macros

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
Stefan Richter 2009-01-24 19:41:46 +01:00
parent a08e100aec
commit f746072abc
1 changed files with 12 additions and 11 deletions

View File

@ -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;