|
@@ -3409,7 +3409,8 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
|
|
|
int i;
|
|
|
int j = 0;
|
|
|
int rc;
|
|
|
- int dac;
|
|
|
+ int dac, return_code;
|
|
|
+ InquiryData_struct *inq_buff = NULL;
|
|
|
|
|
|
i = alloc_cciss_hba();
|
|
|
if (i < 0)
|
|
@@ -3515,6 +3516,25 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
|
|
|
/* Turn the interrupts on so we can service requests */
|
|
|
hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_ON);
|
|
|
|
|
|
+ /* Get the firmware version */
|
|
|
+ inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
|
|
|
+ if (inq_buff == NULL) {
|
|
|
+ printk(KERN_ERR "cciss: out of memory\n");
|
|
|
+ goto clean4;
|
|
|
+ }
|
|
|
+
|
|
|
+ return_code = sendcmd_withirq(CISS_INQUIRY, i, inq_buff,
|
|
|
+ sizeof(InquiryData_struct), 0, 0 , 0, TYPE_CMD);
|
|
|
+ if (return_code == IO_OK) {
|
|
|
+ hba[i]->firm_ver[0] = inq_buff->data_byte[32];
|
|
|
+ hba[i]->firm_ver[1] = inq_buff->data_byte[33];
|
|
|
+ hba[i]->firm_ver[2] = inq_buff->data_byte[34];
|
|
|
+ hba[i]->firm_ver[3] = inq_buff->data_byte[35];
|
|
|
+ } else { /* send command failed */
|
|
|
+ printk(KERN_WARNING "cciss: unable to determine firmware"
|
|
|
+ " version of controller\n");
|
|
|
+ }
|
|
|
+
|
|
|
cciss_procinit(i);
|
|
|
|
|
|
hba[i]->cciss_max_sectors = 2048;
|
|
@@ -3525,6 +3545,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
|
|
|
return 1;
|
|
|
|
|
|
clean4:
|
|
|
+ kfree(inq_buff);
|
|
|
#ifdef CONFIG_CISS_SCSI_TAPE
|
|
|
kfree(hba[i]->scsi_rejects.complete);
|
|
|
#endif
|