162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */ 262306a36Sopenharmony_ci/* Copyright (c) 2017 - 2021 Intel Corporation */ 362306a36Sopenharmony_ci#ifndef IRDMA_H 462306a36Sopenharmony_ci#define IRDMA_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#define IRDMA_WQEALLOC_WQE_DESC_INDEX GENMASK(31, 20) 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define IRDMA_CQPTAIL_WQTAIL GENMASK(10, 0) 962306a36Sopenharmony_ci#define IRDMA_CQPTAIL_CQP_OP_ERR BIT(31) 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define IRDMA_CQPERRCODES_CQP_MINOR_CODE GENMASK(15, 0) 1262306a36Sopenharmony_ci#define IRDMA_CQPERRCODES_CQP_MAJOR_CODE GENMASK(31, 16) 1362306a36Sopenharmony_ci#define IRDMA_GLPCI_LBARCTRL_PE_DB_SIZE GENMASK(5, 4) 1462306a36Sopenharmony_ci#define IRDMA_GLINT_RATE_INTERVAL GENMASK(5, 0) 1562306a36Sopenharmony_ci#define IRDMA_GLINT_RATE_INTRL_ENA BIT(6) 1662306a36Sopenharmony_ci#define IRDMA_GLINT_DYN_CTL_INTENA BIT(0) 1762306a36Sopenharmony_ci#define IRDMA_GLINT_DYN_CTL_CLEARPBA BIT(1) 1862306a36Sopenharmony_ci#define IRDMA_GLINT_DYN_CTL_ITR_INDX GENMASK(4, 3) 1962306a36Sopenharmony_ci#define IRDMA_GLINT_DYN_CTL_INTERVAL GENMASK(16, 5) 2062306a36Sopenharmony_ci#define IRDMA_GLINT_CEQCTL_ITR_INDX GENMASK(12, 11) 2162306a36Sopenharmony_ci#define IRDMA_GLINT_CEQCTL_CAUSE_ENA BIT(30) 2262306a36Sopenharmony_ci#define IRDMA_GLINT_CEQCTL_MSIX_INDX GENMASK(10, 0) 2362306a36Sopenharmony_ci#define IRDMA_PFINT_AEQCTL_MSIX_INDX GENMASK(10, 0) 2462306a36Sopenharmony_ci#define IRDMA_PFINT_AEQCTL_ITR_INDX GENMASK(12, 11) 2562306a36Sopenharmony_ci#define IRDMA_PFINT_AEQCTL_CAUSE_ENA BIT(30) 2662306a36Sopenharmony_ci#define IRDMA_PFHMC_PDINV_PMSDIDX GENMASK(11, 0) 2762306a36Sopenharmony_ci#define IRDMA_PFHMC_PDINV_PMSDPARTSEL BIT(15) 2862306a36Sopenharmony_ci#define IRDMA_PFHMC_PDINV_PMPDIDX GENMASK(24, 16) 2962306a36Sopenharmony_ci#define IRDMA_PFHMC_SDDATALOW_PMSDVALID BIT(0) 3062306a36Sopenharmony_ci#define IRDMA_PFHMC_SDDATALOW_PMSDTYPE BIT(1) 3162306a36Sopenharmony_ci#define IRDMA_PFHMC_SDDATALOW_PMSDBPCOUNT GENMASK(11, 2) 3262306a36Sopenharmony_ci#define IRDMA_PFHMC_SDDATALOW_PMSDDATALOW GENMASK(31, 12) 3362306a36Sopenharmony_ci#define IRDMA_PFHMC_SDCMD_PMSDWR BIT(31) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define IRDMA_INVALID_CQ_IDX 0xffffffff 3662306a36Sopenharmony_cienum irdma_registers { 3762306a36Sopenharmony_ci IRDMA_CQPTAIL, 3862306a36Sopenharmony_ci IRDMA_CQPDB, 3962306a36Sopenharmony_ci IRDMA_CCQPSTATUS, 4062306a36Sopenharmony_ci IRDMA_CCQPHIGH, 4162306a36Sopenharmony_ci IRDMA_CCQPLOW, 4262306a36Sopenharmony_ci IRDMA_CQARM, 4362306a36Sopenharmony_ci IRDMA_CQACK, 4462306a36Sopenharmony_ci IRDMA_AEQALLOC, 4562306a36Sopenharmony_ci IRDMA_CQPERRCODES, 4662306a36Sopenharmony_ci IRDMA_WQEALLOC, 4762306a36Sopenharmony_ci IRDMA_GLINT_DYN_CTL, 4862306a36Sopenharmony_ci IRDMA_DB_ADDR_OFFSET, 4962306a36Sopenharmony_ci IRDMA_GLPCI_LBARCTRL, 5062306a36Sopenharmony_ci IRDMA_GLPE_CPUSTATUS0, 5162306a36Sopenharmony_ci IRDMA_GLPE_CPUSTATUS1, 5262306a36Sopenharmony_ci IRDMA_GLPE_CPUSTATUS2, 5362306a36Sopenharmony_ci IRDMA_PFINT_AEQCTL, 5462306a36Sopenharmony_ci IRDMA_GLINT_CEQCTL, 5562306a36Sopenharmony_ci IRDMA_VSIQF_PE_CTL1, 5662306a36Sopenharmony_ci IRDMA_PFHMC_PDINV, 5762306a36Sopenharmony_ci IRDMA_GLHMC_VFPDINV, 5862306a36Sopenharmony_ci IRDMA_GLPE_CRITERR, 5962306a36Sopenharmony_ci IRDMA_GLINT_RATE, 6062306a36Sopenharmony_ci IRDMA_MAX_REGS, /* Must be last entry */ 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cienum irdma_shifts { 6462306a36Sopenharmony_ci IRDMA_CCQPSTATUS_CCQP_DONE_S, 6562306a36Sopenharmony_ci IRDMA_CCQPSTATUS_CCQP_ERR_S, 6662306a36Sopenharmony_ci IRDMA_CQPSQ_STAG_PDID_S, 6762306a36Sopenharmony_ci IRDMA_CQPSQ_CQ_CEQID_S, 6862306a36Sopenharmony_ci IRDMA_CQPSQ_CQ_CQID_S, 6962306a36Sopenharmony_ci IRDMA_COMMIT_FPM_CQCNT_S, 7062306a36Sopenharmony_ci IRDMA_MAX_SHIFTS, 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cienum irdma_masks { 7462306a36Sopenharmony_ci IRDMA_CCQPSTATUS_CCQP_DONE_M, 7562306a36Sopenharmony_ci IRDMA_CCQPSTATUS_CCQP_ERR_M, 7662306a36Sopenharmony_ci IRDMA_CQPSQ_STAG_PDID_M, 7762306a36Sopenharmony_ci IRDMA_CQPSQ_CQ_CEQID_M, 7862306a36Sopenharmony_ci IRDMA_CQPSQ_CQ_CQID_M, 7962306a36Sopenharmony_ci IRDMA_COMMIT_FPM_CQCNT_M, 8062306a36Sopenharmony_ci IRDMA_MAX_MASKS, /* Must be last entry */ 8162306a36Sopenharmony_ci}; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci#define IRDMA_MAX_MGS_PER_CTX 8 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cistruct irdma_mcast_grp_ctx_entry_info { 8662306a36Sopenharmony_ci u32 qp_id; 8762306a36Sopenharmony_ci bool valid_entry; 8862306a36Sopenharmony_ci u16 dest_port; 8962306a36Sopenharmony_ci u32 use_cnt; 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistruct irdma_mcast_grp_info { 9362306a36Sopenharmony_ci u8 dest_mac_addr[ETH_ALEN]; 9462306a36Sopenharmony_ci u16 vlan_id; 9562306a36Sopenharmony_ci u8 hmc_fcn_id; 9662306a36Sopenharmony_ci bool ipv4_valid:1; 9762306a36Sopenharmony_ci bool vlan_valid:1; 9862306a36Sopenharmony_ci u16 mg_id; 9962306a36Sopenharmony_ci u32 no_of_mgs; 10062306a36Sopenharmony_ci u32 dest_ip_addr[4]; 10162306a36Sopenharmony_ci u16 qs_handle; 10262306a36Sopenharmony_ci struct irdma_dma_mem dma_mem_mc; 10362306a36Sopenharmony_ci struct irdma_mcast_grp_ctx_entry_info mg_ctx_info[IRDMA_MAX_MGS_PER_CTX]; 10462306a36Sopenharmony_ci}; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cienum irdma_vers { 10762306a36Sopenharmony_ci IRDMA_GEN_RSVD, 10862306a36Sopenharmony_ci IRDMA_GEN_1, 10962306a36Sopenharmony_ci IRDMA_GEN_2, 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_cistruct irdma_uk_attrs { 11362306a36Sopenharmony_ci u64 feature_flags; 11462306a36Sopenharmony_ci u32 max_hw_wq_frags; 11562306a36Sopenharmony_ci u32 max_hw_read_sges; 11662306a36Sopenharmony_ci u32 max_hw_inline; 11762306a36Sopenharmony_ci u32 max_hw_rq_quanta; 11862306a36Sopenharmony_ci u32 max_hw_wq_quanta; 11962306a36Sopenharmony_ci u32 min_hw_cq_size; 12062306a36Sopenharmony_ci u32 max_hw_cq_size; 12162306a36Sopenharmony_ci u16 max_hw_sq_chunk; 12262306a36Sopenharmony_ci u16 min_hw_wq_size; 12362306a36Sopenharmony_ci u8 hw_rev; 12462306a36Sopenharmony_ci}; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistruct irdma_hw_attrs { 12762306a36Sopenharmony_ci struct irdma_uk_attrs uk_attrs; 12862306a36Sopenharmony_ci u64 max_hw_outbound_msg_size; 12962306a36Sopenharmony_ci u64 max_hw_inbound_msg_size; 13062306a36Sopenharmony_ci u64 max_mr_size; 13162306a36Sopenharmony_ci u64 page_size_cap; 13262306a36Sopenharmony_ci u32 min_hw_qp_id; 13362306a36Sopenharmony_ci u32 min_hw_aeq_size; 13462306a36Sopenharmony_ci u32 max_hw_aeq_size; 13562306a36Sopenharmony_ci u32 min_hw_ceq_size; 13662306a36Sopenharmony_ci u32 max_hw_ceq_size; 13762306a36Sopenharmony_ci u32 max_hw_device_pages; 13862306a36Sopenharmony_ci u32 max_hw_vf_fpm_id; 13962306a36Sopenharmony_ci u32 first_hw_vf_fpm_id; 14062306a36Sopenharmony_ci u32 max_hw_ird; 14162306a36Sopenharmony_ci u32 max_hw_ord; 14262306a36Sopenharmony_ci u32 max_hw_wqes; 14362306a36Sopenharmony_ci u32 max_hw_pds; 14462306a36Sopenharmony_ci u32 max_hw_ena_vf_count; 14562306a36Sopenharmony_ci u32 max_qp_wr; 14662306a36Sopenharmony_ci u32 max_pe_ready_count; 14762306a36Sopenharmony_ci u32 max_done_count; 14862306a36Sopenharmony_ci u32 max_sleep_count; 14962306a36Sopenharmony_ci u32 max_cqp_compl_wait_time_ms; 15062306a36Sopenharmony_ci u16 max_stat_inst; 15162306a36Sopenharmony_ci u16 max_stat_idx; 15262306a36Sopenharmony_ci}; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_civoid i40iw_init_hw(struct irdma_sc_dev *dev); 15562306a36Sopenharmony_civoid icrdma_init_hw(struct irdma_sc_dev *dev); 15662306a36Sopenharmony_ci#endif /* IRDMA_H*/ 157