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