mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
910c8789a7
Add a set_mac_address() NIC-type function for EF10 only, and use this to set the MAC address on the vadaptor. For Siena and earlier, the MAC address continues to be set by MC_CMD_SET_MAC; this is still called on EF10, and including a MAC address in this command has no effect. The sriov_mac_address_changed() NIC-type function is no longer needed on EF10, but it is needed for Siena where it is used to update the peer address of the PF for VFDI. Change this to use the new set_mac_address function pointer. efx_ef10_sriov_mac_address_changed() is no longer called, as VFs will try to change the MAC address on their vadaptor rather than trying to change to the context of the PF to alter the vport. When a VF is running in direct passthrough mode with MAC spoofing enabled, it will be able to change the MAC address on its vadaptor. In this case, there is a link to the PF, so find the correct VF in its ef10_vf array and update the MAC address. ndo_set_mac_address() can be called during driver unload while bonding, and in this case the device has already been stopped, so don't call efx_net_open() to restart it after reconfiguration. efx->port_enabled is set to false in efx_stop_port(), so it is indicator of whether the device needs to be restarted. Signed-off-by: Shradha Shah <sshah@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
65 lines
2.1 KiB
C
65 lines
2.1 KiB
C
/****************************************************************************
|
|
* Driver for Solarflare network controllers and boards
|
|
* Copyright 2015 Solarflare Communications Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published
|
|
* by the Free Software Foundation, incorporated herein by reference.
|
|
*/
|
|
|
|
#ifndef EF10_SRIOV_H
|
|
#define EF10_SRIOV_H
|
|
|
|
#include "net_driver.h"
|
|
|
|
/**
|
|
* struct ef10_vf - PF's store of VF data
|
|
* @efx: efx_nic struct for the current VF
|
|
* @vport_id: vport ID for the VF
|
|
* @vport_assigned: record whether the vport is currently assigned to the VF
|
|
* @mac: MAC address for the VF, zero when address is removed from the vport
|
|
* @vlan: Default VLAN for the VF or #EFX_EF10_NO_VLAN
|
|
*/
|
|
struct ef10_vf {
|
|
struct efx_nic *efx;
|
|
unsigned int vport_id;
|
|
unsigned int vport_assigned;
|
|
u8 mac[ETH_ALEN];
|
|
u16 vlan;
|
|
#define EFX_EF10_NO_VLAN 0
|
|
};
|
|
|
|
static inline bool efx_ef10_sriov_wanted(struct efx_nic *efx)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
int efx_ef10_sriov_configure(struct efx_nic *efx, int num_vfs);
|
|
int efx_ef10_sriov_init(struct efx_nic *efx);
|
|
static inline void efx_ef10_sriov_reset(struct efx_nic *efx) {}
|
|
void efx_ef10_sriov_fini(struct efx_nic *efx);
|
|
static inline void efx_ef10_sriov_flr(struct efx_nic *efx, unsigned vf_i) {}
|
|
|
|
int efx_ef10_sriov_set_vf_mac(struct efx_nic *efx, int vf, u8 *mac);
|
|
|
|
int efx_ef10_sriov_set_vf_vlan(struct efx_nic *efx, int vf_i,
|
|
u16 vlan, u8 qos);
|
|
|
|
int efx_ef10_sriov_set_vf_spoofchk(struct efx_nic *efx, int vf,
|
|
bool spoofchk);
|
|
|
|
int efx_ef10_sriov_get_vf_config(struct efx_nic *efx, int vf_i,
|
|
struct ifla_vf_info *ivf);
|
|
|
|
int efx_ef10_sriov_set_vf_link_state(struct efx_nic *efx, int vf_i,
|
|
int link_state);
|
|
|
|
int efx_ef10_vswitching_probe_pf(struct efx_nic *efx);
|
|
int efx_ef10_vswitching_probe_vf(struct efx_nic *efx);
|
|
int efx_ef10_vswitching_restore_pf(struct efx_nic *efx);
|
|
int efx_ef10_vswitching_restore_vf(struct efx_nic *efx);
|
|
void efx_ef10_vswitching_remove_pf(struct efx_nic *efx);
|
|
void efx_ef10_vswitching_remove_vf(struct efx_nic *efx);
|
|
|
|
#endif /* EF10_SRIOV_H */
|