📄 mvsata.h
字号:
/*******************************************************************************
*
* Copyright 2003,MARVELL SEMICONDUCTOR ISRAEL, LTD.
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL.
* NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT
* OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE
* DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL.
* THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESSED,
* IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE.
*
* MARVELL COMPRISES MARVELL TECHNOLOGY GROUP LTD. (MTGL) AND ITS SUBSIDIARIES,
* MARVELL INTERNATIONAL LTD. (MIL), MARVELL TECHNOLOGY, INC. (MTI), MARVELL
* SEMICONDUCTOR, INC. (MSI), MARVELL ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K.
* (MJKK), MARVELL SEMICONDUCTOR ISRAEL. (MSIL), MARVELL TAIWAN, LTD. AND
* SYSKONNECT GMBH.
********************************************************************************
* mvSata.h - Header File for mvSata.c.
*
* DESCRIPTION:
* None.
*
* DEPENDENCIES:
* mvOs.h
* ATA/ATAPI-6 standard
*
* FILE REVISION NUMBER:
* $Revision: 1.9 $
*******************************************************************************/
#ifndef __INCmvSatah
#define __INCmvSatah
#ifdef __cplusplus
extern "C" /*{*/
#endif /* __cplusplus */
/* Includes */
#include "mvOs.h"
#include "mvRegs.h"
/* Definitions */
#define MV_CORE_DRIVER_LOG_ID 0
/* MV88SX50XX specific defines */
#define MV_SATA_VENDOR_ID 0x11AB
#define MV_SATA_DEVICE_ID_5080 0x5080
#define MV_SATA_DEVICE_ID_5081 0x5081
#define MV_SATA_DEVICE_ID_5040 0x5040
#define MV_SATA_DEVICE_ID_5041 0x5041
#define MV_SATA_DEVICE_ID_6041 0x6041
#define MV_SATA_DEVICE_ID_6081 0x6081
#define MV_SATA_CHANNELS_NUM 8
#define MV_SATA_UNITS_NUM 2
#define MV_SATA_PM_MAX_PORTS 15
#define MV_SATA_PM_CONTROL_PORT 15
#define MV_EDMA_QUEUE_LENGTH 32 /* Up to 32 outstanding */
/* commands per SATA channel*/
#ifndef MV_SATA_OVERRIDE_SW_QUEUE_SIZE
#define MV_SATA_SW_QUEUE_SIZE (MV_EDMA_QUEUE_LENGTH -1)
#else
#define MV_SATA_SW_QUEUE_SIZE MV_SATA_REQUESTED_SW_QUEUE_SIZE
#endif
#define MV_EDMA_QUEUE_MASK 0x1F
#define MV_EDMA_REQUEST_ENTRY_SIZE 32
#define MV_EDMA_RESPONSE_ENTRY_SIZE 8
#define MV_EDMA_REQUEST_QUEUE_SIZE 1024 /* 32*32 = 1KBytes */
#define MV_EDMA_RESPONSE_QUEUE_SIZE 256 /* 32*8 = 256 Bytes */
#define MV_EDMA_PRD_ENTRY_SIZE 16 /* 16Bytes*/
#define MV_EDMA_PRD_NO_SNOOP_FLAG MV_BIT0
#define MV_EDMA_PRD_EOT_FLAG MV_BIT15
#define MV_ATA_IDENTIFY_DEV_DATA_LENGTH 256 /* number of words(2 byte)*/
#define MV_ATA_MODEL_NUMBER_LEN 40
#define ATA_SECTOR_SIZE 512
#define MV_SATA_COMM_INIT_DELAY 1000 /*1000 us*/
#define MV_SATA_COMM_INIT_WAIT_DELAY 20000 /*20 ms*/
/*Channel to Channel*/
#ifdef MV_SATA_C2C_COMM
#define MV_SATA_REGISTER_HOST_2_DEVICE_FIS 0x00000034
#define MV_SATA_DMA_ACTIVATE_FIS 0x00000039
#define MV_C2C_MESSAGE_SIZE 10
#endif
#ifdef MV_SATA_IO_GRANULARITY
#define MV_IOG_QUEUE_SIZE 0x40
#define MV_IOG_INVALID_COMMAND_ID MV_IOG_QUEUE_SIZE
#endif
/* Typedefs */
typedef enum mvUdmaType
{
MV_UDMA_TYPE_READ, MV_UDMA_TYPE_WRITE
} MV_UDMA_TYPE;
typedef enum mvFlushType
{
MV_FLUSH_TYPE_CALLBACK, MV_FLUSH_TYPE_NONE
} MV_FLUSH_TYPE;
typedef enum mvCompletionType
{
MV_COMPLETION_TYPE_NORMAL, MV_COMPLETION_TYPE_ERROR,
MV_COMPLETION_TYPE_ABORT
} MV_COMPLETION_TYPE;
typedef enum mvEventType
{
MV_EVENT_TYPE_ADAPTER_ERROR, MV_EVENT_TYPE_SATA_CABLE,
MV_SATA_EVENT_TYPE_SATA_ERROR
} MV_EVENT_TYPE;
typedef enum mvSataCableEvent
{
MV_SATA_CABLE_EVENT_DISCONNECT = 0,
MV_SATA_CABLE_EVENT_CONNECT,
MV_SATA_CABLE_EVENT_PM_HOT_PLUG
} MV_SATA_CABLE_EVENT;
#ifdef MV_SATA_C2C_COMM
typedef enum mvC2CEventType
{
MV_C2C_REGISTER_DEVICE_TO_HOST_FIS_DONE,
MV_C2C_REGISTER_DEVICE_TO_HOST_FIS_ERROR,
MV_C2C_BM_DMA_DONE,
MV_C2C_BM_DMA_ERROR,
} MV_C2C_EVENT_TYPE;
#endif
typedef enum mvEdmaMode
{
MV_EDMA_MODE_QUEUED,
MV_EDMA_MODE_NOT_QUEUED,
MV_EDMA_MODE_NATIVE_QUEUING
} MV_EDMA_MODE;
typedef enum mvQueueCommandResult
{
MV_QUEUE_COMMAND_RESULT_OK = 0,
MV_QUEUE_COMMAND_RESULT_QUEUED_MODE_DISABLED,
MV_QUEUE_COMMAND_RESULT_FULL,
MV_QUEUE_COMMAND_RESULT_BAD_LBA_ADDRESS,
MV_QUEUE_COMMAND_RESULT_BAD_PARAMS
} MV_QUEUE_COMMAND_RESULT;
typedef enum mvNonUdmaProtocol
{
MV_NON_UDMA_PROTOCOL_NON_DATA,
MV_NON_UDMA_PROTOCOL_PIO_DATA_IN,
MV_NON_UDMA_PROTOCOL_PIO_DATA_OUT
} MV_NON_UDMA_PROTOCOL;
typedef enum mvSataGeneration
{
MV_SATA_GEN_I, MV_SATA_GEN_II
} MV_SATA_GEN;
typedef enum mvSataInterfaceSpeed
{
MV_SATA_IF_SPEED_1_5_GBPS, MV_SATA_IF_SPEED_3_GBPS,
MV_SATA_IF_SPEED_NO_LIMIT, MV_SATA_IF_SPEED_INVALID
} MV_SATA_IF_SPEED;
#ifdef MV_SATA_C2C_COMM
typedef enum mvSataC2CMode
{
MV_SATA_C2C_MODE_INITIATOR, MV_SATA_C2C_MODE_TARGET
} MV_SATA_C2C_MODE;
#endif
typedef enum mvSataDeviceType
{
MV_SATA_DEVICE_TYPE_UNKNOWN = 0,
MV_SATA_DEVICE_TYPE_ATA_DISK,
MV_SATA_DEVICE_TYPE_ATAPI_DISK,
MV_SATA_DEVICE_TYPE_PM
} MV_SATA_DEVICE_TYPE;
struct mvDmaRequestQueueEntry;
struct mvDmaResponseQueueEntry;
struct mvDmaCommandEntry;
struct mvSataAdapter;
struct mvStorageDevRegisters;
struct mvSataChannel;
typedef MV_BOOLEAN (* mvSataCommandCompletionCallBack_t)(struct mvSataAdapter *,
MV_U8,
MV_COMPLETION_TYPE,
MV_VOID_PTR, MV_U16,
MV_U32,
struct mvStorageDevRegisters *);
#ifdef MV_SATA_C2C_COMM
typedef MV_BOOLEAN (*C2CCallBack_t)(struct mvSataAdapter *,
struct mvSataChannel *,
MV_C2C_EVENT_TYPE event,
MV_U32 msgSize,
MV_U8* msg);
#endif
typedef enum mvQueuedCommandType
{
MV_QUEUED_COMMAND_TYPE_UDMA,
MV_QUEUED_COMMAND_TYPE_NONE_UDMA
} MV_QUEUED_COMMAND_TYPE;
#ifdef MV_SATA_IO_GRANULARITY
typedef enum mvIogQueuedCommandType
{
MV_IOG_COMMAND_TYPE_FIRST,
MV_IOG_COMMAND_TYPE_NEXT
} MV_IOG_COMMAND_TYPE;
#endif
typedef enum mvSataInterruptScheme
{
MV_SATA_INTERRUPT_HANDLING_IN_ISR,
MV_SATA_INTERRUPT_HANDLING_IN_TASK,
MV_SATA_INTERRUPTS_DISABLED
}MV_SATA_INTERRUPT_SCHEME;
typedef struct mvUdmaCommandParams
{
MV_UDMA_TYPE readWrite;
MV_BOOLEAN isEXT;
MV_U32 lowLBAAddress;
MV_U16 highLBAAddress;
MV_U16 numOfSectors;
MV_U32 prdLowAddr;
MV_U32 prdHighAddr;
mvSataCommandCompletionCallBack_t callBack;
MV_VOID_PTR commandId;
#ifdef MV_SATA_IO_GRANULARITY
MV_BOOLEAN ioGranularityEnabled;
MV_IOG_COMMAND_TYPE iogCommandType;
union
{
MV_U8 transId;
MV_U8 transCount;
} ioGranularityCommandParam;
MV_U8 iogCurrentTransId;
#endif
} MV_UDMA_COMMAND_PARAMS;
typedef struct mvNoneUdmaCommandParams
{
MV_NON_UDMA_PROTOCOL protocolType;
MV_BOOLEAN isEXT;
MV_U16_PTR bufPtr;
MV_U32 count;
MV_U16 features;
MV_U16 sectorCount;
MV_U16 lbaLow;
MV_U16 lbaMid;
MV_U16 lbaHigh;
MV_U8 device;
MV_U8 command;
mvSataCommandCompletionCallBack_t callBack;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -