17fa8d547SShradha Shah /****************************************************************************
27fa8d547SShradha Shah  * Driver for Solarflare network controllers and boards
37fa8d547SShradha Shah  * Copyright 2015 Solarflare Communications Inc.
47fa8d547SShradha Shah  *
57fa8d547SShradha Shah  * This program is free software; you can redistribute it and/or modify it
67fa8d547SShradha Shah  * under the terms of the GNU General Public License version 2 as published
77fa8d547SShradha Shah  * by the Free Software Foundation, incorporated herein by reference.
87fa8d547SShradha Shah  */
97fa8d547SShradha Shah 
107fa8d547SShradha Shah #ifndef EF10_SRIOV_H
117fa8d547SShradha Shah #define EF10_SRIOV_H
127fa8d547SShradha Shah 
137fa8d547SShradha Shah #include "net_driver.h"
147fa8d547SShradha Shah 
153c5eb876SShradha Shah /**
163c5eb876SShradha Shah  * struct ef10_vf - PF's store of VF data
173c5eb876SShradha Shah  * @vport_id: vport ID for the VF
183c5eb876SShradha Shah  * @vport_assigned: record whether the vport is currently assigned to the VF
193c5eb876SShradha Shah  * @mac: MAC address for the VF, zero when address is removed from the vport
203c5eb876SShradha Shah  */
213c5eb876SShradha Shah struct ef10_vf {
223c5eb876SShradha Shah 	unsigned int vport_id;
233c5eb876SShradha Shah 	unsigned int vport_assigned;
243c5eb876SShradha Shah 	u8 mac[ETH_ALEN];
253c5eb876SShradha Shah };
263c5eb876SShradha Shah 
277fa8d547SShradha Shah static inline bool efx_ef10_sriov_wanted(struct efx_nic *efx)
287fa8d547SShradha Shah {
297fa8d547SShradha Shah 	return false;
307fa8d547SShradha Shah }
317fa8d547SShradha Shah 
32834e23ddSShradha Shah int efx_ef10_sriov_configure(struct efx_nic *efx, int num_vfs);
3302246a7fSShradha Shah int efx_ef10_sriov_init(struct efx_nic *efx);
347fa8d547SShradha Shah static inline void efx_ef10_sriov_mac_address_changed(struct efx_nic *efx) {}
357fa8d547SShradha Shah static inline void efx_ef10_sriov_reset(struct efx_nic *efx) {}
3602246a7fSShradha Shah void efx_ef10_sriov_fini(struct efx_nic *efx);
377fa8d547SShradha Shah static inline void efx_ef10_sriov_flr(struct efx_nic *efx, unsigned vf_i) {}
387fa8d547SShradha Shah 
397fa8d547SShradha Shah static inline int efx_ef10_sriov_set_vf_mac(struct efx_nic *efx, int vf,
407fa8d547SShradha Shah 					    u8 *mac)
417fa8d547SShradha Shah {
427fa8d547SShradha Shah 	return -EOPNOTSUPP;
437fa8d547SShradha Shah }
447fa8d547SShradha Shah 
457fa8d547SShradha Shah static inline int efx_ef10_sriov_set_vf_vlan(struct efx_nic *efx, int vf,
467fa8d547SShradha Shah 					     u16 vlan, u8 qos)
477fa8d547SShradha Shah {
487fa8d547SShradha Shah 	return -EOPNOTSUPP;
497fa8d547SShradha Shah }
507fa8d547SShradha Shah 
517fa8d547SShradha Shah static inline int efx_ef10_sriov_set_vf_spoofchk(struct efx_nic *efx, int vf,
527fa8d547SShradha Shah 						 bool spoofchk)
537fa8d547SShradha Shah {
547fa8d547SShradha Shah 	return -EOPNOTSUPP;
557fa8d547SShradha Shah }
567fa8d547SShradha Shah 
577fa8d547SShradha Shah static inline int efx_ef10_sriov_get_vf_config(struct efx_nic *efx, int vf,
587fa8d547SShradha Shah 					       struct ifla_vf_info *ivf)
597fa8d547SShradha Shah {
607fa8d547SShradha Shah 	return -EOPNOTSUPP;
617fa8d547SShradha Shah }
627fa8d547SShradha Shah 
636d8aaaf6SDaniel Pieczko int efx_ef10_vswitching_probe(struct efx_nic *efx);
646d8aaaf6SDaniel Pieczko int efx_ef10_vswitching_restore(struct efx_nic *efx);
656d8aaaf6SDaniel Pieczko void efx_ef10_vswitching_remove(struct efx_nic *efx);
666d8aaaf6SDaniel Pieczko 
677fa8d547SShradha Shah #endif /* EF10_SRIOV_H */
68