634 lines · c
1/* bnx2x_sriov.h: QLogic Everest network driver.2 *3 * Copyright 2009-2013 Broadcom Corporation4 * Copyright 2014 QLogic Corporation5 * All rights reserved6 *7 * Unless you and QLogic execute a separate written software license8 * agreement governing use of this software, this software is licensed to you9 * under the terms of the GNU General Public License version 2, available10 * at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (the "GPL").11 *12 * Notwithstanding the above, under no circumstances may you combine this13 * software in any way with any other QLogic software provided under a14 * license other than the GPL, without QLogic's express prior written15 * consent.16 *17 * Maintained by: Ariel Elior <ariel.elior@qlogic.com>18 * Written by: Shmulik Ravid19 * Ariel Elior <ariel.elior@qlogic.com>20 */21#ifndef BNX2X_SRIOV_H22#define BNX2X_SRIOV_H23 24#include "bnx2x_vfpf.h"25#include "bnx2x.h"26 27enum sample_bulletin_result {28 PFVF_BULLETIN_UNCHANGED,29 PFVF_BULLETIN_UPDATED,30 PFVF_BULLETIN_CRC_ERR31};32 33#ifdef CONFIG_BNX2X_SRIOV34 35extern struct workqueue_struct *bnx2x_iov_wq;36 37/* The bnx2x device structure holds vfdb structure described below.38 * The VF array is indexed by the relative vfid.39 */40#define BNX2X_VF_MAX_QUEUES 1641#define BNX2X_VF_MAX_TPA_AGG_QUEUES 842 43struct bnx2x_sriov {44 u32 first_vf_in_pf;45 46 /* standard SRIOV capability fields, mostly for debugging */47 int pos; /* capability position */48 int nres; /* number of resources */49 u32 cap; /* SR-IOV Capabilities */50 u16 ctrl; /* SR-IOV Control */51 u16 total; /* total VFs associated with the PF */52 u16 initial; /* initial VFs associated with the PF */53 u16 nr_virtfn; /* number of VFs available */54 u16 offset; /* first VF Routing ID offset */55 u16 stride; /* following VF stride */56 u32 pgsz; /* page size for BAR alignment */57 u8 link; /* Function Dependency Link */58};59 60/* bars */61struct bnx2x_vf_bar {62 u64 bar;63 u32 size;64};65 66struct bnx2x_vf_bar_info {67 struct bnx2x_vf_bar bars[PCI_SRIOV_NUM_BARS];68 u8 nr_bars;69};70 71/* vf queue (used both for rx or tx) */72struct bnx2x_vf_queue {73 struct eth_context *cxt;74 75 /* MACs object */76 struct bnx2x_vlan_mac_obj mac_obj;77 78 /* VLANs object */79 struct bnx2x_vlan_mac_obj vlan_obj;80 81 /* VLAN-MACs object */82 struct bnx2x_vlan_mac_obj vlan_mac_obj;83 84 unsigned long accept_flags; /* last accept flags configured */85 86 /* Queue Slow-path State object */87 struct bnx2x_queue_sp_obj sp_obj;88 89 u32 cid;90 u16 index;91 u16 sb_idx;92 bool is_leading;93 bool sp_initialized;94};95 96/* struct bnx2x_vf_queue_construct_params - prepare queue construction97 * parameters: q-init, q-setup and SB index98 */99struct bnx2x_vf_queue_construct_params {100 struct bnx2x_queue_state_params qstate;101 struct bnx2x_queue_setup_params prep_qsetup;102};103 104/* forward */105struct bnx2x_virtf;106 107/* VFOP definitions */108 109struct bnx2x_vf_mac_vlan_filter {110 int type;111#define BNX2X_VF_FILTER_MAC BIT(0)112#define BNX2X_VF_FILTER_VLAN BIT(1)113#define BNX2X_VF_FILTER_VLAN_MAC \114 (BNX2X_VF_FILTER_MAC | BNX2X_VF_FILTER_VLAN) /*shortcut*/115 116 bool add;117 bool applied;118 u8 *mac;119 u16 vid;120};121 122struct bnx2x_vf_mac_vlan_filters {123 int count;124 struct bnx2x_vf_mac_vlan_filter filters[];125};126 127/* vf context */128struct bnx2x_virtf {129 u16 cfg_flags;130#define VF_CFG_STATS_COALESCE 0x1131#define VF_CFG_EXT_BULLETIN 0x2132#define VF_CFG_VLAN_FILTER 0x4133 u8 link_cfg; /* IFLA_VF_LINK_STATE_AUTO134 * IFLA_VF_LINK_STATE_ENABLE135 * IFLA_VF_LINK_STATE_DISABLE136 */137 u8 state;138#define VF_FREE 0 /* VF ready to be acquired holds no resc */139#define VF_ACQUIRED 1 /* VF acquired, but not initialized */140#define VF_ENABLED 2 /* VF Enabled */141#define VF_RESET 3 /* VF FLR'd, pending cleanup */142#define VF_LOST 4 /* Recovery while VFs are loaded */143 144 bool flr_clnup_stage; /* true during flr cleanup */145 bool malicious; /* true if FW indicated so, until FLR */146 /* 1(true) if spoof check is enabled */147 u8 spoofchk;148 149 /* dma */150 dma_addr_t fw_stat_map;151 u16 stats_stride;152 dma_addr_t bulletin_map;153 154 /* Allocated resources counters. Before the VF is acquired, the155 * counters hold the following values:156 *157 * - xxq_count = 0 as the queues memory is not allocated yet.158 *159 * - sb_count = The number of status blocks configured for this VF in160 * the IGU CAM. Initially read during probe.161 *162 * - xx_rules_count = The number of rules statically and equally163 * allocated for each VF, during PF load.164 */165 struct vf_pf_resc_request alloc_resc;166#define vf_rxq_count(vf) ((vf)->alloc_resc.num_rxqs)167#define vf_txq_count(vf) ((vf)->alloc_resc.num_txqs)168#define vf_sb_count(vf) ((vf)->alloc_resc.num_sbs)169#define vf_mac_rules_cnt(vf) ((vf)->alloc_resc.num_mac_filters)170#define vf_vlan_rules_cnt(vf) ((vf)->alloc_resc.num_vlan_filters)171#define vf_mc_rules_cnt(vf) ((vf)->alloc_resc.num_mc_filters)172 173 u8 sb_count; /* actual number of SBs */174 u8 igu_base_id; /* base igu status block id */175 176 struct bnx2x_vf_queue *vfqs;177#define LEADING_IDX 0178#define bnx2x_vfq_is_leading(vfq) ((vfq)->index == LEADING_IDX)179#define bnx2x_vfq(vf, nr, var) ((vf)->vfqs[(nr)].var)180#define bnx2x_leading_vfq(vf, var) ((vf)->vfqs[LEADING_IDX].var)181 182 u8 index; /* index in the vf array */183 u8 abs_vfid;184 u8 sp_cl_id;185 u32 error; /* 0 means all's-well */186 187 /* BDF */188 unsigned int domain;189 unsigned int bus;190 unsigned int devfn;191 192 /* bars */193 struct bnx2x_vf_bar bars[PCI_SRIOV_NUM_BARS];194 195 /* set-mac ramrod state 1-pending, 0-done */196 unsigned long filter_state;197 198 /* leading rss client id ~~ the client id of the first rxq, must be199 * set for each txq.200 */201 int leading_rss;202 203 /* MCAST object */204 struct bnx2x_mcast_obj mcast_obj;205 206 /* RSS configuration object */207 struct bnx2x_rss_config_obj rss_conf_obj;208 209 /* slow-path operations */210 struct mutex op_mutex; /* one vfop at a time mutex */211 enum channel_tlvs op_current;212 213 u8 fp_hsi;214 215 struct bnx2x_credit_pool_obj vf_vlans_pool;216 struct bnx2x_credit_pool_obj vf_macs_pool;217};218 219#define BNX2X_NR_VIRTFN(bp) ((bp)->vfdb->sriov.nr_virtfn)220 221#define for_each_vf(bp, var) \222 for ((var) = 0; (var) < BNX2X_NR_VIRTFN(bp); (var)++)223 224#define for_each_vfq(vf, var) \225 for ((var) = 0; (var) < vf_rxq_count(vf); (var)++)226 227#define for_each_vf_sb(vf, var) \228 for ((var) = 0; (var) < vf_sb_count(vf); (var)++)229 230#define is_vf_multi(vf) (vf_rxq_count(vf) > 1)231 232#define HW_VF_HANDLE(bp, abs_vfid) \233 (u16)(BP_ABS_FUNC((bp)) | (1<<3) | ((u16)(abs_vfid) << 4))234 235#define FW_PF_MAX_HANDLE 8236 237#define FW_VF_HANDLE(abs_vfid) \238 (abs_vfid + FW_PF_MAX_HANDLE)239 240#define GET_NUM_VFS_PER_PATH(bp) 64 /* use max possible value */241#define GET_NUM_VFS_PER_PF(bp) ((bp)->vfdb ? (bp)->vfdb->sriov.total \242 : 0)243#define VF_MAC_CREDIT_CNT 1244#define VF_VLAN_CREDIT_CNT 2 /* VLAN0 + 'real' VLAN */245 246/* locking and unlocking the channel mutex */247void bnx2x_lock_vf_pf_channel(struct bnx2x *bp, struct bnx2x_virtf *vf,248 enum channel_tlvs tlv);249 250void bnx2x_unlock_vf_pf_channel(struct bnx2x *bp, struct bnx2x_virtf *vf,251 enum channel_tlvs expected_tlv);252 253/* VF mail box (aka vf-pf channel) */254 255/* a container for the bi-directional vf<-->pf messages.256 * The actual response will be placed according to the offset parameter257 * provided in the request258 */259 260#define MBX_MSG_ALIGN 8261#define MBX_MSG_ALIGNED_SIZE (roundup(sizeof(struct bnx2x_vf_mbx_msg), \262 MBX_MSG_ALIGN))263 264struct bnx2x_vf_mbx_msg {265 union vfpf_tlvs req;266 union pfvf_tlvs resp;267};268 269struct bnx2x_vf_mbx {270 struct bnx2x_vf_mbx_msg *msg;271 dma_addr_t msg_mapping;272 273 /* VF GPA address */274 u32 vf_addr_lo;275 u32 vf_addr_hi;276 277 struct vfpf_first_tlv first_tlv; /* saved VF request header */278};279 280struct bnx2x_vf_sp {281 union {282 struct eth_classify_rules_ramrod_data e2;283 } mac_rdata;284 285 union {286 struct eth_classify_rules_ramrod_data e2;287 } vlan_rdata;288 289 union {290 struct eth_classify_rules_ramrod_data e2;291 } vlan_mac_rdata;292 293 union {294 struct eth_filter_rules_ramrod_data e2;295 } rx_mode_rdata;296 297 union {298 struct eth_multicast_rules_ramrod_data e2;299 } mcast_rdata;300 301 union {302 struct client_init_ramrod_data init_data;303 struct client_update_ramrod_data update_data;304 } q_data;305 306 union {307 struct eth_rss_update_ramrod_data e2;308 } rss_rdata;309};310 311struct hw_dma {312 void *addr;313 dma_addr_t mapping;314 size_t size;315};316 317struct bnx2x_vfdb {318#define BP_VFDB(bp) ((bp)->vfdb)319 /* vf array */320 struct bnx2x_virtf *vfs;321#define BP_VF(bp, idx) ((BP_VFDB(bp) && (bp)->vfdb->vfs) ? \322 &((bp)->vfdb->vfs[idx]) : NULL)323#define bnx2x_vf(bp, idx, var) ((bp)->vfdb->vfs[idx].var)324 325 /* queue array - for all vfs */326 struct bnx2x_vf_queue *vfqs;327 328 /* vf HW contexts */329 struct hw_dma context[BNX2X_VF_CIDS/ILT_PAGE_CIDS];330#define BP_VF_CXT_PAGE(bp, i) (&(bp)->vfdb->context[i])331 332 /* SR-IOV information */333 struct bnx2x_sriov sriov;334 struct hw_dma mbx_dma;335#define BP_VF_MBX_DMA(bp) (&((bp)->vfdb->mbx_dma))336 struct bnx2x_vf_mbx mbxs[BNX2X_MAX_NUM_OF_VFS];337#define BP_VF_MBX(bp, vfid) (&((bp)->vfdb->mbxs[vfid]))338 339 struct hw_dma bulletin_dma;340#define BP_VF_BULLETIN_DMA(bp) (&((bp)->vfdb->bulletin_dma))341#define BP_VF_BULLETIN(bp, vf) \342 (((struct pf_vf_bulletin_content *)(BP_VF_BULLETIN_DMA(bp)->addr)) \343 + (vf))344 345 struct hw_dma sp_dma;346#define bnx2x_vf_sp(bp, vf, field) ((bp)->vfdb->sp_dma.addr + \347 (vf)->index * sizeof(struct bnx2x_vf_sp) + \348 offsetof(struct bnx2x_vf_sp, field))349#define bnx2x_vf_sp_map(bp, vf, field) ((bp)->vfdb->sp_dma.mapping + \350 (vf)->index * sizeof(struct bnx2x_vf_sp) + \351 offsetof(struct bnx2x_vf_sp, field))352 353#define FLRD_VFS_DWORDS (BNX2X_MAX_NUM_OF_VFS / 32)354 u32 flrd_vfs[FLRD_VFS_DWORDS];355 356 /* the number of msix vectors belonging to this PF designated for VFs */357 u16 vf_sbs_pool;358 u16 first_vf_igu_entry;359 360 /* sp_rtnl synchronization */361 struct mutex event_mutex;362 u64 event_occur;363 364 /* bulletin board update synchronization */365 struct mutex bulletin_mutex;366};367 368/* queue access */369static inline struct bnx2x_vf_queue *vfq_get(struct bnx2x_virtf *vf, u8 index)370{371 return &(vf->vfqs[index]);372}373 374/* FW ids */375static inline u8 vf_igu_sb(struct bnx2x_virtf *vf, u16 sb_idx)376{377 return vf->igu_base_id + sb_idx;378}379 380static inline u8 vf_hc_qzone(struct bnx2x_virtf *vf, u16 sb_idx)381{382 return vf_igu_sb(vf, sb_idx);383}384 385static u8 vfq_cl_id(struct bnx2x_virtf *vf, struct bnx2x_vf_queue *q)386{387 return vf->igu_base_id + q->index;388}389 390static inline u8 vfq_stat_id(struct bnx2x_virtf *vf, struct bnx2x_vf_queue *q)391{392 if (vf->cfg_flags & VF_CFG_STATS_COALESCE)393 return vf->leading_rss;394 else395 return vfq_cl_id(vf, q);396}397 398static inline u8 vfq_qzone_id(struct bnx2x_virtf *vf, struct bnx2x_vf_queue *q)399{400 return vfq_cl_id(vf, q);401}402 403/* global iov routines */404int bnx2x_iov_init_ilt(struct bnx2x *bp, u16 line);405int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param, int num_vfs_param);406void bnx2x_iov_remove_one(struct bnx2x *bp);407void bnx2x_iov_free_mem(struct bnx2x *bp);408int bnx2x_iov_alloc_mem(struct bnx2x *bp);409int bnx2x_iov_nic_init(struct bnx2x *bp);410int bnx2x_iov_chip_cleanup(struct bnx2x *bp);411void bnx2x_iov_init_dq(struct bnx2x *bp);412void bnx2x_iov_init_dmae(struct bnx2x *bp);413void bnx2x_iov_set_queue_sp_obj(struct bnx2x *bp, int vf_cid,414 struct bnx2x_queue_sp_obj **q_obj);415int bnx2x_iov_eq_sp_event(struct bnx2x *bp, union event_ring_elem *elem);416void bnx2x_iov_adjust_stats_req(struct bnx2x *bp);417void bnx2x_iov_storm_stats_update(struct bnx2x *bp);418/* global vf mailbox routines */419void bnx2x_vf_mbx(struct bnx2x *bp);420void bnx2x_vf_mbx_schedule(struct bnx2x *bp,421 struct vf_pf_event_data *vfpf_event);422void bnx2x_vf_enable_mbx(struct bnx2x *bp, u8 abs_vfid);423 424/* CORE VF API */425typedef u8 bnx2x_mac_addr_t[ETH_ALEN];426 427/* acquire */428int bnx2x_vf_acquire(struct bnx2x *bp, struct bnx2x_virtf *vf,429 struct vf_pf_resc_request *resc);430/* init */431int bnx2x_vf_init(struct bnx2x *bp, struct bnx2x_virtf *vf,432 dma_addr_t *sb_map);433 434/* VFOP queue construction helpers */435void bnx2x_vfop_qctor_dump_tx(struct bnx2x *bp, struct bnx2x_virtf *vf,436 struct bnx2x_queue_init_params *init_params,437 struct bnx2x_queue_setup_params *setup_params,438 u16 q_idx, u16 sb_idx);439 440void bnx2x_vfop_qctor_dump_rx(struct bnx2x *bp, struct bnx2x_virtf *vf,441 struct bnx2x_queue_init_params *init_params,442 struct bnx2x_queue_setup_params *setup_params,443 u16 q_idx, u16 sb_idx);444 445void bnx2x_vfop_qctor_prep(struct bnx2x *bp,446 struct bnx2x_virtf *vf,447 struct bnx2x_vf_queue *q,448 struct bnx2x_vf_queue_construct_params *p,449 unsigned long q_type);450 451int bnx2x_vf_mac_vlan_config_list(struct bnx2x *bp, struct bnx2x_virtf *vf,452 struct bnx2x_vf_mac_vlan_filters *filters,453 int qid, bool drv_only);454 455int bnx2x_vf_queue_setup(struct bnx2x *bp, struct bnx2x_virtf *vf, int qid,456 struct bnx2x_vf_queue_construct_params *qctor);457 458int bnx2x_vf_queue_teardown(struct bnx2x *bp, struct bnx2x_virtf *vf, int qid);459 460int bnx2x_vf_mcast(struct bnx2x *bp, struct bnx2x_virtf *vf,461 bnx2x_mac_addr_t *mcasts, int mc_num, bool drv_only);462 463int bnx2x_vf_rxmode(struct bnx2x *bp, struct bnx2x_virtf *vf,464 int qid, unsigned long accept_flags);465 466int bnx2x_vf_close(struct bnx2x *bp, struct bnx2x_virtf *vf);467 468int bnx2x_vf_free(struct bnx2x *bp, struct bnx2x_virtf *vf);469 470int bnx2x_vf_rss_update(struct bnx2x *bp, struct bnx2x_virtf *vf,471 struct bnx2x_config_rss_params *rss);472 473int bnx2x_vf_tpa_update(struct bnx2x *bp, struct bnx2x_virtf *vf,474 struct vfpf_tpa_tlv *tlv,475 struct bnx2x_queue_update_tpa_params *params);476 477/* VF release ~ VF close + VF release-resources478 *479 * Release is the ultimate SW shutdown and is called whenever an480 * irrecoverable error is encountered.481 */482int bnx2x_vf_release(struct bnx2x *bp, struct bnx2x_virtf *vf);483int bnx2x_vf_idx_by_abs_fid(struct bnx2x *bp, u16 abs_vfid);484u8 bnx2x_vf_max_queue_cnt(struct bnx2x *bp, struct bnx2x_virtf *vf);485 486/* FLR routines */487 488/* VF FLR helpers */489int bnx2x_vf_flr_clnup_epilog(struct bnx2x *bp, u8 abs_vfid);490void bnx2x_vf_enable_access(struct bnx2x *bp, u8 abs_vfid);491 492/* Handles an FLR (or VF_DISABLE) notification form the MCP */493void bnx2x_vf_handle_flr_event(struct bnx2x *bp);494 495bool bnx2x_tlv_supported(u16 tlvtype);496 497u32 bnx2x_crc_vf_bulletin(struct pf_vf_bulletin_content *bulletin);498int bnx2x_post_vf_bulletin(struct bnx2x *bp, int vf);499void bnx2x_vf_bulletin_finalize(struct pf_vf_bulletin_content *bulletin,500 bool support_long);501 502enum sample_bulletin_result bnx2x_sample_bulletin(struct bnx2x *bp);503 504/* VF side vfpf channel functions */505int bnx2x_vfpf_acquire(struct bnx2x *bp, u8 tx_count, u8 rx_count);506int bnx2x_vfpf_release(struct bnx2x *bp);507int bnx2x_vfpf_init(struct bnx2x *bp);508void bnx2x_vfpf_close_vf(struct bnx2x *bp);509int bnx2x_vfpf_setup_q(struct bnx2x *bp, struct bnx2x_fastpath *fp,510 bool is_leading);511int bnx2x_vfpf_config_mac(struct bnx2x *bp, const u8 *addr, u8 vf_qid,512 bool set);513int bnx2x_vfpf_config_rss(struct bnx2x *bp,514 struct bnx2x_config_rss_params *params);515int bnx2x_vfpf_set_mcast(struct net_device *dev);516int bnx2x_vfpf_storm_rx_mode(struct bnx2x *bp);517 518static inline void bnx2x_vf_fill_fw_str(struct bnx2x *bp, char *buf,519 size_t buf_len)520{521 strscpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len);522}523 524static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp,525 struct bnx2x_fastpath *fp)526{527 return PXP_VF_ADDR_USDM_QUEUES_START +528 bp->acquire_resp.resc.hw_qid[fp->index] *529 sizeof(struct ustorm_queue_zone_data);530}531 532enum sample_bulletin_result bnx2x_sample_bulletin(struct bnx2x *bp);533void bnx2x_timer_sriov(struct bnx2x *bp);534void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp);535void bnx2x_vf_pci_dealloc(struct bnx2x *bp);536int bnx2x_vf_pci_alloc(struct bnx2x *bp);537int bnx2x_enable_sriov(struct bnx2x *bp);538void bnx2x_disable_sriov(struct bnx2x *bp);539static inline int bnx2x_vf_headroom(struct bnx2x *bp)540{541 return bp->vfdb->sriov.nr_virtfn * BNX2X_CIDS_PER_VF;542}543void bnx2x_pf_set_vfs_vlan(struct bnx2x *bp);544int bnx2x_sriov_configure(struct pci_dev *dev, int num_vfs);545void bnx2x_iov_channel_down(struct bnx2x *bp);546 547void bnx2x_iov_task(struct work_struct *work);548 549void bnx2x_schedule_iov_task(struct bnx2x *bp, enum bnx2x_iov_flag flag);550 551void bnx2x_iov_link_update(struct bnx2x *bp);552int bnx2x_iov_link_update_vf(struct bnx2x *bp, int idx);553 554int bnx2x_set_vf_link_state(struct net_device *dev, int vf, int link_state);555 556int bnx2x_vfpf_update_vlan(struct bnx2x *bp, u16 vid, u8 vf_qid, bool add);557#else /* CONFIG_BNX2X_SRIOV */558 559#define GET_NUM_VFS_PER_PATH(bp) 0560#define GET_NUM_VFS_PER_PF(bp) 0561#define VF_MAC_CREDIT_CNT 0562#define VF_VLAN_CREDIT_CNT 0563 564static inline void bnx2x_iov_set_queue_sp_obj(struct bnx2x *bp, int vf_cid,565 struct bnx2x_queue_sp_obj **q_obj) {}566static inline void bnx2x_vf_handle_flr_event(struct bnx2x *bp) {}567static inline int bnx2x_iov_eq_sp_event(struct bnx2x *bp,568 union event_ring_elem *elem) {return 1; }569static inline void bnx2x_vf_mbx(struct bnx2x *bp) {}570static inline void bnx2x_vf_mbx_schedule(struct bnx2x *bp,571 struct vf_pf_event_data *vfpf_event) {}572static inline int bnx2x_iov_init_ilt(struct bnx2x *bp, u16 line) {return line; }573static inline void bnx2x_iov_init_dq(struct bnx2x *bp) {}574static inline int bnx2x_iov_alloc_mem(struct bnx2x *bp) {return 0; }575static inline void bnx2x_iov_free_mem(struct bnx2x *bp) {}576static inline int bnx2x_iov_chip_cleanup(struct bnx2x *bp) {return 0; }577static inline void bnx2x_iov_init_dmae(struct bnx2x *bp) {}578static inline int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param,579 int num_vfs_param) {return 0; }580static inline void bnx2x_iov_remove_one(struct bnx2x *bp) {}581static inline int bnx2x_enable_sriov(struct bnx2x *bp) {return 0; }582static inline void bnx2x_disable_sriov(struct bnx2x *bp) {}583static inline int bnx2x_vfpf_acquire(struct bnx2x *bp,584 u8 tx_count, u8 rx_count) {return 0; }585static inline int bnx2x_vfpf_release(struct bnx2x *bp) {return 0; }586static inline int bnx2x_vfpf_init(struct bnx2x *bp) {return 0; }587static inline void bnx2x_vfpf_close_vf(struct bnx2x *bp) {}588static inline int bnx2x_vfpf_setup_q(struct bnx2x *bp, struct bnx2x_fastpath *fp, bool is_leading) {return 0; }589static inline int bnx2x_vfpf_config_mac(struct bnx2x *bp, const u8 *addr,590 u8 vf_qid, bool set) {return 0; }591static inline int bnx2x_vfpf_config_rss(struct bnx2x *bp,592 struct bnx2x_config_rss_params *params) {return 0; }593static inline int bnx2x_vfpf_set_mcast(struct net_device *dev) {return 0; }594static inline int bnx2x_vfpf_storm_rx_mode(struct bnx2x *bp) {return 0; }595static inline int bnx2x_iov_nic_init(struct bnx2x *bp) {return 0; }596static inline int bnx2x_vf_headroom(struct bnx2x *bp) {return 0; }597static inline void bnx2x_iov_adjust_stats_req(struct bnx2x *bp) {}598static inline void bnx2x_vf_fill_fw_str(struct bnx2x *bp, char *buf,599 size_t buf_len) {}600static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp,601 struct bnx2x_fastpath *fp) {return 0; }602static inline enum sample_bulletin_result bnx2x_sample_bulletin(struct bnx2x *bp)603{604 return PFVF_BULLETIN_UNCHANGED;605}606static inline void bnx2x_timer_sriov(struct bnx2x *bp) {}607 608static inline void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp)609{610 return NULL;611}612 613static inline void bnx2x_vf_pci_dealloc(struct bnx2x *bp) {}614static inline int bnx2x_vf_pci_alloc(struct bnx2x *bp) {return 0; }615static inline void bnx2x_pf_set_vfs_vlan(struct bnx2x *bp) {}616static inline int bnx2x_sriov_configure(struct pci_dev *dev, int num_vfs) {return 0; }617static inline void bnx2x_iov_channel_down(struct bnx2x *bp) {}618 619static inline void bnx2x_iov_task(struct work_struct *work) {}620static inline void bnx2x_schedule_iov_task(struct bnx2x *bp, enum bnx2x_iov_flag flag) {}621static inline void bnx2x_iov_link_update(struct bnx2x *bp) {}622static inline int bnx2x_iov_link_update_vf(struct bnx2x *bp, int idx) {return 0; }623 624static inline int bnx2x_set_vf_link_state(struct net_device *dev, int vf,625 int link_state) {return 0; }626struct pf_vf_bulletin_content;627static inline void bnx2x_vf_bulletin_finalize(struct pf_vf_bulletin_content *bulletin,628 bool support_long) {}629 630static inline int bnx2x_vfpf_update_vlan(struct bnx2x *bp, u16 vid, u8 vf_qid, bool add) {return 0; }631 632#endif /* CONFIG_BNX2X_SRIOV */633#endif /* bnx2x_sriov.h */634