/*
* 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 */