74 lines
1.8 KiB
C
74 lines
1.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (C) 2018-2021, Intel Corporation. */
|
|
|
|
#ifndef _ICE_LAG_H_
|
|
#define _ICE_LAG_H_
|
|
|
|
#include <linux/netdevice.h>
|
|
|
|
/* LAG roles for netdev */
|
|
enum ice_lag_role {
|
|
ICE_LAG_NONE,
|
|
ICE_LAG_PRIMARY,
|
|
ICE_LAG_BACKUP,
|
|
ICE_LAG_UNSET
|
|
};
|
|
|
|
#define ICE_LAG_INVALID_PORT 0xFF
|
|
|
|
#define ICE_LAG_RESET_RETRIES 5
|
|
#define ICE_SW_DEFAULT_PROFILE 0
|
|
#define ICE_FV_PROT_MDID 255
|
|
#define ICE_LP_EXT_BUF_OFFSET 32
|
|
|
|
struct ice_pf;
|
|
struct ice_vf;
|
|
|
|
struct ice_lag_netdev_list {
|
|
struct list_head node;
|
|
struct net_device *netdev;
|
|
};
|
|
|
|
/* LAG info struct */
|
|
struct ice_lag {
|
|
struct ice_pf *pf; /* backlink to PF struct */
|
|
struct net_device *netdev; /* this PF's netdev */
|
|
struct net_device *upper_netdev; /* upper bonding netdev */
|
|
struct list_head *netdev_head;
|
|
struct notifier_block notif_block;
|
|
s32 bond_mode;
|
|
u16 bond_swid; /* swid for primary interface */
|
|
u8 active_port; /* lport value for the current active port */
|
|
u8 bonded:1; /* currently bonded */
|
|
u8 primary:1; /* this is primary */
|
|
u16 pf_recipe;
|
|
u16 lport_recipe;
|
|
u16 pf_rx_rule_id;
|
|
u16 pf_tx_rule_id;
|
|
u16 cp_rule_idx;
|
|
u16 lport_rule_idx;
|
|
u8 role;
|
|
};
|
|
|
|
/* LAG workqueue struct */
|
|
struct ice_lag_work {
|
|
struct work_struct lag_task;
|
|
struct ice_lag_netdev_list netdev_list;
|
|
struct ice_lag *lag;
|
|
unsigned long event;
|
|
struct net_device *event_netdev;
|
|
union {
|
|
struct netdev_notifier_changeupper_info changeupper_info;
|
|
struct netdev_notifier_bonding_info bonding_info;
|
|
struct netdev_notifier_info notifier_info;
|
|
} info;
|
|
};
|
|
|
|
void ice_lag_move_new_vf_nodes(struct ice_vf *vf);
|
|
int ice_init_lag(struct ice_pf *pf);
|
|
void ice_deinit_lag(struct ice_pf *pf);
|
|
void ice_lag_rebuild(struct ice_pf *pf);
|
|
bool ice_lag_is_switchdev_running(struct ice_pf *pf);
|
|
void ice_lag_move_vf_nodes_cfg(struct ice_lag *lag, u8 src_prt, u8 dst_prt);
|
|
#endif /* _ICE_LAG_H_ */
|