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)