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 /*
28 * Global SCSI data
29 */
30
31 #include <sys/scsi/scsi.h>
32 #include <sys/cdio.h> /* CDROM SCMD_ commands */
33
34 char *sense_keys[NUM_SENSE_KEYS + NUM_IMPL_SENSE_KEYS] = {
35 /* ==== SCSI Standard Keys */
36 "No_Additional_Sense", /* 0x00 KEY_NO_SENSE */
37 "Soft_Error", /* 0x01 KEY_RECOVERABLE_ERROR */
38 "Not_Ready", /* 0x02 KEY_NOT_READY */
39 "Media_Error", /* 0x03 KEY_MEDIUM_ERROR */
40 "Hardware_Error", /* 0x04 KEY_HARDWARE_ERROR */
41 "Illegal_Request", /* 0x05 KEY_ILLEGAL_REQUEST */
42 "Unit_Attention", /* 0x06 KEY_UNIT_ATTENTION */
43 "Write_Protected", /* 0x07 KEY_WRITE_PROTECT */
44 "Blank_Check", /* 0x08 KEY_BLANK_CHECK */
45 "Vendor_Unique", /* 0x09 KEY_VENDOR_UNIQUE */
46 "Copy_Aborted", /* 0x0a KEY_COPY_ABORTED */
47 "Aborted_Command", /* 0x0b KEY_ABORTED_COMMAND */
48 "Equal_Error", /* 0x0c KEY_EQUAL */
49 "Volume_Overflow", /* 0x0d KEY_VOLUME_OVERFLOW */
50 "Miscompare_Error", /* 0x0e KEY_MISCOMPARE */
51 "Reserved", /* 0x0f KEY_RESERVED */
52 /* ==== SUN SCSA 'pseudo' keys */
53 "fatal", /* 0x10 SUN_KEY_FATAL */
54 "timeout", /* 0x11 SUN_KEY_TIMEOUT */
55 "EOF", /* 0x12 SUN_KEY_EOF */
56 "EOT", /* 0x13 SUN_KEY_EOT */
57 "length_error", /* 0x14 SUN_KEY_LENGTH */
58 "BOT", /* 0x15 SUN_KEY_BOT */
59 "wrong_tape_media" /* 0x16 SUN_KEY_WRONGMEDIA */
60 };
61
62
63 char *scsi_state_bits = "\20\05STS\04XFER\03CMD\02SEL\01ARB";
64
65
66 /*
67 * This structure is used to allow you to quickly determine the size of the
68 * cdb by examining the cmd code. It is used in conjunction with the
69 * CDB_GROUPID macro. Lookup returns size of cdb. If unknown, zero returned.
70 */
71 uchar_t scsi_cdb_size[] = {
72 CDB_GROUP0, /* Group 0, 6 byte cdb */
73 CDB_GROUP1, /* Group 1, 10 byte cdb */
74 CDB_GROUP2, /* Group 2, 10 byte cdb */
75 CDB_GROUP3, /* Group 3, reserved */
76 CDB_GROUP4, /* Group 4, 16 byte cdb */
77 CDB_GROUP5, /* Group 5, 12 byte cdb */
78 CDB_GROUP6, /* Group 6, ? byte cdb (vendor specific) */
79 CDB_GROUP7 /* Group 7, ? byte cdb (vendor specific) */
80 };
81
82 /*
83 * Basic SCSI command description strings that can be used by drivers
84 * to pass to scsi_errmsg().
85 */
86 struct scsi_key_strings scsi_cmds[] = {
87 SCSI_CMDS_KEY_STRINGS,
88 SCSI_CMDS_KEY_STRINGS_CDIO,
89 { -1, NULL }
90 };