1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 1996-2001 by Sun Microsystems, Inc. 24*7c478bd9Sstevel@tonic-gate * All rights reserved. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_DADA_IMPL_COMMANDS_H 28*7c478bd9Sstevel@tonic-gate #define _SYS_DADA_IMPL_COMMANDS_H 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 33*7c478bd9Sstevel@tonic-gate extern "C" { 34*7c478bd9Sstevel@tonic-gate #endif 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate /* 37*7c478bd9Sstevel@tonic-gate * Implementation dependent view of a ATA command descriptor block 38*7c478bd9Sstevel@tonic-gate */ 39*7c478bd9Sstevel@tonic-gate 40*7c478bd9Sstevel@tonic-gate struct dcd_cmd { 41*7c478bd9Sstevel@tonic-gate uchar_t cmd; /* The ATA command */ 42*7c478bd9Sstevel@tonic-gate uchar_t address_mode; /* Mode of addressing */ 43*7c478bd9Sstevel@tonic-gate uchar_t direction; /* Not SCSI to be indicated */ 44*7c478bd9Sstevel@tonic-gate uchar_t features; /* Any features to be enabled */ 45*7c478bd9Sstevel@tonic-gate uint_t size; /* size in bytes */ 46*7c478bd9Sstevel@tonic-gate uint_t version; /* version number */ 47*7c478bd9Sstevel@tonic-gate union { 48*7c478bd9Sstevel@tonic-gate uint_t lba_num; /* LBA number if LBA */ 49*7c478bd9Sstevel@tonic-gate /* mode is used */ 50*7c478bd9Sstevel@tonic-gate struct chs { 51*7c478bd9Sstevel@tonic-gate ushort_t cylinder; /* Cylinder Number */ 52*7c478bd9Sstevel@tonic-gate uchar_t head; /* Head number */ 53*7c478bd9Sstevel@tonic-gate uchar_t sector; /* Sector Number */ 54*7c478bd9Sstevel@tonic-gate } chs_address; 55*7c478bd9Sstevel@tonic-gate } sector_num; 56*7c478bd9Sstevel@tonic-gate }; 57*7c478bd9Sstevel@tonic-gate 58*7c478bd9Sstevel@tonic-gate #define GETATACMD(cdb) ((cdb)->cmd) 59*7c478bd9Sstevel@tonic-gate 60*7c478bd9Sstevel@tonic-gate /* 61*7c478bd9Sstevel@tonic-gate * Direct Access Device Capacity Structure 62*7c478bd9Sstevel@tonic-gate */ 63*7c478bd9Sstevel@tonic-gate struct dcd_capacity { 64*7c478bd9Sstevel@tonic-gate uchar_t heads; 65*7c478bd9Sstevel@tonic-gate uchar_t sectors; 66*7c478bd9Sstevel@tonic-gate ushort_t ncyls; 67*7c478bd9Sstevel@tonic-gate uint_t capacity; 68*7c478bd9Sstevel@tonic-gate uint_t lbasize; 69*7c478bd9Sstevel@tonic-gate }; 70*7c478bd9Sstevel@tonic-gate 71*7c478bd9Sstevel@tonic-gate 72*7c478bd9Sstevel@tonic-gate /* The following are the defines for the commands. */ 73*7c478bd9Sstevel@tonic-gate 74*7c478bd9Sstevel@tonic-gate #define IDENTIFY 0xEC /* Identify Device */ 75*7c478bd9Sstevel@tonic-gate #define IDENTIFY_DMA 0xEE /* Identify DMA */ 76*7c478bd9Sstevel@tonic-gate #define ATA_RECALIBRATE 0x10 /* Recalibrate */ 77*7c478bd9Sstevel@tonic-gate #define ATA_READ 0x20 /* With retries */ 78*7c478bd9Sstevel@tonic-gate #define ATA_WRITE 0x30 /* With retries */ 79*7c478bd9Sstevel@tonic-gate #define ATA_SET_MULTIPLE 0xC6 /* Set Multiple */ 80*7c478bd9Sstevel@tonic-gate #define ATA_READ_MULTIPLE 0xC4 /* Read Multiple */ 81*7c478bd9Sstevel@tonic-gate #define ATA_WRITE_MULTIPLE 0xC5 /* Write Multiple */ 82*7c478bd9Sstevel@tonic-gate #define ATA_READ_DMA 0xC8 /* Read DMA with retries */ 83*7c478bd9Sstevel@tonic-gate #define ATA_WRITE_DMA 0xCA /* Write DMA with reties */ 84*7c478bd9Sstevel@tonic-gate #define ATA_SET_FEATURES 0xEF /* Set features */ 85*7c478bd9Sstevel@tonic-gate #define ATA_IDLE_IMMEDIATE 0xE1 /* Idle immediate */ 86*7c478bd9Sstevel@tonic-gate #define ATA_STANDBY_IMMEDIATE 0xE0 /* Standby Immediate */ 87*7c478bd9Sstevel@tonic-gate #define ATA_FLUSH_CACHE 0xE7 /* Flush Cache */ 88*7c478bd9Sstevel@tonic-gate #define ATA_DOWNLOAD_MICROCODE 0x92 /* Download microcode */ 89*7c478bd9Sstevel@tonic-gate 90*7c478bd9Sstevel@tonic-gate /* The following are the defines for the direction. */ 91*7c478bd9Sstevel@tonic-gate 92*7c478bd9Sstevel@tonic-gate #define DATA_READ 0x01 /* READ from disk */ 93*7c478bd9Sstevel@tonic-gate #define DATA_WRITE 0x02 /* WRITE to disk */ 94*7c478bd9Sstevel@tonic-gate #define NO_DATA_XFER 0x00 /* No data xfer involved */ 95*7c478bd9Sstevel@tonic-gate 96*7c478bd9Sstevel@tonic-gate /* The following are the defines for the address mode */ 97*7c478bd9Sstevel@tonic-gate 98*7c478bd9Sstevel@tonic-gate #define ADD_LBA_MODE 0x01 /* LBA Mode of addressing */ 99*7c478bd9Sstevel@tonic-gate #define ADD_CHS_MODE 0x02 /* Cylinder Head Sector mode */ 100*7c478bd9Sstevel@tonic-gate 101*7c478bd9Sstevel@tonic-gate /* The following are the usefull subcommands for set features command */ 102*7c478bd9Sstevel@tonic-gate #define ATA_FEATURE_SET_MODE 0x03 /* This sets the mode */ 103*7c478bd9Sstevel@tonic-gate 104*7c478bd9Sstevel@tonic-gate /* The following are the masks which are used for enabling DMA or PIO */ 105*7c478bd9Sstevel@tonic-gate #define ENABLE_PIO_FEATURE 0x08 /* PIO with flow control */ 106*7c478bd9Sstevel@tonic-gate #define ENABLE_DMA_FEATURE 0x20 /* Enable DMA */ 107*7c478bd9Sstevel@tonic-gate #define ENABLE_ULTRA_FEATURE 0x40 /* Enable ULTRA DMA */ 108*7c478bd9Sstevel@tonic-gate 109*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 110*7c478bd9Sstevel@tonic-gate } 111*7c478bd9Sstevel@tonic-gate #endif 112*7c478bd9Sstevel@tonic-gate 113*7c478bd9Sstevel@tonic-gate #endif /* _SYS_DADA_IMPL_COMMANDS_H */ 114