Skip to content

Commit

Permalink
[SCSI] aic94xx: tie driver to the major number of the sequencer firmware
Browse files Browse the repository at this point in the history
The sequencer firmware file has both a string (currently showing
V17/10c6) and a number (currently set to 1.1).  It has become apparent
that Adaptec may issue sequencer firmware in the future which could be
incompatible with the current driver.  Therefore, the driver will be
tied to the particular major number of the firmware (i.e. the current
driver will load any 1.x firmware).  Additionally, the driver will print
out both the ascii string and the major number, so with this pach the
current firmware will print out

aic94xx: Found sequencer firmware version 1.1 (V17/10c6)

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
James Bottomley authored and James Bottomley committed Feb 16, 2007
1 parent 8d63f37 commit a29fdd3
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
13 changes: 10 additions & 3 deletions drivers/scsi/aic94xx/aic94xx_seq.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
#define PAUSE_TRIES 1000

static const struct firmware *sequencer_fw;
static const char *sequencer_version;
static u16 cseq_vecs[CSEQ_NUM_VECS], lseq_vecs[LSEQ_NUM_VECS], mode2_task,
cseq_idle_loop, lseq_idle_loop;
static u8 *cseq_code, *lseq_code;
Expand Down Expand Up @@ -1276,7 +1275,6 @@ static int asd_request_firmware(struct asd_ha_struct *asd_ha)
header.csum = le32_to_cpu(hdr_ptr->csum);
header.major = le32_to_cpu(hdr_ptr->major);
header.minor = le32_to_cpu(hdr_ptr->minor);
sequencer_version = hdr_ptr->version;
header.cseq_table_offset = le32_to_cpu(hdr_ptr->cseq_table_offset);
header.cseq_table_size = le32_to_cpu(hdr_ptr->cseq_table_size);
header.lseq_table_offset = le32_to_cpu(hdr_ptr->lseq_table_offset);
Expand All @@ -1303,6 +1301,16 @@ static int asd_request_firmware(struct asd_ha_struct *asd_ha)
return -EINVAL;
}

asd_printk("Found sequencer Firmware version %d.%d (%s)\n",
header.major, header.minor, hdr_ptr->version);

if (header.major != SAS_RAZOR_SEQUENCER_FW_MAJOR) {
asd_printk("Firmware Major Version Mismatch;"
"driver requires version %d.X",
SAS_RAZOR_SEQUENCER_FW_MAJOR);
return -EINVAL;
}

ptr_cseq_vecs = (u16 *)&sequencer_fw->data[header.cseq_table_offset];
ptr_lseq_vecs = (u16 *)&sequencer_fw->data[header.lseq_table_offset];
mode2_task = header.mode2_task;
Expand Down Expand Up @@ -1335,7 +1343,6 @@ int asd_init_seqs(struct asd_ha_struct *asd_ha)
return err;
}

asd_printk("using sequencer %s\n", sequencer_version);
err = asd_seq_download_seqs(asd_ha);
if (err) {
asd_printk("couldn't download sequencers for %s\n",
Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/aic94xx/aic94xx_seq.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#define LSEQ_NUM_VECS 11

#define SAS_RAZOR_SEQUENCER_FW_FILE "aic94xx-seq.fw"
#define SAS_RAZOR_SEQUENCER_FW_MAJOR 1

/* Note: All quantites in the sequencer file are little endian */
struct sequencer_file_header {
Expand Down

0 comments on commit a29fdd3

Please sign in to comment.