#include "hisi_sas.h"
#define DRV_NAME …
#define DLVRY_QUEUE_ENABLE …
#define IOST_BASE_ADDR_LO …
#define IOST_BASE_ADDR_HI …
#define ITCT_BASE_ADDR_LO …
#define ITCT_BASE_ADDR_HI …
#define IO_BROKEN_MSG_ADDR_LO …
#define IO_BROKEN_MSG_ADDR_HI …
#define PHY_CONTEXT …
#define PHY_STATE …
#define PHY_PORT_NUM_MA …
#define PORT_STATE …
#define PORT_STATE_PHY8_PORT_NUM_OFF …
#define PORT_STATE_PHY8_PORT_NUM_MSK …
#define PORT_STATE_PHY8_CONN_RATE_OFF …
#define PORT_STATE_PHY8_CONN_RATE_MSK …
#define PHY_CONN_RATE …
#define HGC_TRANS_TASK_CNT_LIMIT …
#define AXI_AHB_CLK_CFG …
#define ITCT_CLR …
#define ITCT_CLR_EN_OFF …
#define ITCT_CLR_EN_MSK …
#define ITCT_DEV_OFF …
#define ITCT_DEV_MSK …
#define AXI_USER1 …
#define AXI_USER2 …
#define IO_SATA_BROKEN_MSG_ADDR_LO …
#define IO_SATA_BROKEN_MSG_ADDR_HI …
#define SATA_INITI_D2H_STORE_ADDR_LO …
#define SATA_INITI_D2H_STORE_ADDR_HI …
#define HGC_SAS_TX_OPEN_FAIL_RETRY_CTRL …
#define HGC_SAS_TXFAIL_RETRY_CTRL …
#define HGC_GET_ITV_TIME …
#define DEVICE_MSG_WORK_MODE …
#define OPENA_WT_CONTI_TIME …
#define I_T_NEXUS_LOSS_TIME …
#define MAX_CON_TIME_LIMIT_TIME …
#define BUS_INACTIVE_LIMIT_TIME …
#define REJECT_TO_OPEN_LIMIT_TIME …
#define CFG_AGING_TIME …
#define HGC_DFX_CFG2 …
#define HGC_IOMB_PROC1_STATUS …
#define CFG_1US_TIMER_TRSH …
#define HGC_LM_DFX_STATUS2 …
#define HGC_LM_DFX_STATUS2_IOSTLIST_OFF …
#define HGC_LM_DFX_STATUS2_IOSTLIST_MSK …
#define HGC_LM_DFX_STATUS2_ITCTLIST_OFF …
#define HGC_LM_DFX_STATUS2_ITCTLIST_MSK …
#define HGC_CQE_ECC_ADDR …
#define HGC_CQE_ECC_1B_ADDR_OFF …
#define HGC_CQE_ECC_1B_ADDR_MSK …
#define HGC_CQE_ECC_MB_ADDR_OFF …
#define HGC_CQE_ECC_MB_ADDR_MSK …
#define HGC_IOST_ECC_ADDR …
#define HGC_IOST_ECC_1B_ADDR_OFF …
#define HGC_IOST_ECC_1B_ADDR_MSK …
#define HGC_IOST_ECC_MB_ADDR_OFF …
#define HGC_IOST_ECC_MB_ADDR_MSK …
#define HGC_DQE_ECC_ADDR …
#define HGC_DQE_ECC_1B_ADDR_OFF …
#define HGC_DQE_ECC_1B_ADDR_MSK …
#define HGC_DQE_ECC_MB_ADDR_OFF …
#define HGC_DQE_ECC_MB_ADDR_MSK …
#define HGC_INVLD_DQE_INFO …
#define HGC_INVLD_DQE_INFO_FB_CH0_OFF …
#define HGC_INVLD_DQE_INFO_FB_CH0_MSK …
#define HGC_INVLD_DQE_INFO_FB_CH3_OFF …
#define HGC_ITCT_ECC_ADDR …
#define HGC_ITCT_ECC_1B_ADDR_OFF …
#define HGC_ITCT_ECC_1B_ADDR_MSK …
#define HGC_ITCT_ECC_MB_ADDR_OFF …
#define HGC_ITCT_ECC_MB_ADDR_MSK …
#define HGC_AXI_FIFO_ERR_INFO …
#define AXI_ERR_INFO_OFF …
#define AXI_ERR_INFO_MSK …
#define FIFO_ERR_INFO_OFF …
#define FIFO_ERR_INFO_MSK …
#define INT_COAL_EN …
#define OQ_INT_COAL_TIME …
#define OQ_INT_COAL_CNT …
#define ENT_INT_COAL_TIME …
#define ENT_INT_COAL_CNT …
#define OQ_INT_SRC …
#define OQ_INT_SRC_MSK …
#define ENT_INT_SRC1 …
#define ENT_INT_SRC1_D2H_FIS_CH0_OFF …
#define ENT_INT_SRC1_D2H_FIS_CH0_MSK …
#define ENT_INT_SRC1_D2H_FIS_CH1_OFF …
#define ENT_INT_SRC1_D2H_FIS_CH1_MSK …
#define ENT_INT_SRC2 …
#define ENT_INT_SRC3 …
#define ENT_INT_SRC3_WP_DEPTH_OFF …
#define ENT_INT_SRC3_IPTT_SLOT_NOMATCH_OFF …
#define ENT_INT_SRC3_RP_DEPTH_OFF …
#define ENT_INT_SRC3_AXI_OFF …
#define ENT_INT_SRC3_FIFO_OFF …
#define ENT_INT_SRC3_LM_OFF …
#define ENT_INT_SRC3_ITC_INT_OFF …
#define ENT_INT_SRC3_ITC_INT_MSK …
#define ENT_INT_SRC3_ABT_OFF …
#define ENT_INT_SRC_MSK1 …
#define ENT_INT_SRC_MSK2 …
#define ENT_INT_SRC_MSK3 …
#define ENT_INT_SRC_MSK3_ENT95_MSK_OFF …
#define ENT_INT_SRC_MSK3_ENT95_MSK_MSK …
#define SAS_ECC_INTR …
#define SAS_ECC_INTR_DQE_ECC_1B_OFF …
#define SAS_ECC_INTR_DQE_ECC_MB_OFF …
#define SAS_ECC_INTR_IOST_ECC_1B_OFF …
#define SAS_ECC_INTR_IOST_ECC_MB_OFF …
#define SAS_ECC_INTR_ITCT_ECC_MB_OFF …
#define SAS_ECC_INTR_ITCT_ECC_1B_OFF …
#define SAS_ECC_INTR_IOSTLIST_ECC_MB_OFF …
#define SAS_ECC_INTR_IOSTLIST_ECC_1B_OFF …
#define SAS_ECC_INTR_ITCTLIST_ECC_1B_OFF …
#define SAS_ECC_INTR_ITCTLIST_ECC_MB_OFF …
#define SAS_ECC_INTR_CQE_ECC_1B_OFF …
#define SAS_ECC_INTR_CQE_ECC_MB_OFF …
#define SAS_ECC_INTR_NCQ_MEM0_ECC_MB_OFF …
#define SAS_ECC_INTR_NCQ_MEM0_ECC_1B_OFF …
#define SAS_ECC_INTR_NCQ_MEM1_ECC_MB_OFF …
#define SAS_ECC_INTR_NCQ_MEM1_ECC_1B_OFF …
#define SAS_ECC_INTR_NCQ_MEM2_ECC_MB_OFF …
#define SAS_ECC_INTR_NCQ_MEM2_ECC_1B_OFF …
#define SAS_ECC_INTR_NCQ_MEM3_ECC_MB_OFF …
#define SAS_ECC_INTR_NCQ_MEM3_ECC_1B_OFF …
#define SAS_ECC_INTR_MSK …
#define HGC_ERR_STAT_EN …
#define CQE_SEND_CNT …
#define DLVRY_Q_0_BASE_ADDR_LO …
#define DLVRY_Q_0_BASE_ADDR_HI …
#define DLVRY_Q_0_DEPTH …
#define DLVRY_Q_0_WR_PTR …
#define DLVRY_Q_0_RD_PTR …
#define HYPER_STREAM_ID_EN_CFG …
#define OQ0_INT_SRC_MSK …
#define COMPL_Q_0_BASE_ADDR_LO …
#define COMPL_Q_0_BASE_ADDR_HI …
#define COMPL_Q_0_DEPTH …
#define COMPL_Q_0_WR_PTR …
#define COMPL_Q_0_RD_PTR …
#define HGC_RXM_DFX_STATUS14 …
#define HGC_RXM_DFX_STATUS14_MEM0_OFF …
#define HGC_RXM_DFX_STATUS14_MEM0_MSK …
#define HGC_RXM_DFX_STATUS14_MEM1_OFF …
#define HGC_RXM_DFX_STATUS14_MEM1_MSK …
#define HGC_RXM_DFX_STATUS14_MEM2_OFF …
#define HGC_RXM_DFX_STATUS14_MEM2_MSK …
#define HGC_RXM_DFX_STATUS15 …
#define HGC_RXM_DFX_STATUS15_MEM3_OFF …
#define HGC_RXM_DFX_STATUS15_MEM3_MSK …
#define PORT_BASE …
#define PHY_CFG …
#define HARD_PHY_LINKRATE …
#define PHY_CFG_ENA_OFF …
#define PHY_CFG_ENA_MSK …
#define PHY_CFG_DC_OPT_OFF …
#define PHY_CFG_DC_OPT_MSK …
#define PROG_PHY_LINK_RATE …
#define PROG_PHY_LINK_RATE_MAX_OFF …
#define PROG_PHY_LINK_RATE_MAX_MSK …
#define PHY_CTRL …
#define PHY_CTRL_RESET_OFF …
#define PHY_CTRL_RESET_MSK …
#define SAS_PHY_CTRL …
#define SL_CFG …
#define PHY_PCN …
#define SL_TOUT_CFG …
#define SL_CONTROL …
#define SL_CONTROL_NOTIFY_EN_OFF …
#define SL_CONTROL_NOTIFY_EN_MSK …
#define SL_CONTROL_CTA_OFF …
#define SL_CONTROL_CTA_MSK …
#define RX_PRIMS_STATUS …
#define RX_BCAST_CHG_OFF …
#define RX_BCAST_CHG_MSK …
#define TX_ID_DWORD0 …
#define TX_ID_DWORD1 …
#define TX_ID_DWORD2 …
#define TX_ID_DWORD3 …
#define TX_ID_DWORD4 …
#define TX_ID_DWORD5 …
#define TX_ID_DWORD6 …
#define TXID_AUTO …
#define TXID_AUTO_CT3_OFF …
#define TXID_AUTO_CT3_MSK …
#define TXID_AUTO_CTB_OFF …
#define TXID_AUTO_CTB_MSK …
#define TX_HARDRST_OFF …
#define TX_HARDRST_MSK …
#define RX_IDAF_DWORD0 …
#define RX_IDAF_DWORD1 …
#define RX_IDAF_DWORD2 …
#define RX_IDAF_DWORD3 …
#define RX_IDAF_DWORD4 …
#define RX_IDAF_DWORD5 …
#define RX_IDAF_DWORD6 …
#define RXOP_CHECK_CFG_H …
#define CON_CONTROL …
#define CON_CONTROL_CFG_OPEN_ACC_STP_OFF …
#define CON_CONTROL_CFG_OPEN_ACC_STP_MSK …
#define DONE_RECEIVED_TIME …
#define CHL_INT0 …
#define CHL_INT0_HOTPLUG_TOUT_OFF …
#define CHL_INT0_HOTPLUG_TOUT_MSK …
#define CHL_INT0_SL_RX_BCST_ACK_OFF …
#define CHL_INT0_SL_RX_BCST_ACK_MSK …
#define CHL_INT0_SL_PHY_ENABLE_OFF …
#define CHL_INT0_SL_PHY_ENABLE_MSK …
#define CHL_INT0_NOT_RDY_OFF …
#define CHL_INT0_NOT_RDY_MSK …
#define CHL_INT0_PHY_RDY_OFF …
#define CHL_INT0_PHY_RDY_MSK …
#define CHL_INT1 …
#define CHL_INT1_DMAC_TX_ECC_ERR_OFF …
#define CHL_INT1_DMAC_TX_ECC_ERR_MSK …
#define CHL_INT1_DMAC_RX_ECC_ERR_OFF …
#define CHL_INT1_DMAC_RX_ECC_ERR_MSK …
#define CHL_INT1_DMAC_TX_AXI_WR_ERR_OFF …
#define CHL_INT1_DMAC_TX_AXI_RD_ERR_OFF …
#define CHL_INT1_DMAC_RX_AXI_WR_ERR_OFF …
#define CHL_INT1_DMAC_RX_AXI_RD_ERR_OFF …
#define CHL_INT2 …
#define CHL_INT2_SL_IDAF_TOUT_CONF_OFF …
#define CHL_INT0_MSK …
#define CHL_INT1_MSK …
#define CHL_INT2_MSK …
#define CHL_INT_COAL_EN …
#define DMA_TX_DFX0 …
#define DMA_TX_DFX1 …
#define DMA_TX_DFX1_IPTT_OFF …
#define DMA_TX_DFX1_IPTT_MSK …
#define DMA_TX_FIFO_DFX0 …
#define PORT_DFX0 …
#define LINK_DFX2 …
#define LINK_DFX2_RCVR_HOLD_STS_OFF …
#define LINK_DFX2_RCVR_HOLD_STS_MSK …
#define LINK_DFX2_SEND_HOLD_STS_OFF …
#define LINK_DFX2_SEND_HOLD_STS_MSK …
#define SAS_ERR_CNT4_REG …
#define SAS_ERR_CNT6_REG …
#define PHY_CTRL_RDY_MSK …
#define PHYCTRL_NOT_RDY_MSK …
#define PHYCTRL_DWS_RESET_MSK …
#define PHYCTRL_PHY_ENA_MSK …
#define SL_RX_BCAST_CHK_MSK …
#define PHYCTRL_OOB_RESTART_MSK …
#define DMA_TX_STATUS …
#define DMA_TX_STATUS_BUSY_OFF …
#define DMA_TX_STATUS_BUSY_MSK …
#define DMA_RX_STATUS …
#define DMA_RX_STATUS_BUSY_OFF …
#define DMA_RX_STATUS_BUSY_MSK …
#define AXI_CFG …
#define AM_CFG_MAX_TRANS …
#define AM_CFG_SINGLE_PORT_MAX_TRANS …
#define AXI_MASTER_CFG_BASE …
#define AM_CTRL_GLOBAL …
#define AM_CURR_TRANS_RETURN …
#define CMD_HDR_ABORT_FLAG_OFF …
#define CMD_HDR_ABORT_FLAG_MSK …
#define CMD_HDR_ABORT_DEVICE_TYPE_OFF …
#define CMD_HDR_ABORT_DEVICE_TYPE_MSK …
#define CMD_HDR_RESP_REPORT_OFF …
#define CMD_HDR_RESP_REPORT_MSK …
#define CMD_HDR_TLR_CTRL_OFF …
#define CMD_HDR_TLR_CTRL_MSK …
#define CMD_HDR_PHY_ID_OFF …
#define CMD_HDR_PHY_ID_MSK …
#define CMD_HDR_FORCE_PHY_OFF …
#define CMD_HDR_FORCE_PHY_MSK …
#define CMD_HDR_PORT_OFF …
#define CMD_HDR_PORT_MSK …
#define CMD_HDR_PRIORITY_OFF …
#define CMD_HDR_PRIORITY_MSK …
#define CMD_HDR_CMD_OFF …
#define CMD_HDR_CMD_MSK …
#define CMD_HDR_DIR_OFF …
#define CMD_HDR_DIR_MSK …
#define CMD_HDR_RESET_OFF …
#define CMD_HDR_RESET_MSK …
#define CMD_HDR_VDTL_OFF …
#define CMD_HDR_VDTL_MSK …
#define CMD_HDR_FRAME_TYPE_OFF …
#define CMD_HDR_FRAME_TYPE_MSK …
#define CMD_HDR_DEV_ID_OFF …
#define CMD_HDR_DEV_ID_MSK …
#define CMD_HDR_CFL_OFF …
#define CMD_HDR_CFL_MSK …
#define CMD_HDR_NCQ_TAG_OFF …
#define CMD_HDR_NCQ_TAG_MSK …
#define CMD_HDR_MRFL_OFF …
#define CMD_HDR_MRFL_MSK …
#define CMD_HDR_SG_MOD_OFF …
#define CMD_HDR_SG_MOD_MSK …
#define CMD_HDR_FIRST_BURST_OFF …
#define CMD_HDR_FIRST_BURST_MSK …
#define CMD_HDR_IPTT_OFF …
#define CMD_HDR_IPTT_MSK …
#define CMD_HDR_DIF_SGL_LEN_OFF …
#define CMD_HDR_DIF_SGL_LEN_MSK …
#define CMD_HDR_DATA_SGL_LEN_OFF …
#define CMD_HDR_DATA_SGL_LEN_MSK …
#define CMD_HDR_ABORT_IPTT_OFF …
#define CMD_HDR_ABORT_IPTT_MSK …
#define CMPLT_HDR_ERR_PHASE_OFF …
#define CMPLT_HDR_ERR_PHASE_MSK …
#define CMPLT_HDR_RSPNS_XFRD_OFF …
#define CMPLT_HDR_RSPNS_XFRD_MSK …
#define CMPLT_HDR_ERX_OFF …
#define CMPLT_HDR_ERX_MSK …
#define CMPLT_HDR_ABORT_STAT_OFF …
#define CMPLT_HDR_ABORT_STAT_MSK …
#define STAT_IO_NOT_VALID …
#define STAT_IO_NO_DEVICE …
#define STAT_IO_COMPLETE …
#define STAT_IO_ABORTED …
#define CMPLT_HDR_IPTT_OFF …
#define CMPLT_HDR_IPTT_MSK …
#define CMPLT_HDR_DEV_ID_OFF …
#define CMPLT_HDR_DEV_ID_MSK …
#define ITCT_HDR_DEV_TYPE_OFF …
#define ITCT_HDR_DEV_TYPE_MSK …
#define ITCT_HDR_VALID_OFF …
#define ITCT_HDR_VALID_MSK …
#define ITCT_HDR_MCR_OFF …
#define ITCT_HDR_MCR_MSK …
#define ITCT_HDR_VLN_OFF …
#define ITCT_HDR_VLN_MSK …
#define ITCT_HDR_SMP_TIMEOUT_OFF …
#define ITCT_HDR_SMP_TIMEOUT_8US …
#define ITCT_HDR_SMP_TIMEOUT …
#define ITCT_HDR_AWT_CONTINUE_OFF …
#define ITCT_HDR_PORT_ID_OFF …
#define ITCT_HDR_PORT_ID_MSK …
#define ITCT_HDR_INLT_OFF …
#define ITCT_HDR_INLT_MSK …
#define ITCT_HDR_BITLT_OFF …
#define ITCT_HDR_BITLT_MSK …
#define ITCT_HDR_MCTLT_OFF …
#define ITCT_HDR_MCTLT_MSK …
#define ITCT_HDR_RTOLT_OFF …
#define ITCT_HDR_RTOLT_MSK …
#define HISI_SAS_FATAL_INT_NR …
struct hisi_sas_complete_v2_hdr { … };
struct hisi_sas_err_record_v2 { … };
struct signal_attenuation_s { … };
struct sig_atten_lu_s { … };
static const struct hisi_sas_hw_error one_bit_ecc_errors[] = …;
static const struct hisi_sas_hw_error multi_bit_ecc_errors[] = …;
enum { … };
enum { … };
#define HISI_SAS_COMMAND_ENTRIES_V2_HW …
#define HISI_MAX_SATA_SUPPORT_V2_HW …
#define DIR_NO_DATA …
#define DIR_TO_INI …
#define DIR_TO_DEVICE …
#define DIR_RESERVED …
#define ERR_ON_TX_PHASE(err_phase) …
#define ERR_ON_RX_PHASE(err_phase) …
static void link_timeout_disable_link(struct timer_list *t);
static u32 hisi_sas_read32(struct hisi_hba *hisi_hba, u32 off)
{ … }
static u32 hisi_sas_read32_relaxed(struct hisi_hba *hisi_hba, u32 off)
{ … }
static void hisi_sas_write32(struct hisi_hba *hisi_hba, u32 off, u32 val)
{ … }
static void hisi_sas_phy_write32(struct hisi_hba *hisi_hba, int phy_no,
u32 off, u32 val)
{ … }
static u32 hisi_sas_phy_read32(struct hisi_hba *hisi_hba,
int phy_no, u32 off)
{ … }
static int
slot_index_alloc_quirk_v2_hw(struct hisi_hba *hisi_hba,
struct domain_device *device)
{ … }
static bool sata_index_alloc_v2_hw(struct hisi_hba *hisi_hba, int *idx)
{ … }
static struct
hisi_sas_device *alloc_dev_quirk_v2_hw(struct domain_device *device)
{ … }
static void config_phy_opt_mode_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void config_id_frame_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void setup_itct_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_device *sas_dev)
{ … }
static int clear_itct_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_device *sas_dev)
{ … }
static void free_device_v2_hw(struct hisi_sas_device *sas_dev)
{ … }
static int reset_hw_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static void phys_reject_stp_links_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static void phys_try_accept_stp_links_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static const struct signal_attenuation_s x6000 = …;
static const struct sig_atten_lu_s sig_atten_lu[] = …;
static void init_reg_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static void link_timeout_enable_link(struct timer_list *t)
{ … }
static void link_timeout_disable_link(struct timer_list *t)
{ … }
static void set_link_timer_quirk(struct hisi_hba *hisi_hba)
{ … }
static int hw_init_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static void enable_phy_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static bool is_sata_phy_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static bool tx_fifo_is_empty_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static bool axi_bus_is_idle_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static bool wait_io_done_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static bool allowed_disable_phy_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void disable_phy_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void start_phy_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void phy_hard_reset_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void phy_get_events_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static void phys_init_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static void sl_notify_ssp_v2_hw(struct hisi_hba *hisi_hba, int phy_no)
{ … }
static enum sas_linkrate phy_get_max_linkrate_v2_hw(void)
{ … }
static void phy_set_linkrate_v2_hw(struct hisi_hba *hisi_hba, int phy_no,
struct sas_phy_linkrates *r)
{ … }
static int get_wideport_bitmap_v2_hw(struct hisi_hba *hisi_hba, int port_id)
{ … }
static void start_delivery_v2_hw(struct hisi_sas_dq *dq)
{ … }
static void prep_prd_sge_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot,
struct hisi_sas_cmd_hdr *hdr,
struct scatterlist *scatter,
int n_elem)
{ … }
static void prep_smp_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot)
{ … }
static void prep_ssp_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot)
{ … }
#define TRANS_TX_ERR …
#define TRANS_RX_ERR …
#define DMA_TX_ERR …
#define SIPC_RX_ERR …
#define DMA_RX_ERR …
#define DMA_TX_ERR_OFF …
#define DMA_TX_ERR_MSK …
#define SIPC_RX_ERR_OFF …
#define SIPC_RX_ERR_MSK …
static int parse_trans_tx_err_code_v2_hw(u32 err_msk)
{ … }
static int parse_trans_rx_err_code_v2_hw(u32 err_msk)
{ … }
static int parse_dma_tx_err_code_v2_hw(u32 err_msk)
{ … }
static int parse_sipc_rx_err_code_v2_hw(u32 err_msk)
{ … }
static int parse_dma_rx_err_code_v2_hw(u32 err_msk)
{ … }
static void slot_err_v2_hw(struct hisi_hba *hisi_hba,
struct sas_task *task,
struct hisi_sas_slot *slot,
int err_phase)
{ … }
static void slot_complete_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot)
{ … }
static void prep_ata_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot)
{ … }
static void hisi_sas_internal_abort_quirk_timeout(struct timer_list *t)
{ … }
static void prep_abort_v2_hw(struct hisi_hba *hisi_hba,
struct hisi_sas_slot *slot)
{ … }
static int phy_up_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
{ … }
static bool check_any_wideports_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static int phy_down_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
{ … }
static irqreturn_t int_phy_updown_v2_hw(int irq_no, void *p)
{ … }
static void phy_bcast_v2_hw(int phy_no, struct hisi_hba *hisi_hba)
{ … }
static const struct hisi_sas_hw_error port_ecc_axi_error[] = …;
static irqreturn_t int_chnl_int_v2_hw(int irq_no, void *p)
{ … }
static void
one_bit_ecc_error_process_v2_hw(struct hisi_hba *hisi_hba, u32 irq_value)
{ … }
static void multi_bit_ecc_error_process_v2_hw(struct hisi_hba *hisi_hba,
u32 irq_value)
{ … }
static irqreturn_t fatal_ecc_int_v2_hw(int irq_no, void *p)
{ … }
static const struct hisi_sas_hw_error axi_error[] = …;
static const struct hisi_sas_hw_error fifo_error[] = …;
static const struct hisi_sas_hw_error fatal_axi_errors[] = …;
static irqreturn_t fatal_axi_int_v2_hw(int irq_no, void *p)
{ … }
static irqreturn_t cq_thread_v2_hw(int irq_no, void *p)
{ … }
static irqreturn_t cq_interrupt_v2_hw(int irq_no, void *p)
{ … }
static irqreturn_t sata_int_v2_hw(int irq_no, void *p)
{ … }
static irq_handler_t phy_interrupts[HISI_SAS_PHY_INT_NR] = …;
static irq_handler_t fatal_interrupts[HISI_SAS_FATAL_INT_NR] = …;
#define CQ0_IRQ_INDEX …
static int hisi_sas_v2_interrupt_preinit(struct hisi_hba *hisi_hba)
{ … }
static int interrupt_init_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static int hisi_sas_v2_init(struct hisi_hba *hisi_hba)
{ … }
static void interrupt_disable_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static u32 get_phys_state_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static int soft_reset_v2_hw(struct hisi_hba *hisi_hba)
{ … }
static int write_gpio_v2_hw(struct hisi_hba *hisi_hba, u8 reg_type,
u8 reg_index, u8 reg_count, u8 *write_data)
{ … }
static void wait_cmds_complete_timeout_v2_hw(struct hisi_hba *hisi_hba,
int delay_ms, int timeout_ms)
{ … }
static struct attribute *host_v2_hw_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static const struct attribute_group *sdev_groups_v2_hw[] = …;
static void map_queues_v2_hw(struct Scsi_Host *shost)
{ … }
static const struct scsi_host_template sht_v2_hw = …;
static const struct hisi_sas_hw hisi_sas_v2_hw = …;
static int hisi_sas_v2_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id sas_v2_of_match[] = …;
MODULE_DEVICE_TABLE(of, sas_v2_of_match);
static const struct acpi_device_id sas_v2_acpi_match[] = …;
MODULE_DEVICE_TABLE(acpi, sas_v2_acpi_match);
static struct platform_driver hisi_sas_v2_driver = …;
module_platform_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;