| /******************************************************************************* |
| Copyright (C) Marvell International Ltd. and its affiliates |
| |
| ******************************************************************************** |
| Marvell GPL License Option |
| |
| If you received this File from Marvell, you may opt to use, redistribute and/or |
| modify this File in accordance with the terms and conditions of the General |
| Public License Version 2, June 1991 (the "GPL License"), a copy of which is |
| available along with the File in the license.txt file or by writing to the Free |
| Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or |
| on the worldwide web at http://www.gnu.org/licenses/gpl.txt. |
| |
| THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED |
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY |
| DISCLAIMED. The GPL License provides additional details about this warranty |
| disclaimer. |
| *******************************************************************************/ |
| /* |
| * Copyright (C) Freescale Semiconductor, Inc. 2006. |
| * Author: Jason Jin<Jason.jin@freescale.com> |
| * Zhang Wei<wei.zhang@freescale.com> |
| * |
| * See file CREDITS for list of people who contributed to this |
| * project. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| * |
| */ |
| #ifndef _MV94XX_H_ |
| #define _MV94XX_H_ |
| |
| #include <pci.h> |
| |
| |
| /***************************************************************************/ |
| #define SAS_REG_BASE 0x20000L |
| |
| enum common_regs { |
| /* SATA/SAS port common registers */ |
| COMMON_PORT_IMPLEMENT = 0x9C, /* port implement register */ |
| COMMON_PORT_TYPE = 0xa0, /* port type register */ |
| 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_SATA_REG_SET0 = 0x0118, /* SATA/STP Register Set 0 */ |
| COMMON_SATA_REG_SET1 = 0x011c, /* SATA/STP Register Set 1 */ |
| |
| 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_STAT0 = 0x0158, /* SRS interrupt status 0 */ |
| COMMON_SRS_IRQ_MASK0 = 0x015c, /* SRS intr enable/disable mask 0 */ |
| COMMON_SRS_IRQ_STAT1 = 0x0160, /* SRS interrupt status 1*/ |
| COMMON_SRS_IRQ_MASK1 = 0x0164, /* SRS intr enable/disable mask 1*/ |
| |
| COMMON_CMD_ADDR = 0x0170, /* Command Address Port */ |
| COMMON_CMD_DATA = 0x0174, /* Command Data Port */ |
| |
| /* Port interrupt status/mask register set $i (0x180/0x184-0x1b8/0x1bc) */ |
| COMMON_PORT_IRQ_STAT0 = 0x0180, |
| COMMON_PORT_IRQ_MASK0 = 0x0184, |
| |
| /* port serial control/status register set $i (0x1d0-0x1ec) */ |
| COMMON_PORT_PHY_CONTROL0 = 0x01d0, |
| COMMON_PORT_ALL_PHY_CONTROL=0x01f0, /* All port serial status/control */ |
| |
| /* port config address/data regsiter set $i (0x200/0x204 - 0x238/0x23c) */ |
| COMMON_PORT_CONFIG_ADDR0 = 0x0200, |
| COMMON_PORT_CONFIG_DATA0 = 0x0204, |
| |
| /* port vendor specific address/data register set $i (0x250/0x254-0x268/0x26c) */ |
| COMMON_PORT_VSR_ADDR0 = 0x0250, |
| COMMON_PORT_VSR_DATA0 = 0x0254, |
| COMMON_PORT_ALL_VSR_ADDR = 0x0290, /* All port Vendor Specific Register addr */ |
| COMMON_PORT_ALL_VSR_DATA = 0x0294, /* All port Vendor Specific Register Data */ |
| }; |
| |
| enum common_regs_bits { |
| /* COMMON_CONFIG register bits */ |
| CONFIG_CMD_TBL_BE = (1U << 0), |
| CONFIG_OPEN_ADDR_BE = (1U << 1), |
| CONFIG_RSPNS_FRAME_BE = (1U << 2), |
| CONFIG_DATA_BE = (1U << 3), |
| CONFIG_SAS_SATA_RST = (1U << 5), |
| CONFIG_STP_STOP_ON_ERR = (1U << 25), |
| |
| /* COMMON_CONTROL : port control/status bits (R104h) */ |
| CONTROL_EN_CMD_ISSUE = (1U << 0), |
| CONTROL_RESET_CMD_ISSUE = (1U << 1), |
| CONTROL_ERR_STOP_CMD_ISSUE = (1U << 3), |
| CONTROL_FIS_RCV_EN = (1U << 4), |
| CONTROL_CMD_CMPL_SELF_CLEAR = (1U << 5), |
| CONTROL_EN_SATA_RETRY = (1U << 6), |
| CONTROL_RSPNS_RCV_EN = (1U << 7), |
| |
| /* COMMON_DELV_Q_CONFIG (R120h) bits */ |
| DELV_QUEUE_SIZE_MASK = (0xFFFU << 0), |
| DELV_QUEUE_ENABLE = (1U << 16), |
| |
| /* COMMON_CMPL_Q_CONFIG (R134h) bits */ |
| CMPL_QUEUE_SIZE_MASK = (0xFFFU << 0), |
| CMPL_QUEUE_ENABLE = (1U << 16), |
| |
| /* COMMON_COAL_CONFIG (R148h) bits */ |
| INT_COAL_COUNT_MASK = (0x1FFU << 0), |
| INT_COAL_ENABLE = (1U << 16), |
| |
| /* COMMON_COAL_TIMEOUT (R14Ch) bits */ |
| COAL_TIMER_MASK = (0xFFFFU << 0), |
| COAL_TIMER_UNIT_1MS = (1U << 16), /* 6.67 ns if set to 0 */ |
| |
| /* COMMON_IRQ_STAT/MASK (R150h) bits */ |
| INT_CMD_CMPL = (1U << 0), |
| INT_CMD_CMPL_MASK = (1U << 0), |
| |
| INT_PORT_MASK_OFFSET = 8, |
| INT_PORT_MASK = (0xFF << INT_PORT_MASK_OFFSET), |
| INT_PHY_MASK_OFFSET = 4, |
| INT_PHY_MASK = (0x0F << INT_PHY_MASK_OFFSET), |
| INT_PORT_STOP_MASK_OFFSET = 16, |
| INT_PORT_STOP_MASK = (0xFF << INT_PORT_STOP_MASK_OFFSET), |
| |
| INT_NON_SPCFC_NCQ_ERR = (1U << 25), |
| |
| INT_MEM_PAR_ERR = (1U << 26), |
| INT_DMA_PEX_TO = (1U << 27), |
| INT_PRD_BC_ERR = (1U << 28), |
| INT_DP_PAR_ERR = (1U << 29), |
| |
| /* COMMON_PORT_IRQ_STAT/MASK (R160h) bits */ |
| IRQ_PHY_RDY_CHNG_MASK = (1U << 0), |
| IRQ_HRD_RES_DONE_MASK = (1U << 1), |
| IRQ_PHY_ID_DONE_MASK = (1U << 2), |
| IRQ_PHY_ID_FAIL_MASK = (1U << 3), |
| IRQ_PHY_ID_TIMEOUT = (1U << 4), |
| IRQ_HARD_RESET_RCVD_MASK = (1U << 5), |
| IRQ_PORT_SEL_PRESENT_MASK = (1U << 6), |
| IRQ_COMWAKE_RCVD_MASK = (1U << 7), |
| IRQ_BRDCST_CHNG_RCVD_MASK = (1U << 8), |
| IRQ_UNKNOWN_TAG_ERR = (1U << 9), |
| IRQ_IU_TOO_SHRT_ERR = (1U << 10), |
| IRQ_IU_TOO_LNG_ERR = (1U << 11), |
| IRQ_PHY_RDY_CHNG_1_TO_0 = (1U << 12), |
| IRQ_SIG_FIS_RCVD_MASK = (1U << 16), |
| IRQ_BIST_ACTVT_FIS_RCVD_MASK = (1U << 17), |
| IRQ_ASYNC_NTFCN_RCVD_MASK = (1U << 18), |
| IRQ_UNASSOC_FIS_RCVD_MASK = (1U << 19), |
| IRQ_STP_SATA_RX_ERR_MASK = (1U << 20), |
| IRQ_STP_SATA_TX_ERR_MASK = (1U << 21), |
| IRQ_STP_SATA_CRC_ERR_MASK = (1U << 22), |
| IRQ_STP_SATA_DCDR_ERR_MASK = (1U << 23), |
| IRQ_STP_SATA_PHY_DEC_ERR_MASK = (1U << 24), |
| IRQ_STP_SATA_SYNC_ERR_MASK = (1U << 25), |
| |
| /* common port serial control/status (R180h) bits */ |
| SCTRL_STP_LINK_LAYER_RESET = (1 << 0), |
| SCTRL_PHY_HARD_RESET_SEQ = (1 << 1), |
| SCTRL_PHY_BRDCST_CHNG_NOTIFY = (1 << 2), |
| SCTRL_SSP_LINK_LAYER_RESET = (1 << 3), |
| SCTRL_MIN_SPP_PHYS_LINK_RATE_MASK = (0xF << 8), |
| SCTRL_MAX_SPP_PHYS_LINK_RATE_MASK = (0xF << 12), |
| SCTRL_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET = 16, |
| SCTRL_NEG_SPP_PHYS_LINK_RATE_MASK = (0xF << SCTRL_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET), |
| SCTRL_PHY_READY_MASK = (1 << 20), |
| }; |
| |
| /* sas/sata configuration port registers */ |
| enum config_regs { |
| CONFIG_SATA_CONTROL = 0x18, /* port SATA control register */ |
| CONFIG_PHY_CONTROL = 0x1c, /* port phy control register */ |
| |
| CONFIG_SATA_SIG0 = 0x20, /* port SATA signature FIS(Byte 0-3) */ |
| CONFIG_SATA_SIG1 = 0x24, /* port SATA signature FIS(Byte 4-7) */ |
| CONFIG_SATA_SIG2 = 0x28, /* port SATA signature FIS(Byte 8-11) */ |
| CONFIG_SATA_SIG3 = 0x2c, /* port SATA signature FIS(Byte 12-15)*/ |
| CONFIG_R_ERR_COUNT = 0x30, /* port R_ERR count register */ |
| CONFIG_CRC_ERR_COUNT = 0x34, /* port CRC error count register */ |
| CONFIG_WIDE_PORT = 0x38, /* port wide participating register */ |
| |
| CONFIG_CRN_CNT_INFO0 = 0x80, /* port current connection info register 0*/ |
| CONFIG_CRN_CNT_INFO1 = 0x84, /* port current connection info register 1*/ |
| CONFIG_CRN_CNT_INFO2 = 0x88, /* port current connection info register 2*/ |
| CONFIG_ID_FRAME0 = 0x100, /* Port device ID frame register 0, DEV Info*/ |
| CONFIG_ID_FRAME1 = 0x104, /* Port device ID frame register 1*/ |
| CONFIG_ID_FRAME2 = 0x108, /* Port device ID frame register 2*/ |
| CONFIG_ID_FRAME3 = 0x10c, /* Port device ID frame register 3, SAS Address lo*/ |
| CONFIG_ID_FRAME4 = 0x110, /* Port device ID frame register 4, SAS Address hi*/ |
| CONFIG_ID_FRAME5 = 0x114, /* Port device ID frame register 5, Phy Id*/ |
| CONFIG_ID_FRAME6 = 0x118, /* Port device ID frame register 6*/ |
| CONFIG_ATT_ID_FRAME0 = 0x11c, /* attached device ID frame register 0*/ |
| CONFIG_ATT_ID_FRAME1 = 0x120, /* attached device ID frame register 1*/ |
| CONFIG_ATT_ID_FRAME2 = 0x124, /* attached device ID frame register 2*/ |
| CONFIG_ATT_ID_FRAME3 = 0x128, /* attached device ID frame register 3*/ |
| CONFIG_ATT_ID_FRAME4 = 0x12c, /* attached device ID frame register 4*/ |
| CONFIG_ATT_ID_FRAME5 = 0x130, /* attached device ID frame register 5*/ |
| CONFIG_ATT_ID_FRAME6 = 0x134, /* attached device ID frame register 6*/ |
| }; |
| |
| enum vsr_regs { |
| VSR_IRQ_STATUS = 0x00, |
| VSR_IRQ_MASK = 0x04, |
| VSR_PHY_CONFIG = 0x08, |
| VSR_PHY_STATUS = 0x0c, |
| |
| VSR_PHY_MODE_REG_1 = 0x064, |
| VSR_PHY_FFE_CONTROL = 0x10C, |
| VSR_PHY_DFE_UPDATE_CRTL = 0x110, |
| VSR_REF_CLOCK_CRTL = 0x1A0, |
| }; |
| enum vsr_reg_bits { |
| /* VSR_IRQ_STATUS bits */ |
| VSR_IRQ_PHY_TIMEOUT = (1U << 10), |
| |
| /* VSR_PHY_STATUS bits */ |
| VSR_PHY_STATUS_MASK = 0x3f0000, |
| VSR_PHY_STATUS_IDLE = 0x00, |
| VSR_PHY_STATUS_SAS_RDY = 0x10, |
| VSR_PHY_STATUS_HR_RDY = 0x1d, |
| }; |
| |
| #define MV_MAX_CORES 2 |
| #define MV_MAX_CORE_PHY 4 |
| #define MV_MAX_PORTS (MV_MAX_CORES*MV_MAX_CORE_PHY) |
| #define MV_MAX_PM_NUM 8 |
| #define MV_MAX_DEV_PER_PM 5 |
| #define MV_MAX_DEVICES (MV_MAX_PM_NUM*MV_MAX_DEV_PER_PM) |
| |
| struct sas_sense_hdr { |
| u8 response_code; /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */ |
| u8 sense_key; |
| u8 asc; |
| u8 ascq; |
| }; |
| |
| struct mv_sg { |
| u32 addr; |
| u32 addr_hi; |
| u32 flags_size; |
| }; |
| |
| struct mv_cmd_hdr { |
| /*DWORD0*/ |
| u32 pm_port : 4; /* Port Multiplier field in command FIS */ |
| u32 bist : 1; /* SATA only, set if it is a BIST FIS */ |
| u32 atapi : 1; /* SATA only, set if it is a ATAPI PIO */ |
| u32 fst_dma : 1; /* SATA only, set if it is a first party DMA command */ |
| u32 reset: 1; /* SATA only, set if it is for device reset */ |
| u32 pi : 1; /* SSP only, set if protection information record present */ |
| u32 ssp_retry : 1; /* SSP only, set if enabling SSP transport layer retry */ |
| u32 ssp_verify : 1; /* SSP only, verify Data length */ |
| u32 ssp_fb : 1; /* SSP only, generate Burst without waiting for XFER-RDY */ |
| u32 ssp_pt : 1; /* SSP only, 0-frame type set by HW, 1-frame type given by SSP_SSPFrameType */ |
| u32 ssp_ft : 3; |
| u32 prd_entry_cnt : 8; |
| u32 rsvd : 8; |
| /* DWORD 1 */ |
| u32 frm_len : 9; /* command frame length in DW, including frame length, excluding CRC */ |
| u32 rsvd1 : 7; |
| u32 max_rsp_len : 9; /* max response frame length in DW, HW will put in status buffer structure */ |
| u32 rsvd2 : 7; |
| /* DWORD 2 */ |
| u32 tag: 16; /* command tag */ |
| u32 tgt_tag : 16; |
| |
| u32 data_len; |
| u32 tbl_addr; |
| u32 tbl_addr_hi; |
| u32 opf_addr; |
| u32 opf_addr_hi; |
| u32 sbf_addr; |
| u32 sbf_addr_hi; |
| u32 prdt_addr; |
| u32 prdt_addr_hi; |
| u32 intf_select; |
| u32 reserved[3]; |
| }; |
| |
| struct ssp_frame_hdr { |
| u8 frame_type; |
| u8 dest_sas_addr[3]; |
| u8 reserved1; |
| u8 src_sas_addr[3]; |
| u8 reserved2[2]; |
| |
| u8 cdp:1; |
| u8 retxed:1; |
| u8 retry_data:1; |
| u8 reserved3:5; |
| |
| u8 num_of_bytes:2; |
| u8 reserved4:6; |
| |
| u8 reserved5[4]; |
| u16 tag; |
| u16 target_tag; |
| u32 data_off; |
| }; |
| |
| struct ssp_cmd_iu { |
| u8 lun[8]; |
| u8 reserved1; |
| u8 task_attrib:3; |
| u8 reserved2:4; |
| u8 first_burst:1; |
| u8 reserved3; |
| u8 reserved4:2; |
| u8 add_cdb_len:6; |
| u8 cdb[16]; |
| }; |
| |
| struct ssp_rsp_iu { |
| u8 reserved1[10]; |
| u8 data_pres; |
| u8 status; |
| u32 reserved2; |
| u32 sd_len; |
| u32 rsp_len; |
| u8 sense_data[18]; |
| }; |
| |
| struct mv_ssp_cmd_tbl { |
| struct ssp_frame_hdr frm_hdr; |
| struct ssp_cmd_iu cmd_iu; |
| u32 reserved[3]; |
| }; |
| |
| /* SATA STP Command Table */ |
| struct mv_stp_cmd_tbl { |
| u8 fis[64]; /* Command FIS */ |
| u8 atapi_cdb[32]; /* ATAPI CDB */ |
| }; |
| |
| struct op_frm { |
| u8 frame_type:4; |
| u8 protocol:3; |
| u8 initiator:1; |
| |
| u8 connect_rate:4; |
| u8 feature:4; |
| u8 connect_tag[2]; |
| u32 dst_sas_addr_low; //u8 dst_sas_addr[8]; |
| u32 dst_sas_addr_high; |
| u8 src_sas_addr[8]; |
| u32 reserved[3]; |
| }; |
| |
| struct err_info { |
| u32 record0; |
| u32 record1; |
| }; |
| |
| struct status_info { |
| struct err_info err_info; |
| struct ssp_rsp_iu rsp_iu; |
| }; |
| |
| struct mv_cmd_tbl { |
| struct op_frm open_addr_frame; |
| struct status_info status_buf; |
| struct mv_sg prd_entry; |
| union |
| { |
| struct mv_ssp_cmd_tbl ssp_cmd_table; |
| struct mv_stp_cmd_tbl stp_cmd_table; |
| }; |
| }; |
| |
| struct dlvq_entry { |
| u32 slot_nm:12; |
| u32 phy:8; |
| u32 sata_reg_set:7; |
| u32 prio:1; |
| u32 mode:1; |
| u32 cmd:3; |
| }; |
| |
| struct cmplq_entry { |
| u32 slot_num:12; |
| u32 reserved1:4; |
| u32 cmd_cmpl:1; |
| u32 err_rcrd_xfrd:1; |
| u32 rspns_xfrd:1; |
| u32 attention:1; |
| u32 cmd_rcvd:1; /* target mode */ |
| u32 slot_rst_cmpl:1; |
| u32 rspns_good:1; |
| u32 reserved2:9; |
| }; |
| struct dev_info { |
| void *port; |
| u16 features; |
| u8 state; |
| u8 status; |
| |
| u16 setting; |
| u8 register_set; |
| u8 link_rate; |
| u32 sector_size; |
| |
| u32 sas_addr_low; |
| u32 sas_addr_high; |
| |
| u8 id; |
| u8 dev_type; |
| u8 pm_num; |
| u8 reserved[5]; |
| }; |
| |
| struct pm_info { |
| void *port; |
| struct dev_info *dev[MV_MAX_DEV_PER_PM]; |
| u8 register_set; |
| u8 state; |
| u8 status; |
| u8 num_ports; |
| u8 active_port; |
| u8 feature_enabled; |
| u8 rsvd[2]; |
| |
| u32 sstatus; |
| u32 global_serror; |
| }; |
| |
| struct port_info { |
| void *host; |
| void *core; |
| u8 id; |
| u8 type; |
| u8 phy_map; |
| u8 dev_num; |
| u16 pm_vendor; |
| u16 pm_id; |
| }; |
| |
| struct phy_info { |
| struct port_info *port; |
| u32 status; |
| u32 attach_sas_addr_low; |
| u32 attach_sas_addr_high; |
| u32 attach_info; |
| u8 type; |
| u8 wp_phymap; |
| u8 reserved[2]; |
| }; |
| |
| struct sas_core { |
| void *host; |
| ulong mmio_off; |
| |
| u16 lst_dlvq; |
| u16 lst_cmplq; |
| u8 id; |
| u8 used_register_set; |
| u8 start_phy_id; |
| u8 phy_num; |
| |
| struct phy_info phy[MV_MAX_CORE_PHY]; |
| }; |
| |
| struct host_info { |
| pci_dev_t dev; |
| struct sas_core core[MV_MAX_CORES]; |
| struct port_info ports[MV_MAX_PORTS]; |
| struct dev_info devices[MV_MAX_DEVICES]; |
| ulong mmio; |
| u32 cmd_list; |
| u32 rx_fis; |
| u32 cmd_table; |
| //phys_addr_t cmd_table_dma; |
| u32 dlv_q; |
| u32 cmpl_q; |
| u32 unassociate_fis_off; |
| u8 core_num; |
| u8 max_port_num; |
| u8 port_num; |
| u8 dev_num; |
| }; |
| |
| #define MAX_SLOT_NUMBER 1 |
| #define MAX_RX_FIS_NUMBER 1 |
| #define MAX_DELV_QUEUE_SIZE 4 |
| #define MAX_CMPL_QUEUE_SIZE 4 |
| |
| #define RX_FIS_SIZE 256 |
| #define CMD_LIST_POOL_SIZE sizeof(struct mv_cmd_hdr)*MAX_SLOT_NUMBER |
| #define UNASSOCIATED_FIS_POOL_SIZE 2048 |
| #define RX_FIS_POOL_SIZE RX_FIS_SIZE*MAX_RX_FIS_NUMBER + UNASSOCIATED_FIS_POOL_SIZE |
| #define CMD_TABLE_POOL_SIZE (sizeof(struct mv_cmd_tbl)*MAX_SLOT_NUMBER) |
| #define DELV_Q_POOL_SIZE sizeof(struct dlvq_entry)*MAX_DELV_QUEUE_SIZE |
| #define CMPL_Q_POOL_SIZE sizeof(struct cmplq_entry)*(MAX_CMPL_QUEUE_SIZE+1) |
| |
| #define CORE_BUFFLEN (64+CMD_LIST_POOL_SIZE \ |
| +256+RX_FIS_POOL_SIZE \ |
| +128+CMD_TABLE_POOL_SIZE \ |
| +64+DELV_Q_POOL_SIZE \ |
| +64+CMPL_Q_POOL_SIZE+0x60 \ |
| ) |
| #define PORT_TYPE_SAS (1 << 0) |
| #define PORT_TYPE_SATA (1 << 1) |
| #define PORT_TYPE_PM (1 << 2) |
| |
| #define DEVICE_TYPE_ATAPI (1 << 0) |
| #define DEVICE_TYPE_SSP (1 << 1) |
| #define DEVICE_TYPE_STP (1 << 2) |
| #define DEVICE_TYPE_SATA (1 << 3) |
| #define DEVICE_TYPE_SES (1 << 4) |
| #define DEVICE_TYPE_TAPE (1 << 5) |
| #define DEVICE_TYPE_SSD (1 << 6) //for blank ssd |
| |
| #define PM_GSCR_ID 0 |
| #define PM_GSCR_REVISION 1 |
| #define PM_GSCR_INFO 2 |
| #define PM_GSCR_ERROR 32 |
| #define PM_GSCR_ERROR_ENABLE 33 |
| #define PM_GSCR_FEATURES 64 |
| #define PM_GSCR_FEATURES_ENABLE 96 |
| |
| #define PM_PSCR_SSTATUS 0 |
| #define PM_PSCR_SERROR 1 |
| #define PM_PSCR_SCONTROL 2 |
| #define PM_PSCR_SACTIVE 3 |
| |
| #define SATA_RECEIVED_D2H_FIS(unassoc_off,reg_set) (unassoc_off + 0x100 * reg_set + 0x40) |
| |
| #define ATA_CMD_PM_READ 0xE4 |
| #define ATA_CMD_PM_WRITE 0xE8 |
| |
| #endif |
| |