xref: /linux/drivers/net/ethernet/broadcom/bnge/bnge_resc.h (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
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 Gupta bnge_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