[libata scsi] add ata_scsi_set_sense helper
- add extern ata_scsi_set_sense() to build SCSI fixed sense data and corresponding SCSI status Signed-off-by: Douglas Gilbert <dougg@torque.net> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
d95300758b
commit
845c5834d0
2 changed files with 30 additions and 0 deletions
|
@ -1450,6 +1450,34 @@ unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ata_scsi_set_sense - Set SCSI sense data and status
|
||||||
|
* @cmd: SCSI request to be handled
|
||||||
|
* @sk: SCSI-defined sense key
|
||||||
|
* @asc: SCSI-defined additional sense code
|
||||||
|
* @ascq: SCSI-defined additional sense code qualifier
|
||||||
|
*
|
||||||
|
* Helper function that builds a valid fixed format, current
|
||||||
|
* response code and the given sense key (sk), additional sense
|
||||||
|
* code (asc) and additional sense code qualifier (ascq) with
|
||||||
|
* a SCSI command status of %SAM_STAT_CHECK_CONDITION and
|
||||||
|
* DRIVER_SENSE set in the upper bits of scsi_cmnd::result .
|
||||||
|
*
|
||||||
|
* LOCKING:
|
||||||
|
* Not required
|
||||||
|
*/
|
||||||
|
|
||||||
|
void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
||||||
|
{
|
||||||
|
cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
|
||||||
|
|
||||||
|
cmd->sense_buffer[0] = 0x70; /* fixed format, current */
|
||||||
|
cmd->sense_buffer[2] = sk;
|
||||||
|
cmd->sense_buffer[7] = 18 - 8; /* additional sense length */
|
||||||
|
cmd->sense_buffer[12] = asc;
|
||||||
|
cmd->sense_buffer[13] = ascq;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_scsi_badcmd - End a SCSI request with an error
|
* ata_scsi_badcmd - End a SCSI request with an error
|
||||||
* @cmd: SCSI request to be handled
|
* @cmd: SCSI request to be handled
|
||||||
|
|
|
@ -80,6 +80,8 @@ extern unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
|
||||||
extern void ata_scsi_badcmd(struct scsi_cmnd *cmd,
|
extern void ata_scsi_badcmd(struct scsi_cmnd *cmd,
|
||||||
void (*done)(struct scsi_cmnd *),
|
void (*done)(struct scsi_cmnd *),
|
||||||
u8 asc, u8 ascq);
|
u8 asc, u8 ascq);
|
||||||
|
extern void ata_scsi_set_sense(struct scsi_cmnd *cmd,
|
||||||
|
u8 sk, u8 asc, u8 ascq);
|
||||||
extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
|
extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
|
||||||
unsigned int (*actor) (struct ata_scsi_args *args,
|
unsigned int (*actor) (struct ata_scsi_args *args,
|
||||||
u8 *rbuf, unsigned int buflen));
|
u8 *rbuf, unsigned int buflen));
|
||||||
|
|
Loading…
Reference in a new issue