aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Carnuccio <joe.carnuccio@qlogic.com>2014-09-25 05:16:47 -0400
committerChristoph Hellwig <hch@lst.de>2014-09-25 08:25:03 -0400
commit7c9c4766896335d2f20928ccc5d8ad2d1e621b9a (patch)
tree9d8cc3afc7f45b107d87a8649fade3a574999206
parentdf57cabac41fd54e8eb73f9de482f054eb0b98eb (diff)
qla2xxx: Add FA-WWN functionality.
Add support for the FA-WWN (fabric assigned wwn) fabric switch feature. (Fabric Assigned World Wide Port Name) Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com> Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c7
-rw-r--r--drivers/scsi/qla2xxx/qla_fw.h2
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c36
3 files changed, 38 insertions, 7 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 28442d082ba1..b33eec01d6dc 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -15,11 +15,8 @@
15 * | | | 0x0144,0x0146 | 15 * | | | 0x0144,0x0146 |
16 * | | | 0x015b-0x0160 | 16 * | | | 0x015b-0x0160 |
17 * | | | 0x016e-0x0170 | 17 * | | | 0x016e-0x0170 |
18 * | Mailbox commands | 0x118d | 0x1018-0x1019 | 18 * | Mailbox commands | 0x118d | 0x1115-0x1116 |
19 * | | | 0x10ca | 19 * | | | 0x111a-0x111b |
20 * | | | 0x1115-0x1116 |
21 * | | | 0x111a-0x111b |
22 * | | | 0x1155-0x1158 |
23 * | Device Discovery | 0x2016 | 0x2020-0x2022, | 20 * | Device Discovery | 0x2016 | 0x2020-0x2022, |
24 * | | | 0x2011-0x2012, | 21 * | | | 0x2011-0x2012, |
25 * | | | 0x2099-0x20a4 | 22 * | | | 0x2099-0x20a4 |
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h
index c7d1c4569fa1..e8669aa7e002 100644
--- a/drivers/scsi/qla2xxx/qla_fw.h
+++ b/drivers/scsi/qla2xxx/qla_fw.h
@@ -317,7 +317,7 @@ struct init_cb_24xx {
317 * BIT 3 = Reserved 317 * BIT 3 = Reserved
318 * BIT 4 = Enable Target Mode 318 * BIT 4 = Enable Target Mode
319 * BIT 5 = Disable Initiator Mode 319 * BIT 5 = Disable Initiator Mode
320 * BIT 6 = Reserved 320 * BIT 6 = Acquire FA-WWN
321 * BIT 7 = Reserved 321 * BIT 7 = Reserved
322 * 322 *
323 * BIT 8 = Reserved 323 * BIT 8 = Reserved
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index ca7f4f012511..2de901bf87ab 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -1085,6 +1085,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *vha, uint16_t *id, uint8_t *al_pa,
1085 mcp->in_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; 1085 mcp->in_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1086 if (IS_CNA_CAPABLE(vha->hw)) 1086 if (IS_CNA_CAPABLE(vha->hw))
1087 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10; 1087 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10;
1088 if (IS_FWI2_CAPABLE(vha->hw))
1089 mcp->in_mb |= MBX_19|MBX_18|MBX_17|MBX_16;
1088 mcp->tov = MBX_TOV_SECONDS; 1090 mcp->tov = MBX_TOV_SECONDS;
1089 mcp->flags = 0; 1091 mcp->flags = 0;
1090 rval = qla2x00_mailbox_command(vha, mcp); 1092 rval = qla2x00_mailbox_command(vha, mcp);
@@ -1118,6 +1120,22 @@ qla2x00_get_adapter_id(scsi_qla_host_t *vha, uint16_t *id, uint8_t *al_pa,
1118 vha->fcoe_vn_port_mac[1] = mcp->mb[13] >> 8; 1120 vha->fcoe_vn_port_mac[1] = mcp->mb[13] >> 8;
1119 vha->fcoe_vn_port_mac[0] = mcp->mb[13] & 0xff; 1121 vha->fcoe_vn_port_mac[0] = mcp->mb[13] & 0xff;
1120 } 1122 }
1123 /* If FA-WWN supported */
1124 if (mcp->mb[7] & BIT_14) {
1125 vha->port_name[0] = MSB(mcp->mb[16]);
1126 vha->port_name[1] = LSB(mcp->mb[16]);
1127 vha->port_name[2] = MSB(mcp->mb[17]);
1128 vha->port_name[3] = LSB(mcp->mb[17]);
1129 vha->port_name[4] = MSB(mcp->mb[18]);
1130 vha->port_name[5] = LSB(mcp->mb[18]);
1131 vha->port_name[6] = MSB(mcp->mb[19]);
1132 vha->port_name[7] = LSB(mcp->mb[19]);
1133 fc_host_port_name(vha->host) =
1134 wwn_to_u64(vha->port_name);
1135 ql_dbg(ql_dbg_mbx, vha, 0x10ca,
1136 "FA-WWN acquired %016llx\n",
1137 wwn_to_u64(vha->port_name));
1138 }
1121 } 1139 }
1122 1140
1123 return rval; 1141 return rval;
@@ -3328,8 +3346,24 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
3328 rptid_entry->port_id[2], rptid_entry->port_id[1], 3346 rptid_entry->port_id[2], rptid_entry->port_id[1],
3329 rptid_entry->port_id[0]); 3347 rptid_entry->port_id[0]);
3330 3348
3349 /* FA-WWN is only for physical port */
3350 if (!vp_idx) {
3351 void *wwpn = ha->init_cb->port_name;
3352
3353 if (!MSB(stat)) {
3354 if (rptid_entry->vp_idx_map[1] & BIT_6)
3355 wwpn = rptid_entry->reserved_4 + 8;
3356 }
3357 memcpy(vha->port_name, wwpn, WWN_SIZE);
3358 fc_host_port_name(vha->host) =
3359 wwn_to_u64(vha->port_name);
3360 ql_dbg(ql_dbg_mbx, vha, 0x1018,
3361 "FA-WWN portname %016llx (%x)\n",
3362 fc_host_port_name(vha->host), MSB(stat));
3363 }
3364
3331 vp = vha; 3365 vp = vha;
3332 if (vp_idx == 0 && (MSB(stat) != 1)) 3366 if (vp_idx == 0)
3333 goto reg_needed; 3367 goto reg_needed;
3334 3368
3335 if (MSB(stat) != 0 && MSB(stat) != 2) { 3369 if (MSB(stat) != 0 && MSB(stat) != 2) {