xref: /linux/drivers/net/ethernet/broadcom/bnge/bnge_auxr.h (revision 55aa394a5ed871208eac11c5f4677cafd258c4dd)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2025 Broadcom */
3 
4 #ifndef _BNGE_AUXR_H_
5 #define _BNGE_AUXR_H_
6 
7 #include <linux/auxiliary_bus.h>
8 
9 #define BNGE_MIN_ROCE_CP_RINGS	2
10 #define BNGE_MIN_ROCE_STAT_CTXS	1
11 
12 #define BNGE_MAX_ROCE_MSIX	64
13 
14 struct hwrm_async_event_cmpl;
15 struct bnge;
16 
17 struct bnge_msix_info {
18 	u32	vector;
19 	u32	ring_idx;
20 	u32	db_offset;
21 };
22 
23 struct bnge_fw_msg {
24 	void	*msg;
25 	int	msg_len;
26 	void	*resp;
27 	int	resp_max_len;
28 	int	timeout;
29 };
30 
31 struct bnge_auxr_info {
32 	void		*handle;
33 	u16		msix_requested;
34 };
35 
36 enum {
37 	BNGE_ARDEV_ROCEV1_SUPP		= BIT(0),
38 	BNGE_ARDEV_ROCEV2_SUPP		= BIT(1),
39 	BNGE_ARDEV_MSIX_ALLOC		= BIT(2),
40 };
41 
42 #define BNGE_ARDEV_ROCE_SUPP	(BNGE_ARDEV_ROCEV1_SUPP | \
43 				 BNGE_ARDEV_ROCEV2_SUPP)
44 
45 struct bnge_auxr_dev {
46 	struct net_device	*net;
47 	struct pci_dev		*pdev;
48 	void __iomem		*bar0;
49 
50 	struct bnge_msix_info	msix_info[BNGE_MAX_ROCE_MSIX];
51 
52 	u32 flags;
53 
54 	struct bnge_auxr_info	*auxr_info;
55 
56 	/* Doorbell BAR size in bytes mapped by L2 driver. */
57 	int	l2_db_size;
58 	/* Doorbell BAR size in bytes mapped as non-cacheable. */
59 	int	l2_db_size_nc;
60 	/* Doorbell offset in bytes within l2_db_size_nc. */
61 	int	l2_db_offset;
62 
63 	u16		chip_num;
64 	u16		hw_ring_stats_size;
65 	u16		pf_port_id;
66 	unsigned long	en_state;
67 
68 	u16	auxr_num_msix_vec;
69 	u16	auxr_num_ctxs;
70 
71 	/* serialize auxr operations */
72 	struct mutex	auxr_dev_lock;
73 };
74 
75 void bnge_rdma_aux_device_uninit(struct bnge_dev *bdev);
76 void bnge_rdma_aux_device_del(struct bnge_dev *bdev);
77 void bnge_rdma_aux_device_add(struct bnge_dev *bdev);
78 void bnge_rdma_aux_device_init(struct bnge_dev *bdev);
79 int bnge_register_dev(struct bnge_auxr_dev *adev,
80 		      void *handle);
81 void bnge_unregister_dev(struct bnge_auxr_dev *adev);
82 int bnge_send_msg(struct bnge_auxr_dev *adev, struct bnge_fw_msg *fw_msg);
83 
84 #endif /* _BNGE_AUXR_H_ */
85