1 | /* $NetBSD: scsipi_disk.h,v 1.21 2007/12/25 18:33:42 perry Exp $ */ |
2 | |
3 | /* |
4 | * SCSI and SCSI-like interfaces description |
5 | */ |
6 | |
7 | /* |
8 | * Some lines of this file come from a file of the name "scsi.h" |
9 | * distributed by OSF as part of mach2.5, |
10 | * so the following disclaimer has been kept. |
11 | * |
12 | * Copyright 1990 by Open Software Foundation, |
13 | * Grenoble, FRANCE |
14 | * |
15 | * All Rights Reserved |
16 | * |
17 | * Permission to use, copy, modify, and distribute this software and |
18 | * its documentation for any purpose and without fee is hereby granted, |
19 | * provided that the above copyright notice appears in all copies and |
20 | * that both the copyright notice and this permission notice appear in |
21 | * supporting documentation, and that the name of OSF or Open Software |
22 | * Foundation not be used in advertising or publicity pertaining to |
23 | * distribution of the software without specific, written prior |
24 | * permission. |
25 | * |
26 | * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE |
27 | * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, |
28 | * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR |
29 | * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
30 | * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, |
31 | * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION |
32 | * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
33 | */ |
34 | |
35 | /* |
36 | * Largely written by Julian Elischer (julian@tfs.com) |
37 | * for TRW Financial Systems. |
38 | * |
39 | * TRW Financial Systems, in accordance with their agreement with Carnegie |
40 | * Mellon University, makes this software available to CMU to distribute |
41 | * or use in any manner that they see fit as long as this message is kept with |
42 | * the software. For this reason TFS also grants any other persons or |
43 | * organisations permission to use or modify this software. |
44 | * |
45 | * TFS supplies this software to be publicly redistributed |
46 | * on the understanding that TFS is not responsible for the correct |
47 | * functioning of this software in any circumstances. |
48 | * |
49 | * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 |
50 | */ |
51 | |
52 | #ifndef _DEV_SCSIPI_SCSIPI_DISK_H_ |
53 | #define _DEV_SCSIPI_SCSIPI_DISK_H_ |
54 | |
55 | /* |
56 | * SCSI command format |
57 | */ |
58 | |
59 | #define READ_10 0x28 |
60 | #define WRITE_10 0x2a |
61 | struct scsipi_rw_10 { |
62 | u_int8_t opcode; |
63 | u_int8_t byte2; |
64 | #define SRWB_RELADDR 0x01 /* obsolete */ |
65 | #define SRWB_FUA_NV 0x02 /* force unit access non-volatile cache */ |
66 | #define SRWB_FUA 0x08 /* force unit access */ |
67 | #define SRWB_DPO 0x10 /* disable page out */ |
68 | #define SRWB_PROTECT(x) ((x) << 5) |
69 | u_int8_t addr[4]; |
70 | u_int8_t reserved; |
71 | u_int8_t length[2]; |
72 | u_int8_t control; |
73 | } __packed; |
74 | |
75 | #define READ_12 0xa8 |
76 | #define WRITE_12 0xaa |
77 | struct scsipi_rw_12 { |
78 | u_int8_t opcode; |
79 | u_int8_t byte2; /* see scsipi_rw_big bits */ |
80 | u_int8_t addr[4]; |
81 | u_int8_t length[4]; |
82 | u_int8_t byte11; |
83 | u_int8_t control; |
84 | } __packed; |
85 | |
86 | #define READ_16 0x88 |
87 | #define WRITE_16 0x8a |
88 | struct scsipi_rw_16 { |
89 | u_int8_t opcode; |
90 | u_int8_t byte2; /* see scsipi_rw_big bits */ |
91 | u_int8_t addr[8]; |
92 | u_int8_t length[4]; |
93 | u_int8_t byte15; |
94 | u_int8_t control; |
95 | } __packed; |
96 | |
97 | #define READ_CAPACITY_10 0x25 |
98 | struct scsipi_read_capacity_10 { |
99 | u_int8_t opcode; |
100 | u_int8_t byte2; |
101 | u_int8_t addr[4]; |
102 | u_int8_t unused[3]; |
103 | u_int8_t control; |
104 | } __packed; |
105 | |
106 | /* DATAs definitions for the above commands */ |
107 | |
108 | struct scsipi_read_capacity_10_data { |
109 | u_int8_t addr[4]; |
110 | u_int8_t length[4]; |
111 | } __packed; |
112 | |
113 | #define READ_CAPACITY_16 0x9e /* really SERVICE ACTION IN */ |
114 | struct scsipi_read_capacity_16 { |
115 | u_int8_t opcode; |
116 | u_int8_t byte2; |
117 | #define SRC16_SERVICE_ACTION 0x10 |
118 | u_int8_t addr[8]; |
119 | u_int8_t len[4]; |
120 | u_int8_t byte15; |
121 | #define SRC16_PMI 0x01 |
122 | u_int8_t control; |
123 | } __packed; |
124 | |
125 | struct scsipi_read_capacity_16_data { |
126 | u_int8_t addr[8]; |
127 | u_int8_t length[4]; |
128 | u_int8_t byte13; |
129 | #define SRC16D_PROT_EN 0x01 |
130 | #define SRC16D_RTO_EN 0x02 |
131 | u_int8_t reserved[19]; |
132 | } __packed; |
133 | |
134 | /* XXX SBC-2 says this is vendor-specific */ |
135 | #define READ_FORMAT_CAPACITIES 0x23 |
136 | struct scsipi_read_format_capacities { |
137 | u_int8_t opcode; |
138 | u_int8_t byte2; |
139 | u_int8_t reserved1[5]; |
140 | u_int8_t length[2]; |
141 | u_int8_t reserved2[3]; |
142 | } __packed; |
143 | |
144 | struct { |
145 | u_int8_t [3]; |
146 | u_int8_t ; |
147 | } __packed; |
148 | |
149 | struct scsipi_capacity_descriptor { |
150 | u_int8_t nblks[4]; |
151 | u_int8_t byte5; |
152 | u_int8_t blklen[3]; |
153 | } __packed; |
154 | |
155 | /* codes only valid in the current/maximum capacity descriptor */ |
156 | #define SCSIPI_CAP_DESC_CODE_MASK 0x3 |
157 | #define SCSIPI_CAP_DESC_CODE_RESERVED 0x0 |
158 | #define SCSIPI_CAP_DESC_CODE_UNFORMATTED 0x1 |
159 | #define SCSIPI_CAP_DESC_CODE_FORMATTED 0x2 |
160 | #define SCSIPI_CAP_DESC_CODE_NONE 0x3 |
161 | |
162 | #endif /* _DEV_SCSIPI_SCSIPI_DISK_H_ */ |
163 | |