132a47e72SYuval Mintz /* QLogic qed NIC Driver 2e8f1cb50SMintz, Yuval * Copyright (c) 2015-2017 QLogic Corporation 332a47e72SYuval Mintz * 4e8f1cb50SMintz, Yuval * This software is available to you under a choice of one of two 5e8f1cb50SMintz, Yuval * licenses. You may choose to be licensed under the terms of the GNU 6e8f1cb50SMintz, Yuval * General Public License (GPL) Version 2, available from the file 7e8f1cb50SMintz, Yuval * COPYING in the main directory of this source tree, or the 8e8f1cb50SMintz, Yuval * OpenIB.org BSD license below: 9e8f1cb50SMintz, Yuval * 10e8f1cb50SMintz, Yuval * Redistribution and use in source and binary forms, with or 11e8f1cb50SMintz, Yuval * without modification, are permitted provided that the following 12e8f1cb50SMintz, Yuval * conditions are met: 13e8f1cb50SMintz, Yuval * 14e8f1cb50SMintz, Yuval * - Redistributions of source code must retain the above 15e8f1cb50SMintz, Yuval * copyright notice, this list of conditions and the following 16e8f1cb50SMintz, Yuval * disclaimer. 17e8f1cb50SMintz, Yuval * 18e8f1cb50SMintz, Yuval * - Redistributions in binary form must reproduce the above 19e8f1cb50SMintz, Yuval * copyright notice, this list of conditions and the following 20e8f1cb50SMintz, Yuval * disclaimer in the documentation and /or other materials 21e8f1cb50SMintz, Yuval * provided with the distribution. 22e8f1cb50SMintz, Yuval * 23e8f1cb50SMintz, Yuval * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24e8f1cb50SMintz, Yuval * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25e8f1cb50SMintz, Yuval * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26e8f1cb50SMintz, Yuval * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27e8f1cb50SMintz, Yuval * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28e8f1cb50SMintz, Yuval * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29e8f1cb50SMintz, Yuval * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30e8f1cb50SMintz, Yuval * SOFTWARE. 3132a47e72SYuval Mintz */ 3232a47e72SYuval Mintz 3332a47e72SYuval Mintz #ifndef _QED_SRIOV_H 3432a47e72SYuval Mintz #define _QED_SRIOV_H 3532a47e72SYuval Mintz #include <linux/types.h> 3632a47e72SYuval Mintz #include "qed_vf.h" 371cf2b1a9SYuval Mintz 381cf2b1a9SYuval Mintz #define QED_ETH_VF_NUM_MAC_FILTERS 1 391cf2b1a9SYuval Mintz #define QED_ETH_VF_NUM_VLAN_FILTERS 2 4032a47e72SYuval Mintz #define QED_VF_ARRAY_LENGTH (3) 4132a47e72SYuval Mintz 4214b84e86SArnd Bergmann #ifdef CONFIG_QED_SRIOV 436da95b52SAlok Prasad #define IS_VF(cdev) ((cdev)->b_is_vf) 446da95b52SAlok Prasad #define IS_PF(cdev) (!((cdev)->b_is_vf)) 456da95b52SAlok Prasad #define IS_PF_SRIOV(p_hwfn) (!!((p_hwfn)->cdev->p_iov_info)) 4632a47e72SYuval Mintz #else 4714b84e86SArnd Bergmann #define IS_VF(cdev) (0) 4814b84e86SArnd Bergmann #define IS_PF(cdev) (1) 4932a47e72SYuval Mintz #define IS_PF_SRIOV(p_hwfn) (0) 5032a47e72SYuval Mintz #endif 5132a47e72SYuval Mintz #define IS_PF_SRIOV_ALLOC(p_hwfn) (!!((p_hwfn)->pf_iov_info)) 5232a47e72SYuval Mintz 531408cc1fSYuval Mintz #define QED_MAX_VF_CHAINS_PER_PF 16 541408cc1fSYuval Mintz 5508feecd7SYuval Mintz #define QED_ETH_MAX_VF_NUM_VLAN_FILTERS \ 5608feecd7SYuval Mintz (MAX_NUM_VFS * QED_ETH_VF_NUM_VLAN_FILTERS) 5708feecd7SYuval Mintz 58dacd88d6SYuval Mintz enum qed_iov_vport_update_flag { 59dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_ACTIVATE, 6017b235c1SYuval Mintz QED_IOV_VP_UPDATE_VLAN_STRIP, 6117b235c1SYuval Mintz QED_IOV_VP_UPDATE_TX_SWITCH, 62dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_MCAST, 63dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_ACCEPT_PARAM, 64dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_RSS, 6517b235c1SYuval Mintz QED_IOV_VP_UPDATE_ACCEPT_ANY_VLAN, 6617b235c1SYuval Mintz QED_IOV_VP_UPDATE_SGE_TPA, 67dacd88d6SYuval Mintz QED_IOV_VP_UPDATE_MAX, 68dacd88d6SYuval Mintz }; 69dacd88d6SYuval Mintz 700b55e27dSYuval Mintz struct qed_public_vf_info { 710b55e27dSYuval Mintz /* These copies will later be reflected in the bulletin board, 720b55e27dSYuval Mintz * but this copy should be newer. 730b55e27dSYuval Mintz */ 74eff16960SYuval Mintz u8 forced_mac[ETH_ALEN]; 7508feecd7SYuval Mintz u16 forced_vlan; 760b55e27dSYuval Mintz u8 mac[ETH_ALEN]; 77733def6aSYuval Mintz 78733def6aSYuval Mintz /* IFLA_VF_LINK_STATE_<X> */ 79733def6aSYuval Mintz int link_state; 80733def6aSYuval Mintz 81733def6aSYuval Mintz /* Currently configured Tx rate in MB/sec. 0 if unconfigured */ 82733def6aSYuval Mintz int tx_rate; 83f990c82cSMintz, Yuval 84f990c82cSMintz, Yuval /* Trusted VFs can configure promiscuous mode. 85f990c82cSMintz, Yuval * Also store shadow promisc configuration if needed. 86f990c82cSMintz, Yuval */ 87f990c82cSMintz, Yuval bool is_trusted_configured; 88f990c82cSMintz, Yuval bool is_trusted_request; 89f990c82cSMintz, Yuval u8 rx_accept_mode; 90f990c82cSMintz, Yuval u8 tx_accept_mode; 910b55e27dSYuval Mintz }; 920b55e27dSYuval Mintz 933da7a37aSMintz, Yuval struct qed_iov_vf_init_params { 943da7a37aSMintz, Yuval u16 rel_vf_id; 953da7a37aSMintz, Yuval 963da7a37aSMintz, Yuval /* Number of requested Queues; Currently, don't support different 973da7a37aSMintz, Yuval * number of Rx/Tx queues. 983da7a37aSMintz, Yuval */ 993da7a37aSMintz, Yuval 1003da7a37aSMintz, Yuval u16 num_queues; 1013da7a37aSMintz, Yuval 1023da7a37aSMintz, Yuval /* Allow the client to choose which qzones to use for Rx/Tx, 1033da7a37aSMintz, Yuval * and which queue_base to use for Tx queues on a per-queue basis. 1043da7a37aSMintz, Yuval * Notice values should be relative to the PF resources. 1053da7a37aSMintz, Yuval */ 1063da7a37aSMintz, Yuval u16 req_rx_queue[QED_MAX_VF_CHAINS_PER_PF]; 1073da7a37aSMintz, Yuval u16 req_tx_queue[QED_MAX_VF_CHAINS_PER_PF]; 1083da7a37aSMintz, Yuval }; 1093da7a37aSMintz, Yuval 11032a47e72SYuval Mintz /* This struct is part of qed_dev and contains data relevant to all hwfns; 11132a47e72SYuval Mintz * Initialized only if SR-IOV cpabability is exposed in PCIe config space. 11232a47e72SYuval Mintz */ 11332a47e72SYuval Mintz struct qed_hw_sriov_info { 11432a47e72SYuval Mintz int pos; /* capability position */ 11532a47e72SYuval Mintz int nres; /* number of resources */ 11632a47e72SYuval Mintz u32 cap; /* SR-IOV Capabilities */ 11732a47e72SYuval Mintz u16 ctrl; /* SR-IOV Control */ 11832a47e72SYuval Mintz u16 total_vfs; /* total VFs associated with the PF */ 11932a47e72SYuval Mintz u16 num_vfs; /* number of vfs that have been started */ 12032a47e72SYuval Mintz u16 initial_vfs; /* initial VFs associated with the PF */ 12132a47e72SYuval Mintz u16 nr_virtfn; /* number of VFs available */ 12232a47e72SYuval Mintz u16 offset; /* first VF Routing ID offset */ 12332a47e72SYuval Mintz u16 stride; /* following VF stride */ 12432a47e72SYuval Mintz u16 vf_device_id; /* VF device id */ 12532a47e72SYuval Mintz u32 pgsz; /* page size for BAR alignment */ 12632a47e72SYuval Mintz u8 link; /* Function Dependency Link */ 12732a47e72SYuval Mintz 12832a47e72SYuval Mintz u32 first_vf_in_pf; 12932a47e72SYuval Mintz }; 13032a47e72SYuval Mintz 13132a47e72SYuval Mintz /* This mailbox is maintained per VF in its PF contains all information 13232a47e72SYuval Mintz * required for sending / receiving a message. 13332a47e72SYuval Mintz */ 13432a47e72SYuval Mintz struct qed_iov_vf_mbx { 13532a47e72SYuval Mintz union vfpf_tlvs *req_virt; 13632a47e72SYuval Mintz dma_addr_t req_phys; 13732a47e72SYuval Mintz union pfvf_tlvs *reply_virt; 13832a47e72SYuval Mintz dma_addr_t reply_phys; 13937bff2b9SYuval Mintz 14037bff2b9SYuval Mintz /* Address in VF where a pending message is located */ 14137bff2b9SYuval Mintz dma_addr_t pending_req; 14237bff2b9SYuval Mintz 143fd3c615aSMintz, Yuval /* Message from VF awaits handling */ 144fd3c615aSMintz, Yuval bool b_pending_msg; 145fd3c615aSMintz, Yuval 14637bff2b9SYuval Mintz u8 *offset; 14737bff2b9SYuval Mintz 14837bff2b9SYuval Mintz /* saved VF request header */ 14937bff2b9SYuval Mintz struct vfpf_first_tlv first_tlv; 15032a47e72SYuval Mintz }; 15132a47e72SYuval Mintz 152bbe3f233SMintz, Yuval #define QED_IOV_LEGACY_QID_RX (0) 153bbe3f233SMintz, Yuval #define QED_IOV_LEGACY_QID_TX (1) 15408bc8f15SMintz, Yuval #define QED_IOV_QID_INVALID (0xFE) 155bbe3f233SMintz, Yuval 156007bc371SMintz, Yuval struct qed_vf_queue_cid { 157007bc371SMintz, Yuval bool b_is_tx; 158007bc371SMintz, Yuval struct qed_queue_cid *p_cid; 159007bc371SMintz, Yuval }; 160007bc371SMintz, Yuval 161007bc371SMintz, Yuval /* Describes a qzone associated with the VF */ 162007bc371SMintz, Yuval struct qed_vf_queue { 1631408cc1fSYuval Mintz u16 fw_rx_qid; 1641408cc1fSYuval Mintz u16 fw_tx_qid; 165007bc371SMintz, Yuval 166007bc371SMintz, Yuval struct qed_vf_queue_cid cids[MAX_QUEUES_PER_QZONE]; 1671408cc1fSYuval Mintz }; 1681408cc1fSYuval Mintz 16932a47e72SYuval Mintz enum vf_state { 1701408cc1fSYuval Mintz VF_FREE = 0, /* VF ready to be acquired holds no resc */ 1711408cc1fSYuval Mintz VF_ACQUIRED, /* VF, acquired, but not initalized */ 172dacd88d6SYuval Mintz VF_ENABLED, /* VF, Enabled */ 1730b55e27dSYuval Mintz VF_RESET, /* VF, FLR'd, pending cleanup */ 17432a47e72SYuval Mintz VF_STOPPED /* VF, Stopped */ 17532a47e72SYuval Mintz }; 17632a47e72SYuval Mintz 17708feecd7SYuval Mintz struct qed_vf_vlan_shadow { 17808feecd7SYuval Mintz bool used; 17908feecd7SYuval Mintz u16 vid; 18008feecd7SYuval Mintz }; 18108feecd7SYuval Mintz 18208feecd7SYuval Mintz struct qed_vf_shadow_config { 18308feecd7SYuval Mintz /* Shadow copy of all guest vlans */ 18408feecd7SYuval Mintz struct qed_vf_vlan_shadow vlans[QED_ETH_VF_NUM_VLAN_FILTERS + 1]; 18508feecd7SYuval Mintz 1868246d0b4SYuval Mintz /* Shadow copy of all configured MACs; Empty if forcing MACs */ 1878246d0b4SYuval Mintz u8 macs[QED_ETH_VF_NUM_MAC_FILTERS][ETH_ALEN]; 18808feecd7SYuval Mintz u8 inner_vlan_removal; 18908feecd7SYuval Mintz }; 19008feecd7SYuval Mintz 19132a47e72SYuval Mintz /* PFs maintain an array of this structure, per VF */ 19232a47e72SYuval Mintz struct qed_vf_info { 19332a47e72SYuval Mintz struct qed_iov_vf_mbx vf_mbx; 19432a47e72SYuval Mintz enum vf_state state; 19532a47e72SYuval Mintz bool b_init; 1967eff82b0SYuval Mintz bool b_malicious; 1970b55e27dSYuval Mintz u8 to_disable; 19832a47e72SYuval Mintz 19932a47e72SYuval Mintz struct qed_bulletin bulletin; 20032a47e72SYuval Mintz dma_addr_t vf_bulletin; 20132a47e72SYuval Mintz 2021fe614d1SYuval Mintz /* PF saves a copy of the last VF acquire message */ 2031fe614d1SYuval Mintz struct vfpf_acquire_tlv acquire; 2041fe614d1SYuval Mintz 20532a47e72SYuval Mintz u32 concrete_fid; 20632a47e72SYuval Mintz u16 opaque_fid; 207dacd88d6SYuval Mintz u16 mtu; 20832a47e72SYuval Mintz 20932a47e72SYuval Mintz u8 vport_id; 21032a47e72SYuval Mintz u8 relative_vf_id; 21132a47e72SYuval Mintz u8 abs_vf_id; 21232a47e72SYuval Mintz #define QED_VF_ABS_ID(p_hwfn, p_vf) (QED_PATH_ID(p_hwfn) ? \ 21332a47e72SYuval Mintz (p_vf)->abs_vf_id + MAX_NUM_VFS_BB : \ 21432a47e72SYuval Mintz (p_vf)->abs_vf_id) 2151408cc1fSYuval Mintz 216dacd88d6SYuval Mintz u8 vport_instance; 2171408cc1fSYuval Mintz u8 num_rxqs; 2181408cc1fSYuval Mintz u8 num_txqs; 2191408cc1fSYuval Mintz 220bf5a94bfSRahul Verma u16 rx_coal; 221bf5a94bfSRahul Verma u16 tx_coal; 222bf5a94bfSRahul Verma 2231408cc1fSYuval Mintz u8 num_sbs; 2241408cc1fSYuval Mintz 2251408cc1fSYuval Mintz u8 num_mac_filters; 2261408cc1fSYuval Mintz u8 num_vlan_filters; 227007bc371SMintz, Yuval 228007bc371SMintz, Yuval struct qed_vf_queue vf_queues[QED_MAX_VF_CHAINS_PER_PF]; 2291408cc1fSYuval Mintz u16 igu_sbs[QED_MAX_VF_CHAINS_PER_PF]; 230dacd88d6SYuval Mintz u8 num_active_rxqs; 2310b55e27dSYuval Mintz struct qed_public_vf_info p_vf_info; 2326ddc7608SYuval Mintz bool spoof_chk; 2336ddc7608SYuval Mintz bool req_spoofchk_val; 23408feecd7SYuval Mintz 23508feecd7SYuval Mintz /* Stores the configuration requested by VF */ 23608feecd7SYuval Mintz struct qed_vf_shadow_config shadow_config; 23708feecd7SYuval Mintz 23808feecd7SYuval Mintz /* A bitfield using bulletin's valid-map bits, used to indicate 23908feecd7SYuval Mintz * which of the bulletin board features have been configured. 24008feecd7SYuval Mintz */ 24108feecd7SYuval Mintz u64 configured_features; 24208feecd7SYuval Mintz #define QED_IOV_CONFIGURED_FEATURES_MASK ((1 << MAC_ADDR_FORCED) | \ 24308feecd7SYuval Mintz (1 << VLAN_ADDR_FORCED)) 24432a47e72SYuval Mintz }; 24532a47e72SYuval Mintz 24632a47e72SYuval Mintz /* This structure is part of qed_hwfn and used only for PFs that have sriov 24732a47e72SYuval Mintz * capability enabled. 24832a47e72SYuval Mintz */ 24932a47e72SYuval Mintz struct qed_pf_iov { 25032a47e72SYuval Mintz struct qed_vf_info vfs_array[MAX_NUM_VFS]; 25132a47e72SYuval Mintz u64 pending_flr[QED_VF_ARRAY_LENGTH]; 25232a47e72SYuval Mintz 25332a47e72SYuval Mintz /* Allocate message address continuosuly and split to each VF */ 25432a47e72SYuval Mintz void *mbx_msg_virt_addr; 25532a47e72SYuval Mintz dma_addr_t mbx_msg_phys_addr; 25632a47e72SYuval Mintz u32 mbx_msg_size; 25732a47e72SYuval Mintz void *mbx_reply_virt_addr; 25832a47e72SYuval Mintz dma_addr_t mbx_reply_phys_addr; 25932a47e72SYuval Mintz u32 mbx_reply_size; 26032a47e72SYuval Mintz void *p_bulletins; 26132a47e72SYuval Mintz dma_addr_t bulletins_phys; 26232a47e72SYuval Mintz u32 bulletins_size; 26332a47e72SYuval Mintz }; 26432a47e72SYuval Mintz 26537bff2b9SYuval Mintz enum qed_iov_wq_flag { 26637bff2b9SYuval Mintz QED_IOV_WQ_MSG_FLAG, 26737bff2b9SYuval Mintz QED_IOV_WQ_SET_UNICAST_FILTER_FLAG, 26837bff2b9SYuval Mintz QED_IOV_WQ_BULLETIN_UPDATE_FLAG, 26937bff2b9SYuval Mintz QED_IOV_WQ_STOP_WQ_FLAG, 27037bff2b9SYuval Mintz QED_IOV_WQ_FLR_FLAG, 271f990c82cSMintz, Yuval QED_IOV_WQ_TRUST_FLAG, 27265ed2ffdSMintz, Yuval QED_IOV_WQ_VF_FORCE_LINK_QUERY_FLAG, 27337bff2b9SYuval Mintz }; 27437bff2b9SYuval Mintz 27532a47e72SYuval Mintz #ifdef CONFIG_QED_SRIOV 27632a47e72SYuval Mintz /** 277da090917STomer Tayar * @brief Check if given VF ID @vfid is valid 278da090917STomer Tayar * w.r.t. @b_enabled_only value 279da090917STomer Tayar * if b_enabled_only = true - only enabled VF id is valid 280da090917STomer Tayar * else any VF id less than max_vfs is valid 281da090917STomer Tayar * 282da090917STomer Tayar * @param p_hwfn 283da090917STomer Tayar * @param rel_vf_id - Relative VF ID 284da090917STomer Tayar * @param b_enabled_only - consider only enabled VF 285da090917STomer Tayar * @param b_non_malicious - true iff we want to validate vf isn't malicious. 286da090917STomer Tayar * 287da090917STomer Tayar * @return bool - true for valid VF ID 288da090917STomer Tayar */ 289da090917STomer Tayar bool qed_iov_is_valid_vfid(struct qed_hwfn *p_hwfn, 290da090917STomer Tayar int rel_vf_id, 291da090917STomer Tayar bool b_enabled_only, bool b_non_malicious); 292da090917STomer Tayar 293da090917STomer Tayar /** 29432a47e72SYuval Mintz * @brief - Given a VF index, return index of next [including that] active VF. 29532a47e72SYuval Mintz * 29632a47e72SYuval Mintz * @param p_hwfn 29732a47e72SYuval Mintz * @param rel_vf_id 29832a47e72SYuval Mintz * 29932a47e72SYuval Mintz * @return MAX_NUM_VFS in case no further active VFs, otherwise index. 30032a47e72SYuval Mintz */ 30132a47e72SYuval Mintz u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn, u16 rel_vf_id); 30232a47e72SYuval Mintz 30397379f15SChopra, Manish void qed_iov_bulletin_set_udp_ports(struct qed_hwfn *p_hwfn, 30497379f15SChopra, Manish int vfid, u16 vxlan_port, u16 geneve_port); 30597379f15SChopra, Manish 30632a47e72SYuval Mintz /** 30732a47e72SYuval Mintz * @brief Read sriov related information and allocated resources 308c199ce4fSGeert Uytterhoeven * reads from configuration space, shmem, etc. 30932a47e72SYuval Mintz * 31032a47e72SYuval Mintz * @param p_hwfn 31132a47e72SYuval Mintz * 31232a47e72SYuval Mintz * @return int 31332a47e72SYuval Mintz */ 31432a47e72SYuval Mintz int qed_iov_hw_info(struct qed_hwfn *p_hwfn); 31532a47e72SYuval Mintz 31632a47e72SYuval Mintz /** 3171408cc1fSYuval Mintz * @brief qed_add_tlv - place a given tlv on the tlv buffer at next offset 3181408cc1fSYuval Mintz * 3191408cc1fSYuval Mintz * @param p_hwfn 3201408cc1fSYuval Mintz * @param p_iov 3211408cc1fSYuval Mintz * @param type 3221408cc1fSYuval Mintz * @param length 3231408cc1fSYuval Mintz * 3241408cc1fSYuval Mintz * @return pointer to the newly placed tlv 3251408cc1fSYuval Mintz */ 3261408cc1fSYuval Mintz void *qed_add_tlv(struct qed_hwfn *p_hwfn, u8 **offset, u16 type, u16 length); 3271408cc1fSYuval Mintz 3281408cc1fSYuval Mintz /** 3291408cc1fSYuval Mintz * @brief list the types and lengths of the tlvs on the buffer 3301408cc1fSYuval Mintz * 3311408cc1fSYuval Mintz * @param p_hwfn 3321408cc1fSYuval Mintz * @param tlvs_list 3331408cc1fSYuval Mintz */ 3341408cc1fSYuval Mintz void qed_dp_tlv_list(struct qed_hwfn *p_hwfn, void *tlvs_list); 3351408cc1fSYuval Mintz 3361408cc1fSYuval Mintz /** 33732a47e72SYuval Mintz * @brief qed_iov_alloc - allocate sriov related resources 33832a47e72SYuval Mintz * 33932a47e72SYuval Mintz * @param p_hwfn 34032a47e72SYuval Mintz * 34132a47e72SYuval Mintz * @return int 34232a47e72SYuval Mintz */ 34332a47e72SYuval Mintz int qed_iov_alloc(struct qed_hwfn *p_hwfn); 34432a47e72SYuval Mintz 34532a47e72SYuval Mintz /** 34632a47e72SYuval Mintz * @brief qed_iov_setup - setup sriov related resources 34732a47e72SYuval Mintz * 34832a47e72SYuval Mintz * @param p_hwfn 34932a47e72SYuval Mintz */ 3501ee240e3SMintz, Yuval void qed_iov_setup(struct qed_hwfn *p_hwfn); 35132a47e72SYuval Mintz 35232a47e72SYuval Mintz /** 35332a47e72SYuval Mintz * @brief qed_iov_free - free sriov related resources 35432a47e72SYuval Mintz * 35532a47e72SYuval Mintz * @param p_hwfn 35632a47e72SYuval Mintz */ 35732a47e72SYuval Mintz void qed_iov_free(struct qed_hwfn *p_hwfn); 35832a47e72SYuval Mintz 35932a47e72SYuval Mintz /** 36032a47e72SYuval Mintz * @brief free sriov related memory that was allocated during hw_prepare 36132a47e72SYuval Mintz * 36232a47e72SYuval Mintz * @param cdev 36332a47e72SYuval Mintz */ 36432a47e72SYuval Mintz void qed_iov_free_hw_info(struct qed_dev *cdev); 36537bff2b9SYuval Mintz 36637bff2b9SYuval Mintz /** 3670b55e27dSYuval Mintz * @brief Mark structs of vfs that have been FLR-ed. 3680b55e27dSYuval Mintz * 3690b55e27dSYuval Mintz * @param p_hwfn 3700b55e27dSYuval Mintz * @param disabled_vfs - bitmask of all VFs on path that were FLRed 3710b55e27dSYuval Mintz * 372cccf6f5cSMintz, Yuval * @return true iff one of the PF's vfs got FLRed. false otherwise. 3730b55e27dSYuval Mintz */ 374cccf6f5cSMintz, Yuval bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *disabled_vfs); 3750b55e27dSYuval Mintz 376dacd88d6SYuval Mintz /** 377dacd88d6SYuval Mintz * @brief Search extended TLVs in request/reply buffer. 378dacd88d6SYuval Mintz * 379dacd88d6SYuval Mintz * @param p_hwfn 380dacd88d6SYuval Mintz * @param p_tlvs_list - Pointer to tlvs list 381dacd88d6SYuval Mintz * @param req_type - Type of TLV 382dacd88d6SYuval Mintz * 383dacd88d6SYuval Mintz * @return pointer to tlv type if found, otherwise returns NULL. 384dacd88d6SYuval Mintz */ 385dacd88d6SYuval Mintz void *qed_iov_search_list_tlvs(struct qed_hwfn *p_hwfn, 386dacd88d6SYuval Mintz void *p_tlvs_list, u16 req_type); 387dacd88d6SYuval Mintz 38837bff2b9SYuval Mintz void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first); 38937bff2b9SYuval Mintz int qed_iov_wq_start(struct qed_dev *cdev); 39037bff2b9SYuval Mintz 39137bff2b9SYuval Mintz void qed_schedule_iov(struct qed_hwfn *hwfn, enum qed_iov_wq_flag flag); 3921408cc1fSYuval Mintz void qed_vf_start_iov_wq(struct qed_dev *cdev); 3930b55e27dSYuval Mintz int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled); 39436558c3dSYuval Mintz void qed_inform_vf_link_state(struct qed_hwfn *hwfn); 39532a47e72SYuval Mintz #else 396da090917STomer Tayar static inline bool 397da090917STomer Tayar qed_iov_is_valid_vfid(struct qed_hwfn *p_hwfn, 398da090917STomer Tayar int rel_vf_id, bool b_enabled_only, bool b_non_malicious) 399da090917STomer Tayar { 400da090917STomer Tayar return false; 401da090917STomer Tayar } 402da090917STomer Tayar 40332a47e72SYuval Mintz static inline u16 qed_iov_get_next_active_vf(struct qed_hwfn *p_hwfn, 40432a47e72SYuval Mintz u16 rel_vf_id) 40532a47e72SYuval Mintz { 40632a47e72SYuval Mintz return MAX_NUM_VFS; 40732a47e72SYuval Mintz } 40832a47e72SYuval Mintz 40997379f15SChopra, Manish static inline void 41097379f15SChopra, Manish qed_iov_bulletin_set_udp_ports(struct qed_hwfn *p_hwfn, int vfid, 41197379f15SChopra, Manish u16 vxlan_port, u16 geneve_port) 41297379f15SChopra, Manish { 41397379f15SChopra, Manish } 41497379f15SChopra, Manish 41532a47e72SYuval Mintz static inline int qed_iov_hw_info(struct qed_hwfn *p_hwfn) 41632a47e72SYuval Mintz { 41732a47e72SYuval Mintz return 0; 41832a47e72SYuval Mintz } 41932a47e72SYuval Mintz 42032a47e72SYuval Mintz static inline int qed_iov_alloc(struct qed_hwfn *p_hwfn) 42132a47e72SYuval Mintz { 42232a47e72SYuval Mintz return 0; 42332a47e72SYuval Mintz } 42432a47e72SYuval Mintz 4251ee240e3SMintz, Yuval static inline void qed_iov_setup(struct qed_hwfn *p_hwfn) 42632a47e72SYuval Mintz { 42732a47e72SYuval Mintz } 42832a47e72SYuval Mintz 42932a47e72SYuval Mintz static inline void qed_iov_free(struct qed_hwfn *p_hwfn) 43032a47e72SYuval Mintz { 43132a47e72SYuval Mintz } 43232a47e72SYuval Mintz 43332a47e72SYuval Mintz static inline void qed_iov_free_hw_info(struct qed_dev *cdev) 43432a47e72SYuval Mintz { 43532a47e72SYuval Mintz } 43637bff2b9SYuval Mintz 437cccf6f5cSMintz, Yuval static inline bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, 4380b55e27dSYuval Mintz u32 *disabled_vfs) 4390b55e27dSYuval Mintz { 440cccf6f5cSMintz, Yuval return false; 4410b55e27dSYuval Mintz } 4420b55e27dSYuval Mintz 44337bff2b9SYuval Mintz static inline void qed_iov_wq_stop(struct qed_dev *cdev, bool schedule_first) 44437bff2b9SYuval Mintz { 44537bff2b9SYuval Mintz } 44637bff2b9SYuval Mintz 44737bff2b9SYuval Mintz static inline int qed_iov_wq_start(struct qed_dev *cdev) 44837bff2b9SYuval Mintz { 44937bff2b9SYuval Mintz return 0; 45037bff2b9SYuval Mintz } 45137bff2b9SYuval Mintz 45237bff2b9SYuval Mintz static inline void qed_schedule_iov(struct qed_hwfn *hwfn, 45337bff2b9SYuval Mintz enum qed_iov_wq_flag flag) 45437bff2b9SYuval Mintz { 45537bff2b9SYuval Mintz } 4561408cc1fSYuval Mintz 4571408cc1fSYuval Mintz static inline void qed_vf_start_iov_wq(struct qed_dev *cdev) 4581408cc1fSYuval Mintz { 4591408cc1fSYuval Mintz } 4600b55e27dSYuval Mintz 4610b55e27dSYuval Mintz static inline int qed_sriov_disable(struct qed_dev *cdev, bool pci_enabled) 4620b55e27dSYuval Mintz { 4630b55e27dSYuval Mintz return 0; 4640b55e27dSYuval Mintz } 46536558c3dSYuval Mintz 46636558c3dSYuval Mintz static inline void qed_inform_vf_link_state(struct qed_hwfn *hwfn) 46736558c3dSYuval Mintz { 46836558c3dSYuval Mintz } 46932a47e72SYuval Mintz #endif 47032a47e72SYuval Mintz 47132a47e72SYuval Mintz #define qed_for_each_vf(_p_hwfn, _i) \ 47232a47e72SYuval Mintz for (_i = qed_iov_get_next_active_vf(_p_hwfn, 0); \ 47332a47e72SYuval Mintz _i < MAX_NUM_VFS; \ 47432a47e72SYuval Mintz _i = qed_iov_get_next_active_vf(_p_hwfn, _i + 1)) 47532a47e72SYuval Mintz 47632a47e72SYuval Mintz #endif 477