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