1316485Sdavidcs/* 2316485Sdavidcs * Copyright (c) 2017-2018 Cavium, Inc. 3316485Sdavidcs * All rights reserved. 4316485Sdavidcs * 5316485Sdavidcs * Redistribution and use in source and binary forms, with or without 6316485Sdavidcs * modification, are permitted provided that the following conditions 7316485Sdavidcs * are met: 8316485Sdavidcs * 9316485Sdavidcs * 1. Redistributions of source code must retain the above copyright 10316485Sdavidcs * notice, this list of conditions and the following disclaimer. 11316485Sdavidcs * 2. Redistributions in binary form must reproduce the above copyright 12316485Sdavidcs * notice, this list of conditions and the following disclaimer in the 13316485Sdavidcs * documentation and/or other materials provided with the distribution. 14316485Sdavidcs * 15316485Sdavidcs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16316485Sdavidcs * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17316485Sdavidcs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18316485Sdavidcs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19316485Sdavidcs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20316485Sdavidcs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21316485Sdavidcs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22316485Sdavidcs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23316485Sdavidcs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24316485Sdavidcs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25316485Sdavidcs * POSSIBILITY OF SUCH DAMAGE. 26316485Sdavidcs * 27316485Sdavidcs * $FreeBSD: stable/11/sys/dev/qlnx/qlnxe/ecore_iov_api.h 337517 2018-08-09 01:17:35Z davidcs $ 28316485Sdavidcs * 29316485Sdavidcs */ 30316485Sdavidcs 31316485Sdavidcs#ifndef __ECORE_SRIOV_API_H__ 32316485Sdavidcs#define __ECORE_SRIOV_API_H__ 33316485Sdavidcs 34316485Sdavidcs#include "common_hsi.h" 35316485Sdavidcs#include "ecore_status.h" 36316485Sdavidcs 37316485Sdavidcs#define ECORE_ETH_VF_NUM_MAC_FILTERS 1 38316485Sdavidcs#define ECORE_ETH_VF_NUM_VLAN_FILTERS 2 39316485Sdavidcs#define ECORE_VF_ARRAY_LENGTH (3) 40316485Sdavidcs 41316485Sdavidcs#define IS_VF(p_dev) ((p_dev)->b_is_vf) 42316485Sdavidcs#define IS_PF(p_dev) (!((p_dev)->b_is_vf)) 43316485Sdavidcs#ifdef CONFIG_ECORE_SRIOV 44316485Sdavidcs#define IS_PF_SRIOV(p_hwfn) (!!((p_hwfn)->p_dev->p_iov_info)) 45316485Sdavidcs#else 46316485Sdavidcs#define IS_PF_SRIOV(p_hwfn) (0) 47316485Sdavidcs#endif 48316485Sdavidcs#define IS_PF_SRIOV_ALLOC(p_hwfn) (!!((p_hwfn)->pf_iov_info)) 49316485Sdavidcs#define IS_PF_PDA(p_hwfn) 0 /* @@TBD Michalk */ 50316485Sdavidcs 51316485Sdavidcs/* @@@ TBD MichalK - what should this number be*/ 52316485Sdavidcs#define ECORE_MAX_VF_CHAINS_PER_PF 16 53316485Sdavidcs 54316485Sdavidcs/* vport update extended feature tlvs flags */ 55316485Sdavidcsenum ecore_iov_vport_update_flag { 56316485Sdavidcs ECORE_IOV_VP_UPDATE_ACTIVATE = 0, 57316485Sdavidcs ECORE_IOV_VP_UPDATE_VLAN_STRIP = 1, 58316485Sdavidcs ECORE_IOV_VP_UPDATE_TX_SWITCH = 2, 59316485Sdavidcs ECORE_IOV_VP_UPDATE_MCAST = 3, 60316485Sdavidcs ECORE_IOV_VP_UPDATE_ACCEPT_PARAM = 4, 61316485Sdavidcs ECORE_IOV_VP_UPDATE_RSS = 5, 62316485Sdavidcs ECORE_IOV_VP_UPDATE_ACCEPT_ANY_VLAN = 6, 63316485Sdavidcs ECORE_IOV_VP_UPDATE_SGE_TPA = 7, 64316485Sdavidcs ECORE_IOV_VP_UPDATE_MAX = 8, 65316485Sdavidcs}; 66316485Sdavidcs 67316485Sdavidcs/*PF to VF STATUS is part of vfpf-channel API 68316485Sdavidcsand must be forward compatible */ 69316485Sdavidcsenum ecore_iov_pf_to_vf_status { 70316485Sdavidcs PFVF_STATUS_WAITING = 0, 71316485Sdavidcs PFVF_STATUS_SUCCESS, 72316485Sdavidcs PFVF_STATUS_FAILURE, 73316485Sdavidcs PFVF_STATUS_NOT_SUPPORTED, 74316485Sdavidcs PFVF_STATUS_NO_RESOURCE, 75316485Sdavidcs PFVF_STATUS_FORCED, 76316485Sdavidcs PFVF_STATUS_MALICIOUS, 77316485Sdavidcs}; 78316485Sdavidcs 79316485Sdavidcsstruct ecore_mcp_link_params; 80316485Sdavidcsstruct ecore_mcp_link_state; 81316485Sdavidcsstruct ecore_mcp_link_capabilities; 82316485Sdavidcs 83316485Sdavidcs/* These defines are used by the hw-channel; should never change order */ 84316485Sdavidcs#define VFPF_ACQUIRE_OS_LINUX (0) 85316485Sdavidcs#define VFPF_ACQUIRE_OS_WINDOWS (1) 86316485Sdavidcs#define VFPF_ACQUIRE_OS_ESX (2) 87316485Sdavidcs#define VFPF_ACQUIRE_OS_SOLARIS (3) 88316485Sdavidcs#define VFPF_ACQUIRE_OS_LINUX_USERSPACE (4) 89337517Sdavidcs#define VFPF_ACQUIRE_OS_FREEBSD (5) 90316485Sdavidcs 91316485Sdavidcsstruct ecore_vf_acquire_sw_info { 92316485Sdavidcs u32 driver_version; 93316485Sdavidcs u8 os_type; 94316485Sdavidcs}; 95316485Sdavidcs 96316485Sdavidcsstruct ecore_public_vf_info { 97316485Sdavidcs /* These copies will later be reflected in the bulletin board, 98316485Sdavidcs * but this copy should be newer. 99316485Sdavidcs */ 100316485Sdavidcs u8 forced_mac[ETH_ALEN]; 101316485Sdavidcs u16 forced_vlan; 102316485Sdavidcs}; 103316485Sdavidcs 104316485Sdavidcsstruct ecore_iov_vf_init_params { 105316485Sdavidcs u16 rel_vf_id; 106316485Sdavidcs 107316485Sdavidcs /* Number of requested Queues; Currently, don't support different 108316485Sdavidcs * number of Rx/Tx queues. 109316485Sdavidcs */ 110316485Sdavidcs /* TODO - remove this limitation */ 111316485Sdavidcs u16 num_queues; 112316485Sdavidcs 113316485Sdavidcs /* Allow the client to choose which qzones to use for Rx/Tx, 114316485Sdavidcs * and which queue_base to use for Tx queues on a per-queue basis. 115316485Sdavidcs * Notice values should be relative to the PF resources. 116316485Sdavidcs */ 117316485Sdavidcs u16 req_rx_queue[ECORE_MAX_VF_CHAINS_PER_PF]; 118316485Sdavidcs u16 req_tx_queue[ECORE_MAX_VF_CHAINS_PER_PF]; 119316485Sdavidcs 120316485Sdavidcs u8 vport_id; 121316485Sdavidcs 122316485Sdavidcs /* Should be set in case RSS is going to be used for VF */ 123316485Sdavidcs u8 rss_eng_id; 124316485Sdavidcs}; 125316485Sdavidcs 126316485Sdavidcs#ifdef CONFIG_ECORE_SW_CHANNEL 127316485Sdavidcs/* This is SW channel related only... */ 128316485Sdavidcsenum mbx_state { 129316485Sdavidcs VF_PF_UNKNOWN_STATE = 0, 130316485Sdavidcs VF_PF_WAIT_FOR_START_REQUEST = 1, 131316485Sdavidcs VF_PF_WAIT_FOR_NEXT_CHUNK_OF_REQUEST = 2, 132316485Sdavidcs VF_PF_REQUEST_IN_PROCESSING = 3, 133316485Sdavidcs VF_PF_RESPONSE_READY = 4, 134316485Sdavidcs}; 135316485Sdavidcs 136316485Sdavidcsstruct ecore_iov_sw_mbx { 137316485Sdavidcs enum mbx_state mbx_state; 138316485Sdavidcs 139316485Sdavidcs u32 request_size; 140316485Sdavidcs u32 request_offset; 141316485Sdavidcs 142316485Sdavidcs u32 response_size; 143316485Sdavidcs u32 response_offset; 144316485Sdavidcs}; 145316485Sdavidcs 146316485Sdavidcs/** 147316485Sdavidcs * @brief Get the vf sw mailbox params 148316485Sdavidcs * 149316485Sdavidcs * @param p_hwfn 150316485Sdavidcs * @param rel_vf_id 151316485Sdavidcs * 152316485Sdavidcs * @return struct ecore_iov_sw_mbx* 153316485Sdavidcs */ 154316485Sdavidcsstruct ecore_iov_sw_mbx* 155316485Sdavidcsecore_iov_get_vf_sw_mbx(struct ecore_hwfn *p_hwfn, 156316485Sdavidcs u16 rel_vf_id); 157316485Sdavidcs#endif 158316485Sdavidcs 159316485Sdavidcs/* This struct is part of ecore_dev and contains data relevant to all hwfns; 160316485Sdavidcs * Initialized only if SR-IOV cpabability is exposed in PCIe config space. 161316485Sdavidcs */ 162316485Sdavidcsstruct ecore_hw_sriov_info { 163316485Sdavidcs /* standard SRIOV capability fields, mostly for debugging */ 164316485Sdavidcs int pos; /* capability position */ 165316485Sdavidcs int nres; /* number of resources */ 166316485Sdavidcs u32 cap; /* SR-IOV Capabilities */ 167316485Sdavidcs u16 ctrl; /* SR-IOV Control */ 168316485Sdavidcs u16 total_vfs; /* total VFs associated with the PF */ 169316485Sdavidcs u16 num_vfs; /* number of vfs that have been started */ 170316485Sdavidcs u16 initial_vfs; /* initial VFs associated with the PF */ 171316485Sdavidcs u16 nr_virtfn; /* number of VFs available */ 172316485Sdavidcs u16 offset; /* first VF Routing ID offset */ 173316485Sdavidcs u16 stride; /* following VF stride */ 174316485Sdavidcs u16 vf_device_id; /* VF device id */ 175316485Sdavidcs u32 pgsz; /* page size for BAR alignment */ 176316485Sdavidcs u8 link; /* Function Dependency Link */ 177316485Sdavidcs 178316485Sdavidcs u32 first_vf_in_pf; 179316485Sdavidcs}; 180316485Sdavidcs 181316485Sdavidcs#ifdef CONFIG_ECORE_SRIOV 182320164Sdavidcs#ifndef LINUX_REMOVE 183316485Sdavidcs/** 184316485Sdavidcs * @brief mark/clear all VFs before/after an incoming PCIe sriov 185316485Sdavidcs * disable. 186316485Sdavidcs * 187316485Sdavidcs * @param p_dev 188316485Sdavidcs * @param to_disable 189316485Sdavidcs */ 190316485Sdavidcsvoid ecore_iov_set_vfs_to_disable(struct ecore_dev *p_dev, 191316485Sdavidcs u8 to_disable); 192316485Sdavidcs 193316485Sdavidcs/** 194316485Sdavidcs * @brief mark/clear chosen VF before/after an incoming PCIe 195316485Sdavidcs * sriov disable. 196316485Sdavidcs * 197316485Sdavidcs * @param p_dev 198316485Sdavidcs * @param rel_vf_id 199316485Sdavidcs * @param to_disable 200316485Sdavidcs */ 201316485Sdavidcsvoid ecore_iov_set_vf_to_disable(struct ecore_dev *p_dev, 202316485Sdavidcs u16 rel_vf_id, 203316485Sdavidcs u8 to_disable); 204316485Sdavidcs 205316485Sdavidcs/** 206316485Sdavidcs * @brief ecore_iov_init_hw_for_vf - initialize the HW for 207316485Sdavidcs * enabling access of a VF. Also includes preparing the 208316485Sdavidcs * IGU for VF access. This needs to be called AFTER hw is 209316485Sdavidcs * initialized and BEFORE VF is loaded inside the VM. 210316485Sdavidcs * 211316485Sdavidcs * @param p_hwfn 212316485Sdavidcs * @param p_ptt 213316485Sdavidcs * @param p_params 214316485Sdavidcs * 215316485Sdavidcs * @return enum _ecore_status_t 216316485Sdavidcs */ 217316485Sdavidcsenum _ecore_status_t 218316485Sdavidcsecore_iov_init_hw_for_vf(struct ecore_hwfn *p_hwfn, 219316485Sdavidcs struct ecore_ptt *p_ptt, 220316485Sdavidcs struct ecore_iov_vf_init_params *p_params); 221316485Sdavidcs 222316485Sdavidcs/** 223316485Sdavidcs * @brief ecore_iov_process_mbx_req - process a request received 224316485Sdavidcs * from the VF 225316485Sdavidcs * 226316485Sdavidcs * @param p_hwfn 227316485Sdavidcs * @param p_ptt 228316485Sdavidcs * @param vfid 229316485Sdavidcs */ 230316485Sdavidcsvoid ecore_iov_process_mbx_req(struct ecore_hwfn *p_hwfn, 231316485Sdavidcs struct ecore_ptt *p_ptt, 232316485Sdavidcs int vfid); 233316485Sdavidcs 234316485Sdavidcs/** 235316485Sdavidcs * @brief ecore_iov_release_hw_for_vf - called once upper layer 236316485Sdavidcs * knows VF is done with - can release any resources 237316485Sdavidcs * allocated for VF at this point. this must be done once 238316485Sdavidcs * we know VF is no longer loaded in VM. 239316485Sdavidcs * 240316485Sdavidcs * @param p_hwfn 241316485Sdavidcs * @param p_ptt 242316485Sdavidcs * @param rel_vf_id 243316485Sdavidcs * 244316485Sdavidcs * @return enum _ecore_status_t 245316485Sdavidcs */ 246316485Sdavidcsenum _ecore_status_t ecore_iov_release_hw_for_vf(struct ecore_hwfn *p_hwfn, 247316485Sdavidcs struct ecore_ptt *p_ptt, 248316485Sdavidcs u16 rel_vf_id); 249316485Sdavidcs 250316485Sdavidcs/** 251316485Sdavidcs * @brief ecore_iov_set_vf_ctx - set a context for a given VF 252316485Sdavidcs * 253316485Sdavidcs * @param p_hwfn 254316485Sdavidcs * @param vf_id 255316485Sdavidcs * @param ctx 256316485Sdavidcs * 257316485Sdavidcs * @return enum _ecore_status_t 258316485Sdavidcs */ 259316485Sdavidcsenum _ecore_status_t ecore_iov_set_vf_ctx(struct ecore_hwfn *p_hwfn, 260316485Sdavidcs u16 vf_id, 261316485Sdavidcs void *ctx); 262316485Sdavidcs 263316485Sdavidcs/** 264316485Sdavidcs * @brief FLR cleanup for all VFs 265316485Sdavidcs * 266316485Sdavidcs * @param p_hwfn 267316485Sdavidcs * @param p_ptt 268316485Sdavidcs * 269316485Sdavidcs * @return enum _ecore_status_t 270316485Sdavidcs */ 271316485Sdavidcsenum _ecore_status_t ecore_iov_vf_flr_cleanup(struct ecore_hwfn *p_hwfn, 272316485Sdavidcs struct ecore_ptt *p_ptt); 273316485Sdavidcs 274316485Sdavidcs/** 275316485Sdavidcs * @brief FLR cleanup for single VF 276316485Sdavidcs * 277316485Sdavidcs * @param p_hwfn 278316485Sdavidcs * @param p_ptt 279316485Sdavidcs * @param rel_vf_id 280316485Sdavidcs * 281316485Sdavidcs * @return enum _ecore_status_t 282316485Sdavidcs */ 283316485Sdavidcsenum _ecore_status_t 284316485Sdavidcsecore_iov_single_vf_flr_cleanup(struct ecore_hwfn *p_hwfn, 285316485Sdavidcs struct ecore_ptt *p_ptt, 286316485Sdavidcs u16 rel_vf_id); 287316485Sdavidcs 288316485Sdavidcs/** 289316485Sdavidcs * @brief Update the bulletin with link information. Notice this does NOT 290316485Sdavidcs * send a bulletin update, only updates the PF's bulletin. 291316485Sdavidcs * 292316485Sdavidcs * @param p_hwfn 293316485Sdavidcs * @param p_vf 294316485Sdavidcs * @param params - the link params to use for the VF link configuration 295316485Sdavidcs * @param link - the link output to use for the VF link configuration 296316485Sdavidcs * @param p_caps - the link default capabilities. 297316485Sdavidcs */ 298316485Sdavidcsvoid ecore_iov_set_link(struct ecore_hwfn *p_hwfn, 299316485Sdavidcs u16 vfid, 300316485Sdavidcs struct ecore_mcp_link_params *params, 301316485Sdavidcs struct ecore_mcp_link_state *link, 302316485Sdavidcs struct ecore_mcp_link_capabilities *p_caps); 303316485Sdavidcs 304316485Sdavidcs/** 305316485Sdavidcs * @brief Returns link information as perceived by VF. 306316485Sdavidcs * 307316485Sdavidcs * @param p_hwfn 308316485Sdavidcs * @param p_vf 309316485Sdavidcs * @param p_params - the link params visible to vf. 310316485Sdavidcs * @param p_link - the link state visible to vf. 311316485Sdavidcs * @param p_caps - the link default capabilities visible to vf. 312316485Sdavidcs */ 313316485Sdavidcsvoid ecore_iov_get_link(struct ecore_hwfn *p_hwfn, 314316485Sdavidcs u16 vfid, 315316485Sdavidcs struct ecore_mcp_link_params *params, 316316485Sdavidcs struct ecore_mcp_link_state *link, 317316485Sdavidcs struct ecore_mcp_link_capabilities *p_caps); 318316485Sdavidcs 319316485Sdavidcs/** 320316485Sdavidcs * @brief return if the VF is pending FLR 321316485Sdavidcs * 322316485Sdavidcs * @param p_hwfn 323316485Sdavidcs * @param rel_vf_id 324316485Sdavidcs * 325316485Sdavidcs * @return bool 326316485Sdavidcs */ 327316485Sdavidcsbool ecore_iov_is_vf_pending_flr(struct ecore_hwfn *p_hwfn, 328316485Sdavidcs u16 rel_vf_id); 329337517Sdavidcs#endif 330316485Sdavidcs 331316485Sdavidcs/** 332316485Sdavidcs * @brief Check if given VF ID @vfid is valid 333316485Sdavidcs * w.r.t. @b_enabled_only value 334316485Sdavidcs * if b_enabled_only = true - only enabled VF id is valid 335316485Sdavidcs * else any VF id less than max_vfs is valid 336316485Sdavidcs * 337316485Sdavidcs * @param p_hwfn 338316485Sdavidcs * @param rel_vf_id - Relative VF ID 339316485Sdavidcs * @param b_enabled_only - consider only enabled VF 340316485Sdavidcs * @param b_non_malicious - true iff we want to validate vf isn't malicious. 341316485Sdavidcs * 342316485Sdavidcs * @return bool - true for valid VF ID 343316485Sdavidcs */ 344316485Sdavidcsbool ecore_iov_is_valid_vfid(struct ecore_hwfn *p_hwfn, 345316485Sdavidcs int rel_vf_id, 346316485Sdavidcs bool b_enabled_only, bool b_non_malicious); 347316485Sdavidcs 348337517Sdavidcs#ifndef LINUX_REMOVE 349316485Sdavidcs/** 350316485Sdavidcs * @brief Get VF's public info structure 351316485Sdavidcs * 352316485Sdavidcs * @param p_hwfn 353316485Sdavidcs * @param vfid - Relative VF ID 354316485Sdavidcs * @param b_enabled_only - false if want to access even if vf is disabled 355316485Sdavidcs * 356316485Sdavidcs * @return struct ecore_public_vf_info * 357316485Sdavidcs */ 358316485Sdavidcsstruct ecore_public_vf_info* 359316485Sdavidcsecore_iov_get_public_vf_info(struct ecore_hwfn *p_hwfn, 360316485Sdavidcs u16 vfid, bool b_enabled_only); 361316485Sdavidcs 362316485Sdavidcs/** 363316485Sdavidcs * @brief fills a bitmask of all VFs which have pending unhandled 364316485Sdavidcs * messages. 365316485Sdavidcs * 366316485Sdavidcs * @param p_hwfn 367316485Sdavidcs */ 368316485Sdavidcsvoid ecore_iov_pf_get_pending_events(struct ecore_hwfn *p_hwfn, 369316485Sdavidcs u64 *events); 370316485Sdavidcs 371316485Sdavidcs/** 372316485Sdavidcs * @brief Copy VF's message to PF's buffer 373316485Sdavidcs * 374316485Sdavidcs * @param p_hwfn 375316485Sdavidcs * @param ptt 376316485Sdavidcs * @param vfid 377316485Sdavidcs * 378316485Sdavidcs * @return enum _ecore_status_t 379316485Sdavidcs */ 380316485Sdavidcsenum _ecore_status_t ecore_iov_copy_vf_msg(struct ecore_hwfn *p_hwfn, 381316485Sdavidcs struct ecore_ptt *ptt, 382316485Sdavidcs int vfid); 383316485Sdavidcs/** 384316485Sdavidcs * @brief Set forced MAC address in PFs copy of bulletin board 385316485Sdavidcs * and configures FW/HW to support the configuration. 386316485Sdavidcs * 387316485Sdavidcs * @param p_hwfn 388316485Sdavidcs * @param mac 389316485Sdavidcs * @param vfid 390316485Sdavidcs */ 391316485Sdavidcsvoid ecore_iov_bulletin_set_forced_mac(struct ecore_hwfn *p_hwfn, 392316485Sdavidcs u8 *mac, int vfid); 393316485Sdavidcs 394316485Sdavidcs/** 395316485Sdavidcs * @brief Set MAC address in PFs copy of bulletin board without 396316485Sdavidcs * configuring FW/HW. 397316485Sdavidcs * 398316485Sdavidcs * @param p_hwfn 399316485Sdavidcs * @param mac 400316485Sdavidcs * @param vfid 401316485Sdavidcs */ 402316485Sdavidcsenum _ecore_status_t ecore_iov_bulletin_set_mac(struct ecore_hwfn *p_hwfn, 403316485Sdavidcs u8 *mac, int vfid); 404316485Sdavidcs 405316485Sdavidcs/** 406316485Sdavidcs * @brief Set default behaviour of VF in case no vlans are configured for it 407316485Sdavidcs * whether to accept only untagged traffic or all. 408316485Sdavidcs * Must be called prior to the VF vport-start. 409316485Sdavidcs * 410316485Sdavidcs * @param p_hwfn 411316485Sdavidcs * @param b_untagged_only 412316485Sdavidcs * @param vfid 413316485Sdavidcs * 414316485Sdavidcs * @return ECORE_SUCCESS if configuration would stick. 415316485Sdavidcs */ 416316485Sdavidcsenum _ecore_status_t 417316485Sdavidcsecore_iov_bulletin_set_forced_untagged_default(struct ecore_hwfn *p_hwfn, 418316485Sdavidcs bool b_untagged_only, 419316485Sdavidcs int vfid); 420316485Sdavidcs 421316485Sdavidcs/** 422316485Sdavidcs * @brief Get VFs opaque fid. 423316485Sdavidcs * 424316485Sdavidcs * @param p_hwfn 425316485Sdavidcs * @param vfid 426316485Sdavidcs * @param opaque_fid 427316485Sdavidcs */ 428316485Sdavidcsvoid ecore_iov_get_vfs_opaque_fid(struct ecore_hwfn *p_hwfn, int vfid, 429316485Sdavidcs u16 *opaque_fid); 430316485Sdavidcs 431316485Sdavidcs/** 432316485Sdavidcs * @brief Set forced VLAN [pvid] in PFs copy of bulletin board 433316485Sdavidcs * and configures FW/HW to support the configuration. 434316485Sdavidcs * Setting of pvid 0 would clear the feature. 435316485Sdavidcs * @param p_hwfn 436316485Sdavidcs * @param pvid 437316485Sdavidcs * @param vfid 438316485Sdavidcs */ 439316485Sdavidcsvoid ecore_iov_bulletin_set_forced_vlan(struct ecore_hwfn *p_hwfn, 440316485Sdavidcs u16 pvid, int vfid); 441316485Sdavidcs 442316485Sdavidcs/** 443316485Sdavidcs * @brief Check if VF has VPORT instance. This can be used 444316485Sdavidcs * to check if VPORT is active. 445316485Sdavidcs * 446316485Sdavidcs * @param p_hwfn 447316485Sdavidcs */ 448316485Sdavidcsbool ecore_iov_vf_has_vport_instance(struct ecore_hwfn *p_hwfn, int vfid); 449316485Sdavidcs 450316485Sdavidcs/** 451316485Sdavidcs * @brief PF posts the bulletin to the VF 452316485Sdavidcs * 453316485Sdavidcs * @param p_hwfn 454316485Sdavidcs * @param p_vf 455316485Sdavidcs * @param p_ptt 456316485Sdavidcs * 457316485Sdavidcs * @return enum _ecore_status_t 458316485Sdavidcs */ 459316485Sdavidcsenum _ecore_status_t ecore_iov_post_vf_bulletin(struct ecore_hwfn *p_hwfn, 460316485Sdavidcs int vfid, 461316485Sdavidcs struct ecore_ptt *p_ptt); 462316485Sdavidcs 463316485Sdavidcs/** 464316485Sdavidcs * @brief Check if given VF (@vfid) is marked as stopped 465316485Sdavidcs * 466316485Sdavidcs * @param p_hwfn 467316485Sdavidcs * @param vfid 468316485Sdavidcs * 469316485Sdavidcs * @return bool : true if stopped 470316485Sdavidcs */ 471316485Sdavidcsbool ecore_iov_is_vf_stopped(struct ecore_hwfn *p_hwfn, int vfid); 472316485Sdavidcs 473316485Sdavidcs/** 474316485Sdavidcs * @brief Configure VF anti spoofing 475316485Sdavidcs * 476316485Sdavidcs * @param p_hwfn 477316485Sdavidcs * @param vfid 478316485Sdavidcs * @param val - spoofchk value - true/false 479316485Sdavidcs * 480316485Sdavidcs * @return enum _ecore_status_t 481316485Sdavidcs */ 482316485Sdavidcsenum _ecore_status_t ecore_iov_spoofchk_set(struct ecore_hwfn *p_hwfn, 483316485Sdavidcs int vfid, bool val); 484316485Sdavidcs 485316485Sdavidcs/** 486316485Sdavidcs * @brief Get VF's configured spoof value. 487316485Sdavidcs * 488316485Sdavidcs * @param p_hwfn 489316485Sdavidcs * @param vfid 490316485Sdavidcs * 491316485Sdavidcs * @return bool - spoofchk value - true/false 492316485Sdavidcs */ 493316485Sdavidcsbool ecore_iov_spoofchk_get(struct ecore_hwfn *p_hwfn, int vfid); 494316485Sdavidcs 495316485Sdavidcs/** 496316485Sdavidcs * @brief Check for SRIOV sanity by PF. 497316485Sdavidcs * 498316485Sdavidcs * @param p_hwfn 499316485Sdavidcs * @param vfid 500316485Sdavidcs * 501316485Sdavidcs * @return bool - true if sanity checks passes, else false 502316485Sdavidcs */ 503316485Sdavidcsbool ecore_iov_pf_sanity_check(struct ecore_hwfn *p_hwfn, int vfid); 504316485Sdavidcs 505316485Sdavidcs/** 506316485Sdavidcs * @brief Get the num of VF chains. 507316485Sdavidcs * 508316485Sdavidcs * @param p_hwfn 509316485Sdavidcs * 510316485Sdavidcs * @return u8 511316485Sdavidcs */ 512316485Sdavidcsu8 ecore_iov_vf_chains_per_pf(struct ecore_hwfn *p_hwfn); 513316485Sdavidcs 514316485Sdavidcs/** 515316485Sdavidcs * @brief Get vf request mailbox params 516316485Sdavidcs * 517316485Sdavidcs * @param p_hwfn 518316485Sdavidcs * @param rel_vf_id 519316485Sdavidcs * @param pp_req_virt_addr 520316485Sdavidcs * @param p_req_virt_size 521316485Sdavidcs */ 522316485Sdavidcsvoid ecore_iov_get_vf_req_virt_mbx_params(struct ecore_hwfn *p_hwfn, 523316485Sdavidcs u16 rel_vf_id, 524316485Sdavidcs void **pp_req_virt_addr, 525316485Sdavidcs u16 *p_req_virt_size); 526316485Sdavidcs 527316485Sdavidcs/** 528316485Sdavidcs * @brief Get vf mailbox params 529316485Sdavidcs * 530316485Sdavidcs * @param p_hwfn 531316485Sdavidcs * @param rel_vf_id 532316485Sdavidcs * @param pp_reply_virt_addr 533316485Sdavidcs * @param p_reply_virt_size 534316485Sdavidcs */ 535316485Sdavidcsvoid ecore_iov_get_vf_reply_virt_mbx_params(struct ecore_hwfn *p_hwfn, 536316485Sdavidcs u16 rel_vf_id, 537316485Sdavidcs void **pp_reply_virt_addr, 538316485Sdavidcs u16 *p_reply_virt_size); 539316485Sdavidcs 540316485Sdavidcs/** 541316485Sdavidcs * @brief Validate if the given length is a valid vfpf message 542316485Sdavidcs * length 543316485Sdavidcs * 544316485Sdavidcs * @param length 545316485Sdavidcs * 546316485Sdavidcs * @return bool 547316485Sdavidcs */ 548316485Sdavidcsbool ecore_iov_is_valid_vfpf_msg_length(u32 length); 549316485Sdavidcs 550316485Sdavidcs/** 551316485Sdavidcs * @brief Return the max pfvf message length 552316485Sdavidcs * 553316485Sdavidcs * @return u32 554316485Sdavidcs */ 555316485Sdavidcsu32 ecore_iov_pfvf_msg_length(void); 556316485Sdavidcs 557316485Sdavidcs/** 558316485Sdavidcs * @brief Returns forced MAC address if one is configured 559316485Sdavidcs * 560316485Sdavidcs * @parm p_hwfn 561316485Sdavidcs * @parm rel_vf_id 562316485Sdavidcs * 563316485Sdavidcs * @return OSAL_NULL if mac isn't forced; Otherwise, returns MAC. 564316485Sdavidcs */ 565316485Sdavidcsu8 *ecore_iov_bulletin_get_forced_mac(struct ecore_hwfn *p_hwfn, 566316485Sdavidcs u16 rel_vf_id); 567316485Sdavidcs 568316485Sdavidcs/** 569316485Sdavidcs * @brief Returns pvid if one is configured 570316485Sdavidcs * 571316485Sdavidcs * @parm p_hwfn 572316485Sdavidcs * @parm rel_vf_id 573316485Sdavidcs * 574316485Sdavidcs * @return 0 if no pvid is configured, otherwise the pvid. 575316485Sdavidcs */ 576316485Sdavidcsu16 ecore_iov_bulletin_get_forced_vlan(struct ecore_hwfn *p_hwfn, 577316485Sdavidcs u16 rel_vf_id); 578316485Sdavidcs/** 579316485Sdavidcs * @brief Configure VFs tx rate 580316485Sdavidcs * 581316485Sdavidcs * @param p_hwfn 582316485Sdavidcs * @param p_ptt 583316485Sdavidcs * @param vfid 584316485Sdavidcs * @param val - tx rate value in Mb/sec. 585316485Sdavidcs * 586316485Sdavidcs * @return enum _ecore_status_t 587316485Sdavidcs */ 588316485Sdavidcsenum _ecore_status_t ecore_iov_configure_tx_rate(struct ecore_hwfn *p_hwfn, 589316485Sdavidcs struct ecore_ptt *p_ptt, 590316485Sdavidcs int vfid, int val); 591316485Sdavidcs 592316485Sdavidcs/** 593316485Sdavidcs * @brief - Retrieves the statistics associated with a VF 594316485Sdavidcs * 595316485Sdavidcs * @param p_hwfn 596316485Sdavidcs * @param p_ptt 597316485Sdavidcs * @param vfid 598316485Sdavidcs * @param p_stats - this will be filled with the VF statistics 599316485Sdavidcs * 600316485Sdavidcs * @return ECORE_SUCCESS iff statistics were retrieved. Error otherwise. 601316485Sdavidcs */ 602316485Sdavidcsenum _ecore_status_t ecore_iov_get_vf_stats(struct ecore_hwfn *p_hwfn, 603316485Sdavidcs struct ecore_ptt *p_ptt, 604316485Sdavidcs int vfid, 605316485Sdavidcs struct ecore_eth_stats *p_stats); 606316485Sdavidcs 607316485Sdavidcs/** 608316485Sdavidcs * @brief - Retrieves num of rxqs chains 609316485Sdavidcs * 610316485Sdavidcs * @param p_hwfn 611316485Sdavidcs * @param rel_vf_id 612316485Sdavidcs * 613316485Sdavidcs * @return num of rxqs chains. 614316485Sdavidcs */ 615316485Sdavidcsu8 ecore_iov_get_vf_num_rxqs(struct ecore_hwfn *p_hwfn, 616316485Sdavidcs u16 rel_vf_id); 617316485Sdavidcs 618316485Sdavidcs/** 619316485Sdavidcs * @brief - Retrieves num of active rxqs chains 620316485Sdavidcs * 621316485Sdavidcs * @param p_hwfn 622316485Sdavidcs * @param rel_vf_id 623316485Sdavidcs * 624316485Sdavidcs * @return 625316485Sdavidcs */ 626316485Sdavidcsu8 ecore_iov_get_vf_num_active_rxqs(struct ecore_hwfn *p_hwfn, 627316485Sdavidcs u16 rel_vf_id); 628316485Sdavidcs 629316485Sdavidcs/** 630316485Sdavidcs * @brief - Retrieves ctx pointer 631316485Sdavidcs * 632316485Sdavidcs * @param p_hwfn 633316485Sdavidcs * @param rel_vf_id 634316485Sdavidcs * 635316485Sdavidcs * @return 636316485Sdavidcs */ 637316485Sdavidcsvoid *ecore_iov_get_vf_ctx(struct ecore_hwfn *p_hwfn, 638316485Sdavidcs u16 rel_vf_id); 639316485Sdavidcs 640316485Sdavidcs/** 641316485Sdavidcs * @brief - Retrieves VF`s num sbs 642316485Sdavidcs * 643316485Sdavidcs * @param p_hwfn 644316485Sdavidcs * @param rel_vf_id 645316485Sdavidcs * 646316485Sdavidcs * @return 647316485Sdavidcs */ 648316485Sdavidcsu8 ecore_iov_get_vf_num_sbs(struct ecore_hwfn *p_hwfn, 649316485Sdavidcs u16 rel_vf_id); 650316485Sdavidcs 651316485Sdavidcs/** 652316485Sdavidcs * @brief - Returm true if VF is waiting for acquire 653316485Sdavidcs * 654316485Sdavidcs * @param p_hwfn 655316485Sdavidcs * @param rel_vf_id 656316485Sdavidcs * 657316485Sdavidcs * @return 658316485Sdavidcs */ 659316485Sdavidcsbool ecore_iov_is_vf_wait_for_acquire(struct ecore_hwfn *p_hwfn, 660316485Sdavidcs u16 rel_vf_id); 661316485Sdavidcs 662316485Sdavidcs/** 663316485Sdavidcs * @brief - Returm true if VF is acquired but not initialized 664316485Sdavidcs * 665316485Sdavidcs * @param p_hwfn 666316485Sdavidcs * @param rel_vf_id 667316485Sdavidcs * 668316485Sdavidcs * @return 669316485Sdavidcs */ 670316485Sdavidcsbool ecore_iov_is_vf_acquired_not_initialized(struct ecore_hwfn *p_hwfn, 671316485Sdavidcs u16 rel_vf_id); 672316485Sdavidcs 673316485Sdavidcs/** 674316485Sdavidcs * @brief - Returm true if VF is acquired and initialized 675316485Sdavidcs * 676316485Sdavidcs * @param p_hwfn 677316485Sdavidcs * @param rel_vf_id 678316485Sdavidcs * 679316485Sdavidcs * @return 680316485Sdavidcs */ 681316485Sdavidcsbool ecore_iov_is_vf_initialized(struct ecore_hwfn *p_hwfn, 682316485Sdavidcs u16 rel_vf_id); 683316485Sdavidcs 684316485Sdavidcs/** 685316485Sdavidcs * @brief - Returm true if VF has started in FW 686316485Sdavidcs * 687316485Sdavidcs * @param p_hwfn 688316485Sdavidcs * @param rel_vf_id 689316485Sdavidcs * 690316485Sdavidcs * @return 691316485Sdavidcs */ 692316485Sdavidcsbool ecore_iov_is_vf_started(struct ecore_hwfn *p_hwfn, 693316485Sdavidcs u16 rel_vf_id); 694316485Sdavidcs 695316485Sdavidcs/** 696316485Sdavidcs * @brief - Get VF's vport min rate configured. 697316485Sdavidcs * @param p_hwfn 698316485Sdavidcs * @param rel_vf_id 699316485Sdavidcs * 700316485Sdavidcs * @return - rate in Mbps 701316485Sdavidcs */ 702316485Sdavidcsint ecore_iov_get_vf_min_rate(struct ecore_hwfn *p_hwfn, int vfid); 703316485Sdavidcs 704316485Sdavidcs/** 705316485Sdavidcs * @brief - Configure min rate for VF's vport. 706316485Sdavidcs * @param p_dev 707316485Sdavidcs * @param vfid 708316485Sdavidcs * @param - rate in Mbps 709316485Sdavidcs * 710316485Sdavidcs * @return 711316485Sdavidcs */ 712316485Sdavidcsenum _ecore_status_t ecore_iov_configure_min_tx_rate(struct ecore_dev *p_dev, 713316485Sdavidcs int vfid, u32 rate); 714316485Sdavidcs 715320164Sdavidcs#endif 716316485Sdavidcs 717316485Sdavidcs/** 718316485Sdavidcs * @brief ecore_pf_configure_vf_queue_coalesce - PF configure coalesce parameters 719316485Sdavidcs * of VFs for Rx and Tx queue. 720316485Sdavidcs * While the API allows setting coalescing per-qid, all queues sharing a SB 721316485Sdavidcs * should be in same range [i.e., either 0-0x7f, 0x80-0xff or 0x100-0x1ff] 722316485Sdavidcs * otherwise configuration would break. 723316485Sdavidcs * 724316485Sdavidcs * @param p_hwfn 725316485Sdavidcs * @param rx_coal - Rx Coalesce value in micro seconds. 726316485Sdavidcs * @param tx_coal - TX Coalesce value in micro seconds. 727316485Sdavidcs * @param vf_id 728316485Sdavidcs * @param qid 729316485Sdavidcs * 730316485Sdavidcs * @return int 731316485Sdavidcs **/ 732316485Sdavidcsenum _ecore_status_t 733316485Sdavidcsecore_iov_pf_configure_vf_queue_coalesce(struct ecore_hwfn *p_hwfn, 734316485Sdavidcs u16 rx_coal, u16 tx_coal, 735316485Sdavidcs u16 vf_id, u16 qid); 736316485Sdavidcs 737316485Sdavidcs/** 738316485Sdavidcs * @brief - Given a VF index, return index of next [including that] active VF. 739316485Sdavidcs * 740316485Sdavidcs * @param p_hwfn 741316485Sdavidcs * @param rel_vf_id 742316485Sdavidcs * 743320164Sdavidcs * @return MAX_NUM_VFS_E4 in case no further active VFs, otherwise index. 744316485Sdavidcs */ 745316485Sdavidcsu16 ecore_iov_get_next_active_vf(struct ecore_hwfn *p_hwfn, u16 rel_vf_id); 746316485Sdavidcsvoid ecore_iov_bulletin_set_udp_ports(struct ecore_hwfn *p_hwfn, int vfid, 747316485Sdavidcs u16 vxlan_port, u16 geneve_port); 748337517Sdavidcs 749337517Sdavidcs#ifdef CONFIG_ECORE_SW_CHANNEL 750337517Sdavidcs/** 751337517Sdavidcs * @brief Set whether PF should communicate with VF using SW/HW channel 752337517Sdavidcs * Needs to be called for an enabled VF before acquire is over 753337517Sdavidcs * [latest good point for doing that is OSAL_IOV_VF_ACQUIRE()] 754337517Sdavidcs * 755337517Sdavidcs * @param p_hwfn 756337517Sdavidcs * @param vfid - relative vf index 757337517Sdavidcs * @param b_is_hw - true iff PF is to use HW channel for communication 758337517Sdavidcs */ 759337517Sdavidcsvoid ecore_iov_set_vf_hw_channel(struct ecore_hwfn *p_hwfn, int vfid, 760337517Sdavidcs bool b_is_hw); 761337517Sdavidcs#endif 762316485Sdavidcs#else 763320164Sdavidcs#ifndef LINUX_REMOVE 764320164Sdavidcsstatic OSAL_INLINE void ecore_iov_set_vfs_to_disable(struct ecore_dev OSAL_UNUSED *p_dev, u8 OSAL_UNUSED to_disable) {} 765320164Sdavidcsstatic OSAL_INLINE void ecore_iov_set_vf_to_disable(struct ecore_dev OSAL_UNUSED *p_dev, u16 OSAL_UNUSED rel_vf_id, u8 OSAL_UNUSED to_disable) {} 766320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_init_hw_for_vf(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, struct ecore_iov_vf_init_params OSAL_UNUSED *p_params) {return ECORE_INVAL;} 767320164Sdavidcsstatic OSAL_INLINE void ecore_iov_process_mbx_req(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, int OSAL_UNUSED vfid) {} 768320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_release_hw_for_vf(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, u16 OSAL_UNUSED rel_vf_id) {return ECORE_SUCCESS;} 769320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_set_vf_ctx(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED vf_id, OSAL_UNUSED void *ctx) {return ECORE_INVAL;} 770320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_vf_flr_cleanup(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt) {return ECORE_INVAL;} 771320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_single_vf_flr_cleanup(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, u16 OSAL_UNUSED rel_vf_id) {return ECORE_INVAL;} 772320164Sdavidcsstatic OSAL_INLINE void ecore_iov_set_link(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED vfid, struct ecore_mcp_link_params OSAL_UNUSED *params, struct ecore_mcp_link_state OSAL_UNUSED *link, struct ecore_mcp_link_capabilities OSAL_UNUSED *p_caps) {} 773320164Sdavidcsstatic OSAL_INLINE void ecore_iov_get_link(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED vfid, struct ecore_mcp_link_params OSAL_UNUSED *params, struct ecore_mcp_link_state OSAL_UNUSED *link, struct ecore_mcp_link_capabilities OSAL_UNUSED *p_caps) {} 774320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_vf_pending_flr(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return false;} 775337517Sdavidcs#endif 776337517Sdavidcsstatic OSAL_INLINE bool 777337517Sdavidcsecore_iov_is_valid_vfid(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED rel_vf_id, 778337517Sdavidcs bool OSAL_UNUSED b_enabled_only, 779337517Sdavidcs bool OSAL_UNUSED b_non_malicious) 780337517Sdavidcs{ 781337517Sdavidcs return false; 782337517Sdavidcs} 783337517Sdavidcs#ifndef LINUX_REMOVE 784320164Sdavidcsstatic OSAL_INLINE struct ecore_public_vf_info* ecore_iov_get_public_vf_info(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED vfid, bool OSAL_UNUSED b_enabled_only) {return OSAL_NULL;} 785320164Sdavidcsstatic OSAL_INLINE void ecore_iov_pf_add_pending_events(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u8 OSAL_UNUSED vfid) {} 786320164Sdavidcsstatic OSAL_INLINE void ecore_iov_pf_get_and_clear_pending_events(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u64 OSAL_UNUSED *events) {} 787320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_copy_vf_msg(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *ptt, int OSAL_UNUSED vfid) {return ECORE_INVAL;} 788320164Sdavidcsstatic OSAL_INLINE void ecore_iov_bulletin_set_forced_mac(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u8 OSAL_UNUSED *mac, int OSAL_UNUSED vfid) {} 789320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_bulletin_set_mac(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u8 OSAL_UNUSED *mac, OSAL_UNUSED int vfid) {return ECORE_INVAL;} 790320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_bulletin_set_forced_untagged_default(struct ecore_hwfn OSAL_UNUSED *p_hwfn, bool OSAL_UNUSED b_untagged_only, int OSAL_UNUSED vfid) {return ECORE_INVAL;} 791320164Sdavidcsstatic OSAL_INLINE void ecore_iov_get_vfs_opaque_fid(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid, u16 OSAL_UNUSED *opaque_fid) {} 792320164Sdavidcsstatic OSAL_INLINE void ecore_iov_bulletin_set_forced_vlan(struct ecore_hwfn OSAL_UNUSED p_hwfn, u16 OSAL_UNUSED pvid, int OSAL_UNUSED vfid) {} 793316485Sdavidcs 794320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_vf_has_vport_instance(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid) {return false;} 795320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_post_vf_bulletin(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid, struct ecore_ptt OSAL_UNUSED *p_ptt) {return ECORE_INVAL;} 796320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_vf_stopped(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid) {return false;} 797320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_spoofchk_set(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid, bool OSAL_UNUSED val) {return ECORE_INVAL;} 798320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_spoofchk_get(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid) {return false;} 799320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_pf_sanity_check(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid) {return false;} 800320164Sdavidcsstatic OSAL_INLINE u8 ecore_iov_vf_chains_per_pf(struct ecore_hwfn OSAL_UNUSED *p_hwfn) {return 0;} 801320164Sdavidcsstatic OSAL_INLINE void ecore_iov_get_vf_req_virt_mbx_params(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id, void OSAL_UNUSED **pp_req_virt_addr, u16 OSAL_UNUSED *p_req_virt_size) {} 802320164Sdavidcsstatic OSAL_INLINE void ecore_iov_get_vf_reply_virt_mbx_params(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id, void OSAL_UNUSED **pp_reply_virt_addr, u16 OSAL_UNUSED *p_reply_virt_size) {} 803320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_valid_vfpf_msg_length(u32 OSAL_UNUSED length) {return false;} 804316485Sdavidcsstatic OSAL_INLINE u32 ecore_iov_pfvf_msg_length(void) {return 0;} 805320164Sdavidcsstatic OSAL_INLINE u8 *ecore_iov_bulletin_get_forced_mac(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return OSAL_NULL;} 806320164Sdavidcsstatic OSAL_INLINE u16 ecore_iov_bulletin_get_forced_vlan(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return 0;} 807320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_configure_tx_rate(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, int OSAL_UNUSED vfid, int OSAL_UNUSED val) { return ECORE_INVAL; } 808320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_get_vf_stats(struct ecore_hwfn OSAL_UNUSED *p_hwfn, struct ecore_ptt OSAL_UNUSED *p_ptt, int OSAL_UNUSED vfid, struct ecore_eth_stats OSAL_UNUSED *p_stats) { return ECORE_INVAL; } 809316485Sdavidcs 810320164Sdavidcsstatic OSAL_INLINE u8 ecore_iov_get_vf_num_rxqs(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return 0;} 811320164Sdavidcsstatic OSAL_INLINE u8 ecore_iov_get_vf_num_active_rxqs(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return 0;} 812320164Sdavidcsstatic OSAL_INLINE void *ecore_iov_get_vf_ctx(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return OSAL_NULL;} 813320164Sdavidcsstatic OSAL_INLINE u8 ecore_iov_get_vf_num_sbs(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return 0;} 814320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_vf_wait_for_acquire(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return false;} 815320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_vf_acquired_not_initialized(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return false;} 816320164Sdavidcsstatic OSAL_INLINE bool ecore_iov_is_vf_initialized(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) {return false;} 817320164Sdavidcsstatic OSAL_INLINE int ecore_iov_get_vf_min_rate(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid) { return 0; } 818320164Sdavidcsstatic OSAL_INLINE enum _ecore_status_t ecore_iov_configure_min_tx_rate(struct ecore_dev OSAL_UNUSED *p_dev, int OSAL_UNUSED vfid, OSAL_UNUSED u32 rate) { return ECORE_INVAL; } 819316485Sdavidcs#endif 820320164Sdavidcsstatic OSAL_INLINE void ecore_iov_bulletin_set_udp_ports(struct ecore_hwfn OSAL_UNUSED *p_hwfn, int OSAL_UNUSED vfid, u16 OSAL_UNUSED vxlan_port, u16 OSAL_UNUSED geneve_port) { return; } 821320164Sdavidcsstatic OSAL_INLINE u16 ecore_iov_get_next_active_vf(struct ecore_hwfn OSAL_UNUSED *p_hwfn, u16 OSAL_UNUSED rel_vf_id) { return MAX_NUM_VFS_E4; } 822337517Sdavidcs 823337517Sdavidcs#ifdef CONFIG_ECORE_SW_CHANNEL 824337517Sdavidcsstatic OSAL_INLINE void 825337517Sdavidcsecore_iov_set_vf_hw_channel(struct ecore_hwfn OSAL_UNUSED *p_hwfn, 826337517Sdavidcs int OSAL_UNUSED vfid, bool OSAL_UNUSED b_is_hw) {} 827320164Sdavidcs#endif 828337517Sdavidcs#endif 829316485Sdavidcs 830316485Sdavidcs#define ecore_for_each_vf(_p_hwfn, _i) \ 831316485Sdavidcs for (_i = ecore_iov_get_next_active_vf(_p_hwfn, 0); \ 832320164Sdavidcs _i < MAX_NUM_VFS_E4; \ 833316485Sdavidcs _i = ecore_iov_get_next_active_vf(_p_hwfn, _i + 1)) 834316485Sdavidcs 835316485Sdavidcs#endif 836