diff options
author | <jejb@titanic.il.steeleye.com> | 2005-04-11 00:04:28 -0400 |
---|---|---|
committer | James Bottomley <jejb@titanic> | 2005-04-18 13:34:41 -0400 |
commit | 6f71d9bc025b02a8cbc2be83b0226a7043a507a5 (patch) | |
tree | 01caefa8cdcb986b0a698c640a6a59d89e69db62 /drivers/s390/scsi/zfcp_fsf.c | |
parent | f4c2c15b930b23edaa633b09fe3f4c01b4ecce9f (diff) |
zfcp: add point-2-point support
From: Andreas Herrmann <aherrman@de.ibm.com>
This patch mainly introduces support for point-2-point
topology.
From: Heiko Carstens <heiko.carstens@de.ibm.com>
From: Maxim Shchetynin <maxim@de.ibm.com>
From: Andreas Herrmann <aherrman@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 578b9fbe5206..148b11c822bf 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -2107,6 +2107,9 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok) | |||
2107 | bottom->low_qtcb_version, bottom->high_qtcb_version); | 2107 | bottom->low_qtcb_version, bottom->high_qtcb_version); |
2108 | adapter->fsf_lic_version = bottom->lic_version; | 2108 | adapter->fsf_lic_version = bottom->lic_version; |
2109 | adapter->supported_features = bottom->supported_features; | 2109 | adapter->supported_features = bottom->supported_features; |
2110 | adapter->peer_wwpn = 0; | ||
2111 | adapter->peer_wwnn = 0; | ||
2112 | adapter->peer_d_id = 0; | ||
2110 | 2113 | ||
2111 | if (xchg_ok) { | 2114 | if (xchg_ok) { |
2112 | adapter->wwnn = bottom->nport_serv_param.wwnn; | 2115 | adapter->wwnn = bottom->nport_serv_param.wwnn; |
@@ -2124,13 +2127,19 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok) | |||
2124 | adapter->hydra_version = 0; | 2127 | adapter->hydra_version = 0; |
2125 | } | 2128 | } |
2126 | 2129 | ||
2130 | if (adapter->fc_topology == FSF_TOPO_P2P) { | ||
2131 | adapter->peer_d_id = bottom->peer_d_id & ZFCP_DID_MASK; | ||
2132 | adapter->peer_wwpn = bottom->plogi_payload.wwpn; | ||
2133 | adapter->peer_wwnn = bottom->plogi_payload.wwnn; | ||
2134 | } | ||
2135 | |||
2127 | if(adapter->supported_features & FSF_FEATURE_HBAAPI_MANAGEMENT){ | 2136 | if(adapter->supported_features & FSF_FEATURE_HBAAPI_MANAGEMENT){ |
2128 | adapter->hardware_version = bottom->hardware_version; | 2137 | adapter->hardware_version = bottom->hardware_version; |
2129 | memcpy(adapter->serial_number, bottom->serial_number, 17); | 2138 | memcpy(adapter->serial_number, bottom->serial_number, 17); |
2130 | EBCASC(adapter->serial_number, sizeof(adapter->serial_number)); | 2139 | EBCASC(adapter->serial_number, sizeof(adapter->serial_number)); |
2131 | } | 2140 | } |
2132 | 2141 | ||
2133 | ZFCP_LOG_INFO("The adapter %s reported the following characteristics:\n" | 2142 | ZFCP_LOG_NORMAL("The adapter %s reported the following characteristics:\n" |
2134 | "WWNN 0x%016Lx, " | 2143 | "WWNN 0x%016Lx, " |
2135 | "WWPN 0x%016Lx, " | 2144 | "WWPN 0x%016Lx, " |
2136 | "S_ID 0x%08x,\n" | 2145 | "S_ID 0x%08x,\n" |
@@ -2194,14 +2203,18 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2194 | switch (adapter->fc_topology) { | 2203 | switch (adapter->fc_topology) { |
2195 | case FSF_TOPO_P2P: | 2204 | case FSF_TOPO_P2P: |
2196 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n"); | 2205 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n"); |
2197 | ZFCP_LOG_NORMAL("error: Point-to-point fibrechannel " | 2206 | ZFCP_LOG_NORMAL("Point-to-Point fibrechannel " |
2198 | "configuration detected at adapter %s " | 2207 | "configuration detected at adapter %s\n" |
2199 | "unsupported, shutting down adapter\n", | 2208 | "Peer WWNN 0x%016llx, " |
2200 | zfcp_get_busid_by_adapter(adapter)); | 2209 | "peer WWPN 0x%016llx, " |
2210 | "peer d_id 0x%06x\n", | ||
2211 | zfcp_get_busid_by_adapter(adapter), | ||
2212 | adapter->peer_wwnn, | ||
2213 | adapter->peer_wwpn, | ||
2214 | adapter->peer_d_id); | ||
2201 | debug_text_event(fsf_req->adapter->erp_dbf, 0, | 2215 | debug_text_event(fsf_req->adapter->erp_dbf, 0, |
2202 | "top-p-to-p"); | 2216 | "top-p-to-p"); |
2203 | zfcp_erp_adapter_shutdown(adapter, 0); | 2217 | break; |
2204 | return -EIO; | ||
2205 | case FSF_TOPO_AL: | 2218 | case FSF_TOPO_AL: |
2206 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n"); | 2219 | ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n"); |
2207 | ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel " | 2220 | ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel " |
@@ -2226,6 +2239,7 @@ zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req) | |||
2226 | "of a type known to the zfcp " | 2239 | "of a type known to the zfcp " |
2227 | "driver, shutting down adapter\n", | 2240 | "driver, shutting down adapter\n", |
2228 | zfcp_get_busid_by_adapter(adapter)); | 2241 | zfcp_get_busid_by_adapter(adapter)); |
2242 | adapter->fc_topology = FSF_TOPO_ERROR; | ||
2229 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, | 2243 | debug_text_exception(fsf_req->adapter->erp_dbf, 0, |
2230 | "unknown-topo"); | 2244 | "unknown-topo"); |
2231 | zfcp_erp_adapter_shutdown(adapter, 0); | 2245 | zfcp_erp_adapter_shutdown(adapter, 0); |
@@ -4281,6 +4295,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4281 | bottom.io.fcp_cmnd, FSF_FCP_CMND_SIZE); | 4295 | bottom.io.fcp_cmnd, FSF_FCP_CMND_SIZE); |
4282 | zfcp_cmd_dbf_event_fsf("undeffcp", fsf_req, NULL, 0); | 4296 | zfcp_cmd_dbf_event_fsf("undeffcp", fsf_req, NULL, 0); |
4283 | set_host_byte(&scpnt->result, DID_ERROR); | 4297 | set_host_byte(&scpnt->result, DID_ERROR); |
4298 | goto skip_fsfstatus; | ||
4284 | } | 4299 | } |
4285 | } | 4300 | } |
4286 | 4301 | ||
@@ -4334,7 +4349,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4334 | 4349 | ||
4335 | scpnt->resid = fcp_rsp_iu->fcp_resid; | 4350 | scpnt->resid = fcp_rsp_iu->fcp_resid; |
4336 | if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow) | 4351 | if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow) |
4337 | scpnt->result |= DID_ERROR << 16; | 4352 | set_host_byte(&scpnt->result, DID_ERROR); |
4338 | } | 4353 | } |
4339 | 4354 | ||
4340 | skip_fsfstatus: | 4355 | skip_fsfstatus: |
@@ -4607,6 +4622,13 @@ zfcp_fsf_control_file_handler(struct zfcp_fsf_req *fsf_req) | |||
4607 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) { | 4622 | if (bottom->operation_subtype == FSF_CFDC_OPERATION_SUBTYPE) { |
4608 | switch (header->fsf_status_qual.word[0]) { | 4623 | switch (header->fsf_status_qual.word[0]) { |
4609 | 4624 | ||
4625 | case FSF_SQ_CFDC_HARDENED_ON_SE: | ||
4626 | ZFCP_LOG_NORMAL( | ||
4627 | "CFDC on the adapter %s has being " | ||
4628 | "hardened on primary and secondary SE\n", | ||
4629 | zfcp_get_busid_by_adapter(adapter)); | ||
4630 | break; | ||
4631 | |||
4610 | case FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE: | 4632 | case FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE: |
4611 | ZFCP_LOG_NORMAL( | 4633 | ZFCP_LOG_NORMAL( |
4612 | "CFDC of the adapter %s could not " | 4634 | "CFDC of the adapter %s could not " |