core_adpt.h
来自「6440linuxDriver的源代码」· C头文件 代码 · 共 1,872 行 · 第 1/5 页
H
1,872 行
#if !defined(CORE_SAS_H)#define CORE_SAS_H#include "discover.h"#include "core_ata.h"#ifdef SUPPORT_SES#include "core_ses.h"#endif/* For some ATA HDD only supports 28 bit LBA DMA. This definition is only for them. */#define CORE_MAX_TRANSFER_SIZE (128*1024)#define CORE_MAX_TRANSFER_SECTOR (CORE_MAX_TRANSFER_SIZE/SECTOR_LENGTH)#define MAX_PHYSICAL_PORT_NUMBER 8#ifdef SUPPORT_I2C#define MAX_VIRTUAL_PORT_NUMBER 1#else#define MAX_VIRTUAL_PORT_NUMBER 0#endif#define MAX_PORT_NUMBER (MAX_PHYSICAL_PORT_NUMBER + MAX_VIRTUAL_PORT_NUMBER)#define MAX_PHY_NUM 12#define MAX_ROUTE_INDEX 256#define MAX_DEVICE_ID MV_MAX_HD_DEVICE_ID#define MAX_PORT_ID MAX_PORT_NUMBER#define ID_NOT_MAPPED 0xff#define MAX_EXPANDER_ID MIN_EXPANDER_ID + MAX_EXPANDER_SUPPORTED_PERFORMANCE#ifdef SUPPORT_PM#define MIN_PM_ID MAX_EXPANDER_ID#define MAX_PM_ID MIN_PM_ID + MAX_PM_SUPPORTED#endif#define MAX_RX_FIS_NUMBER 17#define MAX_SMP_RESP_SIZE 1016#define MAX_SSP_RESP_SENSE_SIZE sizeof(MV_Sense_Data)//#define MAX_DELV_QUEUE_SIZE CORE_MAX_REQUEST_NUMBER//#define MAX_CMPL_QUEUE_SIZE CORE_MAX_REQUEST_NUMBER//#define MAX_INTERNAL_REQ_COUNT MAX_DEVICE_NUMBER#define MIN_INTERNAL_REQ_COUNT 1//#define MAX_SATA_SCRATCH_COUNT MAX_DEVICE_NUMBER#define MIN_SATA_SCRATCH_COUNT 1//#define MAX_SMP_SCRATCH_COUNT MAX_EXPANDER_NUMBER#define MIN_SMP_SCRATCH_COUNT 1 // TBD #define SG_BUFFER_SINGLE_COUNT HW_SG_ENTRY_MAX#define SG_BUFFER_SIZE (SG_BUFFER_SINGLE_COUNT * sizeof(MV_SG_Entry))#define MIN_SG_BUFFER_COUNT 8 #define MAX_SG_BUFFER_COUNT 512 #define MAX_SG_BUFFER_COUNT_NO_XOR 256//TBD: Checking the following naming#define RX_FIS_SIZE 256#define UNASSOCIATED_FIS_POOL_SIZE 1024#define RX_FIS_POOL_SIZE RX_FIS_SIZE*MAX_RX_FIS_NUMBER + UNASSOCIATED_FIS_POOL_SIZE#ifndef SOFTWARE_XOR/* XOR*/#define MAX_XOR_CMD_ENTRY 16//#define MAX_XOR_SG_ENTRY 256/* XOR Engine can handle only two target at a time. * If only have one or two target, for B0 board, one XOR table is enough for one XOR request. */#define MAX_XOR_TABLE_PER_XOR_REQUEST ((XOR_TARGET_SG_COUNT+1)/2)#endif#define SATA_SCRATCH_BUFFER_SIZE sizeof(ATA_Identify_Data)#define SMP_SCRATCH_BUFFER_SIZE sizeof(SMPRequest)#ifdef SUPPORT_SES# define SES_CONTROL_BUFFER_SIZE SATA_SCRATCH_BUFFER_SIZE#endif /* SUPPORT_SES *//* #define DEVICE_TYPE_ATAPI MV_BIT(0)#define DEVICE_TYPE_SSP MV_BIT(1)#define DEVICE_TYPE_STP MV_BIT(2)#define DEVICE_TYPE_SATA MV_BIT(3)#define DEVICE_TYPE_SES MV_BIT(4)#define DEVICE_TYPE_TAPE MV_BIT(5) */#define DC_ATA MV_BIT(0)#define DC_SCSI MV_BIT(1)#define DC_SERIAL MV_BIT(2)#define DC_PARALLEL MV_BIT(3)#define DC_ATAPI MV_BIT(4)/* PD's Device type defined in SCSI-III specification (used by new driver) */#define DT_DIRECT_ACCESS_BLOCK 0x00#define DT_SEQ_ACCESS 0x01#define DT_PRINTER 0x02#define DT_PROCESSOR 0x03#define DT_WRITE_ONCE 0x04#define DT_CD_DVD 0x05#define DT_OPTICAL_MEMORY 0x07#define DT_MEDIA_CHANGER 0x08#define DT_STORAGE_ARRAY_CTRL 0x0C/* an actual enclosure */#define DT_ENCLOSURE 0x0D/* The following are defined by Marvell */#define DT_EXPANDER 0x20#define DT_PM 0x21/* a device that provides some SES services (ie, Luigi) */#define DT_SES_DEVICE 0x22/* Some macros to make device type easier to use */#define IS_SSP(pDevice) ((pDevice->Connection & DC_SCSI) && (pDevice->Connection & DC_SERIAL) && \ !(pDevice->Connection & DC_ATA))#define IS_STP(pDevice) ((pDevice->Connection & DC_SCSI) && (pDevice->Connection & DC_SERIAL) && \ (pDevice->Connection & DC_ATA))#define IS_NATIVE_SATA(pDevice) (!(pDevice->Connection & DC_SCSI) && (pDevice->Connection & DC_SERIAL) && \ (pDevice->Connection & DC_ATA))#define IS_STP_OR_SATA(pDevice) ((pDevice->Connection & DC_ATA) && (pDevice->Connection & DC_SERIAL))#define IS_ATAPI(pDevice) ((pDevice->Connection & DC_ATAPI) && (pDevice->Connection & DC_ATA))#define IS_TAPE(pDevice) (pDevice->Dev_Type == DT_SEQ_ACCESS)/* Device initialization state */#define DEVICE_STATE_IDLE 0x0#define DEVICE_STATE_PM_ENABLE_1 0x1#define DEVICE_STATE_PM_ENABLE_0 0x2#define DEVICE_STATE_SRST_1 0x3#define DEVICE_STATE_SRST_0 0x4#define DEVICE_STATE_RESET_DONE 0x5// SATA device states#define DEVICE_STATE_IDENTIFY_DONE 0x6#define DEVICE_STATE_SET_UDMA_DONE 0x7#define DEVICE_STATE_SET_PIO_DONE 0x8#define DEVICE_STATE_ENABLE_WRITE_CACHE_DONE 0x9#define DEVICE_STATE_ENABLE_READ_AHEAD_DONE 0xA/* SAS device states */#define DEVICE_STATE_INQUIRY_DONE 0xB /* issue read capacity next */#define DEVICE_STATE_INQUIRY_16_DONE 0xC // issue read capacity 16 next#define DEVICE_STATE_READ_CAPACITY_DONE 0xD# ifdef CORE_SAS_SUPPORT_ATA_COMMAND# define DEVICE_STATE_MODE_SENSE_DONE 0xE# define DEVICE_STATE_MODE_SELECT_DONE 0xF# endif /* CORE_SAS_SUPPORT_ATA_COMMAND */// Device states#define DEVICE_STATE_FORMAT_DONE 0x10#define DEVICE_STATE_FORMAT_WRITE 0x11#define DEVICE_STATE_FORMAT_VERIFY 0x12#define DEVICE_STATE_PM_SOFTRESET 0x13#define DEVICE_STATE_STARTSTOP_DONE 0x14#define DEVICE_STATE_INIT_DONE 0xFF/* Device status */#define DEVICE_STATUS_NO_DEVICE MV_BIT(0)#define DEVICE_STATUS_EXISTING MV_BIT(1)#define DEVICE_STATUS_FUNCTIONAL MV_BIT(2)/* 3G and TCQ */#define DEVICE_CAPACITY_48BIT_SUPPORTED MV_BIT(0)#define DEVICE_CAPACITY_SMART_SUPPORTED MV_BIT(1)#define DEVICE_CAPACITY_WRITECACHE_SUPPORTED MV_BIT(2)#define DEVICE_CAPACITY_NCQ_SUPPORTED MV_BIT(3)#define DEVICE_CAPACITY_RATE_1_5G MV_BIT(4)#define DEVICE_CAPACITY_RATE_3G MV_BIT(5) #define DEVICE_CAPACITY_READLOGEXT_SUPPORTED MV_BIT(6)#define DEVICE_CAPACITY_READ_LOOK_AHEAD_SUPPORTED MV_BIT(7)#define DEVICE_CAPACITY_SMART_SELF_TEST_SUPPORTED MV_BIT(8)#define DEVICE_SETTING_SMART_ENABLED MV_BIT(0)#define DEVICE_SETTING_WRITECACHE_ENABLED MV_BIT(1)#define DEVICE_SETTING_PI_ENABLED MV_BIT(2)#define DEVICE_SETTING_READ_LOOK_AHEAD MV_BIT(3)#define MapDeviceId(pCore,ID) ( pCore->Device_Map[ID] )#ifdef SUPPORT_PM#define MapPortId(pCore,ID) ( (MapDeviceId(pCore,ID)==ID_NOT_MAPPED) ? ID_NOT_MAPPED : \ ((ID < MIN_EXPANDER_ID) ? (pCore->Devices[pCore->Device_Map[ID]].pPort->Id) : \ ((ID < MIN_PM_ID) ? (pCore->Expanders[pCore->Device_Map[ID]].pPort->Id) : \ (pCore->PMs[pCore->Device_Map[ID]].pPort->Id))))#else /* SUPPORT_PM */#define MapPortId(pCore,ID) ( (MapDeviceId(pCore,ID)==ID_NOT_MAPPED) ? ID_NOT_MAPPED : \ ((ID < MIN_EXPANDER_ID) ? (pCore->Devices[pCore->Device_Map[ID]].pPort->Id) : \ (pCore->Expanders[pCore->Device_Map[ID]].pPort->Id) ))#endif /* SUPPORT_PM */#define MapPortEntry(pCore,ID) ( pCore->Port_Map[ID] )#define RX_FIS_D2H_REG 0x40 /* offset of D2H Register FIS data */#define FIS_REG_H2D_SIZE_IN_DWORD 5/* ======================================================================== 64xx chip registers ========================================================================*/#ifdef _OS_WINDOWS#define MV_PCI_BAR 5#else /* _OS_WINDOWS */#define MV_PCI_BAR 4#endif /* _OS_WINDOWS */#define GEN_HOST_CONTROL_REG_START 0x0#define VENDOR_SPECIFIC_REG_START 0xa0#define SAS_PORT_REG_START 0x100enum {/* GEN_HOST_CONTROL */ /* global controller registers */ HOST_CAP_REG = 0x00, /* host capabilities */ HBA_CONTROL = 0x04, /* global host control */ HBA_IRQ_STAT = 0x08, /* interrupt status */ HOST_PORTS_IMPL_REG = 0x0c, /* bitmap of implemented ports */ /* HOST_CAP_REG bits */ HOST_CAP_64 = (1 << 31), /* PCI DAC (64-bit DMA) support */ /* HBA_CONTROL bits */ MV_HBA_RESET = (1 << 0), MV_HBA_INT_ENABLE = (1 << 1), HOST_RESET = (1 << 0), /* reset controller; self-clear */ HOST_IRQ_EN = (1 << 1), /* global IRQ enable */ HOST_CMPL_Q_EN = (1 << 2), /* global done queue enable */ /* HBA_IRQ_STAT (0x08) bits */ SAS_SATA_IRQ_PENDING = (1 << 0), XOR_IRQ_PENDING = (1 << 4),};/* HOST_PORTS_IMPL_REG bits */typedef struct _REG_HBA_PORTS_IMPL{#if __MV_BIG_ENDIAN_BITFIELD__ MV_U32 Reserved:16; MV_U32 XOR_PORTS_IMPL:8; MV_U32 PORTS_IMPL:8;#else MV_U32 PORTS_IMPL:8; MV_U32 XOR_PORTS_IMPL:8; MV_U32 Reserved:16;#endif /* __MV_BIG_ENDIAN_BITFIELD__ */} REG_HBA_PORTS_IMPL, *PREG_HBA_PORTS_IMPL;enum { HOST_PORTS_IMPL0 = (1 << 0), /* HOST port0 existing */ HOST_PORTS_IMPL1 = (1 << 1), /* HOST port1 existing */ HOST_PORTS_IMPL2 = (1 << 2), /* HOST port2 existing */ HOST_PORTS_IMPL3 = (1 << 3), /* HOST port3 existing */ HOST_PORTS_IMPL4 = (1 << 4), /* HOST port0 existing */ HOST_PORTS_IMPL5 = (1 << 5), /* HOST port1 existing */ HOST_PORTS_IMPL6 = (1 << 6), /* HOST port2 existing */ HOST_PORTS_IMPL7 = (1 << 7), /* HOST port3 existing */ HOST_XOR_IMPL = (1 << 8), /* HOST XOR port existing */ /* VENDOR_SPECIFIC */ /* vendor specific registers */ VSR_PORT_TYPE_REG = VENDOR_SPECIFIC_REG_START,/* port type register */ /* VSR_PORT_TYPE bits */ MODE_SAS_PORT0_MASK = (1 << 0), /* SATA if 0 is set */ MODE_SAS_PORT1_MASK = (1 << 1), MODE_SAS_PORT2_MASK = (1 << 2), MODE_SAS_PORT3_MASK = (1 << 3), MODE_SAS_PORT4_MASK = (1 << 4), MODE_SAS_PORT5_MASK = (1 << 5), MODE_SAS_PORT6_MASK = (1 << 6), MODE_SAS_PORT7_MASK = (1 << 7), MODE_SAS_SATA = MODE_SAS_PORT0_MASK | MODE_SAS_PORT1_MASK | MODE_SAS_PORT2_MASK | MODE_SAS_PORT3_MASK | MODE_SAS_PORT4_MASK | MODE_SAS_PORT5_MASK | MODE_SAS_PORT6_MASK | MODE_SAS_PORT7_MASK, MODE_AUTO_DET_PORT0 = (1 << 8), MODE_AUTO_DET_PORT1 = (1 << 9), MODE_AUTO_DET_PORT2 = (1 << 10), MODE_AUTO_DET_PORT3 = (1 << 11), MODE_AUTO_DET_PORT4 = (1 << 12), MODE_AUTO_DET_PORT5 = (1 << 13), MODE_AUTO_DET_PORT6 = (1 << 14), MODE_AUTO_DET_PORT7 = (1 << 15), MODE_AUTO_DET_EN = MODE_AUTO_DET_PORT0 | MODE_AUTO_DET_PORT1 | MODE_AUTO_DET_PORT2 | MODE_AUTO_DET_PORT3 | MODE_AUTO_DET_PORT4 | MODE_AUTO_DET_PORT5 | MODE_AUTO_DET_PORT6 | MODE_AUTO_DET_PORT7, SATA_TRGT_EN_PORT0 = (1 << 16), SATA_TRGT_EN_PORT1 = (1 << 17), SATA_TRGT_EN_PORT2 = (1 << 18), SATA_TRGT_EN_PORT3 = (1 << 19), SATA_TRGT_EN_PORT4 = (1 << 20), SATA_TRGT_EN_PORT5 = (1 << 21), SATA_TRGT_EN_PORT6 = (1 << 22), SATA_TRGT_EN_PORT7 = (1 << 23), /* obsolete - to be removed soon */ SAS_ON_PORT0 = (1L << 0), /* port0 SAS existing */ SAS_ON_PORT1 = (1L << 1), /* port1 SAS existing */ SAS_ON_PORT2 = (1L << 2), /* port2 SAS existing */ SAS_ON_PORT3 = (1L << 3), /* port3 SAS existing */ AUTO_DETECT_PORT0 = (1L << 8), /* port0 use auto detect */ AUTO_DETECT_PORT1 = (1L << 9), /* port1 use auto detect */ AUTO_DETECT_PORT2 = (1L << 10), /* port2 use auto detect */ AUTO_DETECT_PORT3 = (1L << 11), /* port3 use auto detect */ SATA_TRGT_MODE = (1L << 16), /* HOST XOR port existing *//* SAS_PORT_COMMON_REG */ /* SATA/SAS port common registers */ COMMON_CONFIG = 0x100, /* configuration register */ COMMON_CONTROL = 0x104, /* control register */ COMMON_LST_ADDR = 0x108, /* command list DMA addr */ COMMON_LST_ADDR_HI = 0x10c, /* command list DMA addr hi */ COMMON_FIS_ADDR = 0x110, /* FIS rx buf addr */ COMMON_FIS_ADDR_HI = 0x114, /* FIS rx buf addr hi */ COMMON_WORK_ADDR = 0x118, /* workarea buf addr */ COMMON_WORK_ADDR_HI = 0x11c, /* workarea buf addr hi */ COMMON_DELV_Q_CONFIG = 0x120, /* delivery queue configuration */ COMMON_DELV_Q_ADDR = 0x124, /* delivery queue base address */ COMMON_DELV_Q_ADDR_HI = 0x128, /* delivery queue base address hi */ COMMON_DELV_Q_WR_PTR = 0x12c, /* delivery queue write pointer */ COMMON_DELV_Q_RD_PTR = 0x130, /* delivery queue read pointer */ COMMON_CMPL_Q_CONFIG = 0x134, /* completion queue configuration */ COMMON_CMPL_Q_ADDR = 0x138, /* completion queue base address */ COMMON_CMPL_Q_ADDR_HI = 0x13c, /* completion queue base address hi */ COMMON_CMPL_Q_WR_PTR = 0x140, /* completion queue write pointer */ COMMON_CMPL_Q_RD_PTR = 0x144, /* completion queue read pointer */ COMMON_COAL_CONFIG = 0x148, /* interrupt coalescing config */ COMMON_COAL_TIMEOUT = 0x14c, /* interrupt coalescing time wait */ COMMON_IRQ_STAT = 0x150, /* interrupt status */ COMMON_IRQ_MASK = 0x154, /* interrupt enable/disable mask */ COMMON_SRS_IRQ_STAT = 0x158, /* SRS interrupt status */ COMMON_SRS_IRQ_MASK = 0x15c, /* SRS intr enable/disable mask */ PORT_IRQ_STAT0 = 0x160, /* Port 0 interrupt status */ PORT_IRQ_MASK0 = 0x164, /* Port 0 interrupt enable/disable mask */ PORT_IRQ_STAT1 = 0x168, /* Port 1 interrupt status */ PORT_IRQ_MASK1 = 0x16c, /* Port 1 interrupt enable/disable mask */ PORT_IRQ_STAT2 = 0x170, /* Port 2 interrupt status */ PORT_IRQ_MASK2 = 0x174, /* Port 2 interrupt enable/disable mask */ PORT_IRQ_STAT3 = 0x178, /* Port 3 interrupt status */ PORT_IRQ_MASK3 = 0x17c, /* Port 3 interrupt enable/disable mask */ PORT_PHY_CONTROL0 = 0x180, /* port 0 serial status/control */ PORT_PHY_CONTROL1 = 0x184, /* port 1 serial status/control */ PORT_PHY_CONTROL2 = 0x188, /* port 2 serial status/control */ PORT_PHY_CONTROL3 = 0x18c, /* port 3 serial status/control */ COMMON_CMD_ADDR = 0x1b8, /* Command Address */ COMMON_CMD_DATA = 0x1bc, /* Command Data */ PORT_CONFIG_ADDR0 = 0x1c0, /* Port 0 config address */ PORT_CONFIG_DATA0 = 0x1c4, /* Port 0 config data */ PORT_CONFIG_ADDR1 = 0x1c8, /* Port 1 config address */ PORT_CONFIG_DATA1 = 0x1cc, /* Port 1 config data */ PORT_CONFIG_ADDR2 = 0x1d0, /* Port 2 config address */ PORT_CONFIG_DATA2 = 0x1d4, /* Port 2 config data */ PORT_CONFIG_ADDR3 = 0x1d8, /* Port 3 config address */ PORT_CONFIG_DATA3 = 0x1dc, /* Port 3 config data */ PORT_VSR_ADDR0 = 0x1e0, /* port 0 Vendor Specific Register addr */ PORT_VSR_DATA0 = 0x1e4, /* port 0 Vendor Specific Register Data */ PORT_VSR_ADDR1 = 0x1e8, /* port 1 Vendor Specific Register addr */ PORT_VSR_DATA1 = 0x1ec, /* port 1 Vendor Specific Register Data */ PORT_VSR_ADDR2 = 0x1f0, /* port 2 Vendor Specific Register addr */ PORT_VSR_DATA2 = 0x1f4, /* port 2 Vendor Specific Register Data */ PORT_VSR_ADDR3 = 0x1f8, /* port 3 Vendor Specific Register addr */ PORT_VSR_DATA3 = 0x1fc, /* port 3 Vendor Specific Register Data *//* for 6480 */ PORT_IRQ_STAT4 = 0x200, /* Port 4 interrupt status */ PORT_IRQ_MASK4 = 0x204, /* Port 4 interrupt enable/disable mask */ PORT_IRQ_STAT5 = 0x208, /* Port 5 interrupt status */ PORT_IRQ_MASK5 = 0x20c, /* Port 5 interrupt enable/disable mask */ PORT_IRQ_STAT6 = 0x210, /* Port 6 interrupt status */ PORT_IRQ_MASK6 = 0x214, /* Port 6 interrupt enable/disable mask */ PORT_IRQ_STAT7 = 0x218, /* Port 7 interrupt status */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?