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_VF_H
3432a47e72SYuval Mintz #define _QED_VF_H
3532a47e72SYuval Mintz 
36dacd88d6SYuval Mintz #include "qed_l2.h"
3736558c3dSYuval Mintz #include "qed_mcp.h"
38dacd88d6SYuval Mintz 
39dacd88d6SYuval Mintz #define T_ETH_INDIRECTION_TABLE_SIZE 128
40dacd88d6SYuval Mintz #define T_ETH_RSS_KEY_SIZE 10
41dacd88d6SYuval Mintz 
421408cc1fSYuval Mintz struct vf_pf_resc_request {
431408cc1fSYuval Mintz 	u8 num_rxqs;
441408cc1fSYuval Mintz 	u8 num_txqs;
451408cc1fSYuval Mintz 	u8 num_sbs;
461408cc1fSYuval Mintz 	u8 num_mac_filters;
471408cc1fSYuval Mintz 	u8 num_vlan_filters;
481408cc1fSYuval Mintz 	u8 num_mc_filters;
4908bc8f15SMintz, Yuval 	u8 num_cids;
5008bc8f15SMintz, Yuval 	u8 padding;
511408cc1fSYuval Mintz };
521408cc1fSYuval Mintz 
531408cc1fSYuval Mintz struct hw_sb_info {
541408cc1fSYuval Mintz 	u16 hw_sb_id;
551408cc1fSYuval Mintz 	u8 sb_qid;
561408cc1fSYuval Mintz 	u8 padding[5];
571408cc1fSYuval Mintz };
581408cc1fSYuval Mintz 
59dacd88d6SYuval Mintz #define TLV_BUFFER_SIZE                 1024
60dacd88d6SYuval Mintz 
6137bff2b9SYuval Mintz enum {
6237bff2b9SYuval Mintz 	PFVF_STATUS_WAITING,
6337bff2b9SYuval Mintz 	PFVF_STATUS_SUCCESS,
6437bff2b9SYuval Mintz 	PFVF_STATUS_FAILURE,
6537bff2b9SYuval Mintz 	PFVF_STATUS_NOT_SUPPORTED,
6637bff2b9SYuval Mintz 	PFVF_STATUS_NO_RESOURCE,
6737bff2b9SYuval Mintz 	PFVF_STATUS_FORCED,
687eff82b0SYuval Mintz 	PFVF_STATUS_MALICIOUS,
6937bff2b9SYuval Mintz };
7037bff2b9SYuval Mintz 
7137bff2b9SYuval Mintz /* vf pf channel tlvs */
7237bff2b9SYuval Mintz /* general tlv header (used for both vf->pf request and pf->vf response) */
7337bff2b9SYuval Mintz struct channel_tlv {
7437bff2b9SYuval Mintz 	u16 type;
7537bff2b9SYuval Mintz 	u16 length;
7637bff2b9SYuval Mintz };
7737bff2b9SYuval Mintz 
7837bff2b9SYuval Mintz /* header of first vf->pf tlv carries the offset used to calculate reponse
7937bff2b9SYuval Mintz  * buffer address
8037bff2b9SYuval Mintz  */
8137bff2b9SYuval Mintz struct vfpf_first_tlv {
8237bff2b9SYuval Mintz 	struct channel_tlv tl;
8337bff2b9SYuval Mintz 	u32 padding;
8437bff2b9SYuval Mintz 	u64 reply_address;
8537bff2b9SYuval Mintz };
8637bff2b9SYuval Mintz 
8737bff2b9SYuval Mintz /* header of pf->vf tlvs, carries the status of handling the request */
8837bff2b9SYuval Mintz struct pfvf_tlv {
8937bff2b9SYuval Mintz 	struct channel_tlv tl;
9037bff2b9SYuval Mintz 	u8 status;
9137bff2b9SYuval Mintz 	u8 padding[3];
9237bff2b9SYuval Mintz };
9337bff2b9SYuval Mintz 
9437bff2b9SYuval Mintz /* response tlv used for most tlvs */
9537bff2b9SYuval Mintz struct pfvf_def_resp_tlv {
9637bff2b9SYuval Mintz 	struct pfvf_tlv hdr;
9737bff2b9SYuval Mintz };
9837bff2b9SYuval Mintz 
9937bff2b9SYuval Mintz /* used to terminate and pad a tlv list */
10037bff2b9SYuval Mintz struct channel_list_end_tlv {
10137bff2b9SYuval Mintz 	struct channel_tlv tl;
10237bff2b9SYuval Mintz 	u8 padding[4];
10337bff2b9SYuval Mintz };
10437bff2b9SYuval Mintz 
1051408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX (0)
1061408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_WINDOWS (1)
1071408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_ESX (2)
1081408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_SOLARIS (3)
1091408cc1fSYuval Mintz #define VFPF_ACQUIRE_OS_LINUX_USERSPACE (4)
1101408cc1fSYuval Mintz 
1111408cc1fSYuval Mintz struct vfpf_acquire_tlv {
1121408cc1fSYuval Mintz 	struct vfpf_first_tlv first_tlv;
1131408cc1fSYuval Mintz 
1141408cc1fSYuval Mintz 	struct vf_pf_vfdev_info {
115a044df83SYuval Mintz #define VFPF_ACQUIRE_CAP_PRE_FP_HSI     (1 << 0) /* VF pre-FP hsi version */
1161408cc1fSYuval Mintz #define VFPF_ACQUIRE_CAP_100G		(1 << 1) /* VF can support 100g */
11708bc8f15SMintz, Yuval 	/* A requirement for supporting multi-Tx queues on a single queue-zone,
11808bc8f15SMintz, Yuval 	 * VF would pass qids as additional information whenever passing queue
11908bc8f15SMintz, Yuval 	 * references.
12008bc8f15SMintz, Yuval 	 */
12108bc8f15SMintz, Yuval #define VFPF_ACQUIRE_CAP_QUEUE_QIDS     BIT(2)
1221408cc1fSYuval Mintz 		u64 capabilities;
1231408cc1fSYuval Mintz 		u8 fw_major;
1241408cc1fSYuval Mintz 		u8 fw_minor;
1251408cc1fSYuval Mintz 		u8 fw_revision;
1261408cc1fSYuval Mintz 		u8 fw_engineering;
1271408cc1fSYuval Mintz 		u32 driver_version;
1281408cc1fSYuval Mintz 		u16 opaque_fid;	/* ME register value */
1291408cc1fSYuval Mintz 		u8 os_type;	/* VFPF_ACQUIRE_OS_* value */
1301fe614d1SYuval Mintz 		u8 eth_fp_hsi_major;
1311fe614d1SYuval Mintz 		u8 eth_fp_hsi_minor;
1321fe614d1SYuval Mintz 		u8 padding[3];
1331408cc1fSYuval Mintz 	} vfdev_info;
1341408cc1fSYuval Mintz 
1351408cc1fSYuval Mintz 	struct vf_pf_resc_request resc_request;
1361408cc1fSYuval Mintz 
1371408cc1fSYuval Mintz 	u64 bulletin_addr;
1381408cc1fSYuval Mintz 	u32 bulletin_size;
1391408cc1fSYuval Mintz 	u32 padding;
1401408cc1fSYuval Mintz };
1411408cc1fSYuval Mintz 
142dacd88d6SYuval Mintz /* receive side scaling tlv */
143dacd88d6SYuval Mintz struct vfpf_vport_update_rss_tlv {
144dacd88d6SYuval Mintz 	struct channel_tlv tl;
145dacd88d6SYuval Mintz 
146dacd88d6SYuval Mintz 	u8 update_rss_flags;
147dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CONFIG_FLAG       BIT(0)
148dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CAPS_FLAG         BIT(1)
149dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_IND_TABLE_FLAG    BIT(2)
150dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_KEY_FLAG          BIT(3)
151dacd88d6SYuval Mintz 
152dacd88d6SYuval Mintz 	u8 rss_enable;
153dacd88d6SYuval Mintz 	u8 rss_caps;
154dacd88d6SYuval Mintz 	u8 rss_table_size_log;	/* The table size is 2 ^ rss_table_size_log */
155dacd88d6SYuval Mintz 	u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
156dacd88d6SYuval Mintz 	u32 rss_key[T_ETH_RSS_KEY_SIZE];
157dacd88d6SYuval Mintz };
158dacd88d6SYuval Mintz 
1591408cc1fSYuval Mintz struct pfvf_storm_stats {
1601408cc1fSYuval Mintz 	u32 address;
1611408cc1fSYuval Mintz 	u32 len;
1621408cc1fSYuval Mintz };
1631408cc1fSYuval Mintz 
1641408cc1fSYuval Mintz struct pfvf_stats_info {
1651408cc1fSYuval Mintz 	struct pfvf_storm_stats mstats;
1661408cc1fSYuval Mintz 	struct pfvf_storm_stats pstats;
1671408cc1fSYuval Mintz 	struct pfvf_storm_stats tstats;
1681408cc1fSYuval Mintz 	struct pfvf_storm_stats ustats;
1691408cc1fSYuval Mintz };
1701408cc1fSYuval Mintz 
1711408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv {
1721408cc1fSYuval Mintz 	struct pfvf_tlv hdr;
1731408cc1fSYuval Mintz 
1741408cc1fSYuval Mintz 	struct pf_vf_pfdev_info {
1751408cc1fSYuval Mintz 		u32 chip_num;
1761408cc1fSYuval Mintz 		u32 mfw_ver;
1771408cc1fSYuval Mintz 
1781408cc1fSYuval Mintz 		u16 fw_major;
1791408cc1fSYuval Mintz 		u16 fw_minor;
1801408cc1fSYuval Mintz 		u16 fw_rev;
1811408cc1fSYuval Mintz 		u16 fw_eng;
1821408cc1fSYuval Mintz 
1831408cc1fSYuval Mintz 		u64 capabilities;
1841408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED	BIT(0)
1851408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_100G			BIT(1)	/* If set, 100g PF */
1861408cc1fSYuval Mintz /* There are old PF versions where the PF might mistakenly override the sanity
1871408cc1fSYuval Mintz  * mechanism [version-based] and allow a VF that can't be supported to pass
1881408cc1fSYuval Mintz  * the acquisition phase.
1891408cc1fSYuval Mintz  * To overcome this, PFs now indicate that they're past that point and the new
1901408cc1fSYuval Mintz  * VFs would fail probe on the older PFs that fail to do so.
1911408cc1fSYuval Mintz  */
1921408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE	BIT(2)
1931408cc1fSYuval Mintz 
19408bc8f15SMintz, Yuval 	/* PF expects queues to be received with additional qids */
19508bc8f15SMintz, Yuval #define PFVF_ACQUIRE_CAP_QUEUE_QIDS             BIT(3)
19608bc8f15SMintz, Yuval 
1971408cc1fSYuval Mintz 		u16 db_size;
1981408cc1fSYuval Mintz 		u8 indices_per_sb;
1991408cc1fSYuval Mintz 		u8 os_type;
2001408cc1fSYuval Mintz 
2011408cc1fSYuval Mintz 		/* These should match the PF's qed_dev values */
2021408cc1fSYuval Mintz 		u16 chip_rev;
2031408cc1fSYuval Mintz 		u8 dev_type;
2041408cc1fSYuval Mintz 
2051408cc1fSYuval Mintz 		u8 padding;
2061408cc1fSYuval Mintz 
2071408cc1fSYuval Mintz 		struct pfvf_stats_info stats_info;
2081408cc1fSYuval Mintz 
2091408cc1fSYuval Mintz 		u8 port_mac[ETH_ALEN];
2101fe614d1SYuval Mintz 
2111fe614d1SYuval Mintz 		/* It's possible PF had to configure an older fastpath HSI
2121fe614d1SYuval Mintz 		 * [in case VF is newer than PF]. This is communicated back
2131fe614d1SYuval Mintz 		 * to the VF. It can also be used in case of error due to
2141fe614d1SYuval Mintz 		 * non-matching versions to shed light in VF about failure.
2151fe614d1SYuval Mintz 		 */
2161fe614d1SYuval Mintz 		u8 major_fp_hsi;
2171fe614d1SYuval Mintz 		u8 minor_fp_hsi;
2181408cc1fSYuval Mintz 	} pfdev_info;
2191408cc1fSYuval Mintz 
2201408cc1fSYuval Mintz 	struct pf_vf_resc {
2211408cc1fSYuval Mintz #define PFVF_MAX_QUEUES_PER_VF		16
2221408cc1fSYuval Mintz #define PFVF_MAX_SBS_PER_VF		16
2231408cc1fSYuval Mintz 		struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
2241408cc1fSYuval Mintz 		u8 hw_qid[PFVF_MAX_QUEUES_PER_VF];
2251408cc1fSYuval Mintz 		u8 cid[PFVF_MAX_QUEUES_PER_VF];
2261408cc1fSYuval Mintz 
2271408cc1fSYuval Mintz 		u8 num_rxqs;
2281408cc1fSYuval Mintz 		u8 num_txqs;
2291408cc1fSYuval Mintz 		u8 num_sbs;
2301408cc1fSYuval Mintz 		u8 num_mac_filters;
2311408cc1fSYuval Mintz 		u8 num_vlan_filters;
2321408cc1fSYuval Mintz 		u8 num_mc_filters;
23308bc8f15SMintz, Yuval 		u8 num_cids;
23408bc8f15SMintz, Yuval 		u8 padding;
2351408cc1fSYuval Mintz 	} resc;
2361408cc1fSYuval Mintz 
2371408cc1fSYuval Mintz 	u32 bulletin_size;
2381408cc1fSYuval Mintz 	u32 padding;
2391408cc1fSYuval Mintz };
2401408cc1fSYuval Mintz 
241dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv {
242dacd88d6SYuval Mintz 	struct pfvf_tlv hdr;
243dacd88d6SYuval Mintz 	u32 offset;		/* offset to consumer/producer of queue */
244dacd88d6SYuval Mintz 	u8 padding[4];
245dacd88d6SYuval Mintz };
246dacd88d6SYuval Mintz 
24708bc8f15SMintz, Yuval /* Extended queue information - additional index for reference inside qzone.
24808bc8f15SMintz, Yuval  * If commmunicated between VF/PF, each TLV relating to queues should be
24908bc8f15SMintz, Yuval  * extended by one such [or have a future base TLV that already contains info].
25008bc8f15SMintz, Yuval  */
25108bc8f15SMintz, Yuval struct vfpf_qid_tlv {
25208bc8f15SMintz, Yuval 	struct channel_tlv tl;
25308bc8f15SMintz, Yuval 	u8 qid;
25408bc8f15SMintz, Yuval 	u8 padding[3];
25508bc8f15SMintz, Yuval };
25608bc8f15SMintz, Yuval 
257dacd88d6SYuval Mintz /* Setup Queue */
258dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv {
259dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
260dacd88d6SYuval Mintz 
261dacd88d6SYuval Mintz 	/* physical addresses */
262dacd88d6SYuval Mintz 	u64 rxq_addr;
263dacd88d6SYuval Mintz 	u64 deprecated_sge_addr;
264dacd88d6SYuval Mintz 	u64 cqe_pbl_addr;
265dacd88d6SYuval Mintz 
266dacd88d6SYuval Mintz 	u16 cqe_pbl_size;
267dacd88d6SYuval Mintz 	u16 hw_sb;
268dacd88d6SYuval Mintz 	u16 rx_qid;
269dacd88d6SYuval Mintz 	u16 hc_rate;		/* desired interrupts per sec. */
270dacd88d6SYuval Mintz 
271dacd88d6SYuval Mintz 	u16 bd_max_bytes;
272dacd88d6SYuval Mintz 	u16 stat_id;
273dacd88d6SYuval Mintz 	u8 sb_index;
274dacd88d6SYuval Mintz 	u8 padding[3];
275dacd88d6SYuval Mintz };
276dacd88d6SYuval Mintz 
277dacd88d6SYuval Mintz struct vfpf_start_txq_tlv {
278dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
279dacd88d6SYuval Mintz 
280dacd88d6SYuval Mintz 	/* physical addresses */
281dacd88d6SYuval Mintz 	u64 pbl_addr;
282dacd88d6SYuval Mintz 	u16 pbl_size;
283dacd88d6SYuval Mintz 	u16 stat_id;
284dacd88d6SYuval Mintz 	u16 tx_qid;
285dacd88d6SYuval Mintz 	u16 hw_sb;
286dacd88d6SYuval Mintz 
287dacd88d6SYuval Mintz 	u32 flags;		/* VFPF_QUEUE_FLG_X flags */
288dacd88d6SYuval Mintz 	u16 hc_rate;		/* desired interrupts per sec. */
289dacd88d6SYuval Mintz 	u8 sb_index;
290dacd88d6SYuval Mintz 	u8 padding[3];
291dacd88d6SYuval Mintz };
292dacd88d6SYuval Mintz 
293dacd88d6SYuval Mintz /* Stop RX Queue */
294dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv {
295dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
296dacd88d6SYuval Mintz 
297dacd88d6SYuval Mintz 	u16 rx_qid;
2984c4fa793SMintz, Yuval 
2994c4fa793SMintz, Yuval 	/* this field is deprecated and should *always* be set to '1' */
300dacd88d6SYuval Mintz 	u8 num_rxqs;
301dacd88d6SYuval Mintz 	u8 cqe_completion;
302dacd88d6SYuval Mintz 	u8 padding[4];
303dacd88d6SYuval Mintz };
304dacd88d6SYuval Mintz 
305dacd88d6SYuval Mintz /* Stop TX Queues */
306dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv {
307dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
308dacd88d6SYuval Mintz 
309dacd88d6SYuval Mintz 	u16 tx_qid;
3104c4fa793SMintz, Yuval 
3114c4fa793SMintz, Yuval 	/* this field is deprecated and should *always* be set to '1' */
312dacd88d6SYuval Mintz 	u8 num_txqs;
313dacd88d6SYuval Mintz 	u8 padding[5];
314dacd88d6SYuval Mintz };
315dacd88d6SYuval Mintz 
316dacd88d6SYuval Mintz struct vfpf_update_rxq_tlv {
317dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
318dacd88d6SYuval Mintz 
319dacd88d6SYuval Mintz 	u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF];
320dacd88d6SYuval Mintz 
321dacd88d6SYuval Mintz 	u16 rx_qid;
322dacd88d6SYuval Mintz 	u8 num_rxqs;
323dacd88d6SYuval Mintz 	u8 flags;
324dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG    BIT(0)
325dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG          BIT(1)
326dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG        BIT(2)
327dacd88d6SYuval Mintz 
328dacd88d6SYuval Mintz 	u8 padding[4];
329dacd88d6SYuval Mintz };
330dacd88d6SYuval Mintz 
331dacd88d6SYuval Mintz /* Set Queue Filters */
332dacd88d6SYuval Mintz struct vfpf_q_mac_vlan_filter {
333dacd88d6SYuval Mintz 	u32 flags;
334dacd88d6SYuval Mintz #define VFPF_Q_FILTER_DEST_MAC_VALID    0x01
335dacd88d6SYuval Mintz #define VFPF_Q_FILTER_VLAN_TAG_VALID    0x02
336dacd88d6SYuval Mintz #define VFPF_Q_FILTER_SET_MAC           0x100	/* set/clear */
337dacd88d6SYuval Mintz 
338dacd88d6SYuval Mintz 	u8 mac[ETH_ALEN];
339dacd88d6SYuval Mintz 	u16 vlan_tag;
340dacd88d6SYuval Mintz 
341dacd88d6SYuval Mintz 	u8 padding[4];
342dacd88d6SYuval Mintz };
343dacd88d6SYuval Mintz 
344dacd88d6SYuval Mintz /* Start a vport */
345dacd88d6SYuval Mintz struct vfpf_vport_start_tlv {
346dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
347dacd88d6SYuval Mintz 
348dacd88d6SYuval Mintz 	u64 sb_addr[PFVF_MAX_SBS_PER_VF];
349dacd88d6SYuval Mintz 
350dacd88d6SYuval Mintz 	u32 tpa_mode;
351dacd88d6SYuval Mintz 	u16 dep1;
352dacd88d6SYuval Mintz 	u16 mtu;
353dacd88d6SYuval Mintz 
354dacd88d6SYuval Mintz 	u8 vport_id;
355dacd88d6SYuval Mintz 	u8 inner_vlan_removal;
356dacd88d6SYuval Mintz 
357dacd88d6SYuval Mintz 	u8 only_untagged;
358dacd88d6SYuval Mintz 	u8 max_buffers_per_cqe;
359dacd88d6SYuval Mintz 
360dacd88d6SYuval Mintz 	u8 padding[4];
361dacd88d6SYuval Mintz };
362dacd88d6SYuval Mintz 
363dacd88d6SYuval Mintz /* Extended tlvs - need to add rss, mcast, accept mode tlvs */
364dacd88d6SYuval Mintz struct vfpf_vport_update_activate_tlv {
365dacd88d6SYuval Mintz 	struct channel_tlv tl;
366dacd88d6SYuval Mintz 	u8 update_rx;
367dacd88d6SYuval Mintz 	u8 update_tx;
368dacd88d6SYuval Mintz 	u8 active_rx;
369dacd88d6SYuval Mintz 	u8 active_tx;
370dacd88d6SYuval Mintz };
371dacd88d6SYuval Mintz 
37217b235c1SYuval Mintz struct vfpf_vport_update_tx_switch_tlv {
37317b235c1SYuval Mintz 	struct channel_tlv tl;
37417b235c1SYuval Mintz 	u8 tx_switching;
37517b235c1SYuval Mintz 	u8 padding[3];
37617b235c1SYuval Mintz };
37717b235c1SYuval Mintz 
37817b235c1SYuval Mintz struct vfpf_vport_update_vlan_strip_tlv {
37917b235c1SYuval Mintz 	struct channel_tlv tl;
38017b235c1SYuval Mintz 	u8 remove_vlan;
38117b235c1SYuval Mintz 	u8 padding[3];
38217b235c1SYuval Mintz };
38317b235c1SYuval Mintz 
384dacd88d6SYuval Mintz struct vfpf_vport_update_mcast_bin_tlv {
385dacd88d6SYuval Mintz 	struct channel_tlv tl;
386dacd88d6SYuval Mintz 	u8 padding[4];
387dacd88d6SYuval Mintz 
388dacd88d6SYuval Mintz 	u64 bins[8];
389dacd88d6SYuval Mintz };
390dacd88d6SYuval Mintz 
391dacd88d6SYuval Mintz struct vfpf_vport_update_accept_param_tlv {
392dacd88d6SYuval Mintz 	struct channel_tlv tl;
393dacd88d6SYuval Mintz 	u8 update_rx_mode;
394dacd88d6SYuval Mintz 	u8 update_tx_mode;
395dacd88d6SYuval Mintz 	u8 rx_accept_filter;
396dacd88d6SYuval Mintz 	u8 tx_accept_filter;
397dacd88d6SYuval Mintz };
398dacd88d6SYuval Mintz 
39917b235c1SYuval Mintz struct vfpf_vport_update_accept_any_vlan_tlv {
40017b235c1SYuval Mintz 	struct channel_tlv tl;
40117b235c1SYuval Mintz 	u8 update_accept_any_vlan_flg;
40217b235c1SYuval Mintz 	u8 accept_any_vlan;
40317b235c1SYuval Mintz 
40417b235c1SYuval Mintz 	u8 padding[2];
40517b235c1SYuval Mintz };
40617b235c1SYuval Mintz 
40717b235c1SYuval Mintz struct vfpf_vport_update_sge_tpa_tlv {
40817b235c1SYuval Mintz 	struct channel_tlv tl;
40917b235c1SYuval Mintz 
41017b235c1SYuval Mintz 	u16 sge_tpa_flags;
41117b235c1SYuval Mintz #define VFPF_TPA_IPV4_EN_FLAG		BIT(0)
41217b235c1SYuval Mintz #define VFPF_TPA_IPV6_EN_FLAG		BIT(1)
41317b235c1SYuval Mintz #define VFPF_TPA_PKT_SPLIT_FLAG		BIT(2)
41417b235c1SYuval Mintz #define VFPF_TPA_HDR_DATA_SPLIT_FLAG	BIT(3)
41517b235c1SYuval Mintz #define VFPF_TPA_GRO_CONSIST_FLAG	BIT(4)
41617b235c1SYuval Mintz 
41717b235c1SYuval Mintz 	u8 update_sge_tpa_flags;
41817b235c1SYuval Mintz #define VFPF_UPDATE_SGE_DEPRECATED_FLAG	BIT(0)
41917b235c1SYuval Mintz #define VFPF_UPDATE_TPA_EN_FLAG		BIT(1)
42017b235c1SYuval Mintz #define VFPF_UPDATE_TPA_PARAM_FLAG	BIT(2)
42117b235c1SYuval Mintz 
42217b235c1SYuval Mintz 	u8 max_buffers_per_cqe;
42317b235c1SYuval Mintz 
42417b235c1SYuval Mintz 	u16 deprecated_sge_buff_size;
42517b235c1SYuval Mintz 	u16 tpa_max_size;
42617b235c1SYuval Mintz 	u16 tpa_min_size_to_start;
42717b235c1SYuval Mintz 	u16 tpa_min_size_to_cont;
42817b235c1SYuval Mintz 
42917b235c1SYuval Mintz 	u8 tpa_max_aggs_num;
43017b235c1SYuval Mintz 	u8 padding[7];
43117b235c1SYuval Mintz };
43217b235c1SYuval Mintz 
433dacd88d6SYuval Mintz /* Primary tlv as a header for various extended tlvs for
434dacd88d6SYuval Mintz  * various functionalities in vport update ramrod.
435dacd88d6SYuval Mintz  */
436dacd88d6SYuval Mintz struct vfpf_vport_update_tlv {
437dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
438dacd88d6SYuval Mintz };
439dacd88d6SYuval Mintz 
440dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv {
441dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
442dacd88d6SYuval Mintz 
443dacd88d6SYuval Mintz 	u8 opcode;
444dacd88d6SYuval Mintz 	u8 type;
445dacd88d6SYuval Mintz 
446dacd88d6SYuval Mintz 	u8 mac[ETH_ALEN];
447dacd88d6SYuval Mintz 
448dacd88d6SYuval Mintz 	u16 vlan;
449dacd88d6SYuval Mintz 	u16 padding[3];
450dacd88d6SYuval Mintz };
451dacd88d6SYuval Mintz 
452eaf3c0c6SChopra, Manish /* tunnel update param tlv */
453eaf3c0c6SChopra, Manish struct vfpf_update_tunn_param_tlv {
454eaf3c0c6SChopra, Manish 	struct vfpf_first_tlv first_tlv;
455eaf3c0c6SChopra, Manish 
456eaf3c0c6SChopra, Manish 	u8 tun_mode_update_mask;
457eaf3c0c6SChopra, Manish 	u8 tunn_mode;
458eaf3c0c6SChopra, Manish 	u8 update_tun_cls;
459eaf3c0c6SChopra, Manish 	u8 vxlan_clss;
460eaf3c0c6SChopra, Manish 	u8 l2gre_clss;
461eaf3c0c6SChopra, Manish 	u8 ipgre_clss;
462eaf3c0c6SChopra, Manish 	u8 l2geneve_clss;
463eaf3c0c6SChopra, Manish 	u8 ipgeneve_clss;
464eaf3c0c6SChopra, Manish 	u8 update_geneve_port;
465eaf3c0c6SChopra, Manish 	u8 update_vxlan_port;
466eaf3c0c6SChopra, Manish 	u16 geneve_port;
467eaf3c0c6SChopra, Manish 	u16 vxlan_port;
468eaf3c0c6SChopra, Manish 	u8 padding[2];
469eaf3c0c6SChopra, Manish };
470eaf3c0c6SChopra, Manish 
471eaf3c0c6SChopra, Manish struct pfvf_update_tunn_param_tlv {
472eaf3c0c6SChopra, Manish 	struct pfvf_tlv hdr;
473eaf3c0c6SChopra, Manish 
474eaf3c0c6SChopra, Manish 	u16 tunn_feature_mask;
475eaf3c0c6SChopra, Manish 	u8 vxlan_mode;
476eaf3c0c6SChopra, Manish 	u8 l2geneve_mode;
477eaf3c0c6SChopra, Manish 	u8 ipgeneve_mode;
478eaf3c0c6SChopra, Manish 	u8 l2gre_mode;
479eaf3c0c6SChopra, Manish 	u8 ipgre_mode;
480eaf3c0c6SChopra, Manish 	u8 vxlan_clss;
481eaf3c0c6SChopra, Manish 	u8 l2gre_clss;
482eaf3c0c6SChopra, Manish 	u8 ipgre_clss;
483eaf3c0c6SChopra, Manish 	u8 l2geneve_clss;
484eaf3c0c6SChopra, Manish 	u8 ipgeneve_clss;
485eaf3c0c6SChopra, Manish 	u16 vxlan_udp_port;
486eaf3c0c6SChopra, Manish 	u16 geneve_udp_port;
487eaf3c0c6SChopra, Manish };
488eaf3c0c6SChopra, Manish 
48932a47e72SYuval Mintz struct tlv_buffer_size {
49032a47e72SYuval Mintz 	u8 tlv_buffer[TLV_BUFFER_SIZE];
49132a47e72SYuval Mintz };
49232a47e72SYuval Mintz 
49332a47e72SYuval Mintz union vfpf_tlvs {
49437bff2b9SYuval Mintz 	struct vfpf_first_tlv first_tlv;
4951408cc1fSYuval Mintz 	struct vfpf_acquire_tlv acquire;
496dacd88d6SYuval Mintz 	struct vfpf_start_rxq_tlv start_rxq;
497dacd88d6SYuval Mintz 	struct vfpf_start_txq_tlv start_txq;
498dacd88d6SYuval Mintz 	struct vfpf_stop_rxqs_tlv stop_rxqs;
499dacd88d6SYuval Mintz 	struct vfpf_stop_txqs_tlv stop_txqs;
50017b235c1SYuval Mintz 	struct vfpf_update_rxq_tlv update_rxq;
501dacd88d6SYuval Mintz 	struct vfpf_vport_start_tlv start_vport;
502dacd88d6SYuval Mintz 	struct vfpf_vport_update_tlv vport_update;
503dacd88d6SYuval Mintz 	struct vfpf_ucast_filter_tlv ucast_filter;
504eaf3c0c6SChopra, Manish 	struct vfpf_update_tunn_param_tlv tunn_param_update;
50537bff2b9SYuval Mintz 	struct channel_list_end_tlv list_end;
50632a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
50732a47e72SYuval Mintz };
50832a47e72SYuval Mintz 
50932a47e72SYuval Mintz union pfvf_tlvs {
51037bff2b9SYuval Mintz 	struct pfvf_def_resp_tlv default_resp;
5111408cc1fSYuval Mintz 	struct pfvf_acquire_resp_tlv acquire_resp;
51232a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
513dacd88d6SYuval Mintz 	struct pfvf_start_queue_resp_tlv queue_start;
514eaf3c0c6SChopra, Manish 	struct pfvf_update_tunn_param_tlv tunn_param_resp;
51532a47e72SYuval Mintz };
51632a47e72SYuval Mintz 
51708feecd7SYuval Mintz enum qed_bulletin_bit {
518eff16960SYuval Mintz 	/* Alert the VF that a forced MAC was set by the PF */
519eff16960SYuval Mintz 	MAC_ADDR_FORCED = 0,
52008feecd7SYuval Mintz 	/* Alert the VF that a forced VLAN was set by the PF */
52108feecd7SYuval Mintz 	VLAN_ADDR_FORCED = 2,
52208feecd7SYuval Mintz 
52308feecd7SYuval Mintz 	/* Indicate that `default_only_untagged' contains actual data */
52408feecd7SYuval Mintz 	VFPF_BULLETIN_UNTAGGED_DEFAULT = 3,
52508feecd7SYuval Mintz 	VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4,
52608feecd7SYuval Mintz 
527eff16960SYuval Mintz 	/* Alert the VF that suggested mac was sent by the PF.
528eff16960SYuval Mintz 	 * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set.
529eff16960SYuval Mintz 	 */
530eff16960SYuval Mintz 	VFPF_BULLETIN_MAC_ADDR = 5
53108feecd7SYuval Mintz };
53208feecd7SYuval Mintz 
53332a47e72SYuval Mintz struct qed_bulletin_content {
53432a47e72SYuval Mintz 	/* crc of structure to ensure is not in mid-update */
53532a47e72SYuval Mintz 	u32 crc;
53632a47e72SYuval Mintz 
53732a47e72SYuval Mintz 	u32 version;
53832a47e72SYuval Mintz 
53932a47e72SYuval Mintz 	/* bitmap indicating which fields hold valid values */
54032a47e72SYuval Mintz 	u64 valid_bitmap;
54136558c3dSYuval Mintz 
54236558c3dSYuval Mintz 	/* used for MAC_ADDR or MAC_ADDR_FORCED */
54336558c3dSYuval Mintz 	u8 mac[ETH_ALEN];
54436558c3dSYuval Mintz 
54536558c3dSYuval Mintz 	/* If valid, 1 => only untagged Rx if no vlan is configured */
54636558c3dSYuval Mintz 	u8 default_only_untagged;
54736558c3dSYuval Mintz 	u8 padding;
54836558c3dSYuval Mintz 
54936558c3dSYuval Mintz 	/* The following is a 'copy' of qed_mcp_link_state,
55036558c3dSYuval Mintz 	 * qed_mcp_link_params and qed_mcp_link_capabilities. Since it's
55136558c3dSYuval Mintz 	 * possible the structs will increase further along the road we cannot
55236558c3dSYuval Mintz 	 * have it here; Instead we need to have all of its fields.
55336558c3dSYuval Mintz 	 */
55436558c3dSYuval Mintz 	u8 req_autoneg;
55536558c3dSYuval Mintz 	u8 req_autoneg_pause;
55636558c3dSYuval Mintz 	u8 req_forced_rx;
55736558c3dSYuval Mintz 	u8 req_forced_tx;
55836558c3dSYuval Mintz 	u8 padding2[4];
55936558c3dSYuval Mintz 
56036558c3dSYuval Mintz 	u32 req_adv_speed;
56136558c3dSYuval Mintz 	u32 req_forced_speed;
56236558c3dSYuval Mintz 	u32 req_loopback;
56336558c3dSYuval Mintz 	u32 padding3;
56436558c3dSYuval Mintz 
56536558c3dSYuval Mintz 	u8 link_up;
56636558c3dSYuval Mintz 	u8 full_duplex;
56736558c3dSYuval Mintz 	u8 autoneg;
56836558c3dSYuval Mintz 	u8 autoneg_complete;
56936558c3dSYuval Mintz 	u8 parallel_detection;
57036558c3dSYuval Mintz 	u8 pfc_enabled;
57136558c3dSYuval Mintz 	u8 partner_tx_flow_ctrl_en;
57236558c3dSYuval Mintz 	u8 partner_rx_flow_ctrl_en;
57336558c3dSYuval Mintz 	u8 partner_adv_pause;
57436558c3dSYuval Mintz 	u8 sfp_tx_fault;
57597379f15SChopra, Manish 	u16 vxlan_udp_port;
57697379f15SChopra, Manish 	u16 geneve_udp_port;
57797379f15SChopra, Manish 	u8 padding4[2];
57836558c3dSYuval Mintz 
57936558c3dSYuval Mintz 	u32 speed;
58036558c3dSYuval Mintz 	u32 partner_adv_speed;
58136558c3dSYuval Mintz 
58236558c3dSYuval Mintz 	u32 capability_speed;
58308feecd7SYuval Mintz 
58408feecd7SYuval Mintz 	/* Forced vlan */
58508feecd7SYuval Mintz 	u16 pvid;
58608feecd7SYuval Mintz 	u16 padding5;
58732a47e72SYuval Mintz };
58832a47e72SYuval Mintz 
58932a47e72SYuval Mintz struct qed_bulletin {
59032a47e72SYuval Mintz 	dma_addr_t phys;
59132a47e72SYuval Mintz 	struct qed_bulletin_content *p_virt;
59232a47e72SYuval Mintz 	u32 size;
59332a47e72SYuval Mintz };
59432a47e72SYuval Mintz 
59537bff2b9SYuval Mintz enum {
59637bff2b9SYuval Mintz 	CHANNEL_TLV_NONE,	/* ends tlv sequence */
5971408cc1fSYuval Mintz 	CHANNEL_TLV_ACQUIRE,
598dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_START,
599dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE,
600dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_TEARDOWN,
601dacd88d6SYuval Mintz 	CHANNEL_TLV_START_RXQ,
602dacd88d6SYuval Mintz 	CHANNEL_TLV_START_TXQ,
603dacd88d6SYuval Mintz 	CHANNEL_TLV_STOP_RXQS,
604dacd88d6SYuval Mintz 	CHANNEL_TLV_STOP_TXQS,
60517b235c1SYuval Mintz 	CHANNEL_TLV_UPDATE_RXQ,
6060b55e27dSYuval Mintz 	CHANNEL_TLV_INT_CLEANUP,
6070b55e27dSYuval Mintz 	CHANNEL_TLV_CLOSE,
6080b55e27dSYuval Mintz 	CHANNEL_TLV_RELEASE,
60937bff2b9SYuval Mintz 	CHANNEL_TLV_LIST_END,
610dacd88d6SYuval Mintz 	CHANNEL_TLV_UCAST_FILTER,
611dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACTIVATE,
61217b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH,
61317b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP,
614dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_MCAST,
615dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM,
616dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_RSS,
61717b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN,
61817b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_SGE_TPA,
619eaf3c0c6SChopra, Manish 	CHANNEL_TLV_UPDATE_TUNN_PARAM,
62008bc8f15SMintz, Yuval 	CHANNEL_TLV_RESERVED,
62108bc8f15SMintz, Yuval 	CHANNEL_TLV_QID,
622dacd88d6SYuval Mintz 	CHANNEL_TLV_MAX,
623dacd88d6SYuval Mintz 
624dacd88d6SYuval Mintz 	/* Required for iterating over vport-update tlvs.
625dacd88d6SYuval Mintz 	 * Will break in case non-sequential vport-update tlvs.
626dacd88d6SYuval Mintz 	 */
62717b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1,
62837bff2b9SYuval Mintz };
62937bff2b9SYuval Mintz 
63008bc8f15SMintz, Yuval /* Default number of CIDs [total of both Rx and Tx] to be requested
63108bc8f15SMintz, Yuval  * by default, and maximum possible number.
63208bc8f15SMintz, Yuval  */
63308bc8f15SMintz, Yuval #define QED_ETH_VF_DEFAULT_NUM_CIDS (32)
63408bc8f15SMintz, Yuval #define QED_ETH_VF_MAX_NUM_CIDS (250)
63508bc8f15SMintz, Yuval 
6361408cc1fSYuval Mintz /* This data is held in the qed_hwfn structure for VFs only. */
6371408cc1fSYuval Mintz struct qed_vf_iov {
6381408cc1fSYuval Mintz 	union vfpf_tlvs *vf2pf_request;
6391408cc1fSYuval Mintz 	dma_addr_t vf2pf_request_phys;
6401408cc1fSYuval Mintz 	union pfvf_tlvs *pf2vf_reply;
6411408cc1fSYuval Mintz 	dma_addr_t pf2vf_reply_phys;
6421408cc1fSYuval Mintz 
6431408cc1fSYuval Mintz 	/* Should be taken whenever the mailbox buffers are accessed */
6441408cc1fSYuval Mintz 	struct mutex mutex;
6451408cc1fSYuval Mintz 	u8 *offset;
6461408cc1fSYuval Mintz 
6471408cc1fSYuval Mintz 	/* Bulletin Board */
6481408cc1fSYuval Mintz 	struct qed_bulletin bulletin;
6491408cc1fSYuval Mintz 	struct qed_bulletin_content bulletin_shadow;
6501408cc1fSYuval Mintz 
6511408cc1fSYuval Mintz 	/* we set aside a copy of the acquire response */
6521408cc1fSYuval Mintz 	struct pfvf_acquire_resp_tlv acquire_resp;
653d8c2c7e3SYuval Mintz 
654d8c2c7e3SYuval Mintz 	/* In case PF originates prior to the fp-hsi version comparison,
655d8c2c7e3SYuval Mintz 	 * this has to be propagated as it affects the fastpath.
656d8c2c7e3SYuval Mintz 	 */
657d8c2c7e3SYuval Mintz 	bool b_pre_fp_hsi;
65850a20714SMintz, Yuval 
65950a20714SMintz, Yuval 	/* Current day VFs are passing the SBs physical address on vport
66050a20714SMintz, Yuval 	 * start, and as they lack an IGU mapping they need to store the
66150a20714SMintz, Yuval 	 * addresses of previously registered SBs.
66250a20714SMintz, Yuval 	 * Even if we were to change configuration flow, due to backward
66350a20714SMintz, Yuval 	 * compatibility [with older PFs] we'd still need to store these.
66450a20714SMintz, Yuval 	 */
66550a20714SMintz, Yuval 	struct qed_sb_info *sbs_info[PFVF_MAX_SBS_PER_VF];
6661408cc1fSYuval Mintz };
6671408cc1fSYuval Mintz 
6681408cc1fSYuval Mintz #ifdef CONFIG_QED_SRIOV
6691408cc1fSYuval Mintz /**
67036558c3dSYuval Mintz  * @brief Read the VF bulletin and act on it if needed
67136558c3dSYuval Mintz  *
67236558c3dSYuval Mintz  * @param p_hwfn
67336558c3dSYuval Mintz  * @param p_change - qed fills 1 iff bulletin board has changed, 0 otherwise.
67436558c3dSYuval Mintz  *
67536558c3dSYuval Mintz  * @return enum _qed_status
67636558c3dSYuval Mintz  */
67736558c3dSYuval Mintz int qed_vf_read_bulletin(struct qed_hwfn *p_hwfn, u8 *p_change);
67836558c3dSYuval Mintz 
67936558c3dSYuval Mintz /**
68036558c3dSYuval Mintz  * @brief Get link paramters for VF from qed
68136558c3dSYuval Mintz  *
68236558c3dSYuval Mintz  * @param p_hwfn
68336558c3dSYuval Mintz  * @param params - the link params structure to be filled for the VF
68436558c3dSYuval Mintz  */
68536558c3dSYuval Mintz void qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
68636558c3dSYuval Mintz 			    struct qed_mcp_link_params *params);
68736558c3dSYuval Mintz 
68836558c3dSYuval Mintz /**
68936558c3dSYuval Mintz  * @brief Get link state for VF from qed
69036558c3dSYuval Mintz  *
69136558c3dSYuval Mintz  * @param p_hwfn
69236558c3dSYuval Mintz  * @param link - the link state structure to be filled for the VF
69336558c3dSYuval Mintz  */
69436558c3dSYuval Mintz void qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
69536558c3dSYuval Mintz 			   struct qed_mcp_link_state *link);
69636558c3dSYuval Mintz 
69736558c3dSYuval Mintz /**
69836558c3dSYuval Mintz  * @brief Get link capabilities for VF from qed
69936558c3dSYuval Mintz  *
70036558c3dSYuval Mintz  * @param p_hwfn
70136558c3dSYuval Mintz  * @param p_link_caps - the link capabilities structure to be filled for the VF
70236558c3dSYuval Mintz  */
70336558c3dSYuval Mintz void qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
70436558c3dSYuval Mintz 			  struct qed_mcp_link_capabilities *p_link_caps);
70536558c3dSYuval Mintz 
70636558c3dSYuval Mintz /**
7071408cc1fSYuval Mintz  * @brief Get number of Rx queues allocated for VF by qed
7081408cc1fSYuval Mintz  *
7091408cc1fSYuval Mintz  *  @param p_hwfn
7101408cc1fSYuval Mintz  *  @param num_rxqs - allocated RX queues
7111408cc1fSYuval Mintz  */
7121408cc1fSYuval Mintz void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs);
7131408cc1fSYuval Mintz 
7141408cc1fSYuval Mintz /**
7150db711bbSMintz, Yuval  * @brief Get number of Rx queues allocated for VF by qed
7160db711bbSMintz, Yuval  *
7170db711bbSMintz, Yuval  *  @param p_hwfn
7180db711bbSMintz, Yuval  *  @param num_txqs - allocated RX queues
7190db711bbSMintz, Yuval  */
7200db711bbSMintz, Yuval void qed_vf_get_num_txqs(struct qed_hwfn *p_hwfn, u8 *num_txqs);
7210db711bbSMintz, Yuval 
7220db711bbSMintz, Yuval /**
7231408cc1fSYuval Mintz  * @brief Get port mac address for VF
7241408cc1fSYuval Mintz  *
7251408cc1fSYuval Mintz  * @param p_hwfn
7261408cc1fSYuval Mintz  * @param port_mac - destination location for port mac
7271408cc1fSYuval Mintz  */
7281408cc1fSYuval Mintz void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac);
7291408cc1fSYuval Mintz 
7301408cc1fSYuval Mintz /**
7311408cc1fSYuval Mintz  * @brief Get number of VLAN filters allocated for VF by qed
7321408cc1fSYuval Mintz  *
7331408cc1fSYuval Mintz  *  @param p_hwfn
7341408cc1fSYuval Mintz  *  @param num_rxqs - allocated VLAN filters
7351408cc1fSYuval Mintz  */
7361408cc1fSYuval Mintz void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn,
7371408cc1fSYuval Mintz 				 u8 *num_vlan_filters);
7381408cc1fSYuval Mintz 
7391408cc1fSYuval Mintz /**
740b0fca312SMintz, Yuval  * @brief Get number of MAC filters allocated for VF by qed
741b0fca312SMintz, Yuval  *
742b0fca312SMintz, Yuval  *  @param p_hwfn
743b0fca312SMintz, Yuval  *  @param num_rxqs - allocated MAC filters
744b0fca312SMintz, Yuval  */
745b0fca312SMintz, Yuval void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, u8 *num_mac_filters);
746b0fca312SMintz, Yuval 
747b0fca312SMintz, Yuval /**
748eff16960SYuval Mintz  * @brief Check if VF can set a MAC address
749eff16960SYuval Mintz  *
750eff16960SYuval Mintz  * @param p_hwfn
751eff16960SYuval Mintz  * @param mac
752eff16960SYuval Mintz  *
753eff16960SYuval Mintz  * @return bool
754eff16960SYuval Mintz  */
755eff16960SYuval Mintz bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac);
756eff16960SYuval Mintz 
757eff16960SYuval Mintz /**
7581408cc1fSYuval Mintz  * @brief Set firmware version information in dev_info from VFs acquire response tlv
7591408cc1fSYuval Mintz  *
7601408cc1fSYuval Mintz  * @param p_hwfn
7611408cc1fSYuval Mintz  * @param fw_major
7621408cc1fSYuval Mintz  * @param fw_minor
7631408cc1fSYuval Mintz  * @param fw_rev
7641408cc1fSYuval Mintz  * @param fw_eng
7651408cc1fSYuval Mintz  */
7661408cc1fSYuval Mintz void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn,
7671408cc1fSYuval Mintz 			   u16 *fw_major, u16 *fw_minor,
7681408cc1fSYuval Mintz 			   u16 *fw_rev, u16 *fw_eng);
7691408cc1fSYuval Mintz 
7701408cc1fSYuval Mintz /**
7711408cc1fSYuval Mintz  * @brief hw preparation for VF
7721408cc1fSYuval Mintz  *      sends ACQUIRE message
7731408cc1fSYuval Mintz  *
7741408cc1fSYuval Mintz  * @param p_hwfn
7751408cc1fSYuval Mintz  *
7761408cc1fSYuval Mintz  * @return int
7771408cc1fSYuval Mintz  */
7781408cc1fSYuval Mintz int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn);
7791408cc1fSYuval Mintz 
7801408cc1fSYuval Mintz /**
781dacd88d6SYuval Mintz  * @brief VF - start the RX Queue by sending a message to the PF
782dacd88d6SYuval Mintz  * @param p_hwfn
7833da7a37aSMintz, Yuval  * @param p_cid			- Only relative fields are relevant
784dacd88d6SYuval Mintz  * @param bd_max_bytes          - maximum number of bytes per bd
785dacd88d6SYuval Mintz  * @param bd_chain_phys_addr    - physical address of bd chain
786dacd88d6SYuval Mintz  * @param cqe_pbl_addr          - physical address of pbl
787dacd88d6SYuval Mintz  * @param cqe_pbl_size          - pbl size
788dacd88d6SYuval Mintz  * @param pp_prod               - pointer to the producer to be
789dacd88d6SYuval Mintz  *				  used in fastpath
790dacd88d6SYuval Mintz  *
791dacd88d6SYuval Mintz  * @return int
792dacd88d6SYuval Mintz  */
793dacd88d6SYuval Mintz int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
7943da7a37aSMintz, Yuval 			struct qed_queue_cid *p_cid,
795dacd88d6SYuval Mintz 			u16 bd_max_bytes,
796dacd88d6SYuval Mintz 			dma_addr_t bd_chain_phys_addr,
797dacd88d6SYuval Mintz 			dma_addr_t cqe_pbl_addr,
798dacd88d6SYuval Mintz 			u16 cqe_pbl_size, void __iomem **pp_prod);
799dacd88d6SYuval Mintz 
800dacd88d6SYuval Mintz /**
801dacd88d6SYuval Mintz  * @brief VF - start the TX queue by sending a message to the
802dacd88d6SYuval Mintz  *        PF.
803dacd88d6SYuval Mintz  *
804dacd88d6SYuval Mintz  * @param p_hwfn
805dacd88d6SYuval Mintz  * @param tx_queue_id           - zero based within the VF
806dacd88d6SYuval Mintz  * @param sb                    - status block for this queue
807dacd88d6SYuval Mintz  * @param sb_index              - index within the status block
808dacd88d6SYuval Mintz  * @param bd_chain_phys_addr    - physical address of tx chain
809dacd88d6SYuval Mintz  * @param pp_doorbell           - pointer to address to which to
810dacd88d6SYuval Mintz  *                      write the doorbell too..
811dacd88d6SYuval Mintz  *
812dacd88d6SYuval Mintz  * @return int
813dacd88d6SYuval Mintz  */
8143da7a37aSMintz, Yuval int
8153da7a37aSMintz, Yuval qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn,
8163da7a37aSMintz, Yuval 		    struct qed_queue_cid *p_cid,
817dacd88d6SYuval Mintz 		    dma_addr_t pbl_addr,
818dacd88d6SYuval Mintz 		    u16 pbl_size, void __iomem **pp_doorbell);
819dacd88d6SYuval Mintz 
820dacd88d6SYuval Mintz /**
821dacd88d6SYuval Mintz  * @brief VF - stop the RX queue by sending a message to the PF
822dacd88d6SYuval Mintz  *
823dacd88d6SYuval Mintz  * @param p_hwfn
8243da7a37aSMintz, Yuval  * @param p_cid
825dacd88d6SYuval Mintz  * @param cqe_completion
826dacd88d6SYuval Mintz  *
827dacd88d6SYuval Mintz  * @return int
828dacd88d6SYuval Mintz  */
829dacd88d6SYuval Mintz int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn,
8303da7a37aSMintz, Yuval 		       struct qed_queue_cid *p_cid, bool cqe_completion);
831dacd88d6SYuval Mintz 
832dacd88d6SYuval Mintz /**
833dacd88d6SYuval Mintz  * @brief VF - stop the TX queue by sending a message to the PF
834dacd88d6SYuval Mintz  *
835dacd88d6SYuval Mintz  * @param p_hwfn
836dacd88d6SYuval Mintz  * @param tx_qid
837dacd88d6SYuval Mintz  *
838dacd88d6SYuval Mintz  * @return int
839dacd88d6SYuval Mintz  */
8403da7a37aSMintz, Yuval int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, struct qed_queue_cid *p_cid);
841dacd88d6SYuval Mintz 
842dacd88d6SYuval Mintz /**
843dacd88d6SYuval Mintz  * @brief VF - send a vport update command
844dacd88d6SYuval Mintz  *
845dacd88d6SYuval Mintz  * @param p_hwfn
846dacd88d6SYuval Mintz  * @param params
847dacd88d6SYuval Mintz  *
848dacd88d6SYuval Mintz  * @return int
849dacd88d6SYuval Mintz  */
850dacd88d6SYuval Mintz int qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn,
851dacd88d6SYuval Mintz 			   struct qed_sp_vport_update_params *p_params);
852dacd88d6SYuval Mintz 
853dacd88d6SYuval Mintz /**
8540b55e27dSYuval Mintz  *
8550b55e27dSYuval Mintz  * @brief VF - send a close message to PF
8560b55e27dSYuval Mintz  *
8570b55e27dSYuval Mintz  * @param p_hwfn
8580b55e27dSYuval Mintz  *
8590b55e27dSYuval Mintz  * @return enum _qed_status
8600b55e27dSYuval Mintz  */
8610b55e27dSYuval Mintz int qed_vf_pf_reset(struct qed_hwfn *p_hwfn);
8620b55e27dSYuval Mintz 
8630b55e27dSYuval Mintz /**
8640b55e27dSYuval Mintz  * @brief VF - free vf`s memories
8650b55e27dSYuval Mintz  *
8660b55e27dSYuval Mintz  * @param p_hwfn
8670b55e27dSYuval Mintz  *
8680b55e27dSYuval Mintz  * @return enum _qed_status
8690b55e27dSYuval Mintz  */
8700b55e27dSYuval Mintz int qed_vf_pf_release(struct qed_hwfn *p_hwfn);
87136558c3dSYuval Mintz 
8720b55e27dSYuval Mintz /**
8731408cc1fSYuval Mintz  * @brief qed_vf_get_igu_sb_id - Get the IGU SB ID for a given
8741408cc1fSYuval Mintz  *        sb_id. For VFs igu sbs don't have to be contiguous
8751408cc1fSYuval Mintz  *
8761408cc1fSYuval Mintz  * @param p_hwfn
8771408cc1fSYuval Mintz  * @param sb_id
8781408cc1fSYuval Mintz  *
8791408cc1fSYuval Mintz  * @return INLINE u16
8801408cc1fSYuval Mintz  */
8811408cc1fSYuval Mintz u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id);
8820b55e27dSYuval Mintz 
8830b55e27dSYuval Mintz /**
88450a20714SMintz, Yuval  * @brief Stores [or removes] a configured sb_info.
88550a20714SMintz, Yuval  *
88650a20714SMintz, Yuval  * @param p_hwfn
88750a20714SMintz, Yuval  * @param sb_id - zero-based SB index [for fastpath]
88850a20714SMintz, Yuval  * @param sb_info - may be NULL [during removal].
88950a20714SMintz, Yuval  */
89050a20714SMintz, Yuval void qed_vf_set_sb_info(struct qed_hwfn *p_hwfn,
89150a20714SMintz, Yuval 			u16 sb_id, struct qed_sb_info *p_sb);
89250a20714SMintz, Yuval 
89350a20714SMintz, Yuval /**
894dacd88d6SYuval Mintz  * @brief qed_vf_pf_vport_start - perform vport start for VF.
895dacd88d6SYuval Mintz  *
896dacd88d6SYuval Mintz  * @param p_hwfn
897dacd88d6SYuval Mintz  * @param vport_id
898dacd88d6SYuval Mintz  * @param mtu
899dacd88d6SYuval Mintz  * @param inner_vlan_removal
900dacd88d6SYuval Mintz  * @param tpa_mode
901dacd88d6SYuval Mintz  * @param max_buffers_per_cqe,
902dacd88d6SYuval Mintz  * @param only_untagged - default behavior regarding vlan acceptance
903dacd88d6SYuval Mintz  *
904dacd88d6SYuval Mintz  * @return enum _qed_status
905dacd88d6SYuval Mintz  */
906dacd88d6SYuval Mintz int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn,
907dacd88d6SYuval Mintz 			  u8 vport_id,
908dacd88d6SYuval Mintz 			  u16 mtu,
909dacd88d6SYuval Mintz 			  u8 inner_vlan_removal,
910dacd88d6SYuval Mintz 			  enum qed_tpa_mode tpa_mode,
91108feecd7SYuval Mintz 			  u8 max_buffers_per_cqe, u8 only_untagged);
912dacd88d6SYuval Mintz 
913dacd88d6SYuval Mintz /**
914dacd88d6SYuval Mintz  * @brief qed_vf_pf_vport_stop - stop the VF's vport
915dacd88d6SYuval Mintz  *
916dacd88d6SYuval Mintz  * @param p_hwfn
917dacd88d6SYuval Mintz  *
918dacd88d6SYuval Mintz  * @return enum _qed_status
919dacd88d6SYuval Mintz  */
920dacd88d6SYuval Mintz int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn);
921dacd88d6SYuval Mintz 
922dacd88d6SYuval Mintz int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn,
923dacd88d6SYuval Mintz 			   struct qed_filter_ucast *p_param);
924dacd88d6SYuval Mintz 
925dacd88d6SYuval Mintz void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn,
926dacd88d6SYuval Mintz 			    struct qed_filter_mcast *p_filter_cmd);
927dacd88d6SYuval Mintz 
928dacd88d6SYuval Mintz /**
9290b55e27dSYuval Mintz  * @brief qed_vf_pf_int_cleanup - clean the SB of the VF
9300b55e27dSYuval Mintz  *
9310b55e27dSYuval Mintz  * @param p_hwfn
9320b55e27dSYuval Mintz  *
9330b55e27dSYuval Mintz  * @return enum _qed_status
9340b55e27dSYuval Mintz  */
9350b55e27dSYuval Mintz int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn);
93636558c3dSYuval Mintz 
93736558c3dSYuval Mintz /**
93836558c3dSYuval Mintz  * @brief - return the link params in a given bulletin board
93936558c3dSYuval Mintz  *
94036558c3dSYuval Mintz  * @param p_hwfn
94136558c3dSYuval Mintz  * @param p_params - pointer to a struct to fill with link params
94236558c3dSYuval Mintz  * @param p_bulletin
94336558c3dSYuval Mintz  */
94436558c3dSYuval Mintz void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
94536558c3dSYuval Mintz 			      struct qed_mcp_link_params *p_params,
94636558c3dSYuval Mintz 			      struct qed_bulletin_content *p_bulletin);
94736558c3dSYuval Mintz 
94836558c3dSYuval Mintz /**
94936558c3dSYuval Mintz  * @brief - return the link state in a given bulletin board
95036558c3dSYuval Mintz  *
95136558c3dSYuval Mintz  * @param p_hwfn
95236558c3dSYuval Mintz  * @param p_link - pointer to a struct to fill with link state
95336558c3dSYuval Mintz  * @param p_bulletin
95436558c3dSYuval Mintz  */
95536558c3dSYuval Mintz void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
95636558c3dSYuval Mintz 			     struct qed_mcp_link_state *p_link,
95736558c3dSYuval Mintz 			     struct qed_bulletin_content *p_bulletin);
95836558c3dSYuval Mintz 
95936558c3dSYuval Mintz /**
96036558c3dSYuval Mintz  * @brief - return the link capabilities in a given bulletin board
96136558c3dSYuval Mintz  *
96236558c3dSYuval Mintz  * @param p_hwfn
96336558c3dSYuval Mintz  * @param p_link - pointer to a struct to fill with link capabilities
96436558c3dSYuval Mintz  * @param p_bulletin
96536558c3dSYuval Mintz  */
96636558c3dSYuval Mintz void __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
96736558c3dSYuval Mintz 			    struct qed_mcp_link_capabilities *p_link_caps,
96836558c3dSYuval Mintz 			    struct qed_bulletin_content *p_bulletin);
96936558c3dSYuval Mintz 
97036558c3dSYuval Mintz void qed_iov_vf_task(struct work_struct *work);
971eaf3c0c6SChopra, Manish void qed_vf_set_vf_start_tunn_update_param(struct qed_tunnel_info *p_tun);
972eaf3c0c6SChopra, Manish int qed_vf_pf_tunnel_param_update(struct qed_hwfn *p_hwfn,
973eaf3c0c6SChopra, Manish 				  struct qed_tunnel_info *p_tunn);
9741408cc1fSYuval Mintz #else
97536558c3dSYuval Mintz static inline void qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
97636558c3dSYuval Mintz 					  struct qed_mcp_link_params *params)
97736558c3dSYuval Mintz {
97836558c3dSYuval Mintz }
97936558c3dSYuval Mintz 
98036558c3dSYuval Mintz static inline void qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
98136558c3dSYuval Mintz 					 struct qed_mcp_link_state *link)
98236558c3dSYuval Mintz {
98336558c3dSYuval Mintz }
98436558c3dSYuval Mintz 
98536558c3dSYuval Mintz static inline void
98636558c3dSYuval Mintz qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
98736558c3dSYuval Mintz 		     struct qed_mcp_link_capabilities *p_link_caps)
98836558c3dSYuval Mintz {
98936558c3dSYuval Mintz }
99036558c3dSYuval Mintz 
9911408cc1fSYuval Mintz static inline void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs)
9921408cc1fSYuval Mintz {
9931408cc1fSYuval Mintz }
9941408cc1fSYuval Mintz 
9950db711bbSMintz, Yuval static inline void qed_vf_get_num_txqs(struct qed_hwfn *p_hwfn, u8 *num_txqs)
9960db711bbSMintz, Yuval {
9970db711bbSMintz, Yuval }
9980db711bbSMintz, Yuval 
9991408cc1fSYuval Mintz static inline void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac)
10001408cc1fSYuval Mintz {
10011408cc1fSYuval Mintz }
10021408cc1fSYuval Mintz 
10031408cc1fSYuval Mintz static inline void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn,
10041408cc1fSYuval Mintz 					       u8 *num_vlan_filters)
10051408cc1fSYuval Mintz {
10061408cc1fSYuval Mintz }
10071408cc1fSYuval Mintz 
1008b0fca312SMintz, Yuval static inline void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn,
1009b0fca312SMintz, Yuval 					      u8 *num_mac_filters)
1010b0fca312SMintz, Yuval {
1011b0fca312SMintz, Yuval }
1012b0fca312SMintz, Yuval 
1013eff16960SYuval Mintz static inline bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac)
1014eff16960SYuval Mintz {
1015eff16960SYuval Mintz 	return false;
1016eff16960SYuval Mintz }
1017eff16960SYuval Mintz 
10181408cc1fSYuval Mintz static inline void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn,
10191408cc1fSYuval Mintz 					 u16 *fw_major, u16 *fw_minor,
10201408cc1fSYuval Mintz 					 u16 *fw_rev, u16 *fw_eng)
10211408cc1fSYuval Mintz {
10221408cc1fSYuval Mintz }
10231408cc1fSYuval Mintz 
10241408cc1fSYuval Mintz static inline int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)
10251408cc1fSYuval Mintz {
10261408cc1fSYuval Mintz 	return -EINVAL;
10271408cc1fSYuval Mintz }
10281408cc1fSYuval Mintz 
1029dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
10303da7a37aSMintz, Yuval 				      struct qed_queue_cid *p_cid,
1031dacd88d6SYuval Mintz 				      u16 bd_max_bytes,
1032dacd88d6SYuval Mintz 				      dma_addr_t bd_chain_phys_adr,
1033dacd88d6SYuval Mintz 				      dma_addr_t cqe_pbl_addr,
1034dacd88d6SYuval Mintz 				      u16 cqe_pbl_size, void __iomem **pp_prod)
1035dacd88d6SYuval Mintz {
1036dacd88d6SYuval Mintz 	return -EINVAL;
1037dacd88d6SYuval Mintz }
1038dacd88d6SYuval Mintz 
1039dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn,
10403da7a37aSMintz, Yuval 				      struct qed_queue_cid *p_cid,
1041dacd88d6SYuval Mintz 				      dma_addr_t pbl_addr,
1042dacd88d6SYuval Mintz 				      u16 pbl_size, void __iomem **pp_doorbell)
1043dacd88d6SYuval Mintz {
1044dacd88d6SYuval Mintz 	return -EINVAL;
1045dacd88d6SYuval Mintz }
1046dacd88d6SYuval Mintz 
1047dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn,
10483da7a37aSMintz, Yuval 				     struct qed_queue_cid *p_cid,
10493da7a37aSMintz, Yuval 				     bool cqe_completion)
1050dacd88d6SYuval Mintz {
1051dacd88d6SYuval Mintz 	return -EINVAL;
1052dacd88d6SYuval Mintz }
1053dacd88d6SYuval Mintz 
10543da7a37aSMintz, Yuval static inline int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn,
10553da7a37aSMintz, Yuval 				     struct qed_queue_cid *p_cid)
1056dacd88d6SYuval Mintz {
1057dacd88d6SYuval Mintz 	return -EINVAL;
1058dacd88d6SYuval Mintz }
1059dacd88d6SYuval Mintz 
1060dacd88d6SYuval Mintz static inline int
1061dacd88d6SYuval Mintz qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn,
1062dacd88d6SYuval Mintz 		       struct qed_sp_vport_update_params *p_params)
1063dacd88d6SYuval Mintz {
1064dacd88d6SYuval Mintz 	return -EINVAL;
1065dacd88d6SYuval Mintz }
1066dacd88d6SYuval Mintz 
10670b55e27dSYuval Mintz static inline int qed_vf_pf_reset(struct qed_hwfn *p_hwfn)
10680b55e27dSYuval Mintz {
10690b55e27dSYuval Mintz 	return -EINVAL;
10700b55e27dSYuval Mintz }
10710b55e27dSYuval Mintz 
10720b55e27dSYuval Mintz static inline int qed_vf_pf_release(struct qed_hwfn *p_hwfn)
10730b55e27dSYuval Mintz {
10740b55e27dSYuval Mintz 	return -EINVAL;
10750b55e27dSYuval Mintz }
10760b55e27dSYuval Mintz 
10771408cc1fSYuval Mintz static inline u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id)
10781408cc1fSYuval Mintz {
10791408cc1fSYuval Mintz 	return 0;
10801408cc1fSYuval Mintz }
10810b55e27dSYuval Mintz 
1082dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn,
1083dacd88d6SYuval Mintz 					u8 vport_id,
1084dacd88d6SYuval Mintz 					u16 mtu,
1085dacd88d6SYuval Mintz 					u8 inner_vlan_removal,
1086dacd88d6SYuval Mintz 					enum qed_tpa_mode tpa_mode,
108708feecd7SYuval Mintz 					u8 max_buffers_per_cqe,
108808feecd7SYuval Mintz 					u8 only_untagged)
1089dacd88d6SYuval Mintz {
1090dacd88d6SYuval Mintz 	return -EINVAL;
1091dacd88d6SYuval Mintz }
1092dacd88d6SYuval Mintz 
1093dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn)
1094dacd88d6SYuval Mintz {
1095dacd88d6SYuval Mintz 	return -EINVAL;
1096dacd88d6SYuval Mintz }
1097dacd88d6SYuval Mintz 
1098dacd88d6SYuval Mintz static inline int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn,
1099dacd88d6SYuval Mintz 					 struct qed_filter_ucast *p_param)
1100dacd88d6SYuval Mintz {
1101dacd88d6SYuval Mintz 	return -EINVAL;
1102dacd88d6SYuval Mintz }
1103dacd88d6SYuval Mintz 
1104dacd88d6SYuval Mintz static inline void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn,
1105dacd88d6SYuval Mintz 					  struct qed_filter_mcast *p_filter_cmd)
1106dacd88d6SYuval Mintz {
1107dacd88d6SYuval Mintz }
1108dacd88d6SYuval Mintz 
11090b55e27dSYuval Mintz static inline int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn)
11100b55e27dSYuval Mintz {
11110b55e27dSYuval Mintz 	return -EINVAL;
11120b55e27dSYuval Mintz }
111336558c3dSYuval Mintz 
111436558c3dSYuval Mintz static inline void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
111536558c3dSYuval Mintz 					    struct qed_mcp_link_params
111636558c3dSYuval Mintz 					    *p_params,
111736558c3dSYuval Mintz 					    struct qed_bulletin_content
111836558c3dSYuval Mintz 					    *p_bulletin)
111936558c3dSYuval Mintz {
112036558c3dSYuval Mintz }
112136558c3dSYuval Mintz 
112236558c3dSYuval Mintz static inline void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
112336558c3dSYuval Mintz 					   struct qed_mcp_link_state *p_link,
112436558c3dSYuval Mintz 					   struct qed_bulletin_content
112536558c3dSYuval Mintz 					   *p_bulletin)
112636558c3dSYuval Mintz {
112736558c3dSYuval Mintz }
112836558c3dSYuval Mintz 
112936558c3dSYuval Mintz static inline void
113036558c3dSYuval Mintz __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
113136558c3dSYuval Mintz 		       struct qed_mcp_link_capabilities *p_link_caps,
113236558c3dSYuval Mintz 		       struct qed_bulletin_content *p_bulletin)
113336558c3dSYuval Mintz {
113436558c3dSYuval Mintz }
113536558c3dSYuval Mintz 
113636558c3dSYuval Mintz static inline void qed_iov_vf_task(struct work_struct *work)
113736558c3dSYuval Mintz {
113836558c3dSYuval Mintz }
1139eaf3c0c6SChopra, Manish 
1140eaf3c0c6SChopra, Manish static inline void
1141eaf3c0c6SChopra, Manish qed_vf_set_vf_start_tunn_update_param(struct qed_tunnel_info *p_tun)
1142eaf3c0c6SChopra, Manish {
1143eaf3c0c6SChopra, Manish }
1144eaf3c0c6SChopra, Manish 
1145eaf3c0c6SChopra, Manish static inline int qed_vf_pf_tunnel_param_update(struct qed_hwfn *p_hwfn,
1146eaf3c0c6SChopra, Manish 						struct qed_tunnel_info *p_tunn)
1147eaf3c0c6SChopra, Manish {
1148eaf3c0c6SChopra, Manish 	return -EINVAL;
1149eaf3c0c6SChopra, Manish }
11501408cc1fSYuval Mintz #endif
11511408cc1fSYuval Mintz 
115232a47e72SYuval Mintz #endif
1153