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