66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER START
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * The contents of this file are subject to the terms of the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Common Development and Distribution License (the "License").
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You may not use this file except in compliance with the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * or http://www.opensolaris.org/os/licensing.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * See the License for the specific language governing permissions
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * and limitations under the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * When distributing Covered Code, include this CDDL HEADER in each
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * If applicable, add the following below this CDDL HEADER, with the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * fields enclosed by brackets "[]" replaced with your own identifying
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * information: Portions Copyright [yyyy] [name of copyright owner]
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER END
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
257c04ecb24858f6d68020a41589306f554ea434Marcel Telka * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifndef _SATA_DEFS_H
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define _SATA_DEFS_H
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifdef __cplusplus
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlfextern "C" {
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#include <sys/scsi/generic/mode.h>
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Common ATA commands (subset)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_DIAG 0x90 /* diagnose command */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RECAL 0x10 /* restore cmd, 4 bits step rate */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_FORMAT 0x50 /* format track command */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SET_FEATURES 0xef /* set features */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_IDLE_IM 0xe1 /* idle immediate */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_STANDBY_IM 0xe0 /* standby immediate */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_DOOR_LOCK 0xde /* door lock */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_DOOR_UNLOCK 0xdf /* door unlock */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_IDLE 0xe3 /* idle */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATAC_STANDBY 0xe2 /* standby */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * ATA/ATAPI disk commands (subset)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran#define SATAC_DSM 0x06 /* Data Set Management */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_DEVICE_RESET 0x08 /* ATAPI device reset */
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls#define SATAC_DOWNLOAD_MICROCODE 0x92 /* Download microcode */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_EJECT 0xed /* media eject */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_FLUSH_CACHE 0xe7 /* flush write-cache */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_ID_DEVICE 0xec /* IDENTIFY DEVICE */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_ID_PACKET_DEVICE 0xa1 /* ATAPI identify packet device */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_INIT_DEVPARMS 0x91 /* initialize device parameters */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_PACKET 0xa0 /* ATAPI packet */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RDMULT 0xc4 /* read multiple w/DMA */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RDSEC 0x20 /* read sector */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RDVER 0x40 /* read verify */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_DMA 0xc8 /* read DMA */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SEEK 0x70 /* seek */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SERVICE 0xa2 /* queued/overlap service */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SETMULT 0xc6 /* set multiple mode */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_DMA 0xca /* write (multiple) w/DMA */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRMULT 0xc5 /* write multiple */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRSEC 0x30 /* write sector */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RDSEC_EXT 0x24 /* read sector extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_DMA_EXT 0x25 /* read DMA extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_RDMULT_EXT 0x29 /* read multiple extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRSEC_EXT 0x34 /* read sector extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_DMA_EXT 0x35 /* read DMA extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRMULT_EXT 0x39 /* read multiple extended (LBA48) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_DMA_QUEUED 0xc7 /* read DMA / may be queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_DMA_QUEUED_EXT 0x26 /* read DMA ext / may be queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_DMA_QUEUED 0xcc /* read DMA / may be queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_DMA_QUEUED_EXT 0x36 /* read DMA ext / may be queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_PM_REG 0xe4 /* read port mult reg */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_PM_REG 0xe8 /* write port mult reg */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_FPDMA_QUEUED 0x60 /* First-Party-DMA read queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_WRITE_FPDMA_QUEUED 0x61 /* First-Party-DMA write queued */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_READ_LOG_EXT 0x2f /* read log */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATAC_SMART 0xb0 /* SMART */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_LOG_PAGE_10 0x10 /* log page 0x10 - SATA error */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang/*
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang * Port Multiplier Commands
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATAC_READ_PORTMULT 0xe4 /* read port multiplier */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATAC_WRITE_PORTMULT 0xe8 /* write port multiplier */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Power Managment Commands (subset)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_CHECK_POWER_MODE 0xe5 /* check power mode */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_PWRMODE_STANDBY 0 /* standby mode */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_PWRMODE_IDLE 0x80 /* idle mode */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_PWRMODE_ACTIVE_SPINDOWN 0x40 /* PM0 and spinning down */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_PWRMODE_ACTIVE_SPINUP 0x41 /* PM0 and spinning up */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_PWRMODE_ACTIVE 0xFF /* active or idle mode */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
c03acfcad7780db4ddf763511a82026680b3b2c1ls/*
c03acfcad7780db4ddf763511a82026680b3b2c1ls * SMART FEATURES Subcommands
c03acfcad7780db4ddf763511a82026680b3b2c1ls */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_READ_DATA 0xd0
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_ATTR_AUTOSAVE 0xd2
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_EXECUTE_OFFLINE_IMM 0xd4
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_READ_LOG 0xd5
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_WRITE_LOG 0xd6
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_ENABLE_OPS 0xd8
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_DISABLE_OPS 0xd9
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_RETURN_STATUS 0xda
c03acfcad7780db4ddf763511a82026680b3b2c1ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * SET FEATURES Subcommands
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SF_ENABLE_WRITE_CACHE 0x02
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SF_TRANSFER_MODE 0x03
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATAC_SF_DISABLE_RMSN 0x31
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define SATAC_SF_ENABLE_ACOUSTIC 0x42
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SF_DISABLE_READ_AHEAD 0x55
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SF_DISABLE_WRITE_CACHE 0x82
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_SF_ENABLE_READ_AHEAD 0xaa
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define SATAC_SF_DISABLE_ACOUSTIC 0xc2
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATAC_SF_ENABLE_RMSN 0x95
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * SET FEATURES transfer mode values
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_TRANSFER_MODE_PIO_DEFAULT 0x00
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_TRANSFER_MODE_PIO_DISABLE_IODRY 0x01
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_TRANSFER_MODE_PIO_FLOW_CONTROL 0x08
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_TRANSFER_MODE_MULTI_WORD_DMA 0x20
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATAC_TRANSFER_MODE_ULTRA_DMA 0x40
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls/*
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls * Download microcode subcommands
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls */
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls#define SATA_DOWNLOAD_MCODE_TEMP 1 /* Revert on/ reset/pwr cycle */
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls#define SATA_DOWNLOAD_MCODE_SAVE 7 /* No offset, keep mcode */
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Generic ATA definitions */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
489f952b4388bd1ea1feff97164a4416e0c621eals#define SATA_TAG_QUEUING_SHIFT 3
37a077ef1920ee044b2887247b2a802e726d3368ls#define SATA_TAG_QUEUING_MASK 0x1f
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Identify Device data
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * Although both ATA and ATAPI devices' Identify Data have the same length,
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * some words have different meaning/content and/or are irrelevant for
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * other type of device.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Following is the ATA Device Identify data layout
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlftypedef struct sata_id {
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/* WORD */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/* OFFSET COMMENT */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_config; /* 0 general configuration bits */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_fixcyls; /* 1 # of cylinders (obsolete) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv0; /* 2 # reserved */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_heads; /* 3 # of heads (obsolete) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_trksiz; /* 4 # of bytes/track (retired) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_secsiz; /* 5 # of bytes/sector (retired) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_sectors; /* 6 # of sectors/track (obsolete) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv1[3]; /* 7 "Vendor Unique" */
c03acfcad7780db4ddf763511a82026680b3b2c1ls char ai_drvser[20]; /* 10 Serial number */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_buftype; /* 20 Buffer type */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_bufsz; /* 21 Buffer size in 512 byte incr */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_ecc; /* 22 # of ecc bytes avail on rd/wr */
c03acfcad7780db4ddf763511a82026680b3b2c1ls char ai_fw[8]; /* 23 Firmware revision */
c03acfcad7780db4ddf763511a82026680b3b2c1ls char ai_model[40]; /* 27 Model # */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_mult1; /* 47 Multiple command flags */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_dwcap; /* 48 Doubleword capabilities */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cap; /* 49 Capabilities */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv2; /* 50 Reserved */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_piomode; /* 51 PIO timing mode */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_dmamode; /* 52 DMA timing mode */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_validinfo; /* 53 bit0: wds 54-58, bit1: 64-70 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_curcyls; /* 54 # of current cylinders */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_curheads; /* 55 # of current heads */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cursectrk; /* 56 # of current sectors/track */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cursccp[2]; /* 57 current sectors capacity */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_mult2; /* 59 multiple sectors info */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_addrsec[2]; /* 60 LBA only: no of addr secs */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown ushort_t ai_dirdma; /* 62 valid in ATA/ATAPI7, DMADIR */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown ushort_t ai_dworddma; /* 63 multi word dma modes */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_advpiomode; /* 64 advanced PIO modes supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_minmwdma; /* 65 min multi-word dma cycle info */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_recmwdma; /* 66 rec multi-word dma cycle info */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_minpio; /* 67 min PIO cycle info */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_minpioflow; /* 68 min PIO cycle info w/flow ctl */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_addsupported; /* 69 additional supported */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_resv3; /* 70 reserved */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_typtime[2]; /* 71-72 timing */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv4[2]; /* 73-74 reserved */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_qdepth; /* 75 queue depth */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_satacap; /* 76 SATA capabilities */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv5; /* 77 reserved */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_satafsup; /* 78 SATA features supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_satafenbl; /* 79 SATA features enabled */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_majorversion; /* 80 major versions supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_minorversion; /* 81 minor version number supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cmdset82; /* 82 command set supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cmdset83; /* 83 more command sets supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cmdset84; /* 84 more command sets supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_features85; /* 85 enabled features */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_features86; /* 86 enabled features */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_features87; /* 87 enabled features */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_ultradma; /* 88 Ultra DMA mode */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_erasetime; /* 89 security erase time */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_erasetimex; /* 90 enhanced security erase time */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_adv_pwr_mgmt; /* 91 advanced power management time */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_master_pwd; /* 92 master password revision code */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_hrdwre_reset; /* 93 hardware reset result */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_acoustic; /* 94 accoustic management values */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_stream_min_sz; /* 95 stream minimum request size */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_stream_xfer_d; /* 96 streaming transfer time (DMA) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_stream_lat; /* 97 streaming access latency */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_streamperf[2]; /* 98-99 streaming performance gran. */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_addrsecxt[4]; /* 100 extended max LBA sector */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_stream_xfer_p; /* 104 streaming transfer time (PIO) */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_maxcount; /* 105 max count of 512-byte blocks of */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran /* LBA range entries */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_phys_sect_sz; /* 106 physical sector size */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_seek_delay; /* 107 inter-seek delay time (usecs) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_naa_ieee_oui; /* 108 NAA/IEEE OUI */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_ieee_oui_uid; /* 109 IEEE OUT/unique id */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_uid_mid; /* 110 unique id (mid) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_uid_low; /* 111 unique id (low) */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_resv_wwn[4]; /* 112-115 reserved for WWN ext. */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_incits; /* 116 reserved for INCITS TR-37-2004 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_words_lsec[2]; /* 117-118 words per logical sector */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_cmdset119; /* 119 more command sets supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_features120; /* 120 enabled features */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_padding1[6]; /* pad to 126 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_rmsn; /* 127 removable media notification */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_securestatus; /* 128 security status */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_vendor[31]; /* 129-159 vendor specific */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_padding2[8]; /* 160 pad to 168 */
7063fd1be9e5ca0d56ff166e0c3ae0b9a425eac1Phi Tran ushort_t ai_nomformfactor; /* 168 nominal form factor */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_dsm; /* 169 data set management */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_padding3[6]; /* 170 pad to 176 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_curmedser[30]; /* 176-205 current media serial # */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_sctsupport; /* 206 SCT command transport */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_padding4[10]; /* 207 pad to 217 */
7063fd1be9e5ca0d56ff166e0c3ae0b9a425eac1Phi Tran ushort_t ai_medrotrate; /* 217 nominal media rotation rate */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran ushort_t ai_padding5[37]; /* 218 pad to 255 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls ushort_t ai_integrity; /* 255 integrity word */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf} sata_id_t;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: general config bits - word 0 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATA_TYPE_MASK 0x8001 /* ATA Device type mask */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATA_TYPE 0x0000 /* ATA device */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_REM_MEDIA 0x0080 /* Removable media */
789ba267e4ebc05727329e0351a5c1a8243e962bpawelw#define SATA_INCOMPLETE_DATA 0x0004 /* Incomplete Identify Device data */
2ce278eb5cbdc9cfe3f361f2144877964b5a35cbying tian - Beijing China#define SATA_CFA_TYPE 0x848a /* CFA feature set device */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ID_SERIAL_OFFSET 10
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ID_SERIAL_LEN 20
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ID_MODEL_OFFSET 27
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ID_MODEL_LEN 40
184cd04c26b064536977dfbb913a1240eaf6f708cth#define SATA_ID_FW_LEN 8
7063fd1be9e5ca0d56ff166e0c3ae0b9a425eac1Phi Tran#define SATA_ID_BDC_LEN 0x3c
d996f1b8696f9ad4e65c250b117c690729ca40bfPhi Tran#define SATA_ID_ATA_INFO_LEN 0x238
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: common capability bits - word 49 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_DMA_SUPPORT 0x0100
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_LBA_SUPPORT 0x0200
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_IORDY_DISABLE 0x0400
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_IORDY_SUPPORT 0x0800
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STANDBYTIMER 0x2000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: ai_validinfo (word 53) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_VALIDINFO_88 0x0004 /* word 88 supported fields valid */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_VALIDINFO_70_64 0x0004 /* words 70-64 fields valid */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran/* Identify Device: ai_addsupported (word 69) */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran#define SATA_DETERMINISTIC_READ 0x4000 /* word 69 deterministic read supp. */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran#define SATA_READ_ZERO 0x0020 /* word 69 read zero after TRIM supp. */
fcacecd0df112c67f46e2cb08c594bc199ec3386Phi Tran
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: ai_majorversion (word 80) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_MAJVER_7 0x0080 /* ATA/ATAPI-7 version supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_MAJVER_654 0x0070 /* ATA/ATAPI-6,5 or 4 ver supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MAJVER_6 0x0040 /* ATA/ATAPI-6 version supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_MAJVER_5 0x0020 /* ATA/ATAPI-7 version supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MAJVER_4 0x0010 /* ATA/ATAPI-4 version supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: command set supported/enabled bits - words 83 and 86 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_EXT48 0x0400 /* 48 bit address feature */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_PWRUP_IN_STANDBY 0x0020 /* Power-up in standby mode supp/en */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_RM_STATUS_NOTIFIC 0x0010 /* Removable Media Stat Notification */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_RW_DMA_QUEUED_CMD 0x0002 /* R/W DMA Queued supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_DWNLOAD_MCODE_CMD 0x0001 /* Download Microcode CMD supp/enbld */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define SATA_ACOUSTIC_MGMT 0x0200 /* Acoustic Management features */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Device: command set supported/enabled bits - words 82 and 85 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_SUPPORTED 0x0001 /* SMART feature set is supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_WRITE_CACHE 0x0020 /* Write Cache supported/enabled */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_LOOK_AHEAD 0x0040 /* Look Ahead supported/enabled */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_DEVICE_RESET_CMD 0x0200 /* Device Reset CMD supported/enbld */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_READ_BUFFER_CMD 0x2000 /* Read Buffer CMD supported/enbld */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_WRITE_BUFFER_CMD 0x1000 /* Write Buffer CMD supported/enbld */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_ENABLED 0x0001 /* SMART feature set is enabled */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* Identify Device: command set supported/enabled bits - words 84 & 87 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SMART_SELF_TEST_SUPPORTED 0x0002 /* SMART self-test supported */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/* IDLE IMMEDIATE with UNLOAD FEATURE supported */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_IDLE_UNLOAD_SUPPORTED 0x2000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry/* Identify Device: physical sector size - word 106 */
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry#define SATA_L2PS_CHECK_BIT 0x4000 /* Set when this word valid */
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry#define SATA_L2PS_HAS_MULT 0x2000 /* Multiple logical sectors per phys */
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry#define SATA_L2PS_BIG_SECTORS 0x1000 /* Logical sector size > 512 */
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry#define SATA_L2PS_EXP_MASK 0x000f /* Logical sectors per phys exponent */
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry
2038334ab26baaa43c9083f35def041511c3cc1fUnknown/* Identify (Packet) Device word 63, ATA/ATAPI-6 & 7 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_SEL_MASK 0x0700 /* Multiword DMA selected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_2_SEL 0x0400 /* Multiword DMA mode 2 selected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_1_SEL 0x0200 /* Multiword DMA mode 1 selected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_0_SEL 0x0100 /* Multiword DMA mode 0 selected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_2_SUP 0x0004 /* Multiword DMA mode 2 supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_1_SUP 0x0002 /* Multiword DMA mode 1 supported */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_MDMA_0_SUP 0x0001 /* Multiword DMA mode 0 supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_MDMA_SUP_MASK 0x0007 /* Multiword DMA supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown
2038334ab26baaa43c9083f35def041511c3cc1fUnknown/* Identify (Packet) Device Word 88 */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_UDMA_SUP_MASK 0x007f /* UDMA modes supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_UDMA_SEL_MASK 0x7f00 /* UDMA modes selected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* Identify Device: command set supported/enabled bits - word 206 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* All are SCT Command Transport support */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_SUP 0x0001 /* anything */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_LNG_SECT_SUP 0x0002 /* Long Sector Access */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_WR_SAME_SUP 0x0004 /* Write Same */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_ERR_RCOV_SUP 0x0008 /* Error Recovery Control */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_FEAT_CTL_SUP 0x0010 /* Features Control */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_SCT_CMD_TRANS_DATA_TBL_SUP 0x0020 /* Data Tables supported */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_DISK_SECTOR_SIZE 512 /* HD physical sector size */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Packet Device data definitions (ATAPI devices) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Identify Packet Device: general config bits - word 0 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_TYPE_MASK 0xc000
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_ATAPI_TYPE 0x8000 /* ATAPI device */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_ATAPI_ID_PKT_SZ 0x0003 /* Packet size mask */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_ID_PKT_12B 0x0000 /* Packet size 12 bytes */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_ID_PKT_16B 0x0001 /* Packet size 16 bytes */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_ATAPI_ID_DRQ_TYPE 0x0060 /* DRQ asserted in 3ms after pkt */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_ATAPI_ID_DRQ_INTR 0x0020 /* Obsolete in ATA/ATAPI 7 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
257c04ecb24858f6d68020a41589306f554ea434Marcel Telka#define SATA_ATAPI_ID_DEV_TYPE 0x1f00 /* device type/command set mask */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_ID_DEV_SHFT 8
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_DIRACC_DEV 0x0000 /* Direct Access device */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_ATAPI_SQACC_DEV 0x0100 /* Sequential access dev (tape ?) */
257c04ecb24858f6d68020a41589306f554ea434Marcel Telka#define SATA_ATAPI_PROC_DEV 0x0300 /* Processor device */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_ATAPI_CDROM_DEV 0x0500 /* CD_ROM device */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Status bits from ATAPI Interrupt reason register (AT_COUNT) register
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_I_COD 0x01 /* Command or Data */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_I_IO 0x02 /* IO direction */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_I_RELEASE 0x04 /* Release for ATAPI overlap */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* ATAPI feature reg definitions */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_F_DATA_DIR_READ 0x04 /* DMA transfer to the host */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_F_OVERLAP 0x02 /* Not used by Sun drivers */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_F_DMA 0x01 /* Packet DMA command */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown/* ATAPI IDENTIFY_DRIVE capabilities word (49) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_ID_CAP_DMA 0x0100 /* if zero, check word 62 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_ID_CAP_OVERLAP 0x2000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown/*
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * ATAPI Identify Packet Device word 62
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * Word 62 is not valid for ATA/ATAPI-6
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * Defs below are for ATA/ATAPI-7
2038334ab26baaa43c9083f35def041511c3cc1fUnknown */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_ID_DMADIR_REQ 0x8000 /* DMA direction required */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_ID_DMA_SUP 0x0400 /* DMA is supported */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * ATAPI signature bits
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_SIG_HI 0xeb /* in high cylinder register */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_SIG_LO 0x14 /* in low cylinder register */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* These values are pre-set for CD_ROM/DVD ? */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_SECTOR_SIZE 2048
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_MAX_BYTES_PER_DRQ 0xf800 /* 16 bits - 2KB ie 62KB */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_HEADS 64
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ATAPI_SECTORS_PER_TRK 32
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* SATA Capabilites bits (word 76) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_NCQ 0x100
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SATA_3_SPEED 0x008
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_2_SPEED 0x004
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_1_SPEED 0x002
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* SATA Features Supported (word 78) - not used */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* SATA Features Enabled (word 79) - not used */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_READ_AHEAD_SUPPORTED(x) ((x).ai_cmdset82 & SATA_LOOK_AHEAD)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_READ_AHEAD_ENABLED(x) ((x).ai_features85 & SATA_LOOK_AHEAD)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_WRITE_CACHE_SUPPORTED(x) ((x).ai_cmdset82 & SATA_WRITE_CACHE)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_WRITE_CACHE_ENABLED(x) ((x).ai_features85 & SATA_WRITE_CACHE)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_RM_NOTIFIC_SUPPORTED(x) \
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China ((x).ai_cmdset83 & SATA_RM_STATUS_NOTIFIC)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China#define SATA_RM_NOTIFIC_ENABLED(x) \
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China ((x).ai_features86 & SATA_RM_STATUS_NOTIFIC)
7095af1983f107c8b16839f70101fdf710c4e620ying tian - Beijing China
4e54023805e14cf984b9f0041df73c16334a7a88ls/*
4e54023805e14cf984b9f0041df73c16334a7a88ls * Generic NCQ related defines
4e54023805e14cf984b9f0041df73c16334a7a88ls */
4e54023805e14cf984b9f0041df73c16334a7a88ls
4e54023805e14cf984b9f0041df73c16334a7a88ls#define NQ 0x80 /* Not a queued cmd - tag not valid */
4e54023805e14cf984b9f0041df73c16334a7a88ls#define NCQ_TAG_MASK 0x1f /* NCQ command tag mask */
4e54023805e14cf984b9f0041df73c16334a7a88ls#define FIS_TYPE_REG_H2D 0x27 /* Reg FIS - Host to Device */
4e54023805e14cf984b9f0041df73c16334a7a88ls#define FIS_CMD_UPDATE 0x80
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Status bits from AT_STATUS register
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_BSY 0x80 /* controller busy */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_STATUS_DRDY 0x40 /* drive ready */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_DF 0x20 /* device fault */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SATA_STATUS_DSC 0x10 /* seek operation complete */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_DRQ 0x08 /* data request */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_CORR 0x04 /* obsolete */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_IDX 0x02 /* obsolete */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_STATUS_ERR 0x01 /* error flag */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Status bits from AT_ERROR register
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_ICRC 0x80 /* CRC data transfer error detected */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_UNC 0x40 /* uncorrectable data error */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_MC 0x20 /* Media change */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_IDNF 0x10 /* ID/Address not found */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_MCR 0x08 /* media change request */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_ABORT 0x04 /* aborted command */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_NM 0x02 /* no media */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_EOM 0x02 /* end of media (Packet cmds) */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ERROR_ILI 0x01 /* cmd sepcific */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/*
c03acfcad7780db4ddf763511a82026680b3b2c1ls * Bits from the device control register
c03acfcad7780db4ddf763511a82026680b3b2c1ls */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_DEVCTL_NIEN 0x02 /* not interrupt enabled */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_DEVCTL_SRST 0x04 /* software reset */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SATA_DEVCTL_HOB 0x80 /* high order bit */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* device_reg */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SATA_ADH_LBA 0x40 /* addressing in LBA mode not chs */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
2038334ab26baaa43c9083f35def041511c3cc1fUnknown/* ATAPI transport version-in Inquiry data */
2038334ab26baaa43c9083f35def041511c3cc1fUnknown#define SATA_ATAPI_TRANS_VERSION(inq) \
2038334ab26baaa43c9083f35def041511c3cc1fUnknown (*((uint8_t *)(inq) + 3) >> 4)
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_LOG_PAGE_HDR_LEN 4 /* # bytes of a SCSI log page header */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_LOG_PARAM_HDR_LEN 4 /* # byttes of a SCSI log param hdr */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* Number of log entries per extended selftest log block */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define ENTRIES_PER_EXT_SELFTEST_LOG_BLK 19
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* Number of entries per SCSI LOG SENSE SELFTEST RESULTS page */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_ENTRIES_IN_LOG_SENSE_SELFTEST_RESULTS 20
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* Length of a SCSI LOG SENSE SELFTEST RESULTS parameter */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_LOG_SENSE_SELFTEST_PARAM_LEN 0x10
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define DIAGNOSTIC_FAILURE_ON_COMPONENT 0x40
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_81 0x81
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_82 0x82
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_83 0x83
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_84 0x84
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_85 0x85
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_86 0x86
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_87 0x87
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_COMPONENT_88 0x88
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_ASC_ATA_DEV_FEAT_NOT_ENABLED 0x67
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_ASCQ_ATA_DEV_FEAT_NOT_ENABLED 0x0b
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_PREDICTED_FAILURE 0x5d
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCSI_GENERAL_HD_FAILURE 0x10
c03acfcad7780db4ddf763511a82026680b3b2c1ls
489f952b4388bd1ea1feff97164a4416e0c621eals#define SCSI_INFO_EXCEPTIONS_PARAM_LEN 4
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define READ_LOG_EXT_LOG_DIRECTORY 0
37a077ef1920ee044b2887247b2a802e726d3368ls#define READ_LOG_EXT_NCQ_ERROR_RECOVERY 0x10
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SMART_SELFTEST_LOG_PAGE 6
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define EXT_SMART_SELFTEST_LOG_PAGE 7
37a077ef1920ee044b2887247b2a802e726d3368ls
37a077ef1920ee044b2887247b2a802e726d3368ls/*
37a077ef1920ee044b2887247b2a802e726d3368ls * SATA NCQ error recovery page (0x10)
37a077ef1920ee044b2887247b2a802e726d3368ls */
37a077ef1920ee044b2887247b2a802e726d3368lsstruct sata_ncq_error_recovery_page {
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_tag;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t reserved1;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_status;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_error;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_sector_number;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_cyl_low;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_cyl_high;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_dev_head;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_sector_number_ext;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_cyl_low_ext;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_cyl_high_ext;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t reserved2;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_sector_count;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_sector_count_ext;
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t reserved3[242];
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_vendor_unique[255];
37a077ef1920ee044b2887247b2a802e726d3368ls uint8_t ncq_checksum;
37a077ef1920ee044b2887247b2a802e726d3368ls};
37a077ef1920ee044b2887247b2a802e726d3368ls
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/* SMART attribute of Start/Stop Count */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define SMART_START_STOP_COUNT_ID 0x4
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu
c03acfcad7780db4ddf763511a82026680b3b2c1ls/*
c03acfcad7780db4ddf763511a82026680b3b2c1ls * SMART data structures
c03acfcad7780db4ddf763511a82026680b3b2c1ls */
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct smart_data {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_vendor_specific[362];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_offline_data_collection_status;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_exec_status;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_secs_to_complete_offline_data[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_vendor_specific2;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_offline_data_collection_capability;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_capability[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_error_logging_capability;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_vendor_specific3;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_short_selftest_polling_time;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_extended_selftest_polling_time;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_conveyance_selftest_polling_time;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_reserved[11];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_vendor_specific4[125];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_checksum;
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct smart_selftest_log_entry {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_lba_low;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_status;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_timestamp[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_checkpoint;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_failing_lba[4]; /* from LSB to MSB */
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_vendor_specific[15];
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define NUM_SMART_SELFTEST_LOG_ENTRIES 21
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct smart_selftest_log {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_revision[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls struct smart_selftest_log_entry
c03acfcad7780db4ddf763511a82026680b3b2c1ls smart_selftest_log_entries[NUM_SMART_SELFTEST_LOG_ENTRIES];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_vendor_specific[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_index;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_reserved[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_selftest_log_checksum;
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct smart_ext_selftest_log_entry {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_lba_low;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_status;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_timestamp[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_checkpoint;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_failing_lba[6];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_vendor_specific[15];
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct smart_ext_selftest_log {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_rev;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_reserved;
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_index[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls struct smart_ext_selftest_log_entry smart_ext_selftest_log_entries[19];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_vendor_specific[2];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_reserved2[11];
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t smart_ext_selftest_log_checksum;
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct read_log_ext_directory {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t read_log_ext_vers[2]; /* general purpose log version */
489f952b4388bd1ea1feff97164a4416e0c621eals uint8_t read_log_ext_nblks[255][2]; /* # of blks @ log addr index+1 */
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/*
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu * The definition of CONTROL byte field in SCSI command
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu * according to SAM 5
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define CTL_BYTE_VENDOR_MASK 0xc0
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define CTL_BYTE_NACA_MASK 0x04
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu/*
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu * The definition of mask in START STOP UNIT command
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu */
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_IMMED_MASK 0x01
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_POWER_COND_MASK 0xF0
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_START_MASK 0x01
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_LOEJ_MASK 0x02
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_NOFLUSH_MASK 0x04
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_MODIFIER_MASK 0x0f
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define START_STOP_POWER_COND_SHIFT 4
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu
c03acfcad7780db4ddf763511a82026680b3b2c1ls/*
c03acfcad7780db4ddf763511a82026680b3b2c1ls * SMART specific data
0bc523e585d34fb799f65e1c4fd7d163e401a501Alan Perry * These eventually need to go to a generic scsi header file
c03acfcad7780db4ddf763511a82026680b3b2c1ls * for now they will reside here
c03acfcad7780db4ddf763511a82026680b3b2c1ls */
37a077ef1920ee044b2887247b2a802e726d3368ls#define PC_CUMULATIVE_VALUES 0x01
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define PAGE_CODE_GET_SUPPORTED_LOG_PAGES 0x00
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define PAGE_CODE_SELF_TEST_RESULTS 0x10
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define PAGE_CODE_INFORMATION_EXCEPTIONS 0x2f
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define PAGE_CODE_SMART_READ_DATA 0x30
2ee4dfc799525d35706ee64a901cd970a7080bb6Jane Chu#define PAGE_CODE_START_STOP_CYCLE_COUNTER 0x0e
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1lsstruct log_parameter {
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t param_code[2]; /* parameter dependant */
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t param_ctrl_flags; /* see defines below */
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t param_len; /* # of bytes following */
c03acfcad7780db4ddf763511a82026680b3b2c1ls uint8_t param_values[1]; /* # of bytes defined by param_len */
c03acfcad7780db4ddf763511a82026680b3b2c1ls};
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls/* param_ctrl_flag fields */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_LP 0x01 /* list parameter */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_LBIN 0x02 /* list is binary */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_TMC 0x0c /* threshold met criteria */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_ETC 0x10 /* enable threshold comparison */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_TSD 0x20 /* target save disable */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_DS 0x40 /* disable save */
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define LOG_CTRL_DU 0x80 /* disable update */
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SMART_MAGIC_VAL_1 0x4f
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SMART_MAGIC_VAL_2 0xc2
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SMART_MAGIC_VAL_3 0xf4
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SMART_MAGIC_VAL_4 0x2c
c03acfcad7780db4ddf763511a82026680b3b2c1ls
c03acfcad7780db4ddf763511a82026680b3b2c1ls#define SCT_STATUS_LOG_PAGE 0xe0
c03acfcad7780db4ddf763511a82026680b3b2c1ls
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls/*
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls * Acoustic management
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960lsstruct mode_acoustic_management {
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls struct mode_page mode_page; /* common mode page header */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls uchar_t acoustic_manag_enable; /* Set to 1 enable, Set 0 disable */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls uchar_t acoustic_manag_level; /* Acoustic management level */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls uchar_t vendor_recommended_value; /* Vendor recommended value */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls};
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define PAGELENGTH_DAD_MODE_ACOUSTIC_MANAGEMENT 3 /* Acoustic manag pg len */
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define P_CNTRL_CURRENT 0
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define P_CNTRL_CHANGEABLE 1
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define P_CNTRL_DEFAULT 2
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define P_CNTRL_SAVED 3
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define ACOUSTIC_DISABLED 0
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define ACOUSTIC_ENABLED 1
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls#define MODEPAGE_ACOUSTIC_MANAG 0x30
b8b2574e5d3933aeb12d6ab6efd4dcf9fe9a5960ls
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang/*
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang * Port Multiplier registers' offsets
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR0 0x0
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR1 0x1
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR2 0x2
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR32 0x20
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR33 0x21
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR64 0x40
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_GSCR96 0x60
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PORTNUM_MASK 0xf
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PSCR0 0x0
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PSCR1 0x1
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PSCR2 0x2
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PSCR3 0x3
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_PSCR4 0x4
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_REG_SSTS (SATA_PMULT_PSCR0)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_REG_SERR (SATA_PMULT_PSCR1)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_REG_SCTL (SATA_PMULT_PSCR2)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_REG_SACT (SATA_PMULT_PSCR3)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_REG_SNTF (SATA_PMULT_PSCR4)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang/*
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang * Port Multiplier capabilities
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang * (Indicated by GSCR64, and enabled by GSCR96)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang */
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_CAP_BIST (1 << 0)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_CAP_PMREQ (1 << 1)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_CAP_SSC (1 << 2)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_CAP_SNOTIF (1 << 3)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang#define SATA_PMULT_CAP_PHYEVENT (1 << 4)
8aa6aadbbfba50077655c6a46a5e269c880e4ab4Xiao-Yu Zhang
8d483882aa3390058094b043f3d62187b5d1de03mlf/*
8d483882aa3390058094b043f3d62187b5d1de03mlf * sstatus field definitions
8d483882aa3390058094b043f3d62187b5d1de03mlf */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET_SHIFT 0
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_SPD_SHIFT 4
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM_SHIFT 8
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET (0xf << SSTATUS_DET_SHIFT)
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_SPD (0xf << SSTATUS_SPD_SHIFT)
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM (0xf << SSTATUS_IPM_SHIFT)
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf/*
8d483882aa3390058094b043f3d62187b5d1de03mlf * sstatus DET values
8d483882aa3390058094b043f3d62187b5d1de03mlf */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET_NODEV 0 /* No dev detected */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET_DEVPRE_NOPHYCOM 1 /* dev detected */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET_DEVPRE_PHYCOM 3 /* dev detected */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_DET_PHYOFFLINE 4 /* PHY is in offline */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_GET_DET(x) \
8d483882aa3390058094b043f3d62187b5d1de03mlf (x & SSTATUS_DET)
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_SET_DET(x, new_val) \
8d483882aa3390058094b043f3d62187b5d1de03mlf (x = (x & ~SSTATUS_DET) | (new_val & SSTATUS_DET))
8d483882aa3390058094b043f3d62187b5d1de03mlf
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SSTATUS_SPD_NODEV 0 /* No device present */
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SSTATUS_SPD_GEN1 1 /* Gen 1 rate negotiated */
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SSTATUS_SPD_GEN2 2 /* Gen 2 rate negotiated */
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SSTATUS_SPD_GEN3 3 /* Gen 3 rate negotiated */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf/*
8d483882aa3390058094b043f3d62187b5d1de03mlf * sstatus IPM values
8d483882aa3390058094b043f3d62187b5d1de03mlf */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM_NODEV_NOPHYCOM 0x0 /* No dev, no PHY */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM_ACTIVE 0x1 /* Interface active */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM_POWERPARTIAL 0x2 /* partial power mgmnt */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_IPM_POWERSLUMBER 0x6 /* slumber power mgmt */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_GET_IPM(x) \
8d483882aa3390058094b043f3d62187b5d1de03mlf ((x & SSTATUS_IPM) >> SSTATUS_IPM_SHIFT)
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SSTATUS_SET_IPM(x, new_val) \
8d483882aa3390058094b043f3d62187b5d1de03mlf (x = (x & ~SSTATUS_IPM) | \
8d483882aa3390058094b043f3d62187b5d1de03mlf ((new_val << SSTATUS_IPM_SHIFT) & SSTATUS_IPM))
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf/*
8d483882aa3390058094b043f3d62187b5d1de03mlf * serror register fields
8d483882aa3390058094b043f3d62187b5d1de03mlf */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_DATA_ERR_FIXED (1 << 0) /* D integrity err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_COMM_ERR_FIXED (1 << 1) /* comm err recov */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_DATA_ERR (1 << 8) /* D integrity err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_PERSISTENT_ERR (1 << 9) /* norecov com err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_PROTOCOL_ERR (1 << 10) /* protocol err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_INT_ERR (1 << 11) /* internal err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_PHY_RDY_CHG (1 << 16) /* PHY state change */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_PHY_INT_ERR (1 << 17) /* PHY internal err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_COMM_WAKE (1 << 18) /* COM wake */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_10B_TO_8B_ERR (1 << 19) /* 10B-to-8B decode */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_DISPARITY_ERR (1 << 20) /* disparity err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_CRC_ERR (1 << 21) /* CRC err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_HANDSHAKE_ERR (1 << 22) /* Handshake err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_LINK_SEQ_ERR (1 << 23) /* Link seq err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_TRANS_ERR (1 << 24) /* Tran state err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_FIS_TYPE (1 << 25) /* FIS type err */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SERROR_EXCHANGED_ERR (1 << 26) /* Device exchanged */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf/*
8d483882aa3390058094b043f3d62187b5d1de03mlf * S-Control Bridge port x register fields
8d483882aa3390058094b043f3d62187b5d1de03mlf */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_DET_SHIFT 0
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPD_SHIFT 4
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_IPM_SHIFT 8
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPM_SHIFT 12
8d483882aa3390058094b043f3d62187b5d1de03mlf
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SCONTROL_DET (0xf << SCONTROL_DET_SHIFT)
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SCONTROL_SPD (0xf << SCONTROL_SPD_SHIFT)
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SCONTROL_IPM (0xf << SCONTROL_IPM_SHIFT)
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SCONTROL_SPM (0xf << SCONTROL_SPM_SHIFT)
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_GET_DET(x) \
8d483882aa3390058094b043f3d62187b5d1de03mlf (x & SCONTROL_DET)
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SET_DET(x, new_val) \
8d483882aa3390058094b043f3d62187b5d1de03mlf (x = (x & ~SCONTROL_DET) | (new_val & SCONTROL_DET))
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_DET_NOACTION 0 /* Do nothing to port */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_DET_COMRESET 1 /* Re-initialize port */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_DET_DISABLE 4 /* Disable port */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPD_NOLIMIT 0 /* No speed limit */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPD_GEN1 1 /* Limit Gen 1 rate */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPD_GEN2 2 /* Limit Gen 2 rate */
13c8743e4d3cc6d9653687512c0d48d2b653513dMarcel Telka#define SCONTROL_SPD_GEN3 3 /* Limit Gen 3 rate */
8d483882aa3390058094b043f3d62187b5d1de03mlf
13bcbb7a73761015c9ef46cac33040380196e57fyt#define SCONTROL_GET_IPM(x) \
13bcbb7a73761015c9ef46cac33040380196e57fyt ((x & SCONTROL_IPM) >> SCONTROL_IPM_SHIFT)
13bcbb7a73761015c9ef46cac33040380196e57fyt
13bcbb7a73761015c9ef46cac33040380196e57fyt#define SCONTROL_SET_IPM(x, new_val) \
13bcbb7a73761015c9ef46cac33040380196e57fyt (x = (x & ~SCONTROL_IPM) | \
13bcbb7a73761015c9ef46cac33040380196e57fyt ((new_val << SCONTROL_IPM_SHIFT) & SCONTROL_IPM))
13bcbb7a73761015c9ef46cac33040380196e57fyt
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_IPM_NORESTRICT 0 /* No PM limit */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_IPM_DISABLE_PARTIAL 1 /* Disable partial */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_IPM_DISABLE_SLUMBER 2 /* Disable slumber */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_IPM_DISABLE_BOTH 3 /* Disable both */
8d483882aa3390058094b043f3d62187b5d1de03mlf
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPM_NORESTRICT 0 /* No PM limits */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPM_DO_PARTIAL 1 /* Go to partial */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPM_DO_SLUMBER 2 /* Go to slumber */
8d483882aa3390058094b043f3d62187b5d1de03mlf#define SCONTROL_SPM_DO_ACTIVE 4 /* Go to active */
8d483882aa3390058094b043f3d62187b5d1de03mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifdef __cplusplus
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf}
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif /* _SATA_DEFS_H */