]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Include/IndustryStandard/atapi.h
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / IndustryStandard / atapi.h
1 /*++
2
3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 Atapi.h
15
16 Abstract:
17
18
19 Revision History
20 --*/
21
22 #ifndef _ATAPI_H
23 #define _ATAPI_H
24
25 #include "Tiano.h"
26
27 #pragma pack(1)
28
29 typedef struct {
30 UINT16 config; /* General Configuration */
31 UINT16 cylinders; /* Number of Cylinders */
32 UINT16 reserved_2;
33 UINT16 heads; /* Number of logical heads */
34 UINT16 vendor_data1;
35 UINT16 vendoe_data2;
36 UINT16 sectors_per_track;
37 UINT16 vendor_specific_7_9[3];
38 CHAR8 SerialNo[20]; /* ASCII */
39 UINT16 vendor_specific_20_21[2];
40 UINT16 ecc_bytes_available;
41 CHAR8 FirmwareVer[8]; /* ASCII */
42 CHAR8 ModelName[40]; /* ASCII */
43 UINT16 multi_sector_cmd_max_sct_cnt;
44 UINT16 reserved_48;
45 UINT16 capabilities;
46 UINT16 reserved_50;
47 UINT16 pio_cycle_timing;
48 UINT16 reserved_52;
49 UINT16 field_validity;
50 UINT16 current_cylinders;
51 UINT16 current_heads;
52 UINT16 current_sectors;
53 UINT16 CurrentCapacityLsb;
54 UINT16 CurrentCapacityMsb;
55 UINT16 reserved_59;
56 UINT16 user_addressable_sectors_lo;
57 UINT16 user_addressable_sectors_hi;
58 UINT16 reserved_62;
59 UINT16 multi_word_dma_mode;
60 UINT16 advanced_pio_modes;
61 UINT16 min_multi_word_dma_cycle_time;
62 UINT16 rec_multi_word_dma_cycle_time;
63 UINT16 min_pio_cycle_time_without_flow_control;
64 UINT16 min_pio_cycle_time_with_flow_control;
65 UINT16 reserved_69_79[11];
66 UINT16 major_version_no;
67 UINT16 minor_version_no;
68 UINT16 reserved_82_127[46];
69 UINT16 security_status;
70 UINT16 vendor_data_129_159[31];
71 UINT16 reserved_160_255[96];
72 } IDENTIFY;
73
74 typedef struct {
75 UINT8 peripheral_type;
76 UINT8 RMB;
77 UINT8 version;
78 UINT8 response_data_format;
79 UINT8 addnl_length;
80 UINT8 reserved_5;
81 UINT8 reserved_6;
82 UINT8 reserved_7;
83 UINT8 vendor_info[8];
84 UINT8 product_id[12];
85 UINT8 eeprom_product_code[4];
86 UINT8 firmware_rev_level[4];
87 UINT8 firmware_sub_rev_level[1];
88 UINT8 reserved_37;
89 UINT8 reserved_38;
90 UINT8 reserved_39;
91 UINT8 max_capacity_hi;
92 UINT8 max_capacity_mid;
93 UINT8 max_capacity_lo;
94 UINT8 reserved_43_95[95 - 43 + 1];
95 UINT8 vendor_id[20];
96 UINT8 eeprom_drive_sno[12];
97 } INQUIRY_DATA;
98
99 typedef struct {
100 UINT8 error_code : 7;
101 UINT8 valid : 1;
102 UINT8 reserved_1;
103 UINT8 sense_key : 4;
104 UINT8 reserved_21 : 1;
105 UINT8 ILI : 1;
106 UINT8 reserved_22 : 2;
107 UINT8 vendor_specific_3;
108 UINT8 vendor_specific_4;
109 UINT8 vendor_specific_5;
110 UINT8 vendor_specific_6;
111 UINT8 addnl_sense_length; // n - 7
112 UINT8 vendor_specific_8;
113 UINT8 vendor_specific_9;
114 UINT8 vendor_specific_10;
115 UINT8 vendor_specific_11;
116 UINT8 addnl_sense_code; // mandatory
117 UINT8 addnl_sense_code_qualifier; // mandatory
118 UINT8 field_replaceable_unit_code; // optional
119 UINT8 reserved_15;
120 UINT8 reserved_16;
121 UINT8 reserved_17;
122 //
123 // Followed by additional sense bytes : FIXME
124 //
125 } REQUEST_SENSE_DATA;
126
127 typedef struct {
128 UINT8 LastLba3;
129 UINT8 LastLba2;
130 UINT8 LastLba1;
131 UINT8 LastLba0;
132 UINT8 BlockSize3;
133 UINT8 BlockSize2;
134 UINT8 BlockSize1;
135 UINT8 BlockSize0;
136 } READ_CAPACITY_DATA;
137
138 typedef struct {
139 UINT8 reserved_0;
140 UINT8 reserved_1;
141 UINT8 reserved_2;
142 UINT8 Capacity_Length;
143 UINT8 LastLba3;
144 UINT8 LastLba2;
145 UINT8 LastLba1;
146 UINT8 LastLba0;
147 UINT8 DesCode : 2;
148 UINT8 reserved_9 : 6;
149 UINT8 BlockSize2;
150 UINT8 BlockSize1;
151 UINT8 BlockSize0;
152 } READ_FORMAT_CAPACITY_DATA;
153
154 #pragma pack()
155 //
156 // ATAPI Command
157 //
158 #define ATAPI_SOFT_RESET_CMD 0x08
159 #define PACKET_CMD 0xA0
160 #define ATAPI_IDENTIFY_DEVICE_CMD 0xA1
161 #define ATAPI_SERVICE_CMD 0xA2
162
163 //
164 // ATAPI Packet Command
165 //
166 #pragma pack(1)
167
168 typedef struct {
169 UINT8 opcode;
170 UINT8 reserved_1;
171 UINT8 reserved_2;
172 UINT8 reserved_3;
173 UINT8 reserved_4;
174 UINT8 reserved_5;
175 UINT8 reserved_6;
176 UINT8 reserved_7;
177 UINT8 reserved_8;
178 UINT8 reserved_9;
179 UINT8 reserved_10;
180 UINT8 reserved_11;
181 } TEST_UNIT_READY_CMD;
182
183 typedef struct {
184 UINT8 opcode;
185 UINT8 reserved_1 : 4;
186 UINT8 lun : 4;
187 UINT8 page_code;
188 UINT8 reserved_3;
189 UINT8 allocation_length;
190 UINT8 reserved_5;
191 UINT8 reserved_6;
192 UINT8 reserved_7;
193 UINT8 reserved_8;
194 UINT8 reserved_9;
195 UINT8 reserved_10;
196 UINT8 reserved_11;
197 } INQUIRY_CMD;
198
199 typedef struct {
200 UINT8 opcode;
201 UINT8 reserved_1 : 4;
202 UINT8 lun : 4;
203 UINT8 reserved_2;
204 UINT8 reserved_3;
205 UINT8 allocation_length;
206 UINT8 reserved_5;
207 UINT8 reserved_6;
208 UINT8 reserved_7;
209 UINT8 reserved_8;
210 UINT8 reserved_9;
211 UINT8 reserved_10;
212 UINT8 reserved_11;
213 } REQUEST_SENSE_CMD;
214
215 typedef struct {
216 UINT8 opcode;
217 UINT8 reserved_1 : 5;
218 UINT8 lun : 3;
219 UINT8 Lba0;
220 UINT8 Lba1;
221 UINT8 Lba2;
222 UINT8 Lba3;
223 UINT8 reserved_6;
224 UINT8 TranLen0;
225 UINT8 TranLen1;
226 UINT8 reserved_9;
227 UINT8 reserved_10;
228 UINT8 reserved_11;
229 } READ10_CMD;
230
231 typedef struct {
232 UINT8 opcode;
233 UINT8 reserved_1;
234 UINT8 reserved_2;
235 UINT8 reserved_3;
236 UINT8 reserved_4;
237 UINT8 reserved_5;
238 UINT8 reserved_6;
239 UINT8 allocation_length_hi;
240 UINT8 allocation_length_lo;
241 UINT8 reserved_9;
242 UINT8 reserved_10;
243 UINT8 reserved_11;
244 } READ_FORMAT_CAP_CMD;
245
246 typedef struct {
247 UINT8 peripheral_type;
248 UINT8 RMB;
249 UINT8 version;
250 UINT8 response_data_format;
251 UINT8 addnl_length;
252 UINT8 reserved_5;
253 UINT8 reserved_6;
254 UINT8 reserved_7;
255 UINT8 vendor_info[8];
256 UINT8 product_id[12];
257 UINT8 eeprom_product_code[4];
258 UINT8 firmware_rev_level[4];
259 } USB_INQUIRY_DATA;
260
261 typedef union {
262 UINT16 Data16[6];
263 TEST_UNIT_READY_CMD TestUnitReady;
264 READ10_CMD Read10;
265 REQUEST_SENSE_CMD RequestSence;
266 INQUIRY_CMD Inquiry;
267 READ_FORMAT_CAP_CMD ReadFormatCapacity;
268 } ATAPI_PACKET_COMMAND;
269
270 #pragma pack()
271 //
272 // Packet Command Code
273 //
274 #define TEST_UNIT_READY 0x00
275 #define REQUEST_SENSE 0x03
276 #define INQUIRY 0x12
277 #define READ_FORMAT_CAPACITY 0x23
278 #define READ_CAPACITY 0x25
279 #define READ_10 0x28
280
281 #define DEFAULT_CTL (0x0a) // default content of device control register, disable INT
282 #define DEFAULT_CMD (0xa0)
283
284 #define MAX_ATAPI_BYTE_COUNT (0xfffe)
285
286 //
287 // Sense Key
288 //
289 #define REQUEST_SENSE_ERROR (0x70)
290 #define SK_NO_SENSE (0x0)
291 #define SK_RECOVERY_ERROR (0x1)
292 #define SK_NOT_READY (0x2)
293 #define SK_MEDIUM_ERROR (0x3)
294 #define SK_HARDWARE_ERROR (0x4)
295 #define SK_ILLEGAL_REQUEST (0x5)
296 #define SK_UNIT_ATTENTION (0x6)
297 #define SK_DATA_PROTECT (0x7)
298 #define SK_BLANK_CHECK (0x8)
299 #define SK_VENDOR_SPECIFIC (0x9)
300 #define SK_RESERVED_A (0xA)
301 #define SK_ABORT (0xB)
302 #define SK_RESERVED_C (0xC)
303 #define SK_OVERFLOW (0xD)
304 #define SK_MISCOMPARE (0xE)
305 #define SK_RESERVED_F (0xF)
306
307 //
308 // Additional Sense Codes
309 //
310 #define ASC_NOT_READY (0x04)
311 #define ASC_MEDIA_ERR1 (0x10)
312 #define ASC_MEDIA_ERR2 (0x11)
313 #define ASC_MEDIA_ERR3 (0x14)
314 #define ASC_MEDIA_ERR4 (0x30)
315 #define ASC_MEDIA_UPSIDE_DOWN (0x06)
316 #define ASC_INVALID_CMD (0x20)
317 #define ASC_LBA_OUT_OF_RANGE (0x21)
318 #define ASC_INVALID_FIELD (0x24)
319 #define ASC_WRITE_PROTECTED (0x27)
320 #define ASC_MEDIA_CHANGE (0x28)
321 #define ASC_RESET (0x29) /* Power On Reset or Bus Reset occurred */
322 #define ASC_ILLEGAL_FIELD (0x26)
323 #define ASC_NO_MEDIA (0x3A)
324 #define ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)
325
326 //
327 // Additional Sense Code Qualifier
328 //
329 #define ASCQ_IN_PROGRESS (0x01)
330
331 #endif