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)
1221a850bfcSMintz, Yuval 
1231a850bfcSMintz, Yuval 	/* The VF is using the physical bar. While this is mostly internal
1241a850bfcSMintz, Yuval 	 * to the VF, might affect the number of CIDs supported assuming
1251a850bfcSMintz, Yuval 	 * QUEUE_QIDS is set.
1261a850bfcSMintz, Yuval 	 */
1271a850bfcSMintz, Yuval #define VFPF_ACQUIRE_CAP_PHYSICAL_BAR   BIT(3)
1281408cc1fSYuval Mintz 		u64 capabilities;
1291408cc1fSYuval Mintz 		u8 fw_major;
1301408cc1fSYuval Mintz 		u8 fw_minor;
1311408cc1fSYuval Mintz 		u8 fw_revision;
1321408cc1fSYuval Mintz 		u8 fw_engineering;
1331408cc1fSYuval Mintz 		u32 driver_version;
1341408cc1fSYuval Mintz 		u16 opaque_fid;	/* ME register value */
1351408cc1fSYuval Mintz 		u8 os_type;	/* VFPF_ACQUIRE_OS_* value */
1361fe614d1SYuval Mintz 		u8 eth_fp_hsi_major;
1371fe614d1SYuval Mintz 		u8 eth_fp_hsi_minor;
1381fe614d1SYuval Mintz 		u8 padding[3];
1391408cc1fSYuval Mintz 	} vfdev_info;
1401408cc1fSYuval Mintz 
1411408cc1fSYuval Mintz 	struct vf_pf_resc_request resc_request;
1421408cc1fSYuval Mintz 
1431408cc1fSYuval Mintz 	u64 bulletin_addr;
1441408cc1fSYuval Mintz 	u32 bulletin_size;
1451408cc1fSYuval Mintz 	u32 padding;
1461408cc1fSYuval Mintz };
1471408cc1fSYuval Mintz 
148dacd88d6SYuval Mintz /* receive side scaling tlv */
149dacd88d6SYuval Mintz struct vfpf_vport_update_rss_tlv {
150dacd88d6SYuval Mintz 	struct channel_tlv tl;
151dacd88d6SYuval Mintz 
152dacd88d6SYuval Mintz 	u8 update_rss_flags;
153dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CONFIG_FLAG       BIT(0)
154dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_CAPS_FLAG         BIT(1)
155dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_IND_TABLE_FLAG    BIT(2)
156dacd88d6SYuval Mintz #define VFPF_UPDATE_RSS_KEY_FLAG          BIT(3)
157dacd88d6SYuval Mintz 
158dacd88d6SYuval Mintz 	u8 rss_enable;
159dacd88d6SYuval Mintz 	u8 rss_caps;
160dacd88d6SYuval Mintz 	u8 rss_table_size_log;	/* The table size is 2 ^ rss_table_size_log */
161dacd88d6SYuval Mintz 	u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
162dacd88d6SYuval Mintz 	u32 rss_key[T_ETH_RSS_KEY_SIZE];
163dacd88d6SYuval Mintz };
164dacd88d6SYuval Mintz 
1651408cc1fSYuval Mintz struct pfvf_storm_stats {
1661408cc1fSYuval Mintz 	u32 address;
1671408cc1fSYuval Mintz 	u32 len;
1681408cc1fSYuval Mintz };
1691408cc1fSYuval Mintz 
1701408cc1fSYuval Mintz struct pfvf_stats_info {
1711408cc1fSYuval Mintz 	struct pfvf_storm_stats mstats;
1721408cc1fSYuval Mintz 	struct pfvf_storm_stats pstats;
1731408cc1fSYuval Mintz 	struct pfvf_storm_stats tstats;
1741408cc1fSYuval Mintz 	struct pfvf_storm_stats ustats;
1751408cc1fSYuval Mintz };
1761408cc1fSYuval Mintz 
1771408cc1fSYuval Mintz struct pfvf_acquire_resp_tlv {
1781408cc1fSYuval Mintz 	struct pfvf_tlv hdr;
1791408cc1fSYuval Mintz 
1801408cc1fSYuval Mintz 	struct pf_vf_pfdev_info {
1811408cc1fSYuval Mintz 		u32 chip_num;
1821408cc1fSYuval Mintz 		u32 mfw_ver;
1831408cc1fSYuval Mintz 
1841408cc1fSYuval Mintz 		u16 fw_major;
1851408cc1fSYuval Mintz 		u16 fw_minor;
1861408cc1fSYuval Mintz 		u16 fw_rev;
1871408cc1fSYuval Mintz 		u16 fw_eng;
1881408cc1fSYuval Mintz 
1891408cc1fSYuval Mintz 		u64 capabilities;
1901408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED	BIT(0)
1911408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_100G			BIT(1)	/* If set, 100g PF */
1921408cc1fSYuval Mintz /* There are old PF versions where the PF might mistakenly override the sanity
1931408cc1fSYuval Mintz  * mechanism [version-based] and allow a VF that can't be supported to pass
1941408cc1fSYuval Mintz  * the acquisition phase.
1951408cc1fSYuval Mintz  * To overcome this, PFs now indicate that they're past that point and the new
1961408cc1fSYuval Mintz  * VFs would fail probe on the older PFs that fail to do so.
1971408cc1fSYuval Mintz  */
1981408cc1fSYuval Mintz #define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE	BIT(2)
1991408cc1fSYuval Mintz 
20008bc8f15SMintz, Yuval 	/* PF expects queues to be received with additional qids */
20108bc8f15SMintz, Yuval #define PFVF_ACQUIRE_CAP_QUEUE_QIDS             BIT(3)
20208bc8f15SMintz, Yuval 
2031408cc1fSYuval Mintz 		u16 db_size;
2041408cc1fSYuval Mintz 		u8 indices_per_sb;
2051408cc1fSYuval Mintz 		u8 os_type;
2061408cc1fSYuval Mintz 
2071408cc1fSYuval Mintz 		/* These should match the PF's qed_dev values */
2081408cc1fSYuval Mintz 		u16 chip_rev;
2091408cc1fSYuval Mintz 		u8 dev_type;
2101408cc1fSYuval Mintz 
2111a850bfcSMintz, Yuval 		/* Doorbell bar size configured in HW: log(size) or 0 */
2121a850bfcSMintz, Yuval 		u8 bar_size;
2131408cc1fSYuval Mintz 
2141408cc1fSYuval Mintz 		struct pfvf_stats_info stats_info;
2151408cc1fSYuval Mintz 
2161408cc1fSYuval Mintz 		u8 port_mac[ETH_ALEN];
2171fe614d1SYuval Mintz 
2181fe614d1SYuval Mintz 		/* It's possible PF had to configure an older fastpath HSI
2191fe614d1SYuval Mintz 		 * [in case VF is newer than PF]. This is communicated back
2201fe614d1SYuval Mintz 		 * to the VF. It can also be used in case of error due to
2211fe614d1SYuval Mintz 		 * non-matching versions to shed light in VF about failure.
2221fe614d1SYuval Mintz 		 */
2231fe614d1SYuval Mintz 		u8 major_fp_hsi;
2241fe614d1SYuval Mintz 		u8 minor_fp_hsi;
2251408cc1fSYuval Mintz 	} pfdev_info;
2261408cc1fSYuval Mintz 
2271408cc1fSYuval Mintz 	struct pf_vf_resc {
2281408cc1fSYuval Mintz #define PFVF_MAX_QUEUES_PER_VF		16
2291408cc1fSYuval Mintz #define PFVF_MAX_SBS_PER_VF		16
2301408cc1fSYuval Mintz 		struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
2311408cc1fSYuval Mintz 		u8 hw_qid[PFVF_MAX_QUEUES_PER_VF];
2321408cc1fSYuval Mintz 		u8 cid[PFVF_MAX_QUEUES_PER_VF];
2331408cc1fSYuval Mintz 
2341408cc1fSYuval Mintz 		u8 num_rxqs;
2351408cc1fSYuval Mintz 		u8 num_txqs;
2361408cc1fSYuval Mintz 		u8 num_sbs;
2371408cc1fSYuval Mintz 		u8 num_mac_filters;
2381408cc1fSYuval Mintz 		u8 num_vlan_filters;
2391408cc1fSYuval Mintz 		u8 num_mc_filters;
24008bc8f15SMintz, Yuval 		u8 num_cids;
24108bc8f15SMintz, Yuval 		u8 padding;
2421408cc1fSYuval Mintz 	} resc;
2431408cc1fSYuval Mintz 
2441408cc1fSYuval Mintz 	u32 bulletin_size;
2451408cc1fSYuval Mintz 	u32 padding;
2461408cc1fSYuval Mintz };
2471408cc1fSYuval Mintz 
248dacd88d6SYuval Mintz struct pfvf_start_queue_resp_tlv {
249dacd88d6SYuval Mintz 	struct pfvf_tlv hdr;
250dacd88d6SYuval Mintz 	u32 offset;		/* offset to consumer/producer of queue */
251dacd88d6SYuval Mintz 	u8 padding[4];
252dacd88d6SYuval Mintz };
253dacd88d6SYuval Mintz 
25408bc8f15SMintz, Yuval /* Extended queue information - additional index for reference inside qzone.
25508bc8f15SMintz, Yuval  * If commmunicated between VF/PF, each TLV relating to queues should be
25608bc8f15SMintz, Yuval  * extended by one such [or have a future base TLV that already contains info].
25708bc8f15SMintz, Yuval  */
25808bc8f15SMintz, Yuval struct vfpf_qid_tlv {
25908bc8f15SMintz, Yuval 	struct channel_tlv tl;
26008bc8f15SMintz, Yuval 	u8 qid;
26108bc8f15SMintz, Yuval 	u8 padding[3];
26208bc8f15SMintz, Yuval };
26308bc8f15SMintz, Yuval 
264dacd88d6SYuval Mintz /* Setup Queue */
265dacd88d6SYuval Mintz struct vfpf_start_rxq_tlv {
266dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
267dacd88d6SYuval Mintz 
268dacd88d6SYuval Mintz 	/* physical addresses */
269dacd88d6SYuval Mintz 	u64 rxq_addr;
270dacd88d6SYuval Mintz 	u64 deprecated_sge_addr;
271dacd88d6SYuval Mintz 	u64 cqe_pbl_addr;
272dacd88d6SYuval Mintz 
273dacd88d6SYuval Mintz 	u16 cqe_pbl_size;
274dacd88d6SYuval Mintz 	u16 hw_sb;
275dacd88d6SYuval Mintz 	u16 rx_qid;
276dacd88d6SYuval Mintz 	u16 hc_rate;		/* desired interrupts per sec. */
277dacd88d6SYuval Mintz 
278dacd88d6SYuval Mintz 	u16 bd_max_bytes;
279dacd88d6SYuval Mintz 	u16 stat_id;
280dacd88d6SYuval Mintz 	u8 sb_index;
281dacd88d6SYuval Mintz 	u8 padding[3];
282dacd88d6SYuval Mintz };
283dacd88d6SYuval Mintz 
284dacd88d6SYuval Mintz struct vfpf_start_txq_tlv {
285dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
286dacd88d6SYuval Mintz 
287dacd88d6SYuval Mintz 	/* physical addresses */
288dacd88d6SYuval Mintz 	u64 pbl_addr;
289dacd88d6SYuval Mintz 	u16 pbl_size;
290dacd88d6SYuval Mintz 	u16 stat_id;
291dacd88d6SYuval Mintz 	u16 tx_qid;
292dacd88d6SYuval Mintz 	u16 hw_sb;
293dacd88d6SYuval Mintz 
294dacd88d6SYuval Mintz 	u32 flags;		/* VFPF_QUEUE_FLG_X flags */
295dacd88d6SYuval Mintz 	u16 hc_rate;		/* desired interrupts per sec. */
296dacd88d6SYuval Mintz 	u8 sb_index;
297dacd88d6SYuval Mintz 	u8 padding[3];
298dacd88d6SYuval Mintz };
299dacd88d6SYuval Mintz 
300dacd88d6SYuval Mintz /* Stop RX Queue */
301dacd88d6SYuval Mintz struct vfpf_stop_rxqs_tlv {
302dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
303dacd88d6SYuval Mintz 
304dacd88d6SYuval Mintz 	u16 rx_qid;
3054c4fa793SMintz, Yuval 
3064c4fa793SMintz, Yuval 	/* this field is deprecated and should *always* be set to '1' */
307dacd88d6SYuval Mintz 	u8 num_rxqs;
308dacd88d6SYuval Mintz 	u8 cqe_completion;
309dacd88d6SYuval Mintz 	u8 padding[4];
310dacd88d6SYuval Mintz };
311dacd88d6SYuval Mintz 
312dacd88d6SYuval Mintz /* Stop TX Queues */
313dacd88d6SYuval Mintz struct vfpf_stop_txqs_tlv {
314dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
315dacd88d6SYuval Mintz 
316dacd88d6SYuval Mintz 	u16 tx_qid;
3174c4fa793SMintz, Yuval 
3184c4fa793SMintz, Yuval 	/* this field is deprecated and should *always* be set to '1' */
319dacd88d6SYuval Mintz 	u8 num_txqs;
320dacd88d6SYuval Mintz 	u8 padding[5];
321dacd88d6SYuval Mintz };
322dacd88d6SYuval Mintz 
323dacd88d6SYuval Mintz struct vfpf_update_rxq_tlv {
324dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
325dacd88d6SYuval Mintz 
326dacd88d6SYuval Mintz 	u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF];
327dacd88d6SYuval Mintz 
328dacd88d6SYuval Mintz 	u16 rx_qid;
329dacd88d6SYuval Mintz 	u8 num_rxqs;
330dacd88d6SYuval Mintz 	u8 flags;
331dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG    BIT(0)
332dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG          BIT(1)
333dacd88d6SYuval Mintz #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG        BIT(2)
334dacd88d6SYuval Mintz 
335dacd88d6SYuval Mintz 	u8 padding[4];
336dacd88d6SYuval Mintz };
337dacd88d6SYuval Mintz 
338dacd88d6SYuval Mintz /* Set Queue Filters */
339dacd88d6SYuval Mintz struct vfpf_q_mac_vlan_filter {
340dacd88d6SYuval Mintz 	u32 flags;
341dacd88d6SYuval Mintz #define VFPF_Q_FILTER_DEST_MAC_VALID    0x01
342dacd88d6SYuval Mintz #define VFPF_Q_FILTER_VLAN_TAG_VALID    0x02
343dacd88d6SYuval Mintz #define VFPF_Q_FILTER_SET_MAC           0x100	/* set/clear */
344dacd88d6SYuval Mintz 
345dacd88d6SYuval Mintz 	u8 mac[ETH_ALEN];
346dacd88d6SYuval Mintz 	u16 vlan_tag;
347dacd88d6SYuval Mintz 
348dacd88d6SYuval Mintz 	u8 padding[4];
349dacd88d6SYuval Mintz };
350dacd88d6SYuval Mintz 
351dacd88d6SYuval Mintz /* Start a vport */
352dacd88d6SYuval Mintz struct vfpf_vport_start_tlv {
353dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
354dacd88d6SYuval Mintz 
355dacd88d6SYuval Mintz 	u64 sb_addr[PFVF_MAX_SBS_PER_VF];
356dacd88d6SYuval Mintz 
357dacd88d6SYuval Mintz 	u32 tpa_mode;
358dacd88d6SYuval Mintz 	u16 dep1;
359dacd88d6SYuval Mintz 	u16 mtu;
360dacd88d6SYuval Mintz 
361dacd88d6SYuval Mintz 	u8 vport_id;
362dacd88d6SYuval Mintz 	u8 inner_vlan_removal;
363dacd88d6SYuval Mintz 
364dacd88d6SYuval Mintz 	u8 only_untagged;
365dacd88d6SYuval Mintz 	u8 max_buffers_per_cqe;
366dacd88d6SYuval Mintz 
367dacd88d6SYuval Mintz 	u8 padding[4];
368dacd88d6SYuval Mintz };
369dacd88d6SYuval Mintz 
370dacd88d6SYuval Mintz /* Extended tlvs - need to add rss, mcast, accept mode tlvs */
371dacd88d6SYuval Mintz struct vfpf_vport_update_activate_tlv {
372dacd88d6SYuval Mintz 	struct channel_tlv tl;
373dacd88d6SYuval Mintz 	u8 update_rx;
374dacd88d6SYuval Mintz 	u8 update_tx;
375dacd88d6SYuval Mintz 	u8 active_rx;
376dacd88d6SYuval Mintz 	u8 active_tx;
377dacd88d6SYuval Mintz };
378dacd88d6SYuval Mintz 
37917b235c1SYuval Mintz struct vfpf_vport_update_tx_switch_tlv {
38017b235c1SYuval Mintz 	struct channel_tlv tl;
38117b235c1SYuval Mintz 	u8 tx_switching;
38217b235c1SYuval Mintz 	u8 padding[3];
38317b235c1SYuval Mintz };
38417b235c1SYuval Mintz 
38517b235c1SYuval Mintz struct vfpf_vport_update_vlan_strip_tlv {
38617b235c1SYuval Mintz 	struct channel_tlv tl;
38717b235c1SYuval Mintz 	u8 remove_vlan;
38817b235c1SYuval Mintz 	u8 padding[3];
38917b235c1SYuval Mintz };
39017b235c1SYuval Mintz 
391dacd88d6SYuval Mintz struct vfpf_vport_update_mcast_bin_tlv {
392dacd88d6SYuval Mintz 	struct channel_tlv tl;
393dacd88d6SYuval Mintz 	u8 padding[4];
394dacd88d6SYuval Mintz 
395dacd88d6SYuval Mintz 	u64 bins[8];
396dacd88d6SYuval Mintz };
397dacd88d6SYuval Mintz 
398dacd88d6SYuval Mintz struct vfpf_vport_update_accept_param_tlv {
399dacd88d6SYuval Mintz 	struct channel_tlv tl;
400dacd88d6SYuval Mintz 	u8 update_rx_mode;
401dacd88d6SYuval Mintz 	u8 update_tx_mode;
402dacd88d6SYuval Mintz 	u8 rx_accept_filter;
403dacd88d6SYuval Mintz 	u8 tx_accept_filter;
404dacd88d6SYuval Mintz };
405dacd88d6SYuval Mintz 
40617b235c1SYuval Mintz struct vfpf_vport_update_accept_any_vlan_tlv {
40717b235c1SYuval Mintz 	struct channel_tlv tl;
40817b235c1SYuval Mintz 	u8 update_accept_any_vlan_flg;
40917b235c1SYuval Mintz 	u8 accept_any_vlan;
41017b235c1SYuval Mintz 
41117b235c1SYuval Mintz 	u8 padding[2];
41217b235c1SYuval Mintz };
41317b235c1SYuval Mintz 
41417b235c1SYuval Mintz struct vfpf_vport_update_sge_tpa_tlv {
41517b235c1SYuval Mintz 	struct channel_tlv tl;
41617b235c1SYuval Mintz 
41717b235c1SYuval Mintz 	u16 sge_tpa_flags;
41817b235c1SYuval Mintz #define VFPF_TPA_IPV4_EN_FLAG		BIT(0)
41917b235c1SYuval Mintz #define VFPF_TPA_IPV6_EN_FLAG		BIT(1)
42017b235c1SYuval Mintz #define VFPF_TPA_PKT_SPLIT_FLAG		BIT(2)
42117b235c1SYuval Mintz #define VFPF_TPA_HDR_DATA_SPLIT_FLAG	BIT(3)
42217b235c1SYuval Mintz #define VFPF_TPA_GRO_CONSIST_FLAG	BIT(4)
42317b235c1SYuval Mintz 
42417b235c1SYuval Mintz 	u8 update_sge_tpa_flags;
42517b235c1SYuval Mintz #define VFPF_UPDATE_SGE_DEPRECATED_FLAG	BIT(0)
42617b235c1SYuval Mintz #define VFPF_UPDATE_TPA_EN_FLAG		BIT(1)
42717b235c1SYuval Mintz #define VFPF_UPDATE_TPA_PARAM_FLAG	BIT(2)
42817b235c1SYuval Mintz 
42917b235c1SYuval Mintz 	u8 max_buffers_per_cqe;
43017b235c1SYuval Mintz 
43117b235c1SYuval Mintz 	u16 deprecated_sge_buff_size;
43217b235c1SYuval Mintz 	u16 tpa_max_size;
43317b235c1SYuval Mintz 	u16 tpa_min_size_to_start;
43417b235c1SYuval Mintz 	u16 tpa_min_size_to_cont;
43517b235c1SYuval Mintz 
43617b235c1SYuval Mintz 	u8 tpa_max_aggs_num;
43717b235c1SYuval Mintz 	u8 padding[7];
43817b235c1SYuval Mintz };
43917b235c1SYuval Mintz 
440dacd88d6SYuval Mintz /* Primary tlv as a header for various extended tlvs for
441dacd88d6SYuval Mintz  * various functionalities in vport update ramrod.
442dacd88d6SYuval Mintz  */
443dacd88d6SYuval Mintz struct vfpf_vport_update_tlv {
444dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
445dacd88d6SYuval Mintz };
446dacd88d6SYuval Mintz 
447dacd88d6SYuval Mintz struct vfpf_ucast_filter_tlv {
448dacd88d6SYuval Mintz 	struct vfpf_first_tlv first_tlv;
449dacd88d6SYuval Mintz 
450dacd88d6SYuval Mintz 	u8 opcode;
451dacd88d6SYuval Mintz 	u8 type;
452dacd88d6SYuval Mintz 
453dacd88d6SYuval Mintz 	u8 mac[ETH_ALEN];
454dacd88d6SYuval Mintz 
455dacd88d6SYuval Mintz 	u16 vlan;
456dacd88d6SYuval Mintz 	u16 padding[3];
457dacd88d6SYuval Mintz };
458dacd88d6SYuval Mintz 
459eaf3c0c6SChopra, Manish /* tunnel update param tlv */
460eaf3c0c6SChopra, Manish struct vfpf_update_tunn_param_tlv {
461eaf3c0c6SChopra, Manish 	struct vfpf_first_tlv first_tlv;
462eaf3c0c6SChopra, Manish 
463eaf3c0c6SChopra, Manish 	u8 tun_mode_update_mask;
464eaf3c0c6SChopra, Manish 	u8 tunn_mode;
465eaf3c0c6SChopra, Manish 	u8 update_tun_cls;
466eaf3c0c6SChopra, Manish 	u8 vxlan_clss;
467eaf3c0c6SChopra, Manish 	u8 l2gre_clss;
468eaf3c0c6SChopra, Manish 	u8 ipgre_clss;
469eaf3c0c6SChopra, Manish 	u8 l2geneve_clss;
470eaf3c0c6SChopra, Manish 	u8 ipgeneve_clss;
471eaf3c0c6SChopra, Manish 	u8 update_geneve_port;
472eaf3c0c6SChopra, Manish 	u8 update_vxlan_port;
473eaf3c0c6SChopra, Manish 	u16 geneve_port;
474eaf3c0c6SChopra, Manish 	u16 vxlan_port;
475eaf3c0c6SChopra, Manish 	u8 padding[2];
476eaf3c0c6SChopra, Manish };
477eaf3c0c6SChopra, Manish 
478eaf3c0c6SChopra, Manish struct pfvf_update_tunn_param_tlv {
479eaf3c0c6SChopra, Manish 	struct pfvf_tlv hdr;
480eaf3c0c6SChopra, Manish 
481eaf3c0c6SChopra, Manish 	u16 tunn_feature_mask;
482eaf3c0c6SChopra, Manish 	u8 vxlan_mode;
483eaf3c0c6SChopra, Manish 	u8 l2geneve_mode;
484eaf3c0c6SChopra, Manish 	u8 ipgeneve_mode;
485eaf3c0c6SChopra, Manish 	u8 l2gre_mode;
486eaf3c0c6SChopra, Manish 	u8 ipgre_mode;
487eaf3c0c6SChopra, Manish 	u8 vxlan_clss;
488eaf3c0c6SChopra, Manish 	u8 l2gre_clss;
489eaf3c0c6SChopra, Manish 	u8 ipgre_clss;
490eaf3c0c6SChopra, Manish 	u8 l2geneve_clss;
491eaf3c0c6SChopra, Manish 	u8 ipgeneve_clss;
492eaf3c0c6SChopra, Manish 	u16 vxlan_udp_port;
493eaf3c0c6SChopra, Manish 	u16 geneve_udp_port;
494eaf3c0c6SChopra, Manish };
495eaf3c0c6SChopra, Manish 
49632a47e72SYuval Mintz struct tlv_buffer_size {
49732a47e72SYuval Mintz 	u8 tlv_buffer[TLV_BUFFER_SIZE];
49832a47e72SYuval Mintz };
49932a47e72SYuval Mintz 
500477f2d14SRahul Verma struct vfpf_update_coalesce {
501477f2d14SRahul Verma 	struct vfpf_first_tlv first_tlv;
502477f2d14SRahul Verma 	u16 rx_coal;
503477f2d14SRahul Verma 	u16 tx_coal;
504477f2d14SRahul Verma 	u16 qid;
505477f2d14SRahul Verma 	u8 padding[2];
506477f2d14SRahul Verma };
507bf5a94bfSRahul Verma 
508bf5a94bfSRahul Verma struct vfpf_read_coal_req_tlv {
509bf5a94bfSRahul Verma 	struct vfpf_first_tlv first_tlv;
510bf5a94bfSRahul Verma 	u16 qid;
511bf5a94bfSRahul Verma 	u8 is_rx;
512bf5a94bfSRahul Verma 	u8 padding[5];
513bf5a94bfSRahul Verma };
514bf5a94bfSRahul Verma 
515bf5a94bfSRahul Verma struct pfvf_read_coal_resp_tlv {
516bf5a94bfSRahul Verma 	struct pfvf_tlv hdr;
517bf5a94bfSRahul Verma 	u16 coal;
518bf5a94bfSRahul Verma 	u8 padding[6];
519bf5a94bfSRahul Verma };
520bf5a94bfSRahul Verma 
521809c45a0SShahed Shaikh struct vfpf_bulletin_update_mac_tlv {
522809c45a0SShahed Shaikh 	struct vfpf_first_tlv first_tlv;
523809c45a0SShahed Shaikh 	u8 mac[ETH_ALEN];
524809c45a0SShahed Shaikh 	u8 padding[2];
525809c45a0SShahed Shaikh };
526809c45a0SShahed Shaikh 
52732a47e72SYuval Mintz union vfpf_tlvs {
52837bff2b9SYuval Mintz 	struct vfpf_first_tlv first_tlv;
5291408cc1fSYuval Mintz 	struct vfpf_acquire_tlv acquire;
530dacd88d6SYuval Mintz 	struct vfpf_start_rxq_tlv start_rxq;
531dacd88d6SYuval Mintz 	struct vfpf_start_txq_tlv start_txq;
532dacd88d6SYuval Mintz 	struct vfpf_stop_rxqs_tlv stop_rxqs;
533dacd88d6SYuval Mintz 	struct vfpf_stop_txqs_tlv stop_txqs;
53417b235c1SYuval Mintz 	struct vfpf_update_rxq_tlv update_rxq;
535dacd88d6SYuval Mintz 	struct vfpf_vport_start_tlv start_vport;
536dacd88d6SYuval Mintz 	struct vfpf_vport_update_tlv vport_update;
537dacd88d6SYuval Mintz 	struct vfpf_ucast_filter_tlv ucast_filter;
538eaf3c0c6SChopra, Manish 	struct vfpf_update_tunn_param_tlv tunn_param_update;
539477f2d14SRahul Verma 	struct vfpf_update_coalesce update_coalesce;
540bf5a94bfSRahul Verma 	struct vfpf_read_coal_req_tlv read_coal_req;
541809c45a0SShahed Shaikh 	struct vfpf_bulletin_update_mac_tlv bulletin_update_mac;
54232a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
54332a47e72SYuval Mintz };
54432a47e72SYuval Mintz 
54532a47e72SYuval Mintz union pfvf_tlvs {
54637bff2b9SYuval Mintz 	struct pfvf_def_resp_tlv default_resp;
5471408cc1fSYuval Mintz 	struct pfvf_acquire_resp_tlv acquire_resp;
54832a47e72SYuval Mintz 	struct tlv_buffer_size tlv_buf_size;
549dacd88d6SYuval Mintz 	struct pfvf_start_queue_resp_tlv queue_start;
550eaf3c0c6SChopra, Manish 	struct pfvf_update_tunn_param_tlv tunn_param_resp;
551bf5a94bfSRahul Verma 	struct pfvf_read_coal_resp_tlv read_coal_resp;
55232a47e72SYuval Mintz };
55332a47e72SYuval Mintz 
55408feecd7SYuval Mintz enum qed_bulletin_bit {
555eff16960SYuval Mintz 	/* Alert the VF that a forced MAC was set by the PF */
556eff16960SYuval Mintz 	MAC_ADDR_FORCED = 0,
55708feecd7SYuval Mintz 	/* Alert the VF that a forced VLAN was set by the PF */
55808feecd7SYuval Mintz 	VLAN_ADDR_FORCED = 2,
55908feecd7SYuval Mintz 
56008feecd7SYuval Mintz 	/* Indicate that `default_only_untagged' contains actual data */
56108feecd7SYuval Mintz 	VFPF_BULLETIN_UNTAGGED_DEFAULT = 3,
56208feecd7SYuval Mintz 	VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4,
56308feecd7SYuval Mintz 
564eff16960SYuval Mintz 	/* Alert the VF that suggested mac was sent by the PF.
565eff16960SYuval Mintz 	 * MAC_ADDR will be disabled in case MAC_ADDR_FORCED is set.
566eff16960SYuval Mintz 	 */
567eff16960SYuval Mintz 	VFPF_BULLETIN_MAC_ADDR = 5
56808feecd7SYuval Mintz };
56908feecd7SYuval Mintz 
57032a47e72SYuval Mintz struct qed_bulletin_content {
57132a47e72SYuval Mintz 	/* crc of structure to ensure is not in mid-update */
57232a47e72SYuval Mintz 	u32 crc;
57332a47e72SYuval Mintz 
57432a47e72SYuval Mintz 	u32 version;
57532a47e72SYuval Mintz 
57632a47e72SYuval Mintz 	/* bitmap indicating which fields hold valid values */
57732a47e72SYuval Mintz 	u64 valid_bitmap;
57836558c3dSYuval Mintz 
57936558c3dSYuval Mintz 	/* used for MAC_ADDR or MAC_ADDR_FORCED */
58036558c3dSYuval Mintz 	u8 mac[ETH_ALEN];
58136558c3dSYuval Mintz 
58236558c3dSYuval Mintz 	/* If valid, 1 => only untagged Rx if no vlan is configured */
58336558c3dSYuval Mintz 	u8 default_only_untagged;
58436558c3dSYuval Mintz 	u8 padding;
58536558c3dSYuval Mintz 
58636558c3dSYuval Mintz 	/* The following is a 'copy' of qed_mcp_link_state,
58736558c3dSYuval Mintz 	 * qed_mcp_link_params and qed_mcp_link_capabilities. Since it's
58836558c3dSYuval Mintz 	 * possible the structs will increase further along the road we cannot
58936558c3dSYuval Mintz 	 * have it here; Instead we need to have all of its fields.
59036558c3dSYuval Mintz 	 */
59136558c3dSYuval Mintz 	u8 req_autoneg;
59236558c3dSYuval Mintz 	u8 req_autoneg_pause;
59336558c3dSYuval Mintz 	u8 req_forced_rx;
59436558c3dSYuval Mintz 	u8 req_forced_tx;
59536558c3dSYuval Mintz 	u8 padding2[4];
59636558c3dSYuval Mintz 
59736558c3dSYuval Mintz 	u32 req_adv_speed;
59836558c3dSYuval Mintz 	u32 req_forced_speed;
59936558c3dSYuval Mintz 	u32 req_loopback;
60036558c3dSYuval Mintz 	u32 padding3;
60136558c3dSYuval Mintz 
60236558c3dSYuval Mintz 	u8 link_up;
60336558c3dSYuval Mintz 	u8 full_duplex;
60436558c3dSYuval Mintz 	u8 autoneg;
60536558c3dSYuval Mintz 	u8 autoneg_complete;
60636558c3dSYuval Mintz 	u8 parallel_detection;
60736558c3dSYuval Mintz 	u8 pfc_enabled;
60836558c3dSYuval Mintz 	u8 partner_tx_flow_ctrl_en;
60936558c3dSYuval Mintz 	u8 partner_rx_flow_ctrl_en;
61036558c3dSYuval Mintz 	u8 partner_adv_pause;
61136558c3dSYuval Mintz 	u8 sfp_tx_fault;
61297379f15SChopra, Manish 	u16 vxlan_udp_port;
61397379f15SChopra, Manish 	u16 geneve_udp_port;
61497379f15SChopra, Manish 	u8 padding4[2];
61536558c3dSYuval Mintz 
61636558c3dSYuval Mintz 	u32 speed;
61736558c3dSYuval Mintz 	u32 partner_adv_speed;
61836558c3dSYuval Mintz 
61936558c3dSYuval Mintz 	u32 capability_speed;
62008feecd7SYuval Mintz 
62108feecd7SYuval Mintz 	/* Forced vlan */
62208feecd7SYuval Mintz 	u16 pvid;
62308feecd7SYuval Mintz 	u16 padding5;
62432a47e72SYuval Mintz };
62532a47e72SYuval Mintz 
62632a47e72SYuval Mintz struct qed_bulletin {
62732a47e72SYuval Mintz 	dma_addr_t phys;
62832a47e72SYuval Mintz 	struct qed_bulletin_content *p_virt;
62932a47e72SYuval Mintz 	u32 size;
63032a47e72SYuval Mintz };
63132a47e72SYuval Mintz 
63237bff2b9SYuval Mintz enum {
63337bff2b9SYuval Mintz 	CHANNEL_TLV_NONE,	/* ends tlv sequence */
6341408cc1fSYuval Mintz 	CHANNEL_TLV_ACQUIRE,
635dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_START,
636dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE,
637dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_TEARDOWN,
638dacd88d6SYuval Mintz 	CHANNEL_TLV_START_RXQ,
639dacd88d6SYuval Mintz 	CHANNEL_TLV_START_TXQ,
640dacd88d6SYuval Mintz 	CHANNEL_TLV_STOP_RXQS,
641dacd88d6SYuval Mintz 	CHANNEL_TLV_STOP_TXQS,
64217b235c1SYuval Mintz 	CHANNEL_TLV_UPDATE_RXQ,
6430b55e27dSYuval Mintz 	CHANNEL_TLV_INT_CLEANUP,
6440b55e27dSYuval Mintz 	CHANNEL_TLV_CLOSE,
6450b55e27dSYuval Mintz 	CHANNEL_TLV_RELEASE,
64637bff2b9SYuval Mintz 	CHANNEL_TLV_LIST_END,
647dacd88d6SYuval Mintz 	CHANNEL_TLV_UCAST_FILTER,
648dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACTIVATE,
64917b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH,
65017b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP,
651dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_MCAST,
652dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM,
653dacd88d6SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_RSS,
65417b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN,
65517b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_SGE_TPA,
656eaf3c0c6SChopra, Manish 	CHANNEL_TLV_UPDATE_TUNN_PARAM,
657477f2d14SRahul Verma 	CHANNEL_TLV_COALESCE_UPDATE,
65808bc8f15SMintz, Yuval 	CHANNEL_TLV_QID,
659bf5a94bfSRahul Verma 	CHANNEL_TLV_COALESCE_READ,
660809c45a0SShahed Shaikh 	CHANNEL_TLV_BULLETIN_UPDATE_MAC,
661dacd88d6SYuval Mintz 	CHANNEL_TLV_MAX,
662dacd88d6SYuval Mintz 
663dacd88d6SYuval Mintz 	/* Required for iterating over vport-update tlvs.
664dacd88d6SYuval Mintz 	 * Will break in case non-sequential vport-update tlvs.
665dacd88d6SYuval Mintz 	 */
66617b235c1SYuval Mintz 	CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1,
66737bff2b9SYuval Mintz };
66837bff2b9SYuval Mintz 
66908bc8f15SMintz, Yuval /* Default number of CIDs [total of both Rx and Tx] to be requested
67008bc8f15SMintz, Yuval  * by default, and maximum possible number.
67108bc8f15SMintz, Yuval  */
67208bc8f15SMintz, Yuval #define QED_ETH_VF_DEFAULT_NUM_CIDS (32)
67308bc8f15SMintz, Yuval #define QED_ETH_VF_MAX_NUM_CIDS (250)
67408bc8f15SMintz, Yuval 
6751408cc1fSYuval Mintz /* This data is held in the qed_hwfn structure for VFs only. */
6761408cc1fSYuval Mintz struct qed_vf_iov {
6771408cc1fSYuval Mintz 	union vfpf_tlvs *vf2pf_request;
6781408cc1fSYuval Mintz 	dma_addr_t vf2pf_request_phys;
6791408cc1fSYuval Mintz 	union pfvf_tlvs *pf2vf_reply;
6801408cc1fSYuval Mintz 	dma_addr_t pf2vf_reply_phys;
6811408cc1fSYuval Mintz 
6821408cc1fSYuval Mintz 	/* Should be taken whenever the mailbox buffers are accessed */
6831408cc1fSYuval Mintz 	struct mutex mutex;
6841408cc1fSYuval Mintz 	u8 *offset;
6851408cc1fSYuval Mintz 
6861408cc1fSYuval Mintz 	/* Bulletin Board */
6871408cc1fSYuval Mintz 	struct qed_bulletin bulletin;
6881408cc1fSYuval Mintz 	struct qed_bulletin_content bulletin_shadow;
6891408cc1fSYuval Mintz 
6901408cc1fSYuval Mintz 	/* we set aside a copy of the acquire response */
6911408cc1fSYuval Mintz 	struct pfvf_acquire_resp_tlv acquire_resp;
692d8c2c7e3SYuval Mintz 
693d8c2c7e3SYuval Mintz 	/* In case PF originates prior to the fp-hsi version comparison,
694d8c2c7e3SYuval Mintz 	 * this has to be propagated as it affects the fastpath.
695d8c2c7e3SYuval Mintz 	 */
696d8c2c7e3SYuval Mintz 	bool b_pre_fp_hsi;
69750a20714SMintz, Yuval 
69850a20714SMintz, Yuval 	/* Current day VFs are passing the SBs physical address on vport
69950a20714SMintz, Yuval 	 * start, and as they lack an IGU mapping they need to store the
70050a20714SMintz, Yuval 	 * addresses of previously registered SBs.
70150a20714SMintz, Yuval 	 * Even if we were to change configuration flow, due to backward
70250a20714SMintz, Yuval 	 * compatibility [with older PFs] we'd still need to store these.
70350a20714SMintz, Yuval 	 */
70450a20714SMintz, Yuval 	struct qed_sb_info *sbs_info[PFVF_MAX_SBS_PER_VF];
7051a850bfcSMintz, Yuval 
7061a850bfcSMintz, Yuval 	/* Determines whether VF utilizes doorbells via limited register
7071a850bfcSMintz, Yuval 	 * bar or via the doorbell bar.
7081a850bfcSMintz, Yuval 	 */
7091a850bfcSMintz, Yuval 	bool b_doorbell_bar;
7101408cc1fSYuval Mintz };
7111408cc1fSYuval Mintz 
712477f2d14SRahul Verma /**
713477f2d14SRahul Verma  * @brief VF - Set Rx/Tx coalesce per VF's relative queue.
714477f2d14SRahul Verma  *             Coalesce value '0' will omit the configuration.
715477f2d14SRahul Verma  *
716477f2d14SRahul Verma  * @param p_hwfn
717477f2d14SRahul Verma  * @param rx_coal - coalesce value in micro second for rx queue
718477f2d14SRahul Verma  * @param tx_coal - coalesce value in micro second for tx queue
719477f2d14SRahul Verma  * @param p_cid   - queue cid
720477f2d14SRahul Verma  *
721477f2d14SRahul Verma  **/
722477f2d14SRahul Verma int qed_vf_pf_set_coalesce(struct qed_hwfn *p_hwfn,
723477f2d14SRahul Verma 			   u16 rx_coal,
724477f2d14SRahul Verma 			   u16 tx_coal, struct qed_queue_cid *p_cid);
725477f2d14SRahul Verma 
726bf5a94bfSRahul Verma /**
727bf5a94bfSRahul Verma  * @brief VF - Get coalesce per VF's relative queue.
728bf5a94bfSRahul Verma  *
729bf5a94bfSRahul Verma  * @param p_hwfn
730bf5a94bfSRahul Verma  * @param p_coal - coalesce value in micro second for VF queues.
731bf5a94bfSRahul Verma  * @param p_cid  - queue cid
732bf5a94bfSRahul Verma  *
733bf5a94bfSRahul Verma  **/
734bf5a94bfSRahul Verma int qed_vf_pf_get_coalesce(struct qed_hwfn *p_hwfn,
735bf5a94bfSRahul Verma 			   u16 *p_coal, struct qed_queue_cid *p_cid);
736bf5a94bfSRahul Verma 
7371408cc1fSYuval Mintz #ifdef CONFIG_QED_SRIOV
7381408cc1fSYuval Mintz /**
73936558c3dSYuval Mintz  * @brief Read the VF bulletin and act on it if needed
74036558c3dSYuval Mintz  *
74136558c3dSYuval Mintz  * @param p_hwfn
74236558c3dSYuval Mintz  * @param p_change - qed fills 1 iff bulletin board has changed, 0 otherwise.
74336558c3dSYuval Mintz  *
74436558c3dSYuval Mintz  * @return enum _qed_status
74536558c3dSYuval Mintz  */
74636558c3dSYuval Mintz int qed_vf_read_bulletin(struct qed_hwfn *p_hwfn, u8 *p_change);
74736558c3dSYuval Mintz 
74836558c3dSYuval Mintz /**
74936558c3dSYuval Mintz  * @brief Get link paramters for VF from qed
75036558c3dSYuval Mintz  *
75136558c3dSYuval Mintz  * @param p_hwfn
75236558c3dSYuval Mintz  * @param params - the link params structure to be filled for the VF
75336558c3dSYuval Mintz  */
75436558c3dSYuval Mintz void qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
75536558c3dSYuval Mintz 			    struct qed_mcp_link_params *params);
75636558c3dSYuval Mintz 
75736558c3dSYuval Mintz /**
75836558c3dSYuval Mintz  * @brief Get link state for VF from qed
75936558c3dSYuval Mintz  *
76036558c3dSYuval Mintz  * @param p_hwfn
76136558c3dSYuval Mintz  * @param link - the link state structure to be filled for the VF
76236558c3dSYuval Mintz  */
76336558c3dSYuval Mintz void qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
76436558c3dSYuval Mintz 			   struct qed_mcp_link_state *link);
76536558c3dSYuval Mintz 
76636558c3dSYuval Mintz /**
76736558c3dSYuval Mintz  * @brief Get link capabilities for VF from qed
76836558c3dSYuval Mintz  *
76936558c3dSYuval Mintz  * @param p_hwfn
77036558c3dSYuval Mintz  * @param p_link_caps - the link capabilities structure to be filled for the VF
77136558c3dSYuval Mintz  */
77236558c3dSYuval Mintz void qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
77336558c3dSYuval Mintz 			  struct qed_mcp_link_capabilities *p_link_caps);
77436558c3dSYuval Mintz 
77536558c3dSYuval Mintz /**
7761408cc1fSYuval Mintz  * @brief Get number of Rx queues allocated for VF by qed
7771408cc1fSYuval Mintz  *
7781408cc1fSYuval Mintz  *  @param p_hwfn
7791408cc1fSYuval Mintz  *  @param num_rxqs - allocated RX queues
7801408cc1fSYuval Mintz  */
7811408cc1fSYuval Mintz void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs);
7821408cc1fSYuval Mintz 
7831408cc1fSYuval Mintz /**
7840db711bbSMintz, Yuval  * @brief Get number of Rx queues allocated for VF by qed
7850db711bbSMintz, Yuval  *
7860db711bbSMintz, Yuval  *  @param p_hwfn
7870db711bbSMintz, Yuval  *  @param num_txqs - allocated RX queues
7880db711bbSMintz, Yuval  */
7890db711bbSMintz, Yuval void qed_vf_get_num_txqs(struct qed_hwfn *p_hwfn, u8 *num_txqs);
7900db711bbSMintz, Yuval 
7910db711bbSMintz, Yuval /**
792cbb8a12cSMintz, Yuval  * @brief Get number of available connections [both Rx and Tx] for VF
793cbb8a12cSMintz, Yuval  *
794cbb8a12cSMintz, Yuval  * @param p_hwfn
795cbb8a12cSMintz, Yuval  * @param num_cids - allocated number of connections
796cbb8a12cSMintz, Yuval  */
797cbb8a12cSMintz, Yuval void qed_vf_get_num_cids(struct qed_hwfn *p_hwfn, u8 *num_cids);
798cbb8a12cSMintz, Yuval 
799cbb8a12cSMintz, Yuval /**
8001408cc1fSYuval Mintz  * @brief Get port mac address for VF
8011408cc1fSYuval Mintz  *
8021408cc1fSYuval Mintz  * @param p_hwfn
8031408cc1fSYuval Mintz  * @param port_mac - destination location for port mac
8041408cc1fSYuval Mintz  */
8051408cc1fSYuval Mintz void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac);
8061408cc1fSYuval Mintz 
8071408cc1fSYuval Mintz /**
8081408cc1fSYuval Mintz  * @brief Get number of VLAN filters allocated for VF by qed
8091408cc1fSYuval Mintz  *
8101408cc1fSYuval Mintz  *  @param p_hwfn
8111408cc1fSYuval Mintz  *  @param num_rxqs - allocated VLAN filters
8121408cc1fSYuval Mintz  */
8131408cc1fSYuval Mintz void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn,
8141408cc1fSYuval Mintz 				 u8 *num_vlan_filters);
8151408cc1fSYuval Mintz 
8161408cc1fSYuval Mintz /**
817b0fca312SMintz, Yuval  * @brief Get number of MAC filters allocated for VF by qed
818b0fca312SMintz, Yuval  *
819b0fca312SMintz, Yuval  *  @param p_hwfn
820b0fca312SMintz, Yuval  *  @param num_rxqs - allocated MAC filters
821b0fca312SMintz, Yuval  */
822b0fca312SMintz, Yuval void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn, u8 *num_mac_filters);
823b0fca312SMintz, Yuval 
824b0fca312SMintz, Yuval /**
825eff16960SYuval Mintz  * @brief Check if VF can set a MAC address
826eff16960SYuval Mintz  *
827eff16960SYuval Mintz  * @param p_hwfn
828eff16960SYuval Mintz  * @param mac
829eff16960SYuval Mintz  *
830eff16960SYuval Mintz  * @return bool
831eff16960SYuval Mintz  */
832eff16960SYuval Mintz bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac);
833eff16960SYuval Mintz 
834eff16960SYuval Mintz /**
8351408cc1fSYuval Mintz  * @brief Set firmware version information in dev_info from VFs acquire response tlv
8361408cc1fSYuval Mintz  *
8371408cc1fSYuval Mintz  * @param p_hwfn
8381408cc1fSYuval Mintz  * @param fw_major
8391408cc1fSYuval Mintz  * @param fw_minor
8401408cc1fSYuval Mintz  * @param fw_rev
8411408cc1fSYuval Mintz  * @param fw_eng
8421408cc1fSYuval Mintz  */
8431408cc1fSYuval Mintz void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn,
8441408cc1fSYuval Mintz 			   u16 *fw_major, u16 *fw_minor,
8451408cc1fSYuval Mintz 			   u16 *fw_rev, u16 *fw_eng);
8461408cc1fSYuval Mintz 
8471408cc1fSYuval Mintz /**
8481408cc1fSYuval Mintz  * @brief hw preparation for VF
8491408cc1fSYuval Mintz  *      sends ACQUIRE message
8501408cc1fSYuval Mintz  *
8511408cc1fSYuval Mintz  * @param p_hwfn
8521408cc1fSYuval Mintz  *
8531408cc1fSYuval Mintz  * @return int
8541408cc1fSYuval Mintz  */
8551408cc1fSYuval Mintz int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn);
8561408cc1fSYuval Mintz 
8571408cc1fSYuval Mintz /**
858dacd88d6SYuval Mintz  * @brief VF - start the RX Queue by sending a message to the PF
859dacd88d6SYuval Mintz  * @param p_hwfn
8603da7a37aSMintz, Yuval  * @param p_cid			- Only relative fields are relevant
861dacd88d6SYuval Mintz  * @param bd_max_bytes          - maximum number of bytes per bd
862dacd88d6SYuval Mintz  * @param bd_chain_phys_addr    - physical address of bd chain
863dacd88d6SYuval Mintz  * @param cqe_pbl_addr          - physical address of pbl
864dacd88d6SYuval Mintz  * @param cqe_pbl_size          - pbl size
865dacd88d6SYuval Mintz  * @param pp_prod               - pointer to the producer to be
866dacd88d6SYuval Mintz  *				  used in fastpath
867dacd88d6SYuval Mintz  *
868dacd88d6SYuval Mintz  * @return int
869dacd88d6SYuval Mintz  */
870dacd88d6SYuval Mintz int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
8713da7a37aSMintz, Yuval 			struct qed_queue_cid *p_cid,
872dacd88d6SYuval Mintz 			u16 bd_max_bytes,
873dacd88d6SYuval Mintz 			dma_addr_t bd_chain_phys_addr,
874dacd88d6SYuval Mintz 			dma_addr_t cqe_pbl_addr,
875dacd88d6SYuval Mintz 			u16 cqe_pbl_size, void __iomem **pp_prod);
876dacd88d6SYuval Mintz 
877dacd88d6SYuval Mintz /**
878dacd88d6SYuval Mintz  * @brief VF - start the TX queue by sending a message to the
879dacd88d6SYuval Mintz  *        PF.
880dacd88d6SYuval Mintz  *
881dacd88d6SYuval Mintz  * @param p_hwfn
882dacd88d6SYuval Mintz  * @param tx_queue_id           - zero based within the VF
883dacd88d6SYuval Mintz  * @param sb                    - status block for this queue
884dacd88d6SYuval Mintz  * @param sb_index              - index within the status block
885dacd88d6SYuval Mintz  * @param bd_chain_phys_addr    - physical address of tx chain
886dacd88d6SYuval Mintz  * @param pp_doorbell           - pointer to address to which to
887dacd88d6SYuval Mintz  *                      write the doorbell too..
888dacd88d6SYuval Mintz  *
889dacd88d6SYuval Mintz  * @return int
890dacd88d6SYuval Mintz  */
8913da7a37aSMintz, Yuval int
8923da7a37aSMintz, Yuval qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn,
8933da7a37aSMintz, Yuval 		    struct qed_queue_cid *p_cid,
894dacd88d6SYuval Mintz 		    dma_addr_t pbl_addr,
895dacd88d6SYuval Mintz 		    u16 pbl_size, void __iomem **pp_doorbell);
896dacd88d6SYuval Mintz 
897dacd88d6SYuval Mintz /**
898dacd88d6SYuval Mintz  * @brief VF - stop the RX queue by sending a message to the PF
899dacd88d6SYuval Mintz  *
900dacd88d6SYuval Mintz  * @param p_hwfn
9013da7a37aSMintz, Yuval  * @param p_cid
902dacd88d6SYuval Mintz  * @param cqe_completion
903dacd88d6SYuval Mintz  *
904dacd88d6SYuval Mintz  * @return int
905dacd88d6SYuval Mintz  */
906dacd88d6SYuval Mintz int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn,
9073da7a37aSMintz, Yuval 		       struct qed_queue_cid *p_cid, bool cqe_completion);
908dacd88d6SYuval Mintz 
909dacd88d6SYuval Mintz /**
910dacd88d6SYuval Mintz  * @brief VF - stop the TX queue by sending a message to the PF
911dacd88d6SYuval Mintz  *
912dacd88d6SYuval Mintz  * @param p_hwfn
913dacd88d6SYuval Mintz  * @param tx_qid
914dacd88d6SYuval Mintz  *
915dacd88d6SYuval Mintz  * @return int
916dacd88d6SYuval Mintz  */
9173da7a37aSMintz, Yuval int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn, struct qed_queue_cid *p_cid);
918dacd88d6SYuval Mintz 
919dacd88d6SYuval Mintz /**
920dacd88d6SYuval Mintz  * @brief VF - send a vport update command
921dacd88d6SYuval Mintz  *
922dacd88d6SYuval Mintz  * @param p_hwfn
923dacd88d6SYuval Mintz  * @param params
924dacd88d6SYuval Mintz  *
925dacd88d6SYuval Mintz  * @return int
926dacd88d6SYuval Mintz  */
927dacd88d6SYuval Mintz int qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn,
928dacd88d6SYuval Mintz 			   struct qed_sp_vport_update_params *p_params);
929dacd88d6SYuval Mintz 
930dacd88d6SYuval Mintz /**
9310b55e27dSYuval Mintz  *
9320b55e27dSYuval Mintz  * @brief VF - send a close message to PF
9330b55e27dSYuval Mintz  *
9340b55e27dSYuval Mintz  * @param p_hwfn
9350b55e27dSYuval Mintz  *
9360b55e27dSYuval Mintz  * @return enum _qed_status
9370b55e27dSYuval Mintz  */
9380b55e27dSYuval Mintz int qed_vf_pf_reset(struct qed_hwfn *p_hwfn);
9390b55e27dSYuval Mintz 
9400b55e27dSYuval Mintz /**
9410b55e27dSYuval Mintz  * @brief VF - free vf`s memories
9420b55e27dSYuval Mintz  *
9430b55e27dSYuval Mintz  * @param p_hwfn
9440b55e27dSYuval Mintz  *
9450b55e27dSYuval Mintz  * @return enum _qed_status
9460b55e27dSYuval Mintz  */
9470b55e27dSYuval Mintz int qed_vf_pf_release(struct qed_hwfn *p_hwfn);
94836558c3dSYuval Mintz 
9490b55e27dSYuval Mintz /**
9501408cc1fSYuval Mintz  * @brief qed_vf_get_igu_sb_id - Get the IGU SB ID for a given
9511408cc1fSYuval Mintz  *        sb_id. For VFs igu sbs don't have to be contiguous
9521408cc1fSYuval Mintz  *
9531408cc1fSYuval Mintz  * @param p_hwfn
9541408cc1fSYuval Mintz  * @param sb_id
9551408cc1fSYuval Mintz  *
9561408cc1fSYuval Mintz  * @return INLINE u16
9571408cc1fSYuval Mintz  */
9581408cc1fSYuval Mintz u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id);
9590b55e27dSYuval Mintz 
9600b55e27dSYuval Mintz /**
96150a20714SMintz, Yuval  * @brief Stores [or removes] a configured sb_info.
96250a20714SMintz, Yuval  *
96350a20714SMintz, Yuval  * @param p_hwfn
96450a20714SMintz, Yuval  * @param sb_id - zero-based SB index [for fastpath]
96550a20714SMintz, Yuval  * @param sb_info - may be NULL [during removal].
96650a20714SMintz, Yuval  */
96750a20714SMintz, Yuval void qed_vf_set_sb_info(struct qed_hwfn *p_hwfn,
96850a20714SMintz, Yuval 			u16 sb_id, struct qed_sb_info *p_sb);
96950a20714SMintz, Yuval 
97050a20714SMintz, Yuval /**
971dacd88d6SYuval Mintz  * @brief qed_vf_pf_vport_start - perform vport start for VF.
972dacd88d6SYuval Mintz  *
973dacd88d6SYuval Mintz  * @param p_hwfn
974dacd88d6SYuval Mintz  * @param vport_id
975dacd88d6SYuval Mintz  * @param mtu
976dacd88d6SYuval Mintz  * @param inner_vlan_removal
977dacd88d6SYuval Mintz  * @param tpa_mode
978dacd88d6SYuval Mintz  * @param max_buffers_per_cqe,
979dacd88d6SYuval Mintz  * @param only_untagged - default behavior regarding vlan acceptance
980dacd88d6SYuval Mintz  *
981dacd88d6SYuval Mintz  * @return enum _qed_status
982dacd88d6SYuval Mintz  */
983dacd88d6SYuval Mintz int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn,
984dacd88d6SYuval Mintz 			  u8 vport_id,
985dacd88d6SYuval Mintz 			  u16 mtu,
986dacd88d6SYuval Mintz 			  u8 inner_vlan_removal,
987dacd88d6SYuval Mintz 			  enum qed_tpa_mode tpa_mode,
98808feecd7SYuval Mintz 			  u8 max_buffers_per_cqe, u8 only_untagged);
989dacd88d6SYuval Mintz 
990dacd88d6SYuval Mintz /**
991dacd88d6SYuval Mintz  * @brief qed_vf_pf_vport_stop - stop the VF's vport
992dacd88d6SYuval Mintz  *
993dacd88d6SYuval Mintz  * @param p_hwfn
994dacd88d6SYuval Mintz  *
995dacd88d6SYuval Mintz  * @return enum _qed_status
996dacd88d6SYuval Mintz  */
997dacd88d6SYuval Mintz int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn);
998dacd88d6SYuval Mintz 
999dacd88d6SYuval Mintz int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn,
1000dacd88d6SYuval Mintz 			   struct qed_filter_ucast *p_param);
1001dacd88d6SYuval Mintz 
1002dacd88d6SYuval Mintz void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn,
1003dacd88d6SYuval Mintz 			    struct qed_filter_mcast *p_filter_cmd);
1004dacd88d6SYuval Mintz 
1005dacd88d6SYuval Mintz /**
10060b55e27dSYuval Mintz  * @brief qed_vf_pf_int_cleanup - clean the SB of the VF
10070b55e27dSYuval Mintz  *
10080b55e27dSYuval Mintz  * @param p_hwfn
10090b55e27dSYuval Mintz  *
10100b55e27dSYuval Mintz  * @return enum _qed_status
10110b55e27dSYuval Mintz  */
10120b55e27dSYuval Mintz int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn);
101336558c3dSYuval Mintz 
101436558c3dSYuval Mintz /**
101536558c3dSYuval Mintz  * @brief - return the link params in a given bulletin board
101636558c3dSYuval Mintz  *
101736558c3dSYuval Mintz  * @param p_hwfn
101836558c3dSYuval Mintz  * @param p_params - pointer to a struct to fill with link params
101936558c3dSYuval Mintz  * @param p_bulletin
102036558c3dSYuval Mintz  */
102136558c3dSYuval Mintz void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
102236558c3dSYuval Mintz 			      struct qed_mcp_link_params *p_params,
102336558c3dSYuval Mintz 			      struct qed_bulletin_content *p_bulletin);
102436558c3dSYuval Mintz 
102536558c3dSYuval Mintz /**
102636558c3dSYuval Mintz  * @brief - return the link state in a given bulletin board
102736558c3dSYuval Mintz  *
102836558c3dSYuval Mintz  * @param p_hwfn
102936558c3dSYuval Mintz  * @param p_link - pointer to a struct to fill with link state
103036558c3dSYuval Mintz  * @param p_bulletin
103136558c3dSYuval Mintz  */
103236558c3dSYuval Mintz void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
103336558c3dSYuval Mintz 			     struct qed_mcp_link_state *p_link,
103436558c3dSYuval Mintz 			     struct qed_bulletin_content *p_bulletin);
103536558c3dSYuval Mintz 
103636558c3dSYuval Mintz /**
103736558c3dSYuval Mintz  * @brief - return the link capabilities in a given bulletin board
103836558c3dSYuval Mintz  *
103936558c3dSYuval Mintz  * @param p_hwfn
104036558c3dSYuval Mintz  * @param p_link - pointer to a struct to fill with link capabilities
104136558c3dSYuval Mintz  * @param p_bulletin
104236558c3dSYuval Mintz  */
104336558c3dSYuval Mintz void __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
104436558c3dSYuval Mintz 			    struct qed_mcp_link_capabilities *p_link_caps,
104536558c3dSYuval Mintz 			    struct qed_bulletin_content *p_bulletin);
104636558c3dSYuval Mintz 
104736558c3dSYuval Mintz void qed_iov_vf_task(struct work_struct *work);
1048eaf3c0c6SChopra, Manish void qed_vf_set_vf_start_tunn_update_param(struct qed_tunnel_info *p_tun);
1049eaf3c0c6SChopra, Manish int qed_vf_pf_tunnel_param_update(struct qed_hwfn *p_hwfn,
1050eaf3c0c6SChopra, Manish 				  struct qed_tunnel_info *p_tunn);
10511a850bfcSMintz, Yuval 
10521a850bfcSMintz, Yuval u32 qed_vf_hw_bar_size(struct qed_hwfn *p_hwfn, enum BAR_ID bar_id);
1053809c45a0SShahed Shaikh /**
1054809c45a0SShahed Shaikh  * @brief - Ask PF to update the MAC address in it's bulletin board
1055809c45a0SShahed Shaikh  *
1056809c45a0SShahed Shaikh  * @param p_mac - mac address to be updated in bulletin board
1057809c45a0SShahed Shaikh  */
1058809c45a0SShahed Shaikh int qed_vf_pf_bulletin_update_mac(struct qed_hwfn *p_hwfn, u8 *p_mac);
1059809c45a0SShahed Shaikh 
10601408cc1fSYuval Mintz #else
106136558c3dSYuval Mintz static inline void qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
106236558c3dSYuval Mintz 					  struct qed_mcp_link_params *params)
106336558c3dSYuval Mintz {
106436558c3dSYuval Mintz }
106536558c3dSYuval Mintz 
106636558c3dSYuval Mintz static inline void qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
106736558c3dSYuval Mintz 					 struct qed_mcp_link_state *link)
106836558c3dSYuval Mintz {
106936558c3dSYuval Mintz }
107036558c3dSYuval Mintz 
107136558c3dSYuval Mintz static inline void
107236558c3dSYuval Mintz qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
107336558c3dSYuval Mintz 		     struct qed_mcp_link_capabilities *p_link_caps)
107436558c3dSYuval Mintz {
107536558c3dSYuval Mintz }
107636558c3dSYuval Mintz 
10771408cc1fSYuval Mintz static inline void qed_vf_get_num_rxqs(struct qed_hwfn *p_hwfn, u8 *num_rxqs)
10781408cc1fSYuval Mintz {
10791408cc1fSYuval Mintz }
10801408cc1fSYuval Mintz 
10810db711bbSMintz, Yuval static inline void qed_vf_get_num_txqs(struct qed_hwfn *p_hwfn, u8 *num_txqs)
10820db711bbSMintz, Yuval {
10830db711bbSMintz, Yuval }
10840db711bbSMintz, Yuval 
1085cbb8a12cSMintz, Yuval static inline void qed_vf_get_num_cids(struct qed_hwfn *p_hwfn, u8 *num_cids)
1086cbb8a12cSMintz, Yuval {
1087cbb8a12cSMintz, Yuval }
1088cbb8a12cSMintz, Yuval 
10891408cc1fSYuval Mintz static inline void qed_vf_get_port_mac(struct qed_hwfn *p_hwfn, u8 *port_mac)
10901408cc1fSYuval Mintz {
10911408cc1fSYuval Mintz }
10921408cc1fSYuval Mintz 
10931408cc1fSYuval Mintz static inline void qed_vf_get_num_vlan_filters(struct qed_hwfn *p_hwfn,
10941408cc1fSYuval Mintz 					       u8 *num_vlan_filters)
10951408cc1fSYuval Mintz {
10961408cc1fSYuval Mintz }
10971408cc1fSYuval Mintz 
1098b0fca312SMintz, Yuval static inline void qed_vf_get_num_mac_filters(struct qed_hwfn *p_hwfn,
1099b0fca312SMintz, Yuval 					      u8 *num_mac_filters)
1100b0fca312SMintz, Yuval {
1101b0fca312SMintz, Yuval }
1102b0fca312SMintz, Yuval 
1103eff16960SYuval Mintz static inline bool qed_vf_check_mac(struct qed_hwfn *p_hwfn, u8 *mac)
1104eff16960SYuval Mintz {
1105eff16960SYuval Mintz 	return false;
1106eff16960SYuval Mintz }
1107eff16960SYuval Mintz 
11081408cc1fSYuval Mintz static inline void qed_vf_get_fw_version(struct qed_hwfn *p_hwfn,
11091408cc1fSYuval Mintz 					 u16 *fw_major, u16 *fw_minor,
11101408cc1fSYuval Mintz 					 u16 *fw_rev, u16 *fw_eng)
11111408cc1fSYuval Mintz {
11121408cc1fSYuval Mintz }
11131408cc1fSYuval Mintz 
11141408cc1fSYuval Mintz static inline int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)
11151408cc1fSYuval Mintz {
11161408cc1fSYuval Mintz 	return -EINVAL;
11171408cc1fSYuval Mintz }
11181408cc1fSYuval Mintz 
1119dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_start(struct qed_hwfn *p_hwfn,
11203da7a37aSMintz, Yuval 				      struct qed_queue_cid *p_cid,
1121dacd88d6SYuval Mintz 				      u16 bd_max_bytes,
1122dacd88d6SYuval Mintz 				      dma_addr_t bd_chain_phys_adr,
1123dacd88d6SYuval Mintz 				      dma_addr_t cqe_pbl_addr,
1124dacd88d6SYuval Mintz 				      u16 cqe_pbl_size, void __iomem **pp_prod)
1125dacd88d6SYuval Mintz {
1126dacd88d6SYuval Mintz 	return -EINVAL;
1127dacd88d6SYuval Mintz }
1128dacd88d6SYuval Mintz 
1129dacd88d6SYuval Mintz static inline int qed_vf_pf_txq_start(struct qed_hwfn *p_hwfn,
11303da7a37aSMintz, Yuval 				      struct qed_queue_cid *p_cid,
1131dacd88d6SYuval Mintz 				      dma_addr_t pbl_addr,
1132dacd88d6SYuval Mintz 				      u16 pbl_size, void __iomem **pp_doorbell)
1133dacd88d6SYuval Mintz {
1134dacd88d6SYuval Mintz 	return -EINVAL;
1135dacd88d6SYuval Mintz }
1136dacd88d6SYuval Mintz 
1137dacd88d6SYuval Mintz static inline int qed_vf_pf_rxq_stop(struct qed_hwfn *p_hwfn,
11383da7a37aSMintz, Yuval 				     struct qed_queue_cid *p_cid,
11393da7a37aSMintz, Yuval 				     bool cqe_completion)
1140dacd88d6SYuval Mintz {
1141dacd88d6SYuval Mintz 	return -EINVAL;
1142dacd88d6SYuval Mintz }
1143dacd88d6SYuval Mintz 
11443da7a37aSMintz, Yuval static inline int qed_vf_pf_txq_stop(struct qed_hwfn *p_hwfn,
11453da7a37aSMintz, Yuval 				     struct qed_queue_cid *p_cid)
1146dacd88d6SYuval Mintz {
1147dacd88d6SYuval Mintz 	return -EINVAL;
1148dacd88d6SYuval Mintz }
1149dacd88d6SYuval Mintz 
1150dacd88d6SYuval Mintz static inline int
1151dacd88d6SYuval Mintz qed_vf_pf_vport_update(struct qed_hwfn *p_hwfn,
1152dacd88d6SYuval Mintz 		       struct qed_sp_vport_update_params *p_params)
1153dacd88d6SYuval Mintz {
1154dacd88d6SYuval Mintz 	return -EINVAL;
1155dacd88d6SYuval Mintz }
1156dacd88d6SYuval Mintz 
11570b55e27dSYuval Mintz static inline int qed_vf_pf_reset(struct qed_hwfn *p_hwfn)
11580b55e27dSYuval Mintz {
11590b55e27dSYuval Mintz 	return -EINVAL;
11600b55e27dSYuval Mintz }
11610b55e27dSYuval Mintz 
11620b55e27dSYuval Mintz static inline int qed_vf_pf_release(struct qed_hwfn *p_hwfn)
11630b55e27dSYuval Mintz {
11640b55e27dSYuval Mintz 	return -EINVAL;
11650b55e27dSYuval Mintz }
11660b55e27dSYuval Mintz 
11671408cc1fSYuval Mintz static inline u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id)
11681408cc1fSYuval Mintz {
11691408cc1fSYuval Mintz 	return 0;
11701408cc1fSYuval Mintz }
11710b55e27dSYuval Mintz 
11722f3ca449SArnd Bergmann static inline void qed_vf_set_sb_info(struct qed_hwfn *p_hwfn, u16 sb_id,
11732f3ca449SArnd Bergmann 				      struct qed_sb_info *p_sb)
11742f3ca449SArnd Bergmann {
11752f3ca449SArnd Bergmann }
11762f3ca449SArnd Bergmann 
1177dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_start(struct qed_hwfn *p_hwfn,
1178dacd88d6SYuval Mintz 					u8 vport_id,
1179dacd88d6SYuval Mintz 					u16 mtu,
1180dacd88d6SYuval Mintz 					u8 inner_vlan_removal,
1181dacd88d6SYuval Mintz 					enum qed_tpa_mode tpa_mode,
118208feecd7SYuval Mintz 					u8 max_buffers_per_cqe,
118308feecd7SYuval Mintz 					u8 only_untagged)
1184dacd88d6SYuval Mintz {
1185dacd88d6SYuval Mintz 	return -EINVAL;
1186dacd88d6SYuval Mintz }
1187dacd88d6SYuval Mintz 
1188dacd88d6SYuval Mintz static inline int qed_vf_pf_vport_stop(struct qed_hwfn *p_hwfn)
1189dacd88d6SYuval Mintz {
1190dacd88d6SYuval Mintz 	return -EINVAL;
1191dacd88d6SYuval Mintz }
1192dacd88d6SYuval Mintz 
1193dacd88d6SYuval Mintz static inline int qed_vf_pf_filter_ucast(struct qed_hwfn *p_hwfn,
1194dacd88d6SYuval Mintz 					 struct qed_filter_ucast *p_param)
1195dacd88d6SYuval Mintz {
1196dacd88d6SYuval Mintz 	return -EINVAL;
1197dacd88d6SYuval Mintz }
1198dacd88d6SYuval Mintz 
1199dacd88d6SYuval Mintz static inline void qed_vf_pf_filter_mcast(struct qed_hwfn *p_hwfn,
1200dacd88d6SYuval Mintz 					  struct qed_filter_mcast *p_filter_cmd)
1201dacd88d6SYuval Mintz {
1202dacd88d6SYuval Mintz }
1203dacd88d6SYuval Mintz 
12040b55e27dSYuval Mintz static inline int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn)
12050b55e27dSYuval Mintz {
12060b55e27dSYuval Mintz 	return -EINVAL;
12070b55e27dSYuval Mintz }
120836558c3dSYuval Mintz 
120936558c3dSYuval Mintz static inline void __qed_vf_get_link_params(struct qed_hwfn *p_hwfn,
121036558c3dSYuval Mintz 					    struct qed_mcp_link_params
121136558c3dSYuval Mintz 					    *p_params,
121236558c3dSYuval Mintz 					    struct qed_bulletin_content
121336558c3dSYuval Mintz 					    *p_bulletin)
121436558c3dSYuval Mintz {
121536558c3dSYuval Mintz }
121636558c3dSYuval Mintz 
121736558c3dSYuval Mintz static inline void __qed_vf_get_link_state(struct qed_hwfn *p_hwfn,
121836558c3dSYuval Mintz 					   struct qed_mcp_link_state *p_link,
121936558c3dSYuval Mintz 					   struct qed_bulletin_content
122036558c3dSYuval Mintz 					   *p_bulletin)
122136558c3dSYuval Mintz {
122236558c3dSYuval Mintz }
122336558c3dSYuval Mintz 
122436558c3dSYuval Mintz static inline void
122536558c3dSYuval Mintz __qed_vf_get_link_caps(struct qed_hwfn *p_hwfn,
122636558c3dSYuval Mintz 		       struct qed_mcp_link_capabilities *p_link_caps,
122736558c3dSYuval Mintz 		       struct qed_bulletin_content *p_bulletin)
122836558c3dSYuval Mintz {
122936558c3dSYuval Mintz }
123036558c3dSYuval Mintz 
123136558c3dSYuval Mintz static inline void qed_iov_vf_task(struct work_struct *work)
123236558c3dSYuval Mintz {
123336558c3dSYuval Mintz }
1234eaf3c0c6SChopra, Manish 
1235eaf3c0c6SChopra, Manish static inline void
1236eaf3c0c6SChopra, Manish qed_vf_set_vf_start_tunn_update_param(struct qed_tunnel_info *p_tun)
1237eaf3c0c6SChopra, Manish {
1238eaf3c0c6SChopra, Manish }
1239eaf3c0c6SChopra, Manish 
1240eaf3c0c6SChopra, Manish static inline int qed_vf_pf_tunnel_param_update(struct qed_hwfn *p_hwfn,
1241eaf3c0c6SChopra, Manish 						struct qed_tunnel_info *p_tunn)
1242eaf3c0c6SChopra, Manish {
1243eaf3c0c6SChopra, Manish 	return -EINVAL;
1244eaf3c0c6SChopra, Manish }
12451a850bfcSMintz, Yuval 
1246809c45a0SShahed Shaikh static inline int qed_vf_pf_bulletin_update_mac(struct qed_hwfn *p_hwfn,
1247809c45a0SShahed Shaikh 						u8 *p_mac)
1248809c45a0SShahed Shaikh {
1249809c45a0SShahed Shaikh 	return -EINVAL;
1250809c45a0SShahed Shaikh }
1251809c45a0SShahed Shaikh 
12521a850bfcSMintz, Yuval static inline u32
12531a850bfcSMintz, Yuval qed_vf_hw_bar_size(struct qed_hwfn  *p_hwfn,
12541a850bfcSMintz, Yuval 		   enum BAR_ID bar_id)
12551a850bfcSMintz, Yuval {
12561a850bfcSMintz, Yuval 	return 0;
12571a850bfcSMintz, Yuval }
12581408cc1fSYuval Mintz #endif
12591408cc1fSYuval Mintz 
126032a47e72SYuval Mintz #endif
1261