10deb0bf7SJacob Keller /* SPDX-License-Identifier: GPL-2.0 */
20deb0bf7SJacob Keller /* Copyright (c) 2018, Intel Corporation. */
30deb0bf7SJacob Keller 
40deb0bf7SJacob Keller #ifndef _ICE_SRIOV_H_
50deb0bf7SJacob Keller #define _ICE_SRIOV_H_
60deb0bf7SJacob Keller #include "ice_virtchnl_fdir.h"
7109aba47SJacob Keller #include "ice_vf_lib.h"
8*bf93bf79SJacob Keller #include "ice_virtchnl.h"
90deb0bf7SJacob Keller 
100deb0bf7SJacob Keller /* Static VF transaction/status register def */
110deb0bf7SJacob Keller #define VF_DEVICE_STATUS		0xAA
120deb0bf7SJacob Keller #define VF_TRANS_PENDING_M		0x20
130deb0bf7SJacob Keller 
140deb0bf7SJacob Keller /* wait defines for polling PF_PCI_CIAD register status */
150deb0bf7SJacob Keller #define ICE_PCI_CIAD_WAIT_COUNT		100
160deb0bf7SJacob Keller #define ICE_PCI_CIAD_WAIT_DELAY_US	1
170deb0bf7SJacob Keller 
180deb0bf7SJacob Keller /* VF resource constraints */
190deb0bf7SJacob Keller #define ICE_MIN_QS_PER_VF		1
200deb0bf7SJacob Keller #define ICE_NONQ_VECS_VF		1
210deb0bf7SJacob Keller #define ICE_NUM_VF_MSIX_MED		17
220deb0bf7SJacob Keller #define ICE_NUM_VF_MSIX_SMALL		5
230deb0bf7SJacob Keller #define ICE_NUM_VF_MSIX_MULTIQ_MIN	3
240deb0bf7SJacob Keller #define ICE_MIN_INTR_PER_VF		(ICE_MIN_QS_PER_VF + 1)
250deb0bf7SJacob Keller #define ICE_MAX_VF_RESET_TRIES		40
260deb0bf7SJacob Keller #define ICE_MAX_VF_RESET_SLEEP_MS	20
270deb0bf7SJacob Keller 
280deb0bf7SJacob Keller #ifdef CONFIG_PCI_IOV
290deb0bf7SJacob Keller void ice_process_vflr_event(struct ice_pf *pf);
300deb0bf7SJacob Keller int ice_sriov_configure(struct pci_dev *pdev, int num_vfs);
310deb0bf7SJacob Keller int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac);
320deb0bf7SJacob Keller int
330deb0bf7SJacob Keller ice_get_vf_cfg(struct net_device *netdev, int vf_id, struct ifla_vf_info *ivi);
340deb0bf7SJacob Keller 
350deb0bf7SJacob Keller void ice_free_vfs(struct ice_pf *pf);
360deb0bf7SJacob Keller void ice_restore_all_vfs_msi_state(struct pci_dev *pdev);
370deb0bf7SJacob Keller 
380deb0bf7SJacob Keller int
390deb0bf7SJacob Keller ice_set_vf_port_vlan(struct net_device *netdev, int vf_id, u16 vlan_id, u8 qos,
400deb0bf7SJacob Keller 		     __be16 vlan_proto);
410deb0bf7SJacob Keller 
420deb0bf7SJacob Keller int
430deb0bf7SJacob Keller ice_set_vf_bw(struct net_device *netdev, int vf_id, int min_tx_rate,
440deb0bf7SJacob Keller 	      int max_tx_rate);
450deb0bf7SJacob Keller 
460deb0bf7SJacob Keller int ice_set_vf_trust(struct net_device *netdev, int vf_id, bool trusted);
470deb0bf7SJacob Keller 
480deb0bf7SJacob Keller int ice_set_vf_link_state(struct net_device *netdev, int vf_id, int link_state);
490deb0bf7SJacob Keller 
500deb0bf7SJacob Keller int ice_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool ena);
510deb0bf7SJacob Keller 
520deb0bf7SJacob Keller int ice_calc_vf_reg_idx(struct ice_vf *vf, struct ice_q_vector *q_vector);
530deb0bf7SJacob Keller 
540deb0bf7SJacob Keller int
550deb0bf7SJacob Keller ice_get_vf_stats(struct net_device *netdev, int vf_id,
560deb0bf7SJacob Keller 		 struct ifla_vf_stats *vf_stats);
570deb0bf7SJacob Keller void
580deb0bf7SJacob Keller ice_vf_lan_overflow_event(struct ice_pf *pf, struct ice_rq_event_info *event);
590deb0bf7SJacob Keller void ice_print_vfs_mdd_events(struct ice_pf *pf);
600deb0bf7SJacob Keller void ice_print_vf_rx_mdd_event(struct ice_vf *vf);
610deb0bf7SJacob Keller bool
620deb0bf7SJacob Keller ice_vc_validate_pattern(struct ice_vf *vf, struct virtchnl_proto_hdrs *proto);
630deb0bf7SJacob Keller #else /* CONFIG_PCI_IOV */
ice_process_vflr_event(struct ice_pf * pf)640deb0bf7SJacob Keller static inline void ice_process_vflr_event(struct ice_pf *pf) { }
ice_free_vfs(struct ice_pf * pf)650deb0bf7SJacob Keller static inline void ice_free_vfs(struct ice_pf *pf) { }
660deb0bf7SJacob Keller static inline
ice_vf_lan_overflow_event(struct ice_pf * pf,struct ice_rq_event_info * event)670deb0bf7SJacob Keller void ice_vf_lan_overflow_event(struct ice_pf *pf, struct ice_rq_event_info *event) { }
ice_print_vfs_mdd_events(struct ice_pf * pf)680deb0bf7SJacob Keller static inline void ice_print_vfs_mdd_events(struct ice_pf *pf) { }
ice_print_vf_rx_mdd_event(struct ice_vf * vf)690deb0bf7SJacob Keller static inline void ice_print_vf_rx_mdd_event(struct ice_vf *vf) { }
ice_restore_all_vfs_msi_state(struct pci_dev * pdev)700deb0bf7SJacob Keller static inline void ice_restore_all_vfs_msi_state(struct pci_dev *pdev) { }
710deb0bf7SJacob Keller 
720deb0bf7SJacob Keller static inline int
ice_sriov_configure(struct pci_dev __always_unused * pdev,int __always_unused num_vfs)730deb0bf7SJacob Keller ice_sriov_configure(struct pci_dev __always_unused *pdev,
740deb0bf7SJacob Keller 		    int __always_unused num_vfs)
750deb0bf7SJacob Keller {
760deb0bf7SJacob Keller 	return -EOPNOTSUPP;
770deb0bf7SJacob Keller }
780deb0bf7SJacob Keller 
790deb0bf7SJacob Keller static inline int
ice_set_vf_mac(struct net_device __always_unused * netdev,int __always_unused vf_id,u8 __always_unused * mac)800deb0bf7SJacob Keller ice_set_vf_mac(struct net_device __always_unused *netdev,
810deb0bf7SJacob Keller 	       int __always_unused vf_id, u8 __always_unused *mac)
820deb0bf7SJacob Keller {
830deb0bf7SJacob Keller 	return -EOPNOTSUPP;
840deb0bf7SJacob Keller }
850deb0bf7SJacob Keller 
860deb0bf7SJacob Keller static inline int
ice_get_vf_cfg(struct net_device __always_unused * netdev,int __always_unused vf_id,struct ifla_vf_info __always_unused * ivi)870deb0bf7SJacob Keller ice_get_vf_cfg(struct net_device __always_unused *netdev,
880deb0bf7SJacob Keller 	       int __always_unused vf_id,
890deb0bf7SJacob Keller 	       struct ifla_vf_info __always_unused *ivi)
900deb0bf7SJacob Keller {
910deb0bf7SJacob Keller 	return -EOPNOTSUPP;
920deb0bf7SJacob Keller }
930deb0bf7SJacob Keller 
940deb0bf7SJacob Keller static inline int
ice_set_vf_trust(struct net_device __always_unused * netdev,int __always_unused vf_id,bool __always_unused trusted)950deb0bf7SJacob Keller ice_set_vf_trust(struct net_device __always_unused *netdev,
960deb0bf7SJacob Keller 		 int __always_unused vf_id, bool __always_unused trusted)
970deb0bf7SJacob Keller {
980deb0bf7SJacob Keller 	return -EOPNOTSUPP;
990deb0bf7SJacob Keller }
1000deb0bf7SJacob Keller 
1010deb0bf7SJacob Keller static inline int
ice_set_vf_port_vlan(struct net_device __always_unused * netdev,int __always_unused vf_id,u16 __always_unused vid,u8 __always_unused qos,__be16 __always_unused v_proto)1020deb0bf7SJacob Keller ice_set_vf_port_vlan(struct net_device __always_unused *netdev,
1030deb0bf7SJacob Keller 		     int __always_unused vf_id, u16 __always_unused vid,
1040deb0bf7SJacob Keller 		     u8 __always_unused qos, __be16 __always_unused v_proto)
1050deb0bf7SJacob Keller {
1060deb0bf7SJacob Keller 	return -EOPNOTSUPP;
1070deb0bf7SJacob Keller }
1080deb0bf7SJacob Keller 
1090deb0bf7SJacob Keller static inline int
ice_set_vf_spoofchk(struct net_device __always_unused * netdev,int __always_unused vf_id,bool __always_unused ena)1100deb0bf7SJacob Keller ice_set_vf_spoofchk(struct net_device __always_unused *netdev,
1110deb0bf7SJacob Keller 		    int __always_unused vf_id, bool __always_unused ena)
1120deb0bf7SJacob Keller {
1130deb0bf7SJacob Keller 	return -EOPNOTSUPP;
1140deb0bf7SJacob Keller }
1150deb0bf7SJacob Keller 
1160deb0bf7SJacob Keller static inline int
ice_set_vf_link_state(struct net_device __always_unused * netdev,int __always_unused vf_id,int __always_unused link_state)1170deb0bf7SJacob Keller ice_set_vf_link_state(struct net_device __always_unused *netdev,
1180deb0bf7SJacob Keller 		      int __always_unused vf_id, int __always_unused link_state)
1190deb0bf7SJacob Keller {
1200deb0bf7SJacob Keller 	return -EOPNOTSUPP;
1210deb0bf7SJacob Keller }
1220deb0bf7SJacob Keller 
1230deb0bf7SJacob Keller static inline int
ice_set_vf_bw(struct net_device __always_unused * netdev,int __always_unused vf_id,int __always_unused min_tx_rate,int __always_unused max_tx_rate)1240deb0bf7SJacob Keller ice_set_vf_bw(struct net_device __always_unused *netdev,
1250deb0bf7SJacob Keller 	      int __always_unused vf_id, int __always_unused min_tx_rate,
1260deb0bf7SJacob Keller 	      int __always_unused max_tx_rate)
1270deb0bf7SJacob Keller {
1280deb0bf7SJacob Keller 	return -EOPNOTSUPP;
1290deb0bf7SJacob Keller }
1300deb0bf7SJacob Keller 
1310deb0bf7SJacob Keller static inline int
ice_calc_vf_reg_idx(struct ice_vf __always_unused * vf,struct ice_q_vector __always_unused * q_vector)1320deb0bf7SJacob Keller ice_calc_vf_reg_idx(struct ice_vf __always_unused *vf,
1330deb0bf7SJacob Keller 		    struct ice_q_vector __always_unused *q_vector)
1340deb0bf7SJacob Keller {
1350deb0bf7SJacob Keller 	return 0;
1360deb0bf7SJacob Keller }
1370deb0bf7SJacob Keller 
1380deb0bf7SJacob Keller static inline int
ice_get_vf_stats(struct net_device __always_unused * netdev,int __always_unused vf_id,struct ifla_vf_stats __always_unused * vf_stats)1390deb0bf7SJacob Keller ice_get_vf_stats(struct net_device __always_unused *netdev,
1400deb0bf7SJacob Keller 		 int __always_unused vf_id,
1410deb0bf7SJacob Keller 		 struct ifla_vf_stats __always_unused *vf_stats)
1420deb0bf7SJacob Keller {
1430deb0bf7SJacob Keller 	return -EOPNOTSUPP;
1440deb0bf7SJacob Keller }
1450deb0bf7SJacob Keller #endif /* CONFIG_PCI_IOV */
1460deb0bf7SJacob Keller #endif /* _ICE_SRIOV_H_ */
147