1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #pragma ident "%Z%%M% %I% %E% SMI"
28
29 /*
30 * Global SCSI data
31 */
32
33 #include <sys/scsi/scsi.h>
34 #include <sys/cdio.h> /* CDROM SCMD_ commands */
35
36 char *sense_keys[NUM_SENSE_KEYS + NUM_IMPL_SENSE_KEYS] = {
37 /* ==== SCSI Standard Keys */
38 "No_Additional_Sense", /* 0x00 KEY_NO_SENSE */
39 "Soft_Error", /* 0x01 KEY_RECOVERABLE_ERROR */
40 "Not_Ready", /* 0x02 KEY_NOT_READY */
41 "Media_Error", /* 0x03 KEY_MEDIUM_ERROR */
42 "Hardware_Error", /* 0x04 KEY_HARDWARE_ERROR */
43 "Illegal_Request", /* 0x05 KEY_ILLEGAL_REQUEST */
44 "Unit_Attention", /* 0x06 KEY_UNIT_ATTENTION */
45 "Write_Protected", /* 0x07 KEY_WRITE_PROTECT */
46 "Blank_Check", /* 0x08 KEY_BLANK_CHECK */
47 "Vendor_Unique", /* 0x09 KEY_VENDOR_UNIQUE */
48 "Copy_Aborted", /* 0x0a KEY_COPY_ABORTED */
49 "Aborted_Command", /* 0x0b KEY_ABORTED_COMMAND */
50 "Equal_Error", /* 0x0c KEY_EQUAL */
51 "Volume_Overflow", /* 0x0d KEY_VOLUME_OVERFLOW */
52 "Miscompare_Error", /* 0x0e KEY_MISCOMPARE */
53 "Reserved", /* 0x0f KEY_RESERVED */
54 /* ==== SUN SCSA 'pseudo' keys */
55 "fatal", /* 0x10 SUN_KEY_FATAL */
56 "timeout", /* 0x11 SUN_KEY_TIMEOUT */
57 "EOF", /* 0x12 SUN_KEY_EOF */
58 "EOT", /* 0x13 SUN_KEY_EOT */
59 "length_error", /* 0x14 SUN_KEY_LENGTH */
60 "BOT", /* 0x15 SUN_KEY_BOT */
61 "wrong_tape_media" /* 0x16 SUN_KEY_WRONGMEDIA */
62 };
63
64
65 char *scsi_state_bits = "\20\05STS\04XFER\03CMD\02SEL\01ARB";
66
67
68 /*
69 * This structure is used to allow you to quickly determine the size of the
70 * cdb by examining the cmd code. It is used in conjunction with the
71 * CDB_GROUPID macro. Lookup returns size of cdb. If unknown, zero returned.
72 */
73 uchar_t scsi_cdb_size[] = {
74 CDB_GROUP0, /* Group 0, 6 byte cdb */
75 CDB_GROUP1, /* Group 1, 10 byte cdb */
76 CDB_GROUP2, /* Group 2, 10 byte cdb */
77 CDB_GROUP3, /* Group 3, reserved */
78 CDB_GROUP4, /* Group 4, 16 byte cdb */
79 CDB_GROUP5, /* Group 5, 12 byte cdb */
80 CDB_GROUP6, /* Group 6, ? byte cdb (vendor specific) */
81 CDB_GROUP7 /* Group 7, ? byte cdb (vendor specific) */
82 };
83
84 /*
85 * Basic SCSI command description strings that can be used by drivers
86 * to pass to scsi_errmsg().
87 */
88 struct scsi_key_strings scsi_cmds[] = {
89 SCSI_CMDS_KEY_STRINGS,
90 SCSI_CMDS_KEY_STRINGS_CDIO,
91 -1, NULL
92 };