xref: /illumos-gate/usr/src/man/man9f/scsi_errmsg.9f (revision 69a119caa6570c7077699161b7c28b6ee9f8b0f4)
te
Copyright (c) 2006, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
SCSI_ERRMSG 9F "Jan 16, 2006"
NAME
scsi_errmsg - display a SCSI request sense message
SYNOPSIS

#include <sys/scsi/scsi.h>



void scsi_errmsg(struct scsi_device *devp, struct scsi_pkt *pktp,
 char *drv_name, int severity, daddr_t blkno, daddr_t err_blkno,
 struct scsi_key_strings *cmdlist, struct scsi_extended_sense *sensep);
INTERFACE LEVEL

Solaris DDI specific (Solaris DDI).

PARAMETERS
devp

Pointer to the scsi_device(9S) structure.

pktp

Pointer to a scsi_pkt(9S) structure.

drv_name

String used by scsi_log(9F).

severity

Error severity level, maps to severity strings below.

blkno

Requested block number.

err_blkno

Error block number.

cmdlist

An array of SCSI command description strings.

sensep

A pointer to a scsi_extended_sense(9S) structure.

DESCRIPTION

The scsi_errmsg() function interprets the request sense information in the sensep pointer and generates a standard message that is displayed using scsi_log(9F). The first line of the message is always a CE_WARN, with the continuation lines being CE_CONT. sensep may be NULL, in which case no sense key or vendor information is displayed.

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 scsi_device(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:
SCSI_ERR_ALL All
SCSI_ERR_UNKNOWN Unknown
SCSI_ERR_INFO Informational
SCSI_ERR_RECOVERE Recovered
SCSI_ERR_RETRYABL Retryable
SCSI_ERR_FATAL Fatal

blkno is the block number of the original request that generated the error. err_blkno 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 scsi_key_strings {
 int key;
 char *message;
};

For a basic SCSI disk, the following list is appropriate:

static struct scsi_key_strings scsi_cmds[] = {
 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",
 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, NULL
};
CONTEXT

The scsi_errmsg() function may be called from user, interrupt, or kernel context.

EXAMPLES

Example 1 Generating error information.

This entry:

scsi_errmsg(devp, pkt, "sd", SCSI_ERR_INFO, bp->b_blkno,
 err_blkno, sd_cmds, 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

cmn_err(9F), scsi_log(9F), scsi_device(9S), scsi_extended_sense(9S), scsi_pkt(9S)

Writing Device Drivers