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