Commit feac6a07 authored by Martin Petermann's avatar Martin Petermann Committed by James Bottomley

[SCSI] zfcp: Move status accessors from zfcp to SCSI include file.

Move the accessor functions for the scsi_cmnd status from zfcp to the
SCSI include file. Change the interface to the functions to pass the
scsi_cmnd pointer instead of the status pointer.
Signed-off-by: default avatarMartin Petermann <martin@linux.vnet.ibm.com>
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 5d4e2262
...@@ -103,8 +103,6 @@ extern int zfcp_adapter_scsi_register(struct zfcp_adapter *); ...@@ -103,8 +103,6 @@ extern int zfcp_adapter_scsi_register(struct zfcp_adapter *);
extern void zfcp_adapter_scsi_unregister(struct zfcp_adapter *); extern void zfcp_adapter_scsi_unregister(struct zfcp_adapter *);
extern void zfcp_set_fcp_dl(struct fcp_cmnd_iu *, fcp_dl_t); extern void zfcp_set_fcp_dl(struct fcp_cmnd_iu *, fcp_dl_t);
extern char *zfcp_get_fcp_rsp_info_ptr(struct fcp_rsp_iu *); extern char *zfcp_get_fcp_rsp_info_ptr(struct fcp_rsp_iu *);
extern void set_host_byte(int *, char);
extern void set_driver_byte(int *, char);
extern char *zfcp_get_fcp_sns_info_ptr(struct fcp_rsp_iu *); extern char *zfcp_get_fcp_sns_info_ptr(struct fcp_rsp_iu *);
extern fcp_dl_t zfcp_get_fcp_dl(struct fcp_cmnd_iu *); extern fcp_dl_t zfcp_get_fcp_dl(struct fcp_cmnd_iu *);
......
...@@ -3040,18 +3040,18 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) ...@@ -3040,18 +3040,18 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
* DID_SOFT_ERROR by retrying the request for devices * DID_SOFT_ERROR by retrying the request for devices
* that allow retries. * that allow retries.
*/ */
set_host_byte(&scpnt->result, DID_SOFT_ERROR); set_host_byte(scpnt, DID_SOFT_ERROR);
set_driver_byte(&scpnt->result, SUGGEST_RETRY); set_driver_byte(scpnt, SUGGEST_RETRY);
goto skip_fsfstatus; goto skip_fsfstatus;
} }
if (unlikely(fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR)) { if (unlikely(fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
goto skip_fsfstatus; goto skip_fsfstatus;
} }
/* set message byte of result in SCSI command */ /* set message byte of result in SCSI command */
scpnt->result |= COMMAND_COMPLETE << 8; set_msg_byte(scpnt, COMMAND_COMPLETE);
/* /*
* copy SCSI status code of FCP_STATUS of FCP_RSP IU to status byte * copy SCSI status code of FCP_STATUS of FCP_RSP IU to status byte
...@@ -3067,23 +3067,23 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) ...@@ -3067,23 +3067,23 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
switch (fcp_rsp_info[3]) { switch (fcp_rsp_info[3]) {
case RSP_CODE_GOOD: case RSP_CODE_GOOD:
/* ok, continue */ /* ok, continue */
set_host_byte(&scpnt->result, DID_OK); set_host_byte(scpnt, DID_OK);
break; break;
case RSP_CODE_LENGTH_MISMATCH: case RSP_CODE_LENGTH_MISMATCH:
/* hardware bug */ /* hardware bug */
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
goto skip_fsfstatus; goto skip_fsfstatus;
case RSP_CODE_FIELD_INVALID: case RSP_CODE_FIELD_INVALID:
/* driver or hardware bug */ /* driver or hardware bug */
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
goto skip_fsfstatus; goto skip_fsfstatus;
case RSP_CODE_RO_MISMATCH: case RSP_CODE_RO_MISMATCH:
/* hardware bug */ /* hardware bug */
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
goto skip_fsfstatus; goto skip_fsfstatus;
default: default:
/* invalid FCP response code */ /* invalid FCP response code */
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
goto skip_fsfstatus; goto skip_fsfstatus;
} }
} }
...@@ -3104,7 +3104,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) ...@@ -3104,7 +3104,7 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req)
scsi_set_resid(scpnt, fcp_rsp_iu->fcp_resid); scsi_set_resid(scpnt, fcp_rsp_iu->fcp_resid);
if (scsi_bufflen(scpnt) - scsi_get_resid(scpnt) < if (scsi_bufflen(scpnt) - scsi_get_resid(scpnt) <
scpnt->underflow) scpnt->underflow)
set_host_byte(&scpnt->result, DID_ERROR); set_host_byte(scpnt, DID_ERROR);
} }
skip_fsfstatus: skip_fsfstatus:
......
...@@ -107,28 +107,6 @@ zfcp_set_fcp_dl(struct fcp_cmnd_iu *fcp_cmd, fcp_dl_t fcp_dl) ...@@ -107,28 +107,6 @@ zfcp_set_fcp_dl(struct fcp_cmnd_iu *fcp_cmd, fcp_dl_t fcp_dl)
*zfcp_get_fcp_dl_ptr(fcp_cmd) = fcp_dl; *zfcp_get_fcp_dl_ptr(fcp_cmd) = fcp_dl;
} }
/*
* note: it's a bit-or operation not an assignment
* regarding the specified byte
*/
static inline void
set_byte(int *result, char status, char pos)
{
*result |= status << (pos * 8);
}
void
set_host_byte(int *result, char status)
{
set_byte(result, status, 2);
}
void
set_driver_byte(int *result, char status)
{
set_byte(result, status, 3);
}
static int static int
zfcp_scsi_slave_alloc(struct scsi_device *sdp) zfcp_scsi_slave_alloc(struct scsi_device *sdp)
{ {
...@@ -196,7 +174,7 @@ zfcp_scsi_slave_configure(struct scsi_device *sdp) ...@@ -196,7 +174,7 @@ zfcp_scsi_slave_configure(struct scsi_device *sdp)
static void static void
zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result) zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result)
{ {
set_host_byte(&scpnt->result, result); set_host_byte(scpnt, result);
if ((scpnt->device != NULL) && (scpnt->device->host != NULL)) if ((scpnt->device != NULL) && (scpnt->device->host != NULL))
zfcp_scsi_dbf_event_result("fail", 4, zfcp_scsi_dbf_event_result("fail", 4,
(struct zfcp_adapter*) scpnt->device->host->hostdata[0], (struct zfcp_adapter*) scpnt->device->host->hostdata[0],
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#define _SCSI_SCSI_H #define _SCSI_SCSI_H
#include <linux/types.h> #include <linux/types.h>
#include <scsi/scsi_cmnd.h>
/* /*
* The maximum number of SG segments that we will put inside a * The maximum number of SG segments that we will put inside a
...@@ -425,6 +426,22 @@ struct scsi_lun { ...@@ -425,6 +426,22 @@ struct scsi_lun {
#define driver_byte(result) (((result) >> 24) & 0xff) #define driver_byte(result) (((result) >> 24) & 0xff)
#define suggestion(result) (driver_byte(result) & SUGGEST_MASK) #define suggestion(result) (driver_byte(result) & SUGGEST_MASK)
static inline void set_msg_byte(struct scsi_cmnd *cmd, char status)
{
cmd->result |= status << 8;
}
static inline void set_host_byte(struct scsi_cmnd *cmd, char status)
{
cmd->result |= status << 16;
}
static inline void set_driver_byte(struct scsi_cmnd *cmd, char status)
{
cmd->result |= status << 24;
}
#define sense_class(sense) (((sense) >> 4) & 0x7) #define sense_class(sense) (((sense) >> 4) & 0x7)
#define sense_error(sense) ((sense) & 0xf) #define sense_error(sense) ((sense) & 0xf)
#define sense_valid(sense) ((sense) & 0x80); #define sense_valid(sense) ((sense) & 0x80);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment