brintos

brintos / linux-shallow public Read only

0
0
Text · 19.7 KiB · 02a4e55 Raw
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