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