1627c67f0SVikas Gupta /* SPDX-License-Identifier: GPL-2.0 */ 2627c67f0SVikas Gupta /* Copyright (c) 2025 Broadcom */ 3627c67f0SVikas Gupta 4627c67f0SVikas Gupta #ifndef _BNGE_RESC_H_ 5627c67f0SVikas Gupta #define _BNGE_RESC_H_ 6627c67f0SVikas Gupta 7*13a68c1eSVikas Gupta #include "bnge_netdev.h" 8*13a68c1eSVikas Gupta #include "bnge_rmem.h" 9*13a68c1eSVikas Gupta 10627c67f0SVikas Gupta struct bnge_hw_resc { 11627c67f0SVikas Gupta u16 min_rsscos_ctxs; 12627c67f0SVikas Gupta u16 max_rsscos_ctxs; 13627c67f0SVikas Gupta u16 resv_rsscos_ctxs; 14627c67f0SVikas Gupta u16 min_cp_rings; 15627c67f0SVikas Gupta u16 max_cp_rings; 16627c67f0SVikas Gupta u16 resv_cp_rings; 17627c67f0SVikas Gupta u16 min_tx_rings; 18627c67f0SVikas Gupta u16 max_tx_rings; 19627c67f0SVikas Gupta u16 resv_tx_rings; 20627c67f0SVikas Gupta u16 max_tx_sch_inputs; 21627c67f0SVikas Gupta u16 min_rx_rings; 22627c67f0SVikas Gupta u16 max_rx_rings; 23627c67f0SVikas Gupta u16 resv_rx_rings; 24627c67f0SVikas Gupta u16 min_hw_ring_grps; 25627c67f0SVikas Gupta u16 max_hw_ring_grps; 26627c67f0SVikas Gupta u16 resv_hw_ring_grps; 27627c67f0SVikas Gupta u16 min_l2_ctxs; 28627c67f0SVikas Gupta u16 max_l2_ctxs; 29627c67f0SVikas Gupta u16 min_vnics; 30627c67f0SVikas Gupta u16 max_vnics; 31627c67f0SVikas Gupta u16 resv_vnics; 32627c67f0SVikas Gupta u16 min_stat_ctxs; 33627c67f0SVikas Gupta u16 max_stat_ctxs; 34627c67f0SVikas Gupta u16 resv_stat_ctxs; 35627c67f0SVikas Gupta u16 max_nqs; 36627c67f0SVikas Gupta u16 max_irqs; 37627c67f0SVikas Gupta u16 resv_irqs; 38627c67f0SVikas Gupta u32 max_encap_records; 39627c67f0SVikas Gupta u32 max_decap_records; 40627c67f0SVikas Gupta u32 max_tx_em_flows; 41627c67f0SVikas Gupta u32 max_tx_wm_flows; 42627c67f0SVikas Gupta u32 max_rx_em_flows; 43627c67f0SVikas Gupta u32 max_rx_wm_flows; 44627c67f0SVikas Gupta }; 45627c67f0SVikas Gupta 46627c67f0SVikas Gupta struct bnge_hw_rings { 47627c67f0SVikas Gupta u16 tx; 48627c67f0SVikas Gupta u16 rx; 49627c67f0SVikas Gupta u16 grp; 50627c67f0SVikas Gupta u16 nq; 51627c67f0SVikas Gupta u16 cmpl; 52627c67f0SVikas Gupta u16 stat; 53627c67f0SVikas Gupta u16 vnic; 54627c67f0SVikas Gupta u16 rss_ctx; 55627c67f0SVikas Gupta }; 56627c67f0SVikas Gupta 5718a97538SVikas Gupta /* "TXRX", 2 hypens, plus maximum integer */ 5818a97538SVikas Gupta #define BNGE_IRQ_NAME_EXTRA 17 5918a97538SVikas Gupta struct bnge_irq { 6018a97538SVikas Gupta irq_handler_t handler; 6118a97538SVikas Gupta unsigned int vector; 6218a97538SVikas Gupta u8 requested:1; 6318a97538SVikas Gupta u8 have_cpumask:1; 6418a97538SVikas Gupta char name[IFNAMSIZ + BNGE_IRQ_NAME_EXTRA]; 6518a97538SVikas Gupta cpumask_var_t cpu_mask; 6618a97538SVikas Gupta }; 6718a97538SVikas Gupta 68627c67f0SVikas Gupta int bnge_reserve_rings(struct bnge_dev *bd); 69627c67f0SVikas Gupta int bnge_fix_rings_count(u16 *rx, u16 *tx, u16 max, bool shared); 7018a97538SVikas Gupta int bnge_alloc_irqs(struct bnge_dev *bd); 7118a97538SVikas Gupta void bnge_free_irqs(struct bnge_dev *bd); 723fa9e977SVikas Gupta int bnge_net_init_dflt_config(struct bnge_dev *bd); 733fa9e977SVikas Gupta void bnge_net_uninit_dflt_config(struct bnge_dev *bd); 743fa9e977SVikas Gupta void bnge_aux_init_dflt_config(struct bnge_dev *bd); 75627c67f0SVikas Gupta 76627c67f0SVikas Gupta static inline u32 bnge_adjust_pow_two(u32 total_ent,u16 ent_per_blk)77627c67f0SVikas Guptabnge_adjust_pow_two(u32 total_ent, u16 ent_per_blk) 78627c67f0SVikas Gupta { 79627c67f0SVikas Gupta u32 blks = total_ent / ent_per_blk; 80627c67f0SVikas Gupta 81627c67f0SVikas Gupta if (blks == 0 || blks == 1) 82627c67f0SVikas Gupta return ++blks; 83627c67f0SVikas Gupta 84627c67f0SVikas Gupta if (!is_power_of_2(blks)) 85627c67f0SVikas Gupta blks = roundup_pow_of_two(blks); 86627c67f0SVikas Gupta 87627c67f0SVikas Gupta return blks; 88627c67f0SVikas Gupta } 89627c67f0SVikas Gupta 90627c67f0SVikas Gupta #define BNGE_MAX_ROCE_MSIX 64 91627c67f0SVikas Gupta #define BNGE_MIN_ROCE_CP_RINGS 2 92627c67f0SVikas Gupta #define BNGE_MIN_ROCE_STAT_CTXS 1 93627c67f0SVikas Gupta 94627c67f0SVikas Gupta #endif /* _BNGE_RESC_H_ */ 95