xref: /linux/drivers/infiniband/hw/bng_re/bng_res.h (revision 53310b698f3cf601dfdc6c3b2b60c7cb275b1199)
174506577SSiva Reddy Kallam /* SPDX-License-Identifier: GPL-2.0 */
274506577SSiva Reddy Kallam // Copyright (c) 2025 Broadcom.
374506577SSiva Reddy Kallam 
474506577SSiva Reddy Kallam #ifndef __BNG_RES_H__
574506577SSiva Reddy Kallam #define __BNG_RES_H__
674506577SSiva Reddy Kallam 
774506577SSiva Reddy Kallam #define BNG_ROCE_FW_MAX_TIMEOUT	60
874506577SSiva Reddy Kallam 
9*53310b69SSiva Reddy Kallam #define PTR_CNT_PER_PG		(PAGE_SIZE / sizeof(void *))
10*53310b69SSiva Reddy Kallam #define PTR_MAX_IDX_PER_PG	(PTR_CNT_PER_PG - 1)
11*53310b69SSiva Reddy Kallam #define PTR_PG(x)		(((x) & ~PTR_MAX_IDX_PER_PG) / PTR_CNT_PER_PG)
12*53310b69SSiva Reddy Kallam #define PTR_IDX(x)		((x) & PTR_MAX_IDX_PER_PG)
13*53310b69SSiva Reddy Kallam 
14*53310b69SSiva Reddy Kallam #define MAX_PBL_LVL_0_PGS		1
15*53310b69SSiva Reddy Kallam #define MAX_PBL_LVL_1_PGS		512
16*53310b69SSiva Reddy Kallam #define MAX_PBL_LVL_1_PGS_SHIFT		9
17*53310b69SSiva Reddy Kallam #define MAX_PBL_LVL_1_PGS_FOR_LVL_2	256
18*53310b69SSiva Reddy Kallam #define MAX_PBL_LVL_2_PGS		(256 * 512)
19*53310b69SSiva Reddy Kallam #define MAX_PDL_LVL_SHIFT               9
20*53310b69SSiva Reddy Kallam 
2174506577SSiva Reddy Kallam struct bng_re_chip_ctx {
2274506577SSiva Reddy Kallam 	u16	chip_num;
2374506577SSiva Reddy Kallam 	u16	hw_stats_size;
2474506577SSiva Reddy Kallam 	u64	hwrm_intf_ver;
2574506577SSiva Reddy Kallam 	u16	hwrm_cmd_max_timeout;
2674506577SSiva Reddy Kallam };
2774506577SSiva Reddy Kallam 
28*53310b69SSiva Reddy Kallam struct bng_re_pbl {
29*53310b69SSiva Reddy Kallam 	u32		pg_count;
30*53310b69SSiva Reddy Kallam 	u32		pg_size;
31*53310b69SSiva Reddy Kallam 	void		**pg_arr;
32*53310b69SSiva Reddy Kallam 	dma_addr_t	*pg_map_arr;
33*53310b69SSiva Reddy Kallam };
34*53310b69SSiva Reddy Kallam 
35*53310b69SSiva Reddy Kallam enum bng_re_pbl_lvl {
36*53310b69SSiva Reddy Kallam 	BNG_PBL_LVL_0,
37*53310b69SSiva Reddy Kallam 	BNG_PBL_LVL_1,
38*53310b69SSiva Reddy Kallam 	BNG_PBL_LVL_2,
39*53310b69SSiva Reddy Kallam 	BNG_PBL_LVL_MAX
40*53310b69SSiva Reddy Kallam };
41*53310b69SSiva Reddy Kallam 
42*53310b69SSiva Reddy Kallam enum bng_re_hwq_type {
43*53310b69SSiva Reddy Kallam 	BNG_HWQ_TYPE_CTX,
44*53310b69SSiva Reddy Kallam 	BNG_HWQ_TYPE_QUEUE
45*53310b69SSiva Reddy Kallam };
46*53310b69SSiva Reddy Kallam 
47*53310b69SSiva Reddy Kallam struct bng_re_sg_info {
48*53310b69SSiva Reddy Kallam 	u32	npages;
49*53310b69SSiva Reddy Kallam 	u32	pgshft;
50*53310b69SSiva Reddy Kallam 	u32	pgsize;
51*53310b69SSiva Reddy Kallam 	bool	nopte;
52*53310b69SSiva Reddy Kallam };
53*53310b69SSiva Reddy Kallam 
54*53310b69SSiva Reddy Kallam struct bng_re_hwq_attr {
55*53310b69SSiva Reddy Kallam 	struct bng_re_res		*res;
56*53310b69SSiva Reddy Kallam 	struct bng_re_sg_info		*sginfo;
57*53310b69SSiva Reddy Kallam 	enum bng_re_hwq_type		type;
58*53310b69SSiva Reddy Kallam 	u32				depth;
59*53310b69SSiva Reddy Kallam 	u32				stride;
60*53310b69SSiva Reddy Kallam 	u32				aux_stride;
61*53310b69SSiva Reddy Kallam 	u32				aux_depth;
62*53310b69SSiva Reddy Kallam };
63*53310b69SSiva Reddy Kallam 
64*53310b69SSiva Reddy Kallam struct bng_re_hwq {
65*53310b69SSiva Reddy Kallam 	struct pci_dev			*pdev;
66*53310b69SSiva Reddy Kallam 	/* lock to protect hwq */
67*53310b69SSiva Reddy Kallam 	spinlock_t			lock;
68*53310b69SSiva Reddy Kallam 	struct bng_re_pbl		pbl[BNG_PBL_LVL_MAX + 1];
69*53310b69SSiva Reddy Kallam 	/* Valid values: 0, 1, 2 */
70*53310b69SSiva Reddy Kallam 	enum bng_re_pbl_lvl		level;
71*53310b69SSiva Reddy Kallam 	/* PBL entries */
72*53310b69SSiva Reddy Kallam 	void				**pbl_ptr;
73*53310b69SSiva Reddy Kallam 	/* PBL  dma_addr */
74*53310b69SSiva Reddy Kallam 	dma_addr_t			*pbl_dma_ptr;
75*53310b69SSiva Reddy Kallam 	u32				max_elements;
76*53310b69SSiva Reddy Kallam 	u32				depth;
77*53310b69SSiva Reddy Kallam 	u16				element_size;
78*53310b69SSiva Reddy Kallam 	u32				prod;
79*53310b69SSiva Reddy Kallam 	u32				cons;
80*53310b69SSiva Reddy Kallam };
81*53310b69SSiva Reddy Kallam 
82*53310b69SSiva Reddy Kallam struct bng_re_res {
83*53310b69SSiva Reddy Kallam 	struct pci_dev			*pdev;
84*53310b69SSiva Reddy Kallam 	struct bng_re_chip_ctx		*cctx;
85*53310b69SSiva Reddy Kallam };
86*53310b69SSiva Reddy Kallam 
87*53310b69SSiva Reddy Kallam void bng_re_free_hwq(struct bng_re_res *res,
88*53310b69SSiva Reddy Kallam 		     struct bng_re_hwq *hwq);
89*53310b69SSiva Reddy Kallam 
90*53310b69SSiva Reddy Kallam int bng_re_alloc_init_hwq(struct bng_re_hwq *hwq,
91*53310b69SSiva Reddy Kallam 			  struct bng_re_hwq_attr *hwq_attr);
9274506577SSiva Reddy Kallam #endif
93