1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* Copyright (C) 2018-2021, Intel Corporation. */ |
3 | |
4 | #ifndef _ICE_LAG_H_ |
5 | #define _ICE_LAG_H_ |
6 | |
7 | #include <linux/netdevice.h> |
8 | |
9 | /* LAG roles for netdev */ |
10 | enum ice_lag_role { |
11 | ICE_LAG_NONE, |
12 | ICE_LAG_PRIMARY, |
13 | ICE_LAG_BACKUP, |
14 | ICE_LAG_UNSET |
15 | }; |
16 | |
17 | #define ICE_LAG_INVALID_PORT 0xFF |
18 | |
19 | #define ICE_LAG_RESET_RETRIES 5 |
20 | |
21 | struct ice_pf; |
22 | struct ice_vf; |
23 | |
24 | struct ice_lag_netdev_list { |
25 | struct list_head node; |
26 | struct net_device *netdev; |
27 | }; |
28 | |
29 | /* LAG info struct */ |
30 | struct ice_lag { |
31 | struct ice_pf *pf; /* backlink to PF struct */ |
32 | struct net_device *netdev; /* this PF's netdev */ |
33 | struct net_device *upper_netdev; /* upper bonding netdev */ |
34 | struct list_head *netdev_head; |
35 | struct notifier_block notif_block; |
36 | s32 bond_mode; |
37 | u16 bond_swid; /* swid for primary interface */ |
38 | u8 active_port; /* lport value for the current active port */ |
39 | u8 bonded:1; /* currently bonded */ |
40 | u8 primary:1; /* this is primary */ |
41 | u16 pf_recipe; |
42 | u16 lport_recipe; |
43 | u16 pf_rule_id; |
44 | u16 cp_rule_idx; |
45 | u16 lport_rule_idx; |
46 | u8 role; |
47 | }; |
48 | |
49 | /* LAG workqueue struct */ |
50 | struct ice_lag_work { |
51 | struct work_struct lag_task; |
52 | struct ice_lag_netdev_list netdev_list; |
53 | struct ice_lag *lag; |
54 | unsigned long event; |
55 | struct net_device *event_netdev; |
56 | union { |
57 | struct netdev_notifier_changeupper_info changeupper_info; |
58 | struct netdev_notifier_bonding_info bonding_info; |
59 | struct netdev_notifier_info notifier_info; |
60 | } info; |
61 | }; |
62 | |
63 | void ice_lag_move_new_vf_nodes(struct ice_vf *vf); |
64 | int ice_init_lag(struct ice_pf *pf); |
65 | void ice_deinit_lag(struct ice_pf *pf); |
66 | void ice_lag_rebuild(struct ice_pf *pf); |
67 | bool ice_lag_is_switchdev_running(struct ice_pf *pf); |
68 | #endif /* _ICE_LAG_H_ */ |
69 | |