diff options
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hw.h | 9 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 34 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_scsi.c | 9 |
3 files changed, 24 insertions, 28 deletions
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h index 86c41981188b..bf0c25fa873a 100644 --- a/drivers/scsi/lpfc/lpfc_hw.h +++ b/drivers/scsi/lpfc/lpfc_hw.h | |||
@@ -266,9 +266,11 @@ struct lpfc_name { | |||
266 | struct { | 266 | struct { |
267 | #ifdef __BIG_ENDIAN_BITFIELD | 267 | #ifdef __BIG_ENDIAN_BITFIELD |
268 | uint8_t nameType:4; /* FC Word 0, bit 28:31 */ | 268 | uint8_t nameType:4; /* FC Word 0, bit 28:31 */ |
269 | uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit 8:11 of IEEE ext */ | 269 | uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit |
270 | 8:11 of IEEE ext */ | ||
270 | #else /* __LITTLE_ENDIAN_BITFIELD */ | 271 | #else /* __LITTLE_ENDIAN_BITFIELD */ |
271 | uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit 8:11 of IEEE ext */ | 272 | uint8_t IEEEextMsn:4; /* FC Word 0, bit 24:27, bit |
273 | 8:11 of IEEE ext */ | ||
272 | uint8_t nameType:4; /* FC Word 0, bit 28:31 */ | 274 | uint8_t nameType:4; /* FC Word 0, bit 28:31 */ |
273 | #endif | 275 | #endif |
274 | 276 | ||
@@ -278,7 +280,8 @@ struct lpfc_name { | |||
278 | #define NAME_IP_TYPE 0x4 /* IP address */ | 280 | #define NAME_IP_TYPE 0x4 /* IP address */ |
279 | #define NAME_CCITT_TYPE 0xC | 281 | #define NAME_CCITT_TYPE 0xC |
280 | #define NAME_CCITT_GR_TYPE 0xE | 282 | #define NAME_CCITT_GR_TYPE 0xE |
281 | uint8_t IEEEextLsb; /* FC Word 0, bit 16:23, IEEE extended Lsb */ | 283 | uint8_t IEEEextLsb; /* FC Word 0, bit 16:23, IEEE |
284 | extended Lsb */ | ||
282 | uint8_t IEEE[6]; /* FC IEEE address */ | 285 | uint8_t IEEE[6]; /* FC IEEE address */ |
283 | } s; | 286 | } s; |
284 | uint8_t wwn[8]; | 287 | uint8_t wwn[8]; |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 07498118359d..3eebe663a2e5 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -126,34 +126,26 @@ lpfc_config_port_prep(struct lpfc_hba * phba) | |||
126 | return -ERESTART; | 126 | return -ERESTART; |
127 | } | 127 | } |
128 | 128 | ||
129 | /* The HBA's current state is provided by the ProgType and rr fields. | 129 | /* |
130 | * Read and check the value of these fields before continuing to config | 130 | * The value of rr must be 1 since the driver set the cv field to 1. |
131 | * this port. | 131 | * This setting requires the FW to set all revision fields. |
132 | */ | 132 | */ |
133 | if (mb->un.varRdRev.rr == 0 || mb->un.varRdRev.un.b.ProgType != 2) { | 133 | if (mb->un.varRdRev.rr == 0) { |
134 | /* Old firmware */ | ||
135 | vp->rev.rBit = 0; | 134 | vp->rev.rBit = 0; |
136 | lpfc_printf_log(phba, | 135 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
137 | KERN_ERR, | 136 | "%d:0440 Adapter failed to init, READ_REV has " |
138 | LOG_INIT, | 137 | "missing revision information.\n", |
139 | "%d:0440 Adapter failed to init, mbxCmd x%x " | 138 | phba->brd_no); |
140 | "READ_REV detected outdated firmware" | ||
141 | "Data: x%x\n", | ||
142 | phba->brd_no, | ||
143 | mb->mbxCommand, 0); | ||
144 | mempool_free(pmb, phba->mbox_mem_pool); | 139 | mempool_free(pmb, phba->mbox_mem_pool); |
145 | return -ERESTART; | 140 | return -ERESTART; |
146 | } else { | ||
147 | vp->rev.rBit = 1; | ||
148 | vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev; | ||
149 | memcpy(vp->rev.sli1FwName, | ||
150 | (char*)mb->un.varRdRev.sli1FwName, 16); | ||
151 | vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev; | ||
152 | memcpy(vp->rev.sli2FwName, | ||
153 | (char *)mb->un.varRdRev.sli2FwName, 16); | ||
154 | } | 141 | } |
155 | 142 | ||
156 | /* Save information as VPD data */ | 143 | /* Save information as VPD data */ |
144 | vp->rev.rBit = 1; | ||
145 | vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev; | ||
146 | memcpy(vp->rev.sli1FwName, (char*) mb->un.varRdRev.sli1FwName, 16); | ||
147 | vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev; | ||
148 | memcpy(vp->rev.sli2FwName, (char *) mb->un.varRdRev.sli2FwName, 16); | ||
157 | vp->rev.biuRev = mb->un.varRdRev.biuRev; | 149 | vp->rev.biuRev = mb->un.varRdRev.biuRev; |
158 | vp->rev.smRev = mb->un.varRdRev.smRev; | 150 | vp->rev.smRev = mb->un.varRdRev.smRev; |
159 | vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev; | 151 | vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev; |
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index c63275e66e2e..0aa5ca68433f 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c | |||
@@ -721,8 +721,9 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *)) | |||
721 | } | 721 | } |
722 | lpfc_cmd = lpfc_sli_get_scsi_buf (phba); | 722 | lpfc_cmd = lpfc_sli_get_scsi_buf (phba); |
723 | if (lpfc_cmd == NULL) { | 723 | if (lpfc_cmd == NULL) { |
724 | printk(KERN_WARNING "%s: No buffer available - list empty, " | 724 | lpfc_printf_log(phba, KERN_INFO, LOG_FCP, |
725 | "total count %d\n", __FUNCTION__, phba->total_scsi_bufs); | 725 | "%d:0707 driver's buffer pool is empty, " |
726 | "IO busied\n", phba->brd_no); | ||
726 | goto out_host_busy; | 727 | goto out_host_busy; |
727 | } | 728 | } |
728 | 729 | ||
@@ -844,8 +845,8 @@ __lpfc_abort_handler(struct scsi_cmnd *cmnd) | |||
844 | 845 | ||
845 | out: | 846 | out: |
846 | lpfc_printf_log(phba, KERN_WARNING, LOG_FCP, | 847 | lpfc_printf_log(phba, KERN_WARNING, LOG_FCP, |
847 | "%d:0749 SCSI layer issued abort device: ret %#x, " | 848 | "%d:0749 SCSI Layer I/O Abort Request " |
848 | "ID %d, LUN %d, snum %#lx\n", | 849 | "Status x%x ID %d LUN %d snum %#lx\n", |
849 | phba->brd_no, ret, cmnd->device->id, | 850 | phba->brd_no, ret, cmnd->device->id, |
850 | cmnd->device->lun, cmnd->serial_number); | 851 | cmnd->device->lun, cmnd->serial_number); |
851 | 852 | ||