1*10696SDavid.Hollister@Sun.COM /* 2*10696SDavid.Hollister@Sun.COM * CDDL HEADER START 3*10696SDavid.Hollister@Sun.COM * 4*10696SDavid.Hollister@Sun.COM * The contents of this file are subject to the terms of the 5*10696SDavid.Hollister@Sun.COM * Common Development and Distribution License (the "License"). 6*10696SDavid.Hollister@Sun.COM * You may not use this file except in compliance with the License. 7*10696SDavid.Hollister@Sun.COM * 8*10696SDavid.Hollister@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*10696SDavid.Hollister@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*10696SDavid.Hollister@Sun.COM * See the License for the specific language governing permissions 11*10696SDavid.Hollister@Sun.COM * and limitations under the License. 12*10696SDavid.Hollister@Sun.COM * 13*10696SDavid.Hollister@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*10696SDavid.Hollister@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*10696SDavid.Hollister@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*10696SDavid.Hollister@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*10696SDavid.Hollister@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*10696SDavid.Hollister@Sun.COM * 19*10696SDavid.Hollister@Sun.COM * CDDL HEADER END 20*10696SDavid.Hollister@Sun.COM * 21*10696SDavid.Hollister@Sun.COM * 22*10696SDavid.Hollister@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*10696SDavid.Hollister@Sun.COM * Use is subject to license terms. 24*10696SDavid.Hollister@Sun.COM */ 25*10696SDavid.Hollister@Sun.COM /* 26*10696SDavid.Hollister@Sun.COM * ATAPI-7 Definitions (subset) that include Serial ATA 27*10696SDavid.Hollister@Sun.COM * ATA/ATAPI-7 V3 (d1532v3r4b-ATA-ATAPI-7) 28*10696SDavid.Hollister@Sun.COM */ 29*10696SDavid.Hollister@Sun.COM #ifndef _ATAPI7V3_H 30*10696SDavid.Hollister@Sun.COM #define _ATAPI7V3_H 31*10696SDavid.Hollister@Sun.COM #ifdef __cplusplus 32*10696SDavid.Hollister@Sun.COM extern "C" { 33*10696SDavid.Hollister@Sun.COM #endif 34*10696SDavid.Hollister@Sun.COM 35*10696SDavid.Hollister@Sun.COM /* 36*10696SDavid.Hollister@Sun.COM * Register - Host to Device FIS 37*10696SDavid.Hollister@Sun.COM */ 38*10696SDavid.Hollister@Sun.COM typedef struct { 39*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 40*10696SDavid.Hollister@Sun.COM uint8_t idcbits; 41*10696SDavid.Hollister@Sun.COM uint8_t cmd; 42*10696SDavid.Hollister@Sun.COM uint8_t features; 43*10696SDavid.Hollister@Sun.COM #define FEATURE_LBA 0x40 44*10696SDavid.Hollister@Sun.COM uint8_t lba_low; 45*10696SDavid.Hollister@Sun.COM uint8_t lba_mid; 46*10696SDavid.Hollister@Sun.COM uint8_t lba_hi; 47*10696SDavid.Hollister@Sun.COM uint8_t device; 48*10696SDavid.Hollister@Sun.COM uint8_t lba_low_exp; 49*10696SDavid.Hollister@Sun.COM uint8_t lba_mid_exp; 50*10696SDavid.Hollister@Sun.COM uint8_t lba_hi_exp; 51*10696SDavid.Hollister@Sun.COM uint8_t features_exp; 52*10696SDavid.Hollister@Sun.COM uint8_t sector_count; 53*10696SDavid.Hollister@Sun.COM uint8_t sector_count_exp; 54*10696SDavid.Hollister@Sun.COM uint8_t reserved0; 55*10696SDavid.Hollister@Sun.COM uint8_t control; 56*10696SDavid.Hollister@Sun.COM uint8_t reserved1[4]; 57*10696SDavid.Hollister@Sun.COM } register_h2d_fis_t; 58*10696SDavid.Hollister@Sun.COM 59*10696SDavid.Hollister@Sun.COM /* 60*10696SDavid.Hollister@Sun.COM * Register - Device to Host FIS 61*10696SDavid.Hollister@Sun.COM */ 62*10696SDavid.Hollister@Sun.COM typedef struct { 63*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 64*10696SDavid.Hollister@Sun.COM uint8_t idcbits; 65*10696SDavid.Hollister@Sun.COM uint8_t status; 66*10696SDavid.Hollister@Sun.COM uint8_t error; 67*10696SDavid.Hollister@Sun.COM uint8_t lba_low; 68*10696SDavid.Hollister@Sun.COM uint8_t lba_mid; 69*10696SDavid.Hollister@Sun.COM uint8_t lba_hi; 70*10696SDavid.Hollister@Sun.COM uint8_t device; 71*10696SDavid.Hollister@Sun.COM uint8_t lba_low_exp; 72*10696SDavid.Hollister@Sun.COM uint8_t lba_mid_exp; 73*10696SDavid.Hollister@Sun.COM uint8_t lba_hi_exp; 74*10696SDavid.Hollister@Sun.COM uint8_t reserved0; 75*10696SDavid.Hollister@Sun.COM uint8_t sector_count; 76*10696SDavid.Hollister@Sun.COM uint8_t sector_count_exp; 77*10696SDavid.Hollister@Sun.COM uint8_t reserved1[6]; 78*10696SDavid.Hollister@Sun.COM } register_d2h_fis_t; 79*10696SDavid.Hollister@Sun.COM 80*10696SDavid.Hollister@Sun.COM typedef struct { 81*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 82*10696SDavid.Hollister@Sun.COM uint8_t idcbits; 83*10696SDavid.Hollister@Sun.COM uint8_t status_bits; 84*10696SDavid.Hollister@Sun.COM #define STATUS_HI_MASK 0xE 85*10696SDavid.Hollister@Sun.COM #define STATUS_HI_SHIFT 4 86*10696SDavid.Hollister@Sun.COM #define STATUS_LO_MASK 0x7 87*10696SDavid.Hollister@Sun.COM uint8_t error; 88*10696SDavid.Hollister@Sun.COM uint8_t reserved; 89*10696SDavid.Hollister@Sun.COM } set_device_bits_fis_t; 90*10696SDavid.Hollister@Sun.COM 91*10696SDavid.Hollister@Sun.COM typedef struct { 92*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 93*10696SDavid.Hollister@Sun.COM uint8_t reserved[3]; 94*10696SDavid.Hollister@Sun.COM } dma_activate_fis_type; 95*10696SDavid.Hollister@Sun.COM 96*10696SDavid.Hollister@Sun.COM typedef struct { 97*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 98*10696SDavid.Hollister@Sun.COM uint8_t idcbits; 99*10696SDavid.Hollister@Sun.COM uint8_t reserved0[2]; 100*10696SDavid.Hollister@Sun.COM uint32_t dma_buffer_id_lo; 101*10696SDavid.Hollister@Sun.COM uint32_t dma_buffer_id_hi; 102*10696SDavid.Hollister@Sun.COM uint32_t reserved1; 103*10696SDavid.Hollister@Sun.COM uint32_t dma_buffer_offset; 104*10696SDavid.Hollister@Sun.COM uint32_t dma_buffer_count; 105*10696SDavid.Hollister@Sun.COM uint32_t reserved2; 106*10696SDavid.Hollister@Sun.COM } dma_fpactivate_fis_t; 107*10696SDavid.Hollister@Sun.COM 108*10696SDavid.Hollister@Sun.COM typedef struct { 109*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 110*10696SDavid.Hollister@Sun.COM uint8_t reserved0; 111*10696SDavid.Hollister@Sun.COM uint8_t bist_bits; 112*10696SDavid.Hollister@Sun.COM uint8_t reserved1; 113*10696SDavid.Hollister@Sun.COM uint8_t data[8]; 114*10696SDavid.Hollister@Sun.COM } bist_activate_fis_t; 115*10696SDavid.Hollister@Sun.COM #define BIST_T 0x80 116*10696SDavid.Hollister@Sun.COM #define BIST_A 0x40 117*10696SDavid.Hollister@Sun.COM #define BIST_S 0x20 118*10696SDavid.Hollister@Sun.COM #define BIST_L 0x10 119*10696SDavid.Hollister@Sun.COM #define BIST_F 0x08 120*10696SDavid.Hollister@Sun.COM #define BIST_P 0x04 121*10696SDavid.Hollister@Sun.COM #define BIST_V 0x01 122*10696SDavid.Hollister@Sun.COM 123*10696SDavid.Hollister@Sun.COM typedef struct { 124*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 125*10696SDavid.Hollister@Sun.COM uint8_t idcbits; 126*10696SDavid.Hollister@Sun.COM uint8_t status; 127*10696SDavid.Hollister@Sun.COM uint8_t error; 128*10696SDavid.Hollister@Sun.COM uint8_t lba_low; 129*10696SDavid.Hollister@Sun.COM uint8_t lba_mid; 130*10696SDavid.Hollister@Sun.COM uint8_t lba_high; 131*10696SDavid.Hollister@Sun.COM uint8_t device; 132*10696SDavid.Hollister@Sun.COM uint8_t lba_low_exp; 133*10696SDavid.Hollister@Sun.COM uint8_t lba_mid_exp; 134*10696SDavid.Hollister@Sun.COM uint8_t lba_high_exp; 135*10696SDavid.Hollister@Sun.COM uint8_t reserved0; 136*10696SDavid.Hollister@Sun.COM uint8_t sector_count; 137*10696SDavid.Hollister@Sun.COM uint8_t sector_count_exp; 138*10696SDavid.Hollister@Sun.COM uint8_t reserved1; 139*10696SDavid.Hollister@Sun.COM uint8_t E_status; 140*10696SDavid.Hollister@Sun.COM uint16_t transfer_count; 141*10696SDavid.Hollister@Sun.COM uint16_t reserved2; 142*10696SDavid.Hollister@Sun.COM } pio_setup_fis_t; 143*10696SDavid.Hollister@Sun.COM 144*10696SDavid.Hollister@Sun.COM typedef struct { 145*10696SDavid.Hollister@Sun.COM uint8_t fis_type; 146*10696SDavid.Hollister@Sun.COM uint32_t dwords[1]; 147*10696SDavid.Hollister@Sun.COM } bidirectional_fis_t; 148*10696SDavid.Hollister@Sun.COM 149*10696SDavid.Hollister@Sun.COM /* 150*10696SDavid.Hollister@Sun.COM * FIS Types 151*10696SDavid.Hollister@Sun.COM */ 152*10696SDavid.Hollister@Sun.COM 153*10696SDavid.Hollister@Sun.COM #define FIS_REG_H2DEV 0x27 /* 5 DWORDS */ 154*10696SDavid.Hollister@Sun.COM #define FIS_REG_D2H 0x34 /* 5 DWORDS */ 155*10696SDavid.Hollister@Sun.COM #define FIS_SET_DEVICE_BITS 0xA1 /* 2 DWORDS */ 156*10696SDavid.Hollister@Sun.COM #define FIS_DMA_ACTIVATE 0x39 /* 1 DWORD */ 157*10696SDavid.Hollister@Sun.COM #define FIS_DMA_FPSETUP 0x41 /* 7 DWORDS */ 158*10696SDavid.Hollister@Sun.COM #define FIS_BIST_ACTIVATE 0x58 /* 3 DWORDS */ 159*10696SDavid.Hollister@Sun.COM #define FIS_PIO_SETUP 0x5F /* 5 DWORDS */ 160*10696SDavid.Hollister@Sun.COM #define FIS_BI 0x46 /* 1 DWORD min, 2048 DWORD max */ 161*10696SDavid.Hollister@Sun.COM 162*10696SDavid.Hollister@Sun.COM /* 163*10696SDavid.Hollister@Sun.COM * IDC bits 164*10696SDavid.Hollister@Sun.COM */ 165*10696SDavid.Hollister@Sun.COM #define C_BIT 0x80 166*10696SDavid.Hollister@Sun.COM #define I_BIT 0x40 167*10696SDavid.Hollister@Sun.COM #define D_BIT 0x20 168*10696SDavid.Hollister@Sun.COM 169*10696SDavid.Hollister@Sun.COM /* 170*10696SDavid.Hollister@Sun.COM * 28-Bit Command Mapping from ACS to FIS 171*10696SDavid.Hollister@Sun.COM * 172*10696SDavid.Hollister@Sun.COM * ACS Field FIS Field 173*10696SDavid.Hollister@Sun.COM * -------------------------------------- 174*10696SDavid.Hollister@Sun.COM * Feature (7:0) -> Feature 175*10696SDavid.Hollister@Sun.COM * Count (7:0) -> Sector Count 176*10696SDavid.Hollister@Sun.COM * LBA (7:0) -> LBA Low 177*10696SDavid.Hollister@Sun.COM * LBA (15:8) -> LBA Mid 178*10696SDavid.Hollister@Sun.COM * LBA (23:16) -> LBA High 179*10696SDavid.Hollister@Sun.COM * LBA (27:24) -> Device (3:0) 180*10696SDavid.Hollister@Sun.COM * Device (15:12) -> Device (7:4) 181*10696SDavid.Hollister@Sun.COM * Command -> Command 182*10696SDavid.Hollister@Sun.COM * 183*10696SDavid.Hollister@Sun.COM * 48- Bit Command Mapping from ACS to FIS 184*10696SDavid.Hollister@Sun.COM * 185*10696SDavid.Hollister@Sun.COM * ACS Field FIS Field 186*10696SDavid.Hollister@Sun.COM * -------------------------------------- 187*10696SDavid.Hollister@Sun.COM * Feature (7:0) -> Feature 188*10696SDavid.Hollister@Sun.COM * Feature (15:8) -> Feature (exp) 189*10696SDavid.Hollister@Sun.COM * Count (7:0) -> Sector Count 190*10696SDavid.Hollister@Sun.COM * Count (15:8) -> Sector Count (exp) 191*10696SDavid.Hollister@Sun.COM * LBA (7:0) -> LBA Low 192*10696SDavid.Hollister@Sun.COM * LBA (15:8) -> LBA Mid 193*10696SDavid.Hollister@Sun.COM * LBA (23:16) -> LBA High 194*10696SDavid.Hollister@Sun.COM * LBA (31:24) -> LBA Low (exp) 195*10696SDavid.Hollister@Sun.COM * LBA (39:32) -> LBA Mid (exp) 196*10696SDavid.Hollister@Sun.COM * LBA (47:40) -> LBA High (exp) 197*10696SDavid.Hollister@Sun.COM * Device (15:12) -> Device (7:4) 198*10696SDavid.Hollister@Sun.COM * Command -> Command 199*10696SDavid.Hollister@Sun.COM * 200*10696SDavid.Hollister@Sun.COM * FIS (FIS_REG_H2DEV) layout: 201*10696SDavid.Hollister@Sun.COM * 202*10696SDavid.Hollister@Sun.COM * 31.........24 23...........16 15....................8.7.............0 203*10696SDavid.Hollister@Sun.COM * FEATURE | COMMAND | C R R RESERVED | FIS TYPE 0x27 204*10696SDavid.Hollister@Sun.COM * DEVICE | LBA HIGH | LBA MID | LBA LOW 205*10696SDavid.Hollister@Sun.COM * FEATURE(exp) | LBA HIGH(exp) | LBA MID(exp) | LBA LOW(exp) 206*10696SDavid.Hollister@Sun.COM * CONTROL | RESERVED | Sector Count(exp) | Sector Count 207*10696SDavid.Hollister@Sun.COM * RESERVED | RESERVED | RESERVED | RESERVED 208*10696SDavid.Hollister@Sun.COM * 209*10696SDavid.Hollister@Sun.COM * FIS (FIS_REG_D2H) layout: 210*10696SDavid.Hollister@Sun.COM * 211*10696SDavid.Hollister@Sun.COM * 31.........24 23...........16 15....................8.7.............0 212*10696SDavid.Hollister@Sun.COM * ERROR | STATUS | R I R RESERVED | FIS TYPE 0x34 213*10696SDavid.Hollister@Sun.COM * DEVICE | LBA HIGH | LBA MID | LBA LOW 214*10696SDavid.Hollister@Sun.COM * RESERVED | LBA HIGH(exp) | LBA MID(exp) | LBA LOW(exp) 215*10696SDavid.Hollister@Sun.COM * RESERVED | RESERVED | Sector Count(exp) | Sector Count 216*10696SDavid.Hollister@Sun.COM * RESERVED | RESERVED | RESERVED | RESERVED 217*10696SDavid.Hollister@Sun.COM */ 218*10696SDavid.Hollister@Sun.COM 219*10696SDavid.Hollister@Sun.COM 220*10696SDavid.Hollister@Sun.COM /* 221*10696SDavid.Hollister@Sun.COM * Reasonable size to reserve for holding the most common FIS types. 222*10696SDavid.Hollister@Sun.COM */ 223*10696SDavid.Hollister@Sun.COM typedef uint32_t fis_t[5]; 224*10696SDavid.Hollister@Sun.COM 225*10696SDavid.Hollister@Sun.COM #ifdef __cplusplus 226*10696SDavid.Hollister@Sun.COM } 227*10696SDavid.Hollister@Sun.COM #endif 228*10696SDavid.Hollister@Sun.COM #endif /* _ATAPI7V3_H */ 229