blob: f503d856ff825ec55a3b459a3e38ce121ac412ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
/*
* CDDL HEADER START
*
* 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]
*
* CDDL HEADER END
*
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* Misc ATA definitions
*/
#ifndef _ATA_H
#define _ATA_H
#ifdef __cplusplus
extern "C" {
#endif
#include "ata8-acs.h"
#include "atapi7v3.h"
/*
* IDENTIFY Data
*/
typedef struct {
uint16_t word0;
uint16_t word1;
uint16_t word2;
uint16_t word3;
uint16_t word4;
uint16_t word5;
uint16_t word6;
uint16_t word7;
uint16_t word8;
uint16_t word9;
uint16_t serial_number[10];
uint16_t word20;
uint16_t word21;
uint16_t word22;
uint16_t firmware_revision[4];
uint16_t model_number[20];
uint16_t word47;
uint16_t word48;
uint16_t word49;
uint16_t word50;
uint16_t word51;
uint16_t word52;
uint16_t word53;
uint16_t word54;
uint16_t word55;
uint16_t word56;
uint16_t word57;
uint16_t word58;
uint16_t word59;
uint16_t word60;
uint16_t word61;
uint16_t word62;
uint16_t word63;
uint16_t word64;
uint16_t word65;
uint16_t word66;
uint16_t word67;
uint16_t word68;
uint16_t word69;
uint16_t word70;
uint16_t word71;
uint16_t word72;
uint16_t word73;
uint16_t word74;
uint16_t word75;
uint16_t word76;
uint16_t word77;
uint16_t word78;
uint16_t word79;
uint16_t word80;
uint16_t word81;
uint16_t word82;
uint16_t word83;
uint16_t word84;
uint16_t word85;
uint16_t word86;
uint16_t word87;
uint16_t word88;
uint16_t word89;
uint16_t word90;
uint16_t word91;
uint16_t word92;
uint16_t word93;
uint16_t word94;
uint16_t word95;
uint16_t word96;
uint16_t word97;
uint16_t word98;
uint16_t word99;
uint16_t word100;
uint16_t word101;
uint16_t word102;
uint16_t word103;
uint16_t word104;
uint16_t word105;
uint16_t word106;
uint16_t word107;
uint16_t word108;
uint16_t word109;
uint16_t word110;
uint16_t word111;
uint16_t word112;
uint16_t word113;
uint16_t word114;
uint16_t word115;
uint16_t word116;
uint16_t word117;
uint16_t word118;
uint16_t word119;
uint16_t word120;
uint16_t word121;
uint16_t word122;
uint16_t word123;
uint16_t word124;
uint16_t word125;
uint16_t word126;
uint16_t word127;
uint16_t word128;
uint16_t word129;
uint16_t word130;
uint16_t word131;
uint16_t word132;
uint16_t word133;
uint16_t word134;
uint16_t word135;
uint16_t word136;
uint16_t word137;
uint16_t word138;
uint16_t word139;
uint16_t word140;
uint16_t word141;
uint16_t word142;
uint16_t word143;
uint16_t word144;
uint16_t word145;
uint16_t word146;
uint16_t word147;
uint16_t word148;
uint16_t word149;
uint16_t word150;
uint16_t word151;
uint16_t word152;
uint16_t word153;
uint16_t word154;
uint16_t word155;
uint16_t word156;
uint16_t word157;
uint16_t word158;
uint16_t word159;
uint16_t word160;
uint16_t word161;
uint16_t word162;
uint16_t word163;
uint16_t word164;
uint16_t word165;
uint16_t word166;
uint16_t word167;
uint16_t word168;
uint16_t word169;
uint16_t word170;
uint16_t word171;
uint16_t word172;
uint16_t word173;
uint16_t word174;
uint16_t word175;
uint16_t word176;
uint16_t word177;
uint16_t word178;
uint16_t word179;
uint16_t word180;
uint16_t word181;
uint16_t word182;
uint16_t word183;
uint16_t word184;
uint16_t word185;
uint16_t word186;
uint16_t word187;
uint16_t word188;
uint16_t word189;
uint16_t word190;
uint16_t word191;
uint16_t word192;
uint16_t word193;
uint16_t word194;
uint16_t word195;
uint16_t word196;
uint16_t word197;
uint16_t word198;
uint16_t word199;
uint16_t word200;
uint16_t word201;
uint16_t word202;
uint16_t word203;
uint16_t word204;
uint16_t word205;
uint16_t word206;
uint16_t word207;
uint16_t word208;
uint16_t word209;
uint16_t word210;
uint16_t word211;
uint16_t word212;
uint16_t word213;
uint16_t word214;
uint16_t word215;
uint16_t word216;
uint16_t word217;
uint16_t word218;
uint16_t word219;
uint16_t word220;
uint16_t word221;
uint16_t word222;
uint16_t word223;
uint16_t word224;
uint16_t word225;
uint16_t word226;
uint16_t word227;
uint16_t word228;
uint16_t word229;
uint16_t word230;
uint16_t word231;
uint16_t word232;
uint16_t word233;
uint16_t word234;
uint16_t word235;
uint16_t word236;
uint16_t word237;
uint16_t word238;
uint16_t word239;
uint16_t word240;
uint16_t word241;
uint16_t word242;
uint16_t word243;
uint16_t word244;
uint16_t word245;
uint16_t word246;
uint16_t word247;
uint16_t word248;
uint16_t word249;
uint16_t word250;
uint16_t word251;
uint16_t word252;
uint16_t word253;
uint16_t word254;
uint16_t word255;
} ata_identify_t;
#define LBA_CAPACITY(ati) \
((LE_16(ati->word83) & (1 << 10)) == 0)? \
(LE_16(ati->word60) | ((LE_16(ati->word61)) << 16)) : \
((LE_16(ati->word100)) | ((LE_16(ati->word101)) << 16) | \
(((uint64_t)LE_16(ati->word102)) << 32) | \
(((uint64_t)LE_16(ati->word103)) << 48))
#ifdef __cplusplus
}
#endif
#endif /* _ATA_H */
|