Kernel Functions for Drivers scsierrmsg(9F)
NAME
scsierrmsg - display a SCSI request sense message
SYNOPSIS
#include
void scsierrmsg(struct scsidevice *devp, struct scsipkt *pktp,
char *drvname, int severity, daddrt blkno, daddrt errblkno,
struct scsikeystrings *cmdlist, struct scsiextendedsense *sensep);
INTERFACE LEVEL
Solaris DI specific (Solaris DI).
PARAMETERS
devp Pointer to the scsidevice(9S) structure.
pktp Pointer to a scsipkt(9S) structure.
drvname String used by scsilog(9F).
severity Error severity level, maps to severity strings
below.
blkno Requested block number.
errblkno Error block number.
cmdlist An array of SCSI command description strings.
sensep A pointer to a scsiextendedsense(9S) struc-
ture.
DESCRIPTION
The scsierrmsg() function interprets the request sense
information in the sensep pointer and generates a standard
message that is displayed using scsilog(9F). The first line
of the message is always a CEWARN, with the continuation
lines being CECONT. sensep may be NUL, in which case no
sense key or vendor information is displayed.
SunOS 5.11 Last change: 16 Jan 2006 1
Kernel Functions for Drivers scsierrmsg(9F)
The driver should make the determination as to when to call
this function based on the severity of the failure and the
severity level that the driver wants to report.
The scsidevice(9S) structure denoted by devp supplies the
identification of the device that requested the display.
severity selects which string is used in the "Error Level:"
reporting, according to the following table:
Severity Value: String:
SCSIERAL All
SCSIERUNKNOWN Unknown
SCSIERINFO Informational
SCSIERECOVERE Recovered
SCSIERETRYABL Retryable
SCSIERFATAL Fatal
blkno is the block number of the original request that gen-
erated the error. errblkno is the block number where the
error occurred. cmdlist is a mapping table for translating
the SCSI command code in pktp to the actual command string.
The cmdlist is described in the structure below:
struct scsikeystrings {
int key;
char *message;
};
For a basic SCSI disk, the following list is appropriate:
static struct scsikeystrings scsicmds[] = {
0x00, "test unit ready",
0x01, "rezero/rewind",
0x03, "request sense",
0x04, "format",
0x07, "reassign",
0x08, "read",
0x0a, "write",
0x0b, "seek",
0x12, "inquiry",
0x15, "mode select",
0x16, "reserve",
0x17, "release",
SunOS 5.11 Last change: 16 Jan 2006 2
Kernel Functions for Drivers scsierrmsg(9F)
0x18, "copy",
0x1a, "mode sense",
0x1b, "start/stop",
0x1e, "door lock",
0x28, "read(10)",
0x2a, "write(10)",
0x2f, "verify",
0x37, "read defect data",
0x3b, "write buffer",
-1, NUL
};
CONTEXT
The scsierrmsg() function may be called from user, inter-
rupt, or kernel context.
EXAMPLES
Example 1 Generating error information.
This entry:
scsierrmsg(devp, pkt, "sd", SCSIERINFO, bp->bblkno,
errblkno, sdcmds, rqsense);
Generates:
WARNING: /sbus@1,f8000000/esp@0,800000/sd@1,0 (sd1):
Error for Command: read Error Level: Informational
Requested Block: 23936 Error Block: 23936
Vendor: QUANTUM Serial Number: 123456
Sense Key: Unit Attention
ASC: 0x29 (reset), ASCQ: 0x0, FRU: 0x0
SEE ALSO
cmnerr(9F), scsilog(9F), scsidevice(9S),
scsiextendedsense(9S), scsipkt(9S)
Writing Device Drivers
SunOS 5.11 Last change: 16 Jan 2006 3
|