diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
| -rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 8512b5c0ef82..022fb6a8cb83 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
| @@ -640,7 +640,7 @@ static struct fsf_qtcb *zfcp_qtcb_alloc(mempool_t *pool) | |||
| 640 | } | 640 | } |
| 641 | 641 | ||
| 642 | static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_qdio *qdio, | 642 | static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_qdio *qdio, |
| 643 | u32 fsf_cmd, u32 sbtype, | 643 | u32 fsf_cmd, u8 sbtype, |
| 644 | mempool_t *pool) | 644 | mempool_t *pool) |
| 645 | { | 645 | { |
| 646 | struct zfcp_adapter *adapter = qdio->adapter; | 646 | struct zfcp_adapter *adapter = qdio->adapter; |
| @@ -841,7 +841,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *scmnd) | |||
| 841 | if (zfcp_qdio_sbal_get(qdio)) | 841 | if (zfcp_qdio_sbal_get(qdio)) |
| 842 | goto out; | 842 | goto out; |
| 843 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_ABORT_FCP_CMND, | 843 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_ABORT_FCP_CMND, |
| 844 | SBAL_FLAGS0_TYPE_READ, | 844 | SBAL_SFLAGS0_TYPE_READ, |
| 845 | qdio->adapter->pool.scsi_abort); | 845 | qdio->adapter->pool.scsi_abort); |
| 846 | if (IS_ERR(req)) { | 846 | if (IS_ERR(req)) { |
| 847 | req = NULL; | 847 | req = NULL; |
| @@ -1012,7 +1012,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port, | |||
| 1012 | goto out; | 1012 | goto out; |
| 1013 | 1013 | ||
| 1014 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_GENERIC, | 1014 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_GENERIC, |
| 1015 | SBAL_FLAGS0_TYPE_WRITE_READ, pool); | 1015 | SBAL_SFLAGS0_TYPE_WRITE_READ, pool); |
| 1016 | 1016 | ||
| 1017 | if (IS_ERR(req)) { | 1017 | if (IS_ERR(req)) { |
| 1018 | ret = PTR_ERR(req); | 1018 | ret = PTR_ERR(req); |
| @@ -1110,7 +1110,7 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id, | |||
| 1110 | goto out; | 1110 | goto out; |
| 1111 | 1111 | ||
| 1112 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_ELS, | 1112 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_SEND_ELS, |
| 1113 | SBAL_FLAGS0_TYPE_WRITE_READ, NULL); | 1113 | SBAL_SFLAGS0_TYPE_WRITE_READ, NULL); |
| 1114 | 1114 | ||
| 1115 | if (IS_ERR(req)) { | 1115 | if (IS_ERR(req)) { |
| 1116 | ret = PTR_ERR(req); | 1116 | ret = PTR_ERR(req); |
| @@ -1156,7 +1156,7 @@ int zfcp_fsf_exchange_config_data(struct zfcp_erp_action *erp_action) | |||
| 1156 | goto out; | 1156 | goto out; |
| 1157 | 1157 | ||
| 1158 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, | 1158 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, |
| 1159 | SBAL_FLAGS0_TYPE_READ, | 1159 | SBAL_SFLAGS0_TYPE_READ, |
| 1160 | qdio->adapter->pool.erp_req); | 1160 | qdio->adapter->pool.erp_req); |
| 1161 | 1161 | ||
| 1162 | if (IS_ERR(req)) { | 1162 | if (IS_ERR(req)) { |
| @@ -1198,7 +1198,7 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_qdio *qdio, | |||
| 1198 | goto out_unlock; | 1198 | goto out_unlock; |
| 1199 | 1199 | ||
| 1200 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, | 1200 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_CONFIG_DATA, |
| 1201 | SBAL_FLAGS0_TYPE_READ, NULL); | 1201 | SBAL_SFLAGS0_TYPE_READ, NULL); |
| 1202 | 1202 | ||
| 1203 | if (IS_ERR(req)) { | 1203 | if (IS_ERR(req)) { |
| 1204 | retval = PTR_ERR(req); | 1204 | retval = PTR_ERR(req); |
| @@ -1250,7 +1250,7 @@ int zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action) | |||
| 1250 | goto out; | 1250 | goto out; |
| 1251 | 1251 | ||
| 1252 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, | 1252 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, |
| 1253 | SBAL_FLAGS0_TYPE_READ, | 1253 | SBAL_SFLAGS0_TYPE_READ, |
| 1254 | qdio->adapter->pool.erp_req); | 1254 | qdio->adapter->pool.erp_req); |
| 1255 | 1255 | ||
| 1256 | if (IS_ERR(req)) { | 1256 | if (IS_ERR(req)) { |
| @@ -1296,7 +1296,7 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_qdio *qdio, | |||
| 1296 | goto out_unlock; | 1296 | goto out_unlock; |
| 1297 | 1297 | ||
| 1298 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, | 1298 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_EXCHANGE_PORT_DATA, |
| 1299 | SBAL_FLAGS0_TYPE_READ, NULL); | 1299 | SBAL_SFLAGS0_TYPE_READ, NULL); |
| 1300 | 1300 | ||
| 1301 | if (IS_ERR(req)) { | 1301 | if (IS_ERR(req)) { |
| 1302 | retval = PTR_ERR(req); | 1302 | retval = PTR_ERR(req); |
| @@ -1412,7 +1412,7 @@ int zfcp_fsf_open_port(struct zfcp_erp_action *erp_action) | |||
| 1412 | goto out; | 1412 | goto out; |
| 1413 | 1413 | ||
| 1414 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, | 1414 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, |
| 1415 | SBAL_FLAGS0_TYPE_READ, | 1415 | SBAL_SFLAGS0_TYPE_READ, |
| 1416 | qdio->adapter->pool.erp_req); | 1416 | qdio->adapter->pool.erp_req); |
| 1417 | 1417 | ||
| 1418 | if (IS_ERR(req)) { | 1418 | if (IS_ERR(req)) { |
| @@ -1478,7 +1478,7 @@ int zfcp_fsf_close_port(struct zfcp_erp_action *erp_action) | |||
| 1478 | goto out; | 1478 | goto out; |
| 1479 | 1479 | ||
| 1480 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, | 1480 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, |
| 1481 | SBAL_FLAGS0_TYPE_READ, | 1481 | SBAL_SFLAGS0_TYPE_READ, |
| 1482 | qdio->adapter->pool.erp_req); | 1482 | qdio->adapter->pool.erp_req); |
| 1483 | 1483 | ||
| 1484 | if (IS_ERR(req)) { | 1484 | if (IS_ERR(req)) { |
| @@ -1553,7 +1553,7 @@ int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port) | |||
| 1553 | goto out; | 1553 | goto out; |
| 1554 | 1554 | ||
| 1555 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, | 1555 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_PORT_WITH_DID, |
| 1556 | SBAL_FLAGS0_TYPE_READ, | 1556 | SBAL_SFLAGS0_TYPE_READ, |
| 1557 | qdio->adapter->pool.erp_req); | 1557 | qdio->adapter->pool.erp_req); |
| 1558 | 1558 | ||
| 1559 | if (IS_ERR(req)) { | 1559 | if (IS_ERR(req)) { |
| @@ -1606,7 +1606,7 @@ int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port) | |||
| 1606 | goto out; | 1606 | goto out; |
| 1607 | 1607 | ||
| 1608 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, | 1608 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PORT, |
| 1609 | SBAL_FLAGS0_TYPE_READ, | 1609 | SBAL_SFLAGS0_TYPE_READ, |
| 1610 | qdio->adapter->pool.erp_req); | 1610 | qdio->adapter->pool.erp_req); |
| 1611 | 1611 | ||
| 1612 | if (IS_ERR(req)) { | 1612 | if (IS_ERR(req)) { |
| @@ -1698,7 +1698,7 @@ int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action) | |||
| 1698 | goto out; | 1698 | goto out; |
| 1699 | 1699 | ||
| 1700 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PHYSICAL_PORT, | 1700 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_PHYSICAL_PORT, |
| 1701 | SBAL_FLAGS0_TYPE_READ, | 1701 | SBAL_SFLAGS0_TYPE_READ, |
| 1702 | qdio->adapter->pool.erp_req); | 1702 | qdio->adapter->pool.erp_req); |
| 1703 | 1703 | ||
| 1704 | if (IS_ERR(req)) { | 1704 | if (IS_ERR(req)) { |
| @@ -1812,7 +1812,7 @@ int zfcp_fsf_open_lun(struct zfcp_erp_action *erp_action) | |||
| 1812 | goto out; | 1812 | goto out; |
| 1813 | 1813 | ||
| 1814 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_LUN, | 1814 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_OPEN_LUN, |
| 1815 | SBAL_FLAGS0_TYPE_READ, | 1815 | SBAL_SFLAGS0_TYPE_READ, |
| 1816 | adapter->pool.erp_req); | 1816 | adapter->pool.erp_req); |
| 1817 | 1817 | ||
| 1818 | if (IS_ERR(req)) { | 1818 | if (IS_ERR(req)) { |
| @@ -1901,7 +1901,7 @@ int zfcp_fsf_close_lun(struct zfcp_erp_action *erp_action) | |||
| 1901 | goto out; | 1901 | goto out; |
| 1902 | 1902 | ||
| 1903 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_LUN, | 1903 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_CLOSE_LUN, |
| 1904 | SBAL_FLAGS0_TYPE_READ, | 1904 | SBAL_SFLAGS0_TYPE_READ, |
| 1905 | qdio->adapter->pool.erp_req); | 1905 | qdio->adapter->pool.erp_req); |
| 1906 | 1906 | ||
| 1907 | if (IS_ERR(req)) { | 1907 | if (IS_ERR(req)) { |
| @@ -2161,7 +2161,7 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd) | |||
| 2161 | { | 2161 | { |
| 2162 | struct zfcp_fsf_req *req; | 2162 | struct zfcp_fsf_req *req; |
| 2163 | struct fcp_cmnd *fcp_cmnd; | 2163 | struct fcp_cmnd *fcp_cmnd; |
| 2164 | unsigned int sbtype = SBAL_FLAGS0_TYPE_READ; | 2164 | u8 sbtype = SBAL_SFLAGS0_TYPE_READ; |
| 2165 | int real_bytes, retval = -EIO, dix_bytes = 0; | 2165 | int real_bytes, retval = -EIO, dix_bytes = 0; |
| 2166 | struct scsi_device *sdev = scsi_cmnd->device; | 2166 | struct scsi_device *sdev = scsi_cmnd->device; |
| 2167 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); | 2167 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); |
| @@ -2181,7 +2181,7 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd) | |||
| 2181 | } | 2181 | } |
| 2182 | 2182 | ||
| 2183 | if (scsi_cmnd->sc_data_direction == DMA_TO_DEVICE) | 2183 | if (scsi_cmnd->sc_data_direction == DMA_TO_DEVICE) |
| 2184 | sbtype = SBAL_FLAGS0_TYPE_WRITE; | 2184 | sbtype = SBAL_SFLAGS0_TYPE_WRITE; |
| 2185 | 2185 | ||
| 2186 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, | 2186 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, |
| 2187 | sbtype, adapter->pool.scsi_req); | 2187 | sbtype, adapter->pool.scsi_req); |
| @@ -2280,7 +2280,7 @@ struct zfcp_fsf_req *zfcp_fsf_fcp_task_mgmt(struct scsi_cmnd *scmnd, | |||
| 2280 | goto out; | 2280 | goto out; |
| 2281 | 2281 | ||
| 2282 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, | 2282 | req = zfcp_fsf_req_create(qdio, FSF_QTCB_FCP_CMND, |
| 2283 | SBAL_FLAGS0_TYPE_WRITE, | 2283 | SBAL_SFLAGS0_TYPE_WRITE, |
| 2284 | qdio->adapter->pool.scsi_req); | 2284 | qdio->adapter->pool.scsi_req); |
| 2285 | 2285 | ||
| 2286 | if (IS_ERR(req)) { | 2286 | if (IS_ERR(req)) { |
| @@ -2328,17 +2328,18 @@ struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter, | |||
| 2328 | struct zfcp_qdio *qdio = adapter->qdio; | 2328 | struct zfcp_qdio *qdio = adapter->qdio; |
| 2329 | struct zfcp_fsf_req *req = NULL; | 2329 | struct zfcp_fsf_req *req = NULL; |
| 2330 | struct fsf_qtcb_bottom_support *bottom; | 2330 | struct fsf_qtcb_bottom_support *bottom; |
| 2331 | int direction, retval = -EIO, bytes; | 2331 | int retval = -EIO, bytes; |
| 2332 | u8 direction; | ||
| 2332 | 2333 | ||
| 2333 | if (!(adapter->adapter_features & FSF_FEATURE_CFDC)) | 2334 | if (!(adapter->adapter_features & FSF_FEATURE_CFDC)) |
| 2334 | return ERR_PTR(-EOPNOTSUPP); | 2335 | return ERR_PTR(-EOPNOTSUPP); |
| 2335 | 2336 | ||
| 2336 | switch (fsf_cfdc->command) { | 2337 | switch (fsf_cfdc->command) { |
| 2337 | case FSF_QTCB_DOWNLOAD_CONTROL_FILE: | 2338 | case FSF_QTCB_DOWNLOAD_CONTROL_FILE: |
| 2338 | direction = SBAL_FLAGS0_TYPE_WRITE; | 2339 | direction = SBAL_SFLAGS0_TYPE_WRITE; |
| 2339 | break; | 2340 | break; |
| 2340 | case FSF_QTCB_UPLOAD_CONTROL_FILE: | 2341 | case FSF_QTCB_UPLOAD_CONTROL_FILE: |
| 2341 | direction = SBAL_FLAGS0_TYPE_READ; | 2342 | direction = SBAL_SFLAGS0_TYPE_READ; |
| 2342 | break; | 2343 | break; |
| 2343 | default: | 2344 | default: |
| 2344 | return ERR_PTR(-EINVAL); | 2345 | return ERR_PTR(-EINVAL); |
| @@ -2413,7 +2414,7 @@ void zfcp_fsf_reqid_check(struct zfcp_qdio *qdio, int sbal_idx) | |||
| 2413 | fsf_req->qdio_req.sbal_response = sbal_idx; | 2414 | fsf_req->qdio_req.sbal_response = sbal_idx; |
| 2414 | zfcp_fsf_req_complete(fsf_req); | 2415 | zfcp_fsf_req_complete(fsf_req); |
| 2415 | 2416 | ||
| 2416 | if (likely(sbale->flags & SBAL_FLAGS_LAST_ENTRY)) | 2417 | if (likely(sbale->eflags & SBAL_EFLAGS_LAST_ENTRY)) |
| 2417 | break; | 2418 | break; |
| 2418 | } | 2419 | } |
| 2419 | } | 2420 | } |
