SCSI_EXT_SENSE_FIELDS(9F) Kernel Functions for Drivers
NAME
scsi_ext_sense_fields, scsi_sense_info_uint64,
scsi_sense_cmdspecific_uint64 - retrieve fields from SCSI sense data
SYNOPSIS
#include <sys/scsi/scsi.h>
void scsi_ext_sense_fields(
uint8_t *sense_buffer,
int *sense_buf_len,
uint8_t **information,
uint8_t **cmd_spec_info,
uint8_t **fru_code,
uint8_t **sk_specific,
uint8_t **stream_flags);
boolean_t scsi_sense_info_uint64(
uint8_t *sense_buffer,
int sense_buf_len,
uint64_t *information);
boolean_t scsi_sense_cmdspecific_uint64(
uint8_t *sense_buffer,
int sense_buf_len,
uint64_t *cmd_spec_info);
INTERFACE LEVEL
illumos DDI specific (illumos DDI).
PARAMETERS
sense_buffer Pointer to a buffer containing
SCSI sense data. The
sense data is expected in wire format starting at
the response code. It can be in either a fixed or
descriptor format.
information For
scsi_ext_sense_fields(), this is a call-by-
reference pointer to
uint8_t. A pointer to the
INFORMATION field in the sense data may be returned
in this parameter.
The
scsi_sense_info_uint64() function requires a
pointer to
uint64_t. The data in the information
field is returned as a 64 bit integer. If the sense
data information field is 32 bits, fixed format, the
most significant 32-bits are 0.
cmd_spec_info For
scsi_ext_sense_fields(), this is a call-by-
reference pointer to
uint8_t. A pointer to the
COMMAND_SPECIFIC INFORMATION field in the sense data
can be returned in this parameter.
The
scsi_sense_cmdspecific_uint64() function
requires a pointer to
uint64_t. The data in the
command specific information field is returned as a
64 bit integer. If the sense data command specific
information field is 32 bits, fixed format, the most
significant 32-bits are
0.
fru_code Call-by-reference pointer to
uint8_t. A pointer to
the
FIELD REPLACEABLE UNIT CODE field in the sense
data can be returned in this parameter.
sk_specific Call-by-reference pointer to
uint8_t. A pointer to
the
SENSE KEY SPECIFIC field in the sense data can
be returned in this parameter.
stream_flags Call-by-reference pointer to
uint8_t. A pointer to
the byte containing the
ILI,
EOM, and
FILEMARK flags
can be returned in this parameter.
DESCRIPTION
The
scsi_ext_sense_fields() function can be used to retrieve any of
the extended sense data fields from a sense data buffer, regardless
of whether the sense data is in fixed format or in descriptor format.
The
information,
cmd_spec_info,
fru_code,
sk_specific, and
stream_specific parameters are all call-by-reference output
parameters. Each parameter corresponds to one or more of the extended
sense data fields. Any of these parameters can be passed as
NULL if
the caller is not interested in the associated data.
If the requested data is present and valid for each output parameter,
the pointer passed in is set to point to the relevant location in the
sense buffer. If the data is not present or invalid, the pointer is
set to
NULL. For example, a caller that requests a pointer to the
information field would get
NULL when an information descriptor is
not present for descriptor format sense data or when the valid bit is
not set for fixed format sense data.
The information and command specific information fields can be 4
bytes or 8 bytes in length, depending on whether the sense data is in
fixed or descriptor format respectively. Drivers can use
scsi_validate_sense(9F) to determine the sense data format and, by
extension, the length of the information and command specific
information fields.
A driver can determine whether integer data is included in the
information or command specific information fields based on the
asc and
ascq sense keys, such as the
LBA of a failed disk request. The
scsi_sense_info_uint64() function retrieves the contents of the
information field as a 64 bit integer and the
scsi_sense_cmdspecific_uint64() retrieves the command specific
information field as a 64 bit integer.
Drivers should use
scsi_validate_sense(9F) to ensure that the sense
buffer contains valid sense data.
RETURN VALUES
The
scsi_sense_info_uint64() function returns
TRUE if the information
field is present and valid. Otherwise it returns
FALSE.
The
scsi_sense_cmdspecific_uint64() function returns
TRUE if the
command specific information field is present and valid. Otherwise it
returns
FALSE.
CONTEXT
The
scsi_ext_sense_fields(),
scsi_sense_info_uint64() and
scsi_sense_cmdspecific_uint64()() functions can be called from user
or interrupt context.
SEE ALSO
scsi_find_sense_descr(9F),
scsi_sense_asc(9F),
scsi_sense_ascq(9F),
scsi_sense_key(9F),
scsi_validate_sense(9F) June 29, 2006 SCSI_EXT_SENSE_FIELDS(9F)