132a47e72SYuval Mintz /* QLogic qed NIC Driver 232a47e72SYuval Mintz * Copyright (c) 2015 QLogic Corporation 332a47e72SYuval Mintz * 432a47e72SYuval Mintz * This software is available under the terms of the GNU General Public License 532a47e72SYuval Mintz * (GPL) Version 2, available from the file COPYING in the main directory of 632a47e72SYuval Mintz * this source tree. 732a47e72SYuval Mintz */ 832a47e72SYuval Mintz 932a47e72SYuval Mintz #ifndef _QED_SRIOV_H 1032a47e72SYuval Mintz #define _QED_SRIOV_H 1132a47e72SYuval Mintz #include <linux/types.h> 1232a47e72SYuval Mintz #include "qed_vf.h" 1332a47e72SYuval Mintz #define QED_VF_ARRAY_LENGTH (3) 1432a47e72SYuval Mintz 1532a47e72SYuval Mintz #define IS_VF(cdev) ((cdev)->b_is_vf) 1632a47e72SYuval Mintz #define IS_PF(cdev) (!((cdev)->b_is_vf)) 1732a47e72SYuval Mintz #ifdef CONFIG_QED_SRIOV 1832a47e72SYuval Mintz #define IS_PF_SRIOV(p_hwfn) (!!((p_hwfn)->cdev->p_iov_info)) 1932a47e72SYuval Mintz #else 2032a47e72SYuval Mintz #define IS_PF_SRIOV(p_hwfn) (0) 2132a47e72SYuval Mintz #endif 2232a47e72SYuval Mintz #define IS_PF_SRIOV_ALLOC(p_hwfn) (!!((p_hwfn)->pf_iov_info)) 2332a47e72SYuval Mintz 241408cc1fSYuval Mintz #define QED_MAX_VF_CHAINS_PER_PF 16 251408cc1fSYuval Mintz #define QED_ETH_VF_NUM_VLAN_FILTERS 2 261408cc1fSYuval Mintz 2708feecd7SYuval Mintz #define QED_ETH_MAX_VF_NUM_VLAN_FILTERS \ 2808feecd7SYuval Mintz (MAX_NUM_VFS * QED_ETH_VF_NUM_VLAN_FILTERS) 2908feecd7SYuval Mintz 30dacd88d6SYuval Mintz enum qed_iov_vport_update_flag { 31dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_ACTIVATE, 3217b235c1SYuval Mintz QED_IOV_VP_UPDATE_VLAN_STRIP, 3317b235c1SYuval Mintz QED_IOV_VP_UPDATE_TX_SWITCH, 34dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_MCAST, 35dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_ACCEPT_PARAM, 36dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_RSS, 3717b235c1SYuval Mintz QED_IOV_VP_UPDATE_ACCEPT_ANY_VLAN, 3817b235c1SYuval Mintz QED_IOV_VP_UPDATE_SGE_TPA, 39dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_MAX, 40dacd88d6SYuval Mintz }; 41dacd88d6SYuval Mintz 420b55e27dSYuval Mintz struct qed_public_vf_info { 430b55e27dSYuval Mintz /* These copies will later be reflected in the bulletin board, 440b55e27dSYuval Mintz * but this copy should be newer. 450b55e27dSYuval Mintz */ 46eff16960SYuval Mintz u8 forced_mac[ETH_ALEN]; 4708feecd7SYuval Mintz u16 forced_vlan; 480b55e27dSYuval Mintz u8 mac[ETH_ALEN]; 49733def6aSYuval Mintz 50733def6aSYuval Mintz /* IFLA_VF_LINK_STATE_<X> */ 51733def6aSYuval Mintz int link_state; 52733def6aSYuval Mintz 53733def6aSYuval Mintz /* Currently configured Tx rate in MB/sec. 0 if unconfigured */ 54733def6aSYuval Mintz int tx_rate; 550b55e27dSYuval Mintz }; 560b55e27dSYuval Mintz 5732a47e72SYuval Mintz /* This struct is part of qed_dev and contains data relevant to all hwfns; 5832a47e72SYuval Mintz * Initialized only if SR-IOV cpabability is exposed in PCIe config space. 5932a47e72SYuval Mintz */ 6032a47e72SYuval Mintz struct qed_hw_sriov_info { 6132a47e72SYuval Mintz int pos; /* capability position */ 6232a47e72SYuval Mintz int nres; /* number of resources */ 6332a47e72SYuval Mintz u32 cap; /* SR-IOV Capabilities */ 6432a47e72SYuval Mintz u16 ctrl; /* SR-IOV Control */ 6532a47e72SYuval Mintz u16 total_vfs; /* total VFs associated with the PF */ 6632a47e72SYuval Mintz u16 num_vfs; /* number of vfs that have been started */ 6732a47e72SYuval Mintz u16 initial_vfs; /* initial VFs associated with the PF */ 6832a47e72SYuval Mintz u16 nr_virtfn; /* number of VFs available */ 6932a47e72SYuval Mintz u16 offset; /* first VF Routing ID offset */ 7032a47e72SYuval Mintz u16 stride; /* following VF stride */ 7132a47e72SYuval Mintz u16 vf_device_id; /* VF device id */ 7232a47e72SYuval Mintz u32 pgsz; /* page size for BAR alignment */ 7332a47e72SYuval Mintz u8 link; /* Function Dependency Link */ 7432a47e72SYuval Mintz 7532a47e72SYuval Mintz u32 first_vf_in_pf; 7632a47e72SYuval Mintz }; 7732a47e72SYuval Mintz 7832a47e72SYuval Mintz /* This mailbox is maintained per VF in its PF contains all information 7932a47e72SYuval Mintz * required for sending / receiving a message. 8032a47e72SYuval Mintz */ 8132a47e72SYuval Mintz struct qed_iov_vf_mbx { 8232a47e72SYuval Mintz union vfpf_tlvs *req_virt; 8332a47e72SYuval Mintz dma_addr_t req_phys; 8432a47e72SYuval Mintz union pfvf_tlvs *reply_virt; 8532a47e72SYuval Mintz dma_addr_t reply_phys; 8637bff2b9SYuval Mintz 8737bff2b9SYuval Mintz /* Address in VF where a pending message is located */ 8837bff2b9SYuval Mintz dma_addr_t pending_req; 8937bff2b9SYuval Mintz 9037bff2b9SYuval Mintz u8 *offset; 9137bff2b9SYuval Mintz 9237bff2b9SYuval Mintz /* saved VF request header */ 9337bff2b9SYuval Mintz struct vfpf_first_tlv first_tlv; 9432a47e72SYuval Mintz }; 9532a47e72SYuval Mintz 961408cc1fSYuval Mintz struct qed_vf_q_info { 971408cc1fSYuval Mintz u16 fw_rx_qid; 981408cc1fSYuval Mintz u16 fw_tx_qid; 991408cc1fSYuval Mintz u8 fw_cid; 1001408cc1fSYuval Mintz u8 rxq_active; 1011408cc1fSYuval Mintz u8 txq_active; 1021408cc1fSYuval Mintz }; 1031408cc1fSYuval Mintz 10432a47e72SYuval Mintz enum vf_state { 1051408cc1fSYuval Mintz VF_FREE = 0, /* VF ready to be acquired holds no resc */ 1061408cc1fSYuval Mintz VF_ACQUIRED, /* VF, acquired, but not initalized */ 107dacd88d6SYuval Mintz VF_ENABLED, /* VF, Enabled */ 1080b55e27dSYuval Mintz VF_RESET, /* VF, FLR'd, pending cleanup */ 10932a47e72SYuval Mintz VF_STOPPED /* VF, Stopped */ 11032a47e72SYuval Mintz }; 11132a47e72SYuval Mintz 11208feecd7SYuval Mintz struct qed_vf_vlan_shadow { 11308feecd7SYuval Mintz bool used; 11408feecd7SYuval Mintz u16 vid; 11508feecd7SYuval Mintz }; 11608feecd7SYuval Mintz 11708feecd7SYuval Mintz struct qed_vf_shadow_config { 11808feecd7SYuval Mintz /* Shadow copy of all guest vlans */ 11908feecd7SYuval Mintz struct qed_vf_vlan_shadow vlans[QED_ETH_VF_NUM_VLAN_FILTERS + 1]; 12008feecd7SYuval Mintz 12108feecd7SYuval Mintz u8 inner_vlan_removal; 12208feecd7SYuval Mintz }; 12308feecd7SYuval Mintz 12432a47e72SYuval Mintz /* PFs maintain an array of this structure, per VF */ 12532a47e72SYuval Mintz struct qed_vf_info { 12632a47e72SYuval Mintz struct qed_iov_vf_mbx vf_mbx; 12732a47e72SYuval Mintz enum vf_state state; 12832a47e72SYuval Mintz bool b_init; 1290b55e27dSYuval Mintz u8 to_disable; 13032a47e72SYuval Mintz 13132a47e72SYuval Mintz struct qed_bulletin bulletin; 13232a47e72SYuval Mintz dma_addr_t vf_bulletin; 13332a47e72SYuval Mintz 1341fe614d1SYuval Mintz /* PF saves a copy of the last VF acquire message */ 1351fe614d1SYuval Mintz struct vfpf_acquire_tlv acquire; 1361fe614d1SYuval Mintz 13732a47e72SYuval Mintz u32 concrete_fid; 13832a47e72SYuval Mintz u16 opaque_fid; 139dacd88d6SYuval Mintz u16 mtu; 14032a47e72SYuval Mintz 14132a47e72SYuval Mintz u8 vport_id; 14232a47e72SYuval Mintz u8 relative_vf_id; 14332a47e72SYuval Mintz u8 abs_vf_id; 14432a47e72SYuval Mintz #define QED_VF_ABS_ID(p_hwfn, p_vf) (QED_PATH_ID(p_hwfn) ? \ 14532a47e72SYuval Mintz (p_vf)->abs_vf_id + MAX_NUM_VFS_BB : \ 14632a47e72SYuval Mintz (p_vf)->abs_vf_id) 1471408cc1fSYuval Mintz 148dacd88d6SYuval Mintz u8 vport_instance; 1491408cc1fSYuval Mintz u8 num_rxqs; 1501408cc1fSYuval Mintz u8 num_txqs; 1511408cc1fSYuval Mintz 1521408cc1fSYuval Mintz u8 num_sbs; 1531408cc1fSYuval Mintz 1541408cc1fSYuval Mintz u8 num_mac_filters; 1551408cc1fSYuval Mintz u8 num_vlan_filters; 1561408cc1fSYuval Mintz struct qed_vf_q_info vf_queues[QED_MAX_VF_CHAINS_PER_PF]; 1571408cc1fSYuval Mintz u16 igu_sbs[QED_MAX_VF_CHAINS_PER_PF]; 158dacd88d6SYuval Mintz u8 num_active_rxqs; 1590b55e27dSYuval Mintz struct qed_public_vf_info p_vf_info; 1606ddc7608SYuval Mintz bool spoof_chk; 1616ddc7608SYuval Mintz bool req_spoofchk_val; 16208feecd7SYuval Mintz 16308feecd7SYuval Mintz /* Stores the configuration requested by VF */ 16408feecd7SYuval Mintz struct qed_vf_shadow_config shadow_config; 16508feecd7SYuval Mintz 16608feecd7SYuval Mintz /* A bitfield using bulletin's valid-map bits, used to indicate 16708feecd7SYuval Mintz * which of the bulletin board features have been configured. 16808feecd7SYuval Mintz */ 16908feecd7SYuval Mintz u64 configured_features; 17008feecd7SYuval Mintz #define QED_IOV_CONFIGURED_FEATURES_MASK ((1 << MAC_ADDR_FORCED) | \ 17108feecd7SYuval Mintz (1 << VLAN_ADDR_FORCED)) 17232a47e72SYuval Mintz }; 17332a47e72SYuval Mintz 17432a47e72SYuval Mintz /* This structure is part of qed_hwfn and used only for PFs that have sriov 17532a47e72SYuval Mintz * capability enabled. 17632a47e72SYuval Mintz */ 17732a47e72SYuval Mintz struct qed_pf_iov { 17832a47e72SYuval Mintz struct qed_vf_info vfs_array[MAX_NUM_VFS]; 17932a47e72SYuval Mintz u64 pending_events[QED_VF_ARRAY_LENGTH]; 18032a47e72SYuval Mintz u64 pending_flr[QED_VF_ARRAY_LENGTH]; 18132a47e72SYuval Mintz 18232a47e72SYuval Mintz /* Allocate message address continuosuly and split to each VF */ 18332a47e72SYuval Mintz void *mbx_msg_virt_addr; 18432a47e72SYuval Mintz dma_addr_t mbx_msg_phys_addr; 18532a47e72SYuval Mintz u32 mbx_msg_size; 18632a47e72SYuval Mintz void *mbx_reply_virt_addr; 18732a47e72SYuval Mintz dma_addr_t mbx_reply_phys_addr; 18832a47e72SYuval Mintz u32 mbx_reply_size; 18932a47e72SYuval Mintz void *p_bulletins; 19032a47e72SYuval Mintz dma_addr_t bulletins_phys; 19132a47e72SYuval Mintz u32 bulletins_size; 19232a47e72SYuval Mintz }; 19332a47e72SYuval Mintz 19437bff2b9SYuval Mintz enum qed_iov_wq_flag { 19537bff2b9SYuval Mintz QED_IOV_WQ_MSG_FLAG, 19637bff2b9SYuval Mintz QED_IOV_WQ_SET_UNICAST_FILTER_FLAG, 19737bff2b9SYuval Mintz QED_IOV_WQ_BULLETIN_UPDATE_FLAG, 19837bff2b9SYuval Mintz QED_IOV_WQ_STOP_WQ_FLAG, 19937bff2b9SYuval Mintz QED_IOV_WQ_FLR_FLAG, 20037bff2b9SYuval Mintz }; 20137bff2b9SYuval Mintz 20232a47e72SYuval Mintz #ifdef CONFIG_QED_SRIOV 20332a47e72SYuval Mintz /** 20432a47e72SYuval Mintz * @brief - Given a VF index, return index of next [including that] active VF. 20532a47e72SYuval Mintz * 20632a47e72SYuval Mintz * @param p_hwfn 20732a47e72SYuval Mintz * @param rel_vf_id 20832a47e72SYuval Mintz * 20932a47e72SYuval Mintz * @return MAX_NUM_VFS in case no further active VFs, otherwise index. 21032a47e72SYuval Mintz */ 21132a47e72SYuval Mintz u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn, u16 rel_vf_id); 21232a47e72SYuval Mintz 21332a47e72SYuval Mintz /** 21432a47e72SYuval Mintz * @brief Read sriov related information and allocated resources 21532a47e72SYuval Mintz * reads from configuraiton space, shmem, etc. 21632a47e72SYuval Mintz * 21732a47e72SYuval Mintz * @param p_hwfn 21832a47e72SYuval Mintz * 21932a47e72SYuval Mintz * @return int 22032a47e72SYuval Mintz */ 22132a47e72SYuval Mintz int qed_iov_hw_info(struct qed_hwfn *p_hwfn); 22232a47e72SYuval Mintz 22332a47e72SYuval Mintz /** 2241408cc1fSYuval Mintz * @brief qed_add_tlv - place a given tlv on the tlv buffer at next offset 2251408cc1fSYuval Mintz * 2261408cc1fSYuval Mintz * @param p_hwfn 2271408cc1fSYuval Mintz * @param p_iov 2281408cc1fSYuval Mintz * @param type 2291408cc1fSYuval Mintz * @param length 2301408cc1fSYuval Mintz * 2311408cc1fSYuval Mintz * @return pointer to the newly placed tlv 2321408cc1fSYuval Mintz */ 2331408cc1fSYuval Mintz void *qed_add_tlv(struct qed_hwfn *p_hwfn, u8 **offset, u16 type, u16 length); 2341408cc1fSYuval Mintz 2351408cc1fSYuval Mintz /** 2361408cc1fSYuval Mintz * @brief list the types and lengths of the tlvs on the buffer 2371408cc1fSYuval Mintz * 2381408cc1fSYuval Mintz * @param p_hwfn 2391408cc1fSYuval Mintz * @param tlvs_list 2401408cc1fSYuval Mintz */ 2411408cc1fSYuval Mintz void qed_dp_tlv_list(struct qed_hwfn *p_hwfn, void *tlvs_list); 2421408cc1fSYuval Mintz 2431408cc1fSYuval Mintz /** 24432a47e72SYuval Mintz * @brief qed_iov_alloc - allocate sriov related resources 24532a47e72SYuval Mintz * 24632a47e72SYuval Mintz * @param p_hwfn 24732a47e72SYuval Mintz * 24832a47e72SYuval Mintz * @return int 24932a47e72SYuval Mintz */ 25032a47e72SYuval Mintz int qed_iov_alloc(struct qed_hwfn *p_hwfn); 25132a47e72SYuval Mintz 25232a47e72SYuval Mintz /** 25332a47e72SYuval Mintz * @brief qed_iov_setup - setup sriov related resources 25432a47e72SYuval Mintz * 25532a47e72SYuval Mintz * @param p_hwfn 25632a47e72SYuval Mintz * @param p_ptt 25732a47e72SYuval Mintz */ 25832a47e72SYuval Mintz void qed_iov_setup(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); 25932a47e72SYuval Mintz 26032a47e72SYuval Mintz /** 26132a47e72SYuval Mintz * @brief qed_iov_free - free sriov related resources 26232a47e72SYuval Mintz * 26332a47e72SYuval Mintz * @param p_hwfn 26432a47e72SYuval Mintz */ 26532a47e72SYuval Mintz void qed_iov_free(struct qed_hwfn *p_hwfn); 26632a47e72SYuval Mintz 26732a47e72SYuval Mintz /** 26832a47e72SYuval Mintz * @brief free sriov related memory that was allocated during hw_prepare 26932a47e72SYuval Mintz * 27032a47e72SYuval Mintz * @param cdev 27132a47e72SYuval Mintz */ 27232a47e72SYuval Mintz void qed_iov_free_hw_info(struct qed_dev *cdev); 27337bff2b9SYuval Mintz 27437bff2b9SYuval Mintz /** 27537bff2b9SYuval Mintz * @brief qed_sriov_eqe_event - handle async sriov event arrived on eqe. 27637bff2b9SYuval Mintz * 27737bff2b9SYuval Mintz * @param p_hwfn 27837bff2b9SYuval Mintz * @param opcode 27937bff2b9SYuval Mintz * @param echo 28037bff2b9SYuval Mintz * @param data 28137bff2b9SYuval Mintz */ 28237bff2b9SYuval Mintz int qed_sriov_eqe_event(struct qed_hwfn *p_hwfn, 28337bff2b9SYuval Mintz u8 opcode, __le16 echo, union event_ring_data *data); 28437bff2b9SYuval Mintz 2850b55e27dSYuval Mintz /** 2860b55e27dSYuval Mintz * @brief Mark structs of vfs that have been FLR-ed. 2870b55e27dSYuval Mintz * 2880b55e27dSYuval Mintz * @param p_hwfn 2890b55e27dSYuval Mintz * @param disabled_vfs - bitmask of all VFs on path that were FLRed 2900b55e27dSYuval Mintz * 2910b55e27dSYuval Mintz * @return 1 iff one of the PF's vfs got FLRed. 0 otherwise. 2920b55e27dSYuval Mintz */ 2930b55e27dSYuval Mintz int qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *disabled_vfs); 2940b55e27dSYuval Mintz 295dacd88d6SYuval Mintz /** 296dacd88d6SYuval Mintz * @brief Search extended TLVs in request/reply buffer. 297dacd88d6SYuval Mintz * 298dacd88d6SYuval Mintz * @param p_hwfn 299dacd88d6SYuval Mintz * @param p_tlvs_list - Pointer to tlvs list 300dacd88d6SYuval Mintz * @param req_type - Type of TLV 301dacd88d6SYuval Mintz * 302dacd88d6SYuval Mintz * @return pointer to tlv type if found, otherwise returns NULL. 303dacd88d6SYuval Mintz */ 304dacd88d6SYuval Mintz void *qed_iov_search_list_tlvs(struct qed_hwfn *p_hwfn, 305dacd88d6SYuval Mintz void *p_tlvs_list, u16 req_type); 306dacd88d6SYuval Mintz 30737bff2b9SYuval Mintz void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first); 30837bff2b9SYuval Mintz int qed_iov_wq_start(struct qed_dev *cdev); 30937bff2b9SYuval Mintz 31037bff2b9SYuval Mintz void qed_schedule_iov(struct qed_hwfn *hwfn, enum qed_iov_wq_flag flag); 3111408cc1fSYuval Mintz void qed_vf_start_iov_wq(struct qed_dev *cdev); 3120b55e27dSYuval Mintz int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled); 31336558c3dSYuval Mintz void qed_inform_vf_link_state(struct qed_hwfn *hwfn); 31432a47e72SYuval Mintz #else 31532a47e72SYuval Mintz static inline u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn, 31632a47e72SYuval Mintz u16 rel_vf_id) 31732a47e72SYuval Mintz { 31832a47e72SYuval Mintz return MAX_NUM_VFS; 31932a47e72SYuval Mintz } 32032a47e72SYuval Mintz 32132a47e72SYuval Mintz static inline int qed_iov_hw_info(struct qed_hwfn *p_hwfn) 32232a47e72SYuval Mintz { 32332a47e72SYuval Mintz return 0; 32432a47e72SYuval Mintz } 32532a47e72SYuval Mintz 32632a47e72SYuval Mintz static inline int qed_iov_alloc(struct qed_hwfn *p_hwfn) 32732a47e72SYuval Mintz { 32832a47e72SYuval Mintz return 0; 32932a47e72SYuval Mintz } 33032a47e72SYuval Mintz 33132a47e72SYuval Mintz static inline void qed_iov_setup(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) 33232a47e72SYuval Mintz { 33332a47e72SYuval Mintz } 33432a47e72SYuval Mintz 33532a47e72SYuval Mintz static inline void qed_iov_free(struct qed_hwfn *p_hwfn) 33632a47e72SYuval Mintz { 33732a47e72SYuval Mintz } 33832a47e72SYuval Mintz 33932a47e72SYuval Mintz static inline void qed_iov_free_hw_info(struct qed_dev *cdev) 34032a47e72SYuval Mintz { 34132a47e72SYuval Mintz } 34237bff2b9SYuval Mintz 34337bff2b9SYuval Mintz static inline int qed_sriov_eqe_event(struct qed_hwfn *p_hwfn, 34437bff2b9SYuval Mintz u8 opcode, 34537bff2b9SYuval Mintz __le16 echo, union event_ring_data *data) 34637bff2b9SYuval Mintz { 34737bff2b9SYuval Mintz return -EINVAL; 34837bff2b9SYuval Mintz } 34937bff2b9SYuval Mintz 3500b55e27dSYuval Mintz static inline int qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, 3510b55e27dSYuval Mintz u32 *disabled_vfs) 3520b55e27dSYuval Mintz { 3530b55e27dSYuval Mintz return 0; 3540b55e27dSYuval Mintz } 3550b55e27dSYuval Mintz 35637bff2b9SYuval Mintz static inline void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first) 35737bff2b9SYuval Mintz { 35837bff2b9SYuval Mintz } 35937bff2b9SYuval Mintz 36037bff2b9SYuval Mintz static inline int qed_iov_wq_start(struct qed_dev *cdev) 36137bff2b9SYuval Mintz { 36237bff2b9SYuval Mintz return 0; 36337bff2b9SYuval Mintz } 36437bff2b9SYuval Mintz 36537bff2b9SYuval Mintz static inline void qed_schedule_iov(struct qed_hwfn *hwfn, 36637bff2b9SYuval Mintz enum qed_iov_wq_flag flag) 36737bff2b9SYuval Mintz { 36837bff2b9SYuval Mintz } 3691408cc1fSYuval Mintz 3701408cc1fSYuval Mintz static inline void qed_vf_start_iov_wq(struct qed_dev *cdev) 3711408cc1fSYuval Mintz { 3721408cc1fSYuval Mintz } 3730b55e27dSYuval Mintz 3740b55e27dSYuval Mintz static inline int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled) 3750b55e27dSYuval Mintz { 3760b55e27dSYuval Mintz return 0; 3770b55e27dSYuval Mintz } 37836558c3dSYuval Mintz 37936558c3dSYuval Mintz static inline void qed_inform_vf_link_state(struct qed_hwfn *hwfn) 38036558c3dSYuval Mintz { 38136558c3dSYuval Mintz } 38232a47e72SYuval Mintz #endif 38332a47e72SYuval Mintz 38432a47e72SYuval Mintz #define qed_for_each_vf(_p_hwfn, _i) \ 38532a47e72SYuval Mintz for (_i = qed_iov_get_next_active_vf(_p_hwfn, 0); \ 38632a47e72SYuval Mintz _i < MAX_NUM_VFS; \ 38732a47e72SYuval Mintz _i = qed_iov_get_next_active_vf(_p_hwfn, _i + 1)) 38832a47e72SYuval Mintz 38932a47e72SYuval Mintz #endif 390