commands.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (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 (c) 1996-2001 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_DADA_IMPL_COMMANDS_H
#define _SYS_DADA_IMPL_COMMANDS_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Implementation dependent view of a ATA command descriptor block
*/
struct dcd_cmd {
uchar_t cmd; /* The ATA command */
uchar_t address_mode; /* Mode of addressing */
uchar_t direction; /* Not SCSI to be indicated */
uchar_t features; /* Any features to be enabled */
uint_t size; /* size in bytes */
uint_t version; /* version number */
union {
uint_t lba_num; /* LBA number if LBA */
/* mode is used */
struct chs {
ushort_t cylinder; /* Cylinder Number */
uchar_t head; /* Head number */
uchar_t sector; /* Sector Number */
} chs_address;
} sector_num;
};
#define GETATACMD(cdb) ((cdb)->cmd)
/*
* Direct Access Device Capacity Structure
*/
struct dcd_capacity {
uchar_t heads;
uchar_t sectors;
ushort_t ncyls;
uint_t capacity;
uint_t lbasize;
};
/* The following are the defines for the commands. */
#define IDENTIFY 0xEC /* Identify Device */
#define IDENTIFY_DMA 0xEE /* Identify DMA */
#define ATA_RECALIBRATE 0x10 /* Recalibrate */
#define ATA_READ 0x20 /* With retries */
#define ATA_WRITE 0x30 /* With retries */
#define ATA_SET_MULTIPLE 0xC6 /* Set Multiple */
#define ATA_READ_MULTIPLE 0xC4 /* Read Multiple */
#define ATA_WRITE_MULTIPLE 0xC5 /* Write Multiple */
#define ATA_READ_DMA 0xC8 /* Read DMA with retries */
#define ATA_WRITE_DMA 0xCA /* Write DMA with reties */
#define ATA_SET_FEATURES 0xEF /* Set features */
#define ATA_IDLE_IMMEDIATE 0xE1 /* Idle immediate */
#define ATA_STANDBY_IMMEDIATE 0xE0 /* Standby Immediate */
#define ATA_FLUSH_CACHE 0xE7 /* Flush Cache */
#define ATA_DOWNLOAD_MICROCODE 0x92 /* Download microcode */
/* The following are the defines for the direction. */
#define DATA_READ 0x01 /* READ from disk */
#define DATA_WRITE 0x02 /* WRITE to disk */
#define NO_DATA_XFER 0x00 /* No data xfer involved */
/* The following are the defines for the address mode */
#define ADD_LBA_MODE 0x01 /* LBA Mode of addressing */
#define ADD_CHS_MODE 0x02 /* Cylinder Head Sector mode */
/* The following are the usefull subcommands for set features command */
#define ATA_FEATURE_SET_MODE 0x03 /* This sets the mode */
/* The following are the masks which are used for enabling DMA or PIO */
#define ENABLE_PIO_FEATURE 0x08 /* PIO with flow control */
#define ENABLE_DMA_FEATURE 0x20 /* Enable DMA */
#define ENABLE_ULTRA_FEATURE 0x40 /* Enable ULTRA DMA */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_DADA_IMPL_COMMANDS_H */