xref: /linux/drivers/infiniband/hw/hns/hns_roce_bond.h (revision b37ad2e290fc52e575572b04803a4f93f584df6c)
1*b37ad2e2SJunxian Huang /* SPDX-License-Identifier: GPL-2.0+ */
2*b37ad2e2SJunxian Huang /*
3*b37ad2e2SJunxian Huang  * Copyright (c) 2025 Hisilicon Limited.
4*b37ad2e2SJunxian Huang  */
5*b37ad2e2SJunxian Huang 
6*b37ad2e2SJunxian Huang #ifndef _HNS_ROCE_BOND_H
7*b37ad2e2SJunxian Huang #define _HNS_ROCE_BOND_H
8*b37ad2e2SJunxian Huang 
9*b37ad2e2SJunxian Huang #include <linux/netdevice.h>
10*b37ad2e2SJunxian Huang #include <net/bonding.h>
11*b37ad2e2SJunxian Huang 
12*b37ad2e2SJunxian Huang #define ROCE_BOND_FUNC_MAX 4
13*b37ad2e2SJunxian Huang #define ROCE_BOND_NUM_MAX 2
14*b37ad2e2SJunxian Huang 
15*b37ad2e2SJunxian Huang #define BOND_ID(id) BIT(id)
16*b37ad2e2SJunxian Huang 
17*b37ad2e2SJunxian Huang struct hns_roce_func_info {
18*b37ad2e2SJunxian Huang 	struct net_device *net_dev;
19*b37ad2e2SJunxian Huang };
20*b37ad2e2SJunxian Huang 
21*b37ad2e2SJunxian Huang struct hns_roce_bond_group {
22*b37ad2e2SJunxian Huang 	struct net_device *upper_dev;
23*b37ad2e2SJunxian Huang 	u8 bond_id;
24*b37ad2e2SJunxian Huang 	u8 bus_num;
25*b37ad2e2SJunxian Huang 	struct hns_roce_func_info bond_func_info[ROCE_BOND_FUNC_MAX];
26*b37ad2e2SJunxian Huang };
27*b37ad2e2SJunxian Huang 
28*b37ad2e2SJunxian Huang struct hns_roce_die_info {
29*b37ad2e2SJunxian Huang 	u8 bond_id_mask;
30*b37ad2e2SJunxian Huang 	struct hns_roce_bond_group *bgrps[ROCE_BOND_NUM_MAX];
31*b37ad2e2SJunxian Huang };
32*b37ad2e2SJunxian Huang 
33*b37ad2e2SJunxian Huang struct hns_roce_bond_group *hns_roce_get_bond_grp(struct net_device *net_dev,
34*b37ad2e2SJunxian Huang 						  u8 bus_num);
35*b37ad2e2SJunxian Huang int hns_roce_alloc_bond_grp(struct hns_roce_dev *hr_dev);
36*b37ad2e2SJunxian Huang void hns_roce_dealloc_bond_grp(void);
37*b37ad2e2SJunxian Huang 
38*b37ad2e2SJunxian Huang #endif
39