mvStorageDev.h revision 136849
150477Speter/* 22961Swollman * Copyright (c) 2003-2004 MARVELL SEMICONDUCTOR ISRAEL, LTD. 340440Speter * All rights reserved. 440440Speter * 554502Speter * Redistribution and use in source and binary forms, with or without 654502Speter * modification, are permitted provided that the following conditions 733143Seivind * are met: 82961Swollman * 1. Redistributions of source code must retain the above copyright 92961Swollman * notice, this list of conditions and the following disclaimer. 102961Swollman * 2. Redistributions in binary form must reproduce the above copyright 112961Swollman * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26#ifndef __INCmvStorageDevh 27#define __INCmvStorageDevh 28 29/* Definitions */ 30 31/* ATA register on the ATA drive*/ 32 33#define MV_EDMA_ATA_FEATURES_ADDR 0x11 34#define MV_EDMA_ATA_SECTOR_COUNT_ADDR 0x12 35#define MV_EDMA_ATA_LBA_LOW_ADDR 0x13 36#define MV_EDMA_ATA_LBA_MID_ADDR 0x14 37#define MV_EDMA_ATA_LBA_HIGH_ADDR 0x15 38#define MV_EDMA_ATA_DEVICE_ADDR 0x16 39#define MV_EDMA_ATA_COMMAND_ADDR 0x17 40 41#define MV_ATA_ERROR_STATUS 0x00000001 /* MV_BIT0 */ 42#define MV_ATA_DATA_REQUEST_STATUS 0x00000008 /* MV_BIT3 */ 43#define MV_ATA_SERVICE_STATUS 0x00000010 /* MV_BIT4 */ 44#define MV_ATA_DEVICE_FAULT_STATUS 0x00000020 /* MV_BIT5 */ 45#define MV_ATA_READY_STATUS 0x00000040 /* MV_BIT6 */ 46#define MV_ATA_BUSY_STATUS 0x00000080 /* MV_BIT7 */ 47 48 49#define MV_ATA_COMMAND_READ_SECTORS 0x20 50#define MV_ATA_COMMAND_READ_SECTORS_EXT 0x24 51#define MV_ATA_COMMAND_READ_VERIFY_SECTORS 0x40 52#define MV_ATA_COMMAND_READ_VERIFY_SECTORS_EXT 0x42 53#define MV_ATA_COMMAND_READ_BUFFER 0xE4 54#define MV_ATA_COMMAND_WRITE_BUFFER 0xE8 55#define MV_ATA_COMMAND_WRITE_SECTORS 0x30 56#define MV_ATA_COMMAND_WRITE_SECTORS_EXT 0x34 57#define MV_ATA_COMMAND_DIAGNOSTIC 0x90 58#define MV_ATA_COMMAND_SMART 0xb0 59#define MV_ATA_COMMAND_READ_MULTIPLE 0xc4 60#define MV_ATA_COMMAND_WRITE_MULTIPLE 0xc5 61#define MV_ATA_COMMAND_STANDBY_IMMEDIATE 0xe0 62#define MV_ATA_COMMAND_IDLE_IMMEDIATE 0xe1 63#define MV_ATA_COMMAND_STANDBY 0xe2 64#define MV_ATA_COMMAND_IDLE 0xe3 65#define MV_ATA_COMMAND_SLEEP 0xe6 66#define MV_ATA_COMMAND_IDENTIFY 0xec 67#define MV_ATA_COMMAND_DEVICE_CONFIG 0xb1 68#define MV_ATA_COMMAND_SET_FEATURES 0xef 69#define MV_ATA_COMMAND_WRITE_DMA 0xca 70#define MV_ATA_COMMAND_WRITE_DMA_EXT 0x35 71#define MV_ATA_COMMAND_WRITE_DMA_QUEUED 0xcc 72#define MV_ATA_COMMAND_WRITE_DMA_QUEUED_EXT 0x36 73#define MV_ATA_COMMAND_WRITE_FPDMA_QUEUED_EXT 0x61 74#define MV_ATA_COMMAND_READ_DMA 0xc8 75#define MV_ATA_COMMAND_READ_DMA_EXT 0x25 76#define MV_ATA_COMMAND_READ_DMA_QUEUED 0xc7 77#define MV_ATA_COMMAND_READ_DMA_QUEUED_EXT 0x26 78#define MV_ATA_COMMAND_READ_FPDMA_QUEUED_EXT 0x60 79#define MV_ATA_COMMAND_FLUSH_CACHE 0xe7 80#define MV_ATA_COMMAND_FLUSH_CACHE_EXT 0xea 81 82 83#define MV_ATA_SET_FEATURES_DISABLE_8_BIT_PIO 0x01 84#define MV_ATA_SET_FEATURES_ENABLE_WCACHE 0x02 /* Enable write cache */ 85#define MV_ATA_SET_FEATURES_TRANSFER 0x03 /* Set transfer mode */ 86#define MV_ATA_TRANSFER_UDMA_0 0x40 87#define MV_ATA_TRANSFER_UDMA_1 0x41 88#define MV_ATA_TRANSFER_UDMA_2 0x42 89#define MV_ATA_TRANSFER_UDMA_3 0x43 90#define MV_ATA_TRANSFER_UDMA_4 0x44 91#define MV_ATA_TRANSFER_UDMA_5 0x45 92#define MV_ATA_TRANSFER_UDMA_6 0x46 93#define MV_ATA_TRANSFER_UDMA_7 0x47 94#define MV_ATA_TRANSFER_PIO_SLOW 0x00 95#define MV_ATA_TRANSFER_PIO_0 0x08 96#define MV_ATA_TRANSFER_PIO_1 0x09 97#define MV_ATA_TRANSFER_PIO_2 0x0A 98#define MV_ATA_TRANSFER_PIO_3 0x0B 99#define MV_ATA_TRANSFER_PIO_4 0x0C 100/* Enable advanced power management */ 101#define MV_ATA_SET_FEATURES_ENABLE_APM 0x05 102/* Disable media status notification*/ 103#define MV_ATA_SET_FEATURES_DISABLE_MSN 0x31 104/* Disable read look-ahead */ 105#define MV_ATA_SET_FEATURES_DISABLE_RLA 0x55 106/* Enable release interrupt */ 107#define MV_ATA_SET_FEATURES_ENABLE_RI 0x5D 108/* Enable SERVICE interrupt */ 109#define MV_ATA_SET_FEATURES_ENABLE_SI 0x5E 110/* Disable revert power-on defaults */ 111#define MV_ATA_SET_FEATURES_DISABLE_RPOD 0x66 112/* Disable write cache */ 113#define MV_ATA_SET_FEATURES_DISABLE_WCACHE 0x82 114/* Disable advanced power management*/ 115#define MV_ATA_SET_FEATURES_DISABLE_APM 0x85 116/* Enable media status notification */ 117#define MV_ATA_SET_FEATURES_ENABLE_MSN 0x95 118/* Enable read look-ahead */ 119#define MV_ATA_SET_FEATURES_ENABLE_RLA 0xAA 120/* Enable revert power-on defaults */ 121#define MV_ATA_SET_FEATURES_ENABLE_RPOD 0xCC 122/* Disable release interrupt */ 123#define MV_ATA_SET_FEATURES_DISABLE_RI 0xDD 124/* Disable SERVICE interrupt */ 125#define MV_ATA_SET_FEATURES_DISABLE_SI 0xDE 126 127/* Defines for parsing the IDENTIFY command results*/ 128#define IDEN_SERIAL_NUM_OFFSET 10 129#define IDEN_SERIAL_NUM_SIZE 19-10 130#define IDEN_FIRMWARE_OFFSET 23 131#define IDEN_FIRMWARE_SIZE 26-23 132#define IDEN_MODEL_OFFSET 27 133#define IDEN_MODEL_SIZE 46-27 134#define IDEN_CAPACITY_1_OFFSET 49 135#define IDEN_VALID 53 136#define IDEN_NUM_OF_ADDRESSABLE_SECTORS 60 137#define IDEN_PIO_MODE_SPPORTED 64 138#define IDEN_QUEUE_DEPTH 75 139#define IDEN_SATA_CAPABILITIES 76 140#define IDEN_SATA_FEATURES_SUPPORTED 78 141#define IDEN_SATA_FEATURES_ENABLED 79 142#define IDEN_ATA_VERSION 80 143#define IDEN_SUPPORTED_COMMANDS1 82 144#define IDEN_SUPPORTED_COMMANDS2 83 145#define IDEN_ENABLED_COMMANDS1 85 146#define IDEN_ENABLED_COMMANDS2 86 147#define IDEN_UDMA_MODE 88 148#define IDEN_SATA_CAPABILITY 76 149 150 151/* Typedefs */ 152 153/* Structures */ 154typedef struct mvStorageDevRegisters 155{ 156 /* Fields set by CORE driver */ 157 MV_U8 errorRegister; 158 MV_U16 sectorCountRegister; 159 MV_U16 lbaLowRegister; 160 MV_U16 lbaMidRegister; 161 MV_U16 lbaHighRegister; 162 MV_U8 deviceRegister; 163 MV_U8 statusRegister; 164} MV_STORAGE_DEVICE_REGISTERS; 165 166/* Bits for HD_ERROR */ 167#define NM_ERR 0x02 /* media present */ 168#define ABRT_ERR 0x04 /* Command aborted */ 169#define MCR_ERR 0x08 /* media change request */ 170#define IDNF_ERR 0x10 /* ID field not found */ 171#define MC_ERR 0x20 /* media changed */ 172#define UNC_ERR 0x40 /* Uncorrect data */ 173#define WP_ERR 0x40 /* write protect */ 174#define ICRC_ERR 0x80 /* new meaning: CRC error during transfer */ 175 176/* Function */ 177 178MV_BOOLEAN HPTLIBAPI mvStorageDevATAExecuteNonUDMACommand(MV_SATA_ADAPTER *pAdapter, 179 MV_U8 channelIndex, 180 MV_NON_UDMA_PROTOCOL protocolType, 181 MV_BOOLEAN isEXT, 182 MV_U16 FAR *bufPtr, MV_U32 count, 183 MV_U16 features, 184 MV_U16 sectorCount, 185 MV_U16 lbaLow, MV_U16 lbaMid, 186 MV_U16 lbaHigh, MV_U8 device, 187 MV_U8 command); 188 189MV_BOOLEAN HPTLIBAPI mvStorageDevATAIdentifyDevice(MV_SATA_ADAPTER *pAdapter, 190 MV_U8 channelIndex); 191 192MV_BOOLEAN HPTLIBAPI mvStorageDevATASetFeatures(MV_SATA_ADAPTER *pAdapter, 193 MV_U8 channelIndex, MV_U8 subCommand, 194 MV_U8 subCommandSpecific1, 195 MV_U8 subCommandSpecific2, 196 MV_U8 subCommandSpecific3, 197 MV_U8 subCommandSpecific4); 198 199MV_BOOLEAN HPTLIBAPI mvStorageDevATAIdleImmediate(MV_SATA_ADAPTER *pAdapter, 200 MV_U8 channelIndex); 201 202MV_BOOLEAN HPTLIBAPI mvStorageDevATAFlushWriteCache(MV_SATA_ADAPTER *pAdapter, 203 MV_U8 channelIndex); 204 205MV_BOOLEAN HPTLIBAPI mvStorageDevATASoftResetDevice(MV_SATA_ADAPTER *pAdapter, 206 MV_U8 channelIndex); 207 208MV_BOOLEAN HPTLIBAPI mvReadWrite(MV_SATA_CHANNEL *pSataChannel, LBA_T Lba, UCHAR Cmd, void *tmpBuffer); 209 210#endif 211