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 31 extern "C" { 32 #endif 33 34 #include "ata8-acs.h" 35 #include "atapi7v3.h" 36 37 /* 38 * IDENTIFY Data 39 */ 40 typedef 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