aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r--drivers/scsi/lpfc/lpfc_hw.h9
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c34
-rw-r--r--drivers/scsi/lpfc/lpfc_scsi.c9
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