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)