xref: /linux/drivers/infiniband/hw/irdma/irdma.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1*3f49d684SMustafa Ismail /* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */
2*3f49d684SMustafa Ismail /* Copyright (c) 2017 - 2021 Intel Corporation */
3*3f49d684SMustafa Ismail #ifndef IRDMA_H
4*3f49d684SMustafa Ismail #define IRDMA_H
5*3f49d684SMustafa Ismail 
6*3f49d684SMustafa Ismail #define IRDMA_WQEALLOC_WQE_DESC_INDEX GENMASK(31, 20)
7*3f49d684SMustafa Ismail 
8*3f49d684SMustafa Ismail #define IRDMA_CQPTAIL_WQTAIL GENMASK(10, 0)
9*3f49d684SMustafa Ismail #define IRDMA_CQPTAIL_CQP_OP_ERR BIT(31)
10*3f49d684SMustafa Ismail 
11*3f49d684SMustafa Ismail #define IRDMA_CQPERRCODES_CQP_MINOR_CODE GENMASK(15, 0)
12*3f49d684SMustafa Ismail #define IRDMA_CQPERRCODES_CQP_MAJOR_CODE GENMASK(31, 16)
13*3f49d684SMustafa Ismail #define IRDMA_GLPCI_LBARCTRL_PE_DB_SIZE GENMASK(5, 4)
14*3f49d684SMustafa Ismail #define IRDMA_GLINT_RATE_INTERVAL GENMASK(5, 0)
15*3f49d684SMustafa Ismail #define IRDMA_GLINT_RATE_INTRL_ENA BIT(6)
16*3f49d684SMustafa Ismail #define IRDMA_GLINT_DYN_CTL_INTENA BIT(0)
17*3f49d684SMustafa Ismail #define IRDMA_GLINT_DYN_CTL_CLEARPBA BIT(1)
18*3f49d684SMustafa Ismail #define IRDMA_GLINT_DYN_CTL_ITR_INDX GENMASK(4, 3)
19*3f49d684SMustafa Ismail #define IRDMA_GLINT_DYN_CTL_INTERVAL GENMASK(16, 5)
20*3f49d684SMustafa Ismail #define IRDMA_GLINT_CEQCTL_ITR_INDX GENMASK(12, 11)
21*3f49d684SMustafa Ismail #define IRDMA_GLINT_CEQCTL_CAUSE_ENA BIT(30)
22*3f49d684SMustafa Ismail #define IRDMA_GLINT_CEQCTL_MSIX_INDX GENMASK(10, 0)
23*3f49d684SMustafa Ismail #define IRDMA_PFINT_AEQCTL_MSIX_INDX GENMASK(10, 0)
24*3f49d684SMustafa Ismail #define IRDMA_PFINT_AEQCTL_ITR_INDX GENMASK(12, 11)
25*3f49d684SMustafa Ismail #define IRDMA_PFINT_AEQCTL_CAUSE_ENA BIT(30)
26*3f49d684SMustafa Ismail #define IRDMA_PFHMC_PDINV_PMSDIDX GENMASK(11, 0)
27*3f49d684SMustafa Ismail #define IRDMA_PFHMC_PDINV_PMSDPARTSEL BIT(15)
28*3f49d684SMustafa Ismail #define IRDMA_PFHMC_PDINV_PMPDIDX GENMASK(24, 16)
29*3f49d684SMustafa Ismail #define IRDMA_PFHMC_SDDATALOW_PMSDVALID BIT(0)
30*3f49d684SMustafa Ismail #define IRDMA_PFHMC_SDDATALOW_PMSDTYPE BIT(1)
31*3f49d684SMustafa Ismail #define IRDMA_PFHMC_SDDATALOW_PMSDBPCOUNT GENMASK(11, 2)
32*3f49d684SMustafa Ismail #define IRDMA_PFHMC_SDDATALOW_PMSDDATALOW GENMASK(31, 12)
33*3f49d684SMustafa Ismail #define IRDMA_PFHMC_SDCMD_PMSDWR BIT(31)
34*3f49d684SMustafa Ismail 
35*3f49d684SMustafa Ismail #define IRDMA_INVALID_CQ_IDX			0xffffffff
36*3f49d684SMustafa Ismail enum irdma_registers {
37*3f49d684SMustafa Ismail 	IRDMA_CQPTAIL,
38*3f49d684SMustafa Ismail 	IRDMA_CQPDB,
39*3f49d684SMustafa Ismail 	IRDMA_CCQPSTATUS,
40*3f49d684SMustafa Ismail 	IRDMA_CCQPHIGH,
41*3f49d684SMustafa Ismail 	IRDMA_CCQPLOW,
42*3f49d684SMustafa Ismail 	IRDMA_CQARM,
43*3f49d684SMustafa Ismail 	IRDMA_CQACK,
44*3f49d684SMustafa Ismail 	IRDMA_AEQALLOC,
45*3f49d684SMustafa Ismail 	IRDMA_CQPERRCODES,
46*3f49d684SMustafa Ismail 	IRDMA_WQEALLOC,
47*3f49d684SMustafa Ismail 	IRDMA_GLINT_DYN_CTL,
48*3f49d684SMustafa Ismail 	IRDMA_DB_ADDR_OFFSET,
49*3f49d684SMustafa Ismail 	IRDMA_GLPCI_LBARCTRL,
50*3f49d684SMustafa Ismail 	IRDMA_GLPE_CPUSTATUS0,
51*3f49d684SMustafa Ismail 	IRDMA_GLPE_CPUSTATUS1,
52*3f49d684SMustafa Ismail 	IRDMA_GLPE_CPUSTATUS2,
53*3f49d684SMustafa Ismail 	IRDMA_PFINT_AEQCTL,
54*3f49d684SMustafa Ismail 	IRDMA_GLINT_CEQCTL,
55*3f49d684SMustafa Ismail 	IRDMA_VSIQF_PE_CTL1,
56*3f49d684SMustafa Ismail 	IRDMA_PFHMC_PDINV,
57*3f49d684SMustafa Ismail 	IRDMA_GLHMC_VFPDINV,
58*3f49d684SMustafa Ismail 	IRDMA_GLPE_CRITERR,
59*3f49d684SMustafa Ismail 	IRDMA_GLINT_RATE,
60*3f49d684SMustafa Ismail 	IRDMA_MAX_REGS, /* Must be last entry */
61*3f49d684SMustafa Ismail };
62*3f49d684SMustafa Ismail 
63*3f49d684SMustafa Ismail enum irdma_shifts {
64*3f49d684SMustafa Ismail 	IRDMA_CCQPSTATUS_CCQP_DONE_S,
65*3f49d684SMustafa Ismail 	IRDMA_CCQPSTATUS_CCQP_ERR_S,
66*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_STAG_PDID_S,
67*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_CQ_CEQID_S,
68*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_CQ_CQID_S,
69*3f49d684SMustafa Ismail 	IRDMA_COMMIT_FPM_CQCNT_S,
70*3f49d684SMustafa Ismail 	IRDMA_MAX_SHIFTS,
71*3f49d684SMustafa Ismail };
72*3f49d684SMustafa Ismail 
73*3f49d684SMustafa Ismail enum irdma_masks {
74*3f49d684SMustafa Ismail 	IRDMA_CCQPSTATUS_CCQP_DONE_M,
75*3f49d684SMustafa Ismail 	IRDMA_CCQPSTATUS_CCQP_ERR_M,
76*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_STAG_PDID_M,
77*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_CQ_CEQID_M,
78*3f49d684SMustafa Ismail 	IRDMA_CQPSQ_CQ_CQID_M,
79*3f49d684SMustafa Ismail 	IRDMA_COMMIT_FPM_CQCNT_M,
80*3f49d684SMustafa Ismail 	IRDMA_MAX_MASKS, /* Must be last entry */
81*3f49d684SMustafa Ismail };
82*3f49d684SMustafa Ismail 
83*3f49d684SMustafa Ismail #define IRDMA_MAX_MGS_PER_CTX	8
84*3f49d684SMustafa Ismail 
85*3f49d684SMustafa Ismail struct irdma_mcast_grp_ctx_entry_info {
86*3f49d684SMustafa Ismail 	u32 qp_id;
87*3f49d684SMustafa Ismail 	bool valid_entry;
88*3f49d684SMustafa Ismail 	u16 dest_port;
89*3f49d684SMustafa Ismail 	u32 use_cnt;
90*3f49d684SMustafa Ismail };
91*3f49d684SMustafa Ismail 
92*3f49d684SMustafa Ismail struct irdma_mcast_grp_info {
93*3f49d684SMustafa Ismail 	u8 dest_mac_addr[ETH_ALEN];
94*3f49d684SMustafa Ismail 	u16 vlan_id;
95*3f49d684SMustafa Ismail 	u8 hmc_fcn_id;
96*3f49d684SMustafa Ismail 	bool ipv4_valid:1;
97*3f49d684SMustafa Ismail 	bool vlan_valid:1;
98*3f49d684SMustafa Ismail 	u16 mg_id;
99*3f49d684SMustafa Ismail 	u32 no_of_mgs;
100*3f49d684SMustafa Ismail 	u32 dest_ip_addr[4];
101*3f49d684SMustafa Ismail 	u16 qs_handle;
102*3f49d684SMustafa Ismail 	struct irdma_dma_mem dma_mem_mc;
103*3f49d684SMustafa Ismail 	struct irdma_mcast_grp_ctx_entry_info mg_ctx_info[IRDMA_MAX_MGS_PER_CTX];
104*3f49d684SMustafa Ismail };
105*3f49d684SMustafa Ismail 
106*3f49d684SMustafa Ismail enum irdma_vers {
107*3f49d684SMustafa Ismail 	IRDMA_GEN_RSVD,
108*3f49d684SMustafa Ismail 	IRDMA_GEN_1,
109*3f49d684SMustafa Ismail 	IRDMA_GEN_2,
110*3f49d684SMustafa Ismail };
111*3f49d684SMustafa Ismail 
112*3f49d684SMustafa Ismail struct irdma_uk_attrs {
113*3f49d684SMustafa Ismail 	u64 feature_flags;
114*3f49d684SMustafa Ismail 	u32 max_hw_wq_frags;
115*3f49d684SMustafa Ismail 	u32 max_hw_read_sges;
116*3f49d684SMustafa Ismail 	u32 max_hw_inline;
117*3f49d684SMustafa Ismail 	u32 max_hw_rq_quanta;
118*3f49d684SMustafa Ismail 	u32 max_hw_wq_quanta;
119*3f49d684SMustafa Ismail 	u32 min_hw_cq_size;
120*3f49d684SMustafa Ismail 	u32 max_hw_cq_size;
121*3f49d684SMustafa Ismail 	u16 max_hw_sq_chunk;
122*3f49d684SMustafa Ismail 	u8 hw_rev;
123*3f49d684SMustafa Ismail };
124*3f49d684SMustafa Ismail 
125*3f49d684SMustafa Ismail struct irdma_hw_attrs {
126*3f49d684SMustafa Ismail 	struct irdma_uk_attrs uk_attrs;
127*3f49d684SMustafa Ismail 	u64 max_hw_outbound_msg_size;
128*3f49d684SMustafa Ismail 	u64 max_hw_inbound_msg_size;
129*3f49d684SMustafa Ismail 	u64 max_mr_size;
130*3f49d684SMustafa Ismail 	u32 min_hw_qp_id;
131*3f49d684SMustafa Ismail 	u32 min_hw_aeq_size;
132*3f49d684SMustafa Ismail 	u32 max_hw_aeq_size;
133*3f49d684SMustafa Ismail 	u32 min_hw_ceq_size;
134*3f49d684SMustafa Ismail 	u32 max_hw_ceq_size;
135*3f49d684SMustafa Ismail 	u32 max_hw_device_pages;
136*3f49d684SMustafa Ismail 	u32 max_hw_vf_fpm_id;
137*3f49d684SMustafa Ismail 	u32 first_hw_vf_fpm_id;
138*3f49d684SMustafa Ismail 	u32 max_hw_ird;
139*3f49d684SMustafa Ismail 	u32 max_hw_ord;
140*3f49d684SMustafa Ismail 	u32 max_hw_wqes;
141*3f49d684SMustafa Ismail 	u32 max_hw_pds;
142*3f49d684SMustafa Ismail 	u32 max_hw_ena_vf_count;
143*3f49d684SMustafa Ismail 	u32 max_qp_wr;
144*3f49d684SMustafa Ismail 	u32 max_pe_ready_count;
145*3f49d684SMustafa Ismail 	u32 max_done_count;
146*3f49d684SMustafa Ismail 	u32 max_sleep_count;
147*3f49d684SMustafa Ismail 	u32 max_cqp_compl_wait_time_ms;
148*3f49d684SMustafa Ismail 	u16 max_stat_inst;
149*3f49d684SMustafa Ismail };
150*3f49d684SMustafa Ismail 
151*3f49d684SMustafa Ismail void i40iw_init_hw(struct irdma_sc_dev *dev);
152*3f49d684SMustafa Ismail void icrdma_init_hw(struct irdma_sc_dev *dev);
153*3f49d684SMustafa Ismail #endif /* IRDMA_H*/
154