sata_defs.h revision 66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * or http://www.opensolaris.org/os/licensing.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifndef _SATA_DEFS_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define _SATA_DEFS_H
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#pragma ident "%Z%%M% %I% %E% SMI"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common ATA commands (subset)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_DIAG 0x90 /* diagnose command */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RECAL 0x10 /* restore cmd, 4 bits step rate */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_FORMAT 0x50 /* format track command */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SET_FEATURES 0xef /* set features */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_IDLE_IM 0xe1 /* idle immediate */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_STANDBY_IM 0xe0 /* standby immediate */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_DOOR_LOCK 0xde /* door lock */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_DOOR_UNLOCK 0xdf /* door unlock */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_IDLE 0xe3 /* idle */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * ATA/ATAPI disk commands (subset)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_DEVICE_RESET 0x08 /* ATAPI device reset */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_EJECT 0xed /* media eject */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_FLUSH_CACHE 0xe7 /* flush write-cache */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_ID_DEVICE 0xec /* IDENTIFY DEVICE */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_ID_PACKET_DEVICE 0xa1 /* ATAPI identify packet device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_INIT_DEVPARMS 0x91 /* initialize device parameters */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_PACKET 0xa0 /* ATAPI packet */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RDMULT 0xc4 /* read multiple w/DMA */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RDSEC 0x20 /* read sector */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RDVER 0x40 /* read verify */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_DMA 0xc8 /* read DMA */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SEEK 0x70 /* seek */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SERVICE 0xa2 /* queued/overlap service */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SETMULT 0xc6 /* set multiple mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_DMA 0xca /* write (multiple) w/DMA */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRMULT 0xc5 /* write multiple */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRSEC 0x30 /* write sector */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RDSEC_EXT 0x24 /* read sector extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_DMA_EXT 0x25 /* read DMA extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_RDMULT_EXT 0x29 /* read multiple extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRSEC_EXT 0x34 /* read sector extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_DMA_EXT 0x35 /* read DMA extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRMULT_EXT 0x39 /* read multiple extended (LBA48) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_DMA_QUEUED 0xc7 /* read DMA / may be queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_DMA_QUEUED_EXT 0x26 /* read DMA ext / may be queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_DMA_QUEUED 0xcc /* read DMA / may be queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_DMA_QUEUED_EXT 0x36 /* read DMA ext / may be queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_PM_REG 0xe4 /* read port mult reg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_PM_REG 0xe8 /* write port mult reg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_FPDMA_QUEUED 0x60 /* First-Party-DMA read queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_WRITE_FPDMA_QUEUED 0x61 /* First-Party-DMA write queued */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_READ_LOG_EXT 0x2f /* read log */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_LOG_PAGE_10 0x10 /* log page 0x10 - SATA error */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Power Managment Commands (subset)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_CHECK_POWER_MODE 0xe5 /* check power mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_PWRMODE_STANDBY 0 /* standby mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_PWRMODE_IDLE 0x80 /* idle mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_PWRMODE_ACTIVE 0xFF /* active or idle mode, rev7 spec */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * SET FEATURES Subcommands
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SF_ENABLE_WRITE_CACHE 0x02
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SF_TRANSFER_MODE 0x03
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SF_DISABLE_READ_AHEAD 0x55
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SF_DISABLE_WRITE_CACHE 0x82
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_SF_ENABLE_READ_AHEAD 0xaa
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * SET FEATURES transfer mode values
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_TRANSFER_MODE_PIO_DEFAULT 0x00
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_TRANSFER_MODE_PIO_DISABLE_IODRY 0x01
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_TRANSFER_MODE_PIO_FLOW_CONTROL 0x08
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_TRANSFER_MODE_MULTI_WORD_DMA 0x20
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATAC_TRANSFER_MODE_ULTRA_DMA 0x40
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Generic ATA definitions */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Identify Device data
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Although bot ATA and ATAPI devices' Identify Data has the same lenght,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * some words have different meaning/content and/or are irrelevant for
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * other type of device.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Following is the ATA Device Identify data layout
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppotypedef struct sata_id {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* WORD */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* OFFSET COMMENT */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_config; /* 0 general configuration bits */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_fixcyls; /* 1 # of cylinders (obsolete) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv0; /* 2 # reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_heads; /* 3 # of heads (obsolete) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_trksiz; /* 4 # of bytes/track (retired) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_secsiz; /* 5 # of bytes/sector (retired) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_sectors; /* 6 # of sectors/track (obsolete) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv1[3]; /* 7 "Vendor Unique" */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char ai_drvser[20]; /* 10 Serial number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_buftype; /* 20 Buffer type */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_bufsz; /* 21 Buffer size in 512 byte incr */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_ecc; /* 22 # of ecc bytes avail on rd/wr */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char ai_fw[8]; /* 23 Firmware revision */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char ai_model[40]; /* 27 Model # */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_mult1; /* 47 Multiple command flags */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_dwcap; /* 48 Doubleword capabilities */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_cap; /* 49 Capabilities */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv2; /* 50 Reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_piomode; /* 51 PIO timing mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_dmamode; /* 52 DMA timing mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_validinfo; /* 53 bit0: wds 54-58, bit1: 64-70 */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_curcyls; /* 54 # of current cylinders */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_curheads; /* 55 # of current heads */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_cursectrk; /* 56 # of current sectors/track */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_cursccp[2]; /* 57 current sectors capacity */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_mult2; /* 59 multiple sectors info */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_addrsec[2]; /* 60 LBA only: no of addr secs */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_sworddma; /* 62 single word dma modes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_dworddma; /* 63 double word dma modes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_advpiomode; /* 64 advanced PIO modes supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_minmwdma; /* 65 min multi-word dma cycle info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_recmwdma; /* 66 rec multi-word dma cycle info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_minpio; /* 67 min PIO cycle info */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_minpioflow; /* 68 min PIO cycle info w/flow ctl */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv3[2]; /* 69,70 reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_typtime[2]; /* 71-72 timing */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv4[2]; /* 73-74 reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_qdepth; /* 75 queue depth */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_satacap; /* 76 SATA capabilities */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv5; /* 77 reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_satafsup; /* 78 SATA features supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_satafenbl; /* 79 SATA features enabled */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_majorversion; /* 80 major versions supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_minorversion; /* 81 minor version number supported */
0a55fbb79ee31ed09f84a9ae28e9747bc23f4a08lm ushort_t ai_cmdset82; /* 82 command set supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_cmdset83; /* 83 more command sets supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_cmdset84; /* 84 more command sets supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_features85; /* 85 enabled features */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_features86; /* 86 enabled features */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_features87; /* 87 enabled features */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_ultradma; /* 88 Ultra DMA mode */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_erasetime; /* 89 security erase time */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_erasetimex; /* 90 enhanced security erase time */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_padding1[9]; /* pad through 99 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_addrsecxt[4]; /* 100 extended max LBA sector */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_padding2[22]; /* pad to 126 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_lastlun; /* 126 last LUN, as per SFF-8070i */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_resv6; /* 127 reserved */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_securestatus; /* 128 security status */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_vendor[31]; /* 129-159 vendor specific */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_padding3[16]; /* 160 pad to 176 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_curmedser[30]; /* 176-205 current media serial number */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_padding4[49]; /* 206 pad to 255 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo ushort_t ai_integrity; /* 255 integrity word */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo} sata_id_t;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: general config bits - word 0 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATA_TYPE_MASK 0x8001 /* ATA Device type mask */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATA_TYPE 0x0000 /* ATA device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_REM_MEDIA 0x0080 /* Removable media */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ID_SERIAL_OFFSET 10
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ID_SERIAL_LEN 20
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ID_MODEL_OFFSET 27
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ID_MODEL_LEN 40
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: common capability bits - word 49 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_DMA_SUPPORT 0x0100
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_LBA_SUPPORT 0x0200
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_IORDY_DISABLE 0x0400
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_IORDY_SUPPORT 0x0800
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STANDBYTIMER 0x2000
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: ai_validinfo (word 53) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_VALIDINFO_88 0x0004 /* word 88 supported fields valid */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: ai_majorversion (word 80) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MAJVER_6 0x0040 /* ATA/ATAPI-6 version supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MAJVER_4 0x0010 /* ATA/ATAPI-4 version supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: command set supported/enabled bits - words 83 and 86 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_EXT48 0x0400 /* 48 bit address feature */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_RW_DMA_QUEUED_CMD 0x0002 /* R/W DMA Queued supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_DWNLOAD_MCODE_CMD 0x0001 /* Download Microcode CMD supp/enbld */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Device: command set supported/enabled bits - words 82 and 85 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_WRITE_CACHE 0x0020 /* Write Cache supported/enabled */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_LOOK_AHEAD 0x0040 /* Look Ahead supported/enabled */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_DEVICE_RESET_CMD 0x0200 /* Device Reset CMD supported/enbld */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_READ_BUFFER_CMD 0x2000 /* Read Buffer CMD supported/enbld */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_WRITE_BUFFER_CMD 0x1000 /* Write Buffer CMD supported/enbld */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_SEL_MASK 0x0700 /* Multiword DMA selected */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_2_SEL 0x0400 /* Multiword DMA mode 2 selected */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_1_SEL 0x0200 /* Multiword DMA mode 1 selected */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_0_SEL 0x0100 /* Multiword DMA mode 0 selected */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_2_SUP 0x0004 /* Multiword DMA mode 2 supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_1_SUP 0x0002 /* Multiword DMA mode 1 supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_MDMA_0_SUP 0x0001 /* Multiword DMA mode 0 supported */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_DISK_SECTOR_SIZE 512 /* HD physical sector size */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Packet Device data definitions (ATAPI devices) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* Identify Packet Device: general config bits - word 0 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_TYPE_MASK 0xc000
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_TYPE 0x8000 /* ATAPI device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_PKT_SZ 0x0003 /* Packet size mask */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_PKT_12B 0x0000 /* Packet size 12 bytes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_PKT_16B 0x0001 /* Packet size 16 bytes */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_DRQ_TYPE 0x0060 /* DRQ asserted in 3ms after pkt */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_DRQ_INTR 0x0020 /* Obsolete in ATA/ATAPI 7 */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_DEV_TYPE 0x0f00 /* device type/command set mask */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_DEV_SHFT 8
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_DIRACC_DEV 0x0000 /* Direct Access device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_SQACC_DEV 0x0100 /* Sequential access dev (tape ?) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_CDROM_DEV 0x0500 /* CD_ROM device */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Status bits from ATAPI Interrupt reason register (AT_COUNT) register
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_I_COD 0x01 /* Command or Data */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_I_IO 0x02 /* IO direction */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_I_RELEASE 0x04 /* Release for ATAPI overlap */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* ATAPI feature reg definitions */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_F_OVERLAP 0x02
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * ATAPI IDENTIFY_DRIVE capabilities word
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_CAP_DMA 0x0100
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_ID_CAP_OVERLAP 0x2000
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * ATAPI signature bits
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_SIG_HI 0xeb /* in high cylinder register */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_SIG_LO 0x14 /* in low cylinder register */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* These values are pre-set for CD_ROM/DVD ? */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_SECTOR_SIZE 2048
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_MAX_BYTES_PER_DRQ 0xf800 /* 16 bits - 2KB ie 62KB */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_HEADS 64
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ATAPI_SECTORS_PER_TRK 32
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* SATA Capabilites bits (word 76) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_NCQ 0x100
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_2_SPEED 0x004
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_1_SPEED 0x002
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* SATA Features Supported (word 78) - not used */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* SATA Features Enabled (word 79) - not used */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Status bits from AT_STATUS register
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_BSY 0x80 /* controller busy */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_DRDY 0x40 /* drive ready */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_DF 0x20 /* device fault */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_DSC 0x10 /* seek operation complete */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_DRQ 0x08 /* data request */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_CORR 0x04 /* obsolete */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_IDX 0x02 /* obsolete */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_STATUS_ERR 0x01 /* error flag */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Status bits from AT_ERROR register
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_ICRC 0x80 /* CRC data transfer error detected */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_UNC 0x40 /* uncorrectable data error */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_MC 0x20 /* Media change */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_IDNF 0x10 /* ID/Address not found */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_MCR 0x08 /* media change request */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_ABORT 0x04 /* aborted command */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_NM 0x02 /* no media */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_EOM 0x02 /* end of media (Packet cmds) */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ERROR_ILI 0x01 /* cmd sepcific */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* device_reg */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#define SATA_ADH_LBA 0x40 /* addressing in LBA mode not chs */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef __cplusplus
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _SATA_DEFS_H */