diff options
author | Joe Carnuccio <joe.carnuccio@qlogic.com> | 2014-09-25 05:16:47 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-09-25 08:25:03 -0400 |
commit | 7c9c4766896335d2f20928ccc5d8ad2d1e621b9a (patch) | |
tree | 9d8cc3afc7f45b107d87a8649fade3a574999206 | |
parent | df57cabac41fd54e8eb73f9de482f054eb0b98eb (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.c | 7 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_fw.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 36 |
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) { |