bnx2x_vfpf.h revision b9871bcfd211d316adee317608dab44c58d6ea2d
11ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior/* bnx2x_vfpf.h: Broadcom Everest network driver.
21ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior *
3247fa82be1301e4f89eaa5dc10be62a9cc84e8c5Yuval Mintz * Copyright (c) 2011-2013 Broadcom Corporation
41ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior *
51ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * Unless you and Broadcom execute a separate written software license
61ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * agreement governing use of this software, this software is licensed to you
71ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * under the terms of the GNU General Public License version 2, available
81ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html (the "GPL").
91ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior *
101ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * Notwithstanding the above, under no circumstances may you combine this
111ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * software in any way with any other Broadcom software provided under a
121ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * license other than the GPL, without Broadcom's express prior written
131ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * consent.
141ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior *
151ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * Maintained by: Eilon Greenstein <eilong@broadcom.com>
161ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * Written by: Ariel Elior <ariele@broadcom.com>
171ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior */
181ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior#ifndef VF_PF_IF_H
191ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior#define VF_PF_IF_H
201ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior
216411280ac94db94a09770807d3871d2661803604Ariel Elior#ifdef CONFIG_BNX2X_SRIOV
226411280ac94db94a09770807d3871d2661803604Ariel Elior
23be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* Common definitions for all HVs */
24be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct vf_pf_resc_request {
25be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_rxqs;
26be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_txqs;
27be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_sbs;
28be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_mac_filters;
29be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_vlan_filters;
30be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8  num_mc_filters; /* No limit  so superfluous */
31be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
32be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
33be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct hw_sb_info {
34be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8 hw_sb_id;	/* aka absolute igu id, used to ack the sb */
35be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8 sb_qid;	/* used to update DHC for sb */
36be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
37be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
381ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior/* HW VF-PF channel definitions
391ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior * A.K.A VF-PF mailbox
401ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior */
411ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior#define TLV_BUFFER_SIZE			1024
42abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior#define PF_VF_BULLETIN_SIZE		512
431ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior
448d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_TPA		0x0001
458d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_TPA_IPV6		0x0002
468d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_TPA_GRO		0x0004
478d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_CACHE_ALIGN	0x0008
488d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_STATS		0x0010
498d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_OV		0x0020
508d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_VLAN		0x0040
518d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_COS		0x0080
528d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_HC		0x0100
538d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_FLG_DHC		0x0200
54b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_QUEUE_FLG_LEADING_RSS	0x0400
558d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
568d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_DROP_IP_CS_ERR	(1 << 0)
578d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_DROP_TCP_CS_ERR	(1 << 1)
588d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_DROP_TTL0		(1 << 2)
598d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_QUEUE_DROP_UDP_CS_ERR	(1 << 3)
608d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
61381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_NONE		0x00000000
62381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST	0x00000001
63381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_MATCHED_MULTICAST	0x00000002
64381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_ALL_UNICAST		0x00000004
65381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_ALL_MULTICAST	0x00000008
66381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior#define VFPF_RX_MASK_ACCEPT_BROADCAST		0x00000010
67abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior#define BULLETIN_CONTENT_SIZE		(sizeof(struct pf_vf_bulletin_content))
68abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior#define BULLETIN_ATTEMPTS	5 /* crc failures before throwing towel */
69abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior#define BULLETIN_CRC_SEED	0
70381ac16b10ae9369ebbbd74bb52b970818f68022Ariel Elior
71be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorenum {
72be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	PFVF_STATUS_WAITING = 0,
73be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	PFVF_STATUS_SUCCESS,
74be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	PFVF_STATUS_FAILURE,
75be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	PFVF_STATUS_NOT_SUPPORTED,
76be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	PFVF_STATUS_NO_RESOURCE
77be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
78be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
79be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* vf pf channel tlvs */
80be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* general tlv header (used for both vf->pf request and pf->vf response) */
81be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct channel_tlv {
82be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u16 type;
83be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u16 length;
84be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
85be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
86be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* header of first vf->pf tlv carries the offset used to calculate response
87be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior * buffer address
88be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior */
89be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct vfpf_first_tlv {
90be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct channel_tlv tl;
91be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u32 resp_msg_offset;
92be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
93be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
94be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* header of pf->vf tlvs, carries the status of handling the request */
95be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct pfvf_tlv {
96be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct channel_tlv tl;
97be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8 status;
98be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8 padding[3];
99be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
100be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
1014513f92576856c552212fb9608aca56b88022454Ariel Elior/* response tlv used for most tlvs */
1024513f92576856c552212fb9608aca56b88022454Ariel Eliorstruct pfvf_general_resp_tlv {
1034513f92576856c552212fb9608aca56b88022454Ariel Elior	struct pfvf_tlv hdr;
1044513f92576856c552212fb9608aca56b88022454Ariel Elior};
1054513f92576856c552212fb9608aca56b88022454Ariel Elior
106be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* used to terminate and pad a tlv list */
107be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct channel_list_end_tlv {
108be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct channel_tlv tl;
109be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	u8 padding[4];
110be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
111be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
112be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* Acquire */
113be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct vfpf_acquire_tlv {
114be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct vfpf_first_tlv first_tlv;
115be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
116be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct vf_pf_vfdev_info {
117be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		/* the following fields are for debug purposes */
118be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8  vf_id;		/* ME register value */
119be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8  vf_os;		/* e.g. Linux, W2K8 */
120be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8 padding[2];
121be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	} vfdev_info;
122be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
123be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct vf_pf_resc_request resc_request;
124be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
125be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	aligned_u64 bulletin_addr;
126be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
127be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
1289b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior/* simple operation request on queue */
1299b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Eliorstruct vfpf_q_op_tlv {
1309b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	struct vfpf_first_tlv	first_tlv;
1319b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	u8 vf_qid;
1329b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	u8 padding[3];
1339b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior};
1349b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior
135b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior/* receive side scaling tlv */
136b9871bcfd211d316adee317608dab44c58d6ea2dAriel Eliorstruct vfpf_rss_tlv {
137b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	struct vfpf_first_tlv	first_tlv;
138b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u32			rss_flags;
139b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_MODE_DISABLED	(1 << 0)
140b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_MODE_REGULAR	(1 << 1)
141b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_SET_SRCH	(1 << 2)
142b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV4		(1 << 3)
143b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV4_TCP	(1 << 4)
144b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV4_UDP	(1 << 5)
145b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV6		(1 << 6)
146b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV6_TCP	(1 << 7)
147b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_RSS_IPV6_UDP	(1 << 8)
148b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u8			rss_result_mask;
149b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u8			ind_table_size;
150b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u8			rss_key_size;
151b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u8			padding;
152b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u8			ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
153b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u32			rss_key[T_ETH_RSS_KEY];	/* hash values */
154b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior};
155b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior
156be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior/* acquire response tlv - carries the allocated resources */
157be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorstruct pfvf_acquire_resp_tlv {
158be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct pfvf_tlv hdr;
159be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct pf_vf_pfdev_info {
160be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u32 chip_num;
161be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u32 pf_cap;
162be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define PFVF_CAP_RSS		0x00000001
163be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define PFVF_CAP_DHC		0x00000002
164be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define PFVF_CAP_TPA		0x00000004
165be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		char fw_ver[32];
166be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u16 db_size;
167be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8  indices_per_sb;
168be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8  padding;
169be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	} pfdev_info;
170be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct pf_vf_resc {
171be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		/* in case of status NO_RESOURCE in message hdr, pf will fill
172be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		 * this struct with suggested amount of resources for next
173be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		 * acquire request
174be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		 */
175be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define PFVF_MAX_QUEUES_PER_VF         16
176be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define PFVF_MAX_SBS_PER_VF            16
177be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
178be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	hw_qid[PFVF_MAX_QUEUES_PER_VF];
179be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_rxqs;
180be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_txqs;
181be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_sbs;
182be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_mac_filters;
183be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_vlan_filters;
184be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	num_mc_filters;
185be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	permanent_mac_addr[ETH_ALEN];
186be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	current_mac_addr[ETH_ALEN];
187be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior		u8	padding[2];
188be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	} resc;
189be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
190be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
191b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior#define VFPF_INIT_FLG_STATS_COALESCE	(1 << 0) /* when set the VFs queues
192b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior						  * stats will be coalesced on
193b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior						  * the leading RSS queue
194b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior						  */
195b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior
1968d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior/* Init VF */
1978d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Eliorstruct vfpf_init_tlv {
1988d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_first_tlv first_tlv;
1998d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	aligned_u64 sb_addr[PFVF_MAX_SBS_PER_VF]; /* vf_sb based */
2008d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	aligned_u64 spq_addr;
2018d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	aligned_u64 stats_addr;
202b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u16 stats_stride;
203b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u32 flags;
204b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	u32 padding[2];
2058d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior};
2068d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2078d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior/* Setup Queue */
2088d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Eliorstruct vfpf_setup_q_tlv {
2098d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_first_tlv first_tlv;
2108d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2118d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vf_pf_rxq_params {
2128d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* physical addresses */
2138d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		aligned_u64 rcq_addr;
2148d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		aligned_u64 rcq_np_addr;
2158d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		aligned_u64 rxq_addr;
2168d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		aligned_u64 sge_addr;
2178d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2188d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* sb + hc info */
2198d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  vf_sb;		/* index in hw_sbs[] */
2208d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  sb_index;		/* Index in the SB */
2218d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 hc_rate;		/* desired interrupts per sec. */
2228d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior					/* valid iff VFPF_QUEUE_FLG_HC */
2238d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* rx buffer info */
2248d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 mtu;
2258d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 buf_sz;
2268d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 flags;		/* VFPF_QUEUE_FLG_X flags */
2278d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 stat_id;		/* valid iff VFPF_QUEUE_FLG_STATS */
2288d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2298d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* valid iff VFPF_QUEUE_FLG_TPA */
2308d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 sge_buf_sz;
2318d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 tpa_agg_sz;
2328d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8 max_sge_pkt;
2338d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2348d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8 drop_flags;		/* VFPF_QUEUE_DROP_X, for Linux VMs
2358d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior					 * all the flags are turned off
2368d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior					 */
2378d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2388d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8 cache_line_log;	/* VFPF_QUEUE_FLG_CACHE_ALIGN */
2398d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8 padding;
2408d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	} rxq;
2418d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2428d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vf_pf_txq_params {
2438d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* physical addresses */
2448d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		aligned_u64 txq_addr;
2458d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2468d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		/* sb + hc info */
2478d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  vf_sb;		/* index in hw_sbs[] */
2488d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  sb_index;		/* Index in the SB */
2498d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 hc_rate;		/* desired interrupts per sec. */
2508d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior					/* valid iff VFPF_QUEUE_FLG_HC */
2518d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u32 flags;		/* VFPF_QUEUE_FLG_X flags */
2528d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u16 stat_id;		/* valid iff VFPF_QUEUE_FLG_STATS */
2538d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  traffic_type;	/* see in setup_context() */
2548d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior		u8  padding;
2558d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	} txq;
2568d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2578d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 vf_qid;			/* index in hw_qid[] */
2588d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 param_valid;
2598d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_RXQ_VALID		0x01
2608d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_TXQ_VALID		0x02
2618d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 padding[2];
2628d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior};
2638d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2648d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior/* Set Queue Filters */
2658d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Eliorstruct vfpf_q_mac_vlan_filter {
2668d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u32 flags;
2678d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_Q_FILTER_DEST_MAC_VALID	0x01
2688d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_Q_FILTER_VLAN_TAG_VALID	0x02
2698d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_Q_FILTER_SET_MAC		0x100	/* set/clear */
2708d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8  mac[ETH_ALEN];
2718d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u16 vlan_tag;
2728d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior};
2738d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2748d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior/* configure queue filters */
2758d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Eliorstruct vfpf_set_q_filters_tlv {
2768d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_first_tlv first_tlv;
2778d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2788d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u32 flags;
2798d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_SET_Q_FILTERS_MAC_VLAN_CHANGED	0x01
2808d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_SET_Q_FILTERS_MULTICAST_CHANGED	0x02
2818d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define VFPF_SET_Q_FILTERS_RX_MASK_CHANGED	0x04
2828d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2838d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 vf_qid;			/* index in hw_qid[] */
2848d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 n_mac_vlan_filters;
2858d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 n_multicast;
2868d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8 padding;
2878d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2888d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define PFVF_MAX_MAC_FILTERS                   16
2898d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define PFVF_MAX_VLAN_FILTERS                  16
2908d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define PFVF_MAX_FILTERS               (PFVF_MAX_MAC_FILTERS +\
2918d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior					 PFVF_MAX_VLAN_FILTERS)
2928d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_q_mac_vlan_filter filters[PFVF_MAX_FILTERS];
2938d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2948d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior#define PFVF_MAX_MULTICAST_PER_VF              32
2958d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u8  multicast[PFVF_MAX_MULTICAST_PER_VF][ETH_ALEN];
2968d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
2978d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	u32 rx_mask;	/* see mask constants at the top of the file */
2988d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior};
2998d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior
3009b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior/* close VF (disable VF) */
3019b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Eliorstruct vfpf_close_tlv {
3029b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	struct vfpf_first_tlv   first_tlv;
3039b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	u16			vf_id;  /* for debug */
3049b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	u8 padding[2];
3059b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior};
3069b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior
3074513f92576856c552212fb9608aca56b88022454Ariel Elior/* release the VF's acquired resources */
3084513f92576856c552212fb9608aca56b88022454Ariel Eliorstruct vfpf_release_tlv {
3094513f92576856c552212fb9608aca56b88022454Ariel Elior	struct vfpf_first_tlv	first_tlv;
3104513f92576856c552212fb9608aca56b88022454Ariel Elior	u16			vf_id;
3114513f92576856c552212fb9608aca56b88022454Ariel Elior	u8 padding[2];
3124513f92576856c552212fb9608aca56b88022454Ariel Elior};
3134513f92576856c552212fb9608aca56b88022454Ariel Elior
3141ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Eliorstruct tlv_buffer_size {
3151ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior	u8 tlv_buffer[TLV_BUFFER_SIZE];
3161ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior};
3171ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior
3181ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Eliorunion vfpf_tlvs {
319be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct vfpf_first_tlv		first_tlv;
320be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct vfpf_acquire_tlv		acquire;
3218d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_init_tlv		init;
3229b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	struct vfpf_close_tlv		close;
3239b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	struct vfpf_q_op_tlv		q_op;
3248d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_setup_q_tlv		setup_q;
3258d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	struct vfpf_set_q_filters_tlv	set_q_filters;
326b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	struct vfpf_release_tlv		release;
327b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	struct vfpf_rss_tlv		update_rss;
328b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	struct channel_list_end_tlv	list_end;
3291ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior	struct tlv_buffer_size		tlv_buf_size;
3301ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior};
3311ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior
3321ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Eliorunion pfvf_tlvs {
333b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	struct pfvf_general_resp_tlv	general_resp;
334be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct pfvf_acquire_resp_tlv	acquire_resp;
335be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	struct channel_list_end_tlv	list_end;
3361ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior	struct tlv_buffer_size		tlv_buf_size;
3371ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior};
338be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
339abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior/* This is a structure which is allocated in the VF, which the PF may update
340abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior * when it deems it necessary to do so. The bulletin board is sampled
341abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior * periodically by the VF. A copy per VF is maintained in the PF (to prevent
342abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior * loss of data upon multiple updates (or the need for read modify write)).
343abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior */
344abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Eliorstruct pf_vf_bulletin_size {
345abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	u8 size[PF_VF_BULLETIN_SIZE];
346abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior};
347abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior
348abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Eliorstruct pf_vf_bulletin_content {
349abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	u32 crc;			/* crc of structure to ensure is not in
350abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 * mid-update
351abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 */
3524c133c39ae1bc541b3db5903a680da738a0c57e3Ariel Elior	u16 version;
3534c133c39ae1bc541b3db5903a680da738a0c57e3Ariel Elior	u16 length;
354abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior
355abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	aligned_u64 valid_bitmap;	/* bitmap indicating which fields
356abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 * hold valid values
357abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 */
358abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior
359abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior#define MAC_ADDR_VALID		0	/* alert the vf that a new mac address
360abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 * is available for it
361abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior					 */
3623ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior#define VLAN_VALID		1	/* when set, the vf should not access
3633ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior					 * the vfpf channel
3643ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior					 */
36578c3bcc5d1af64f51d9f30b0f5a2d1985bf69734Ariel Elior#define CHANNEL_DOWN		2	/* vfpf channel is disabled. VFs are not
36678c3bcc5d1af64f51d9f30b0f5a2d1985bf69734Ariel Elior					 * to attempt to send messages on the
36778c3bcc5d1af64f51d9f30b0f5a2d1985bf69734Ariel Elior					 * channel after this bit is set
36878c3bcc5d1af64f51d9f30b0f5a2d1985bf69734Ariel Elior					 */
369abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	u8 mac[ETH_ALEN];
3703ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior	u8 mac_padding[2];
3713ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior
3723ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior	u16 vlan;
3733ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior	u8 vlan_padding[6];
374abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior};
375abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior
376abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Eliorunion pf_vf_bulletin {
377abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	struct pf_vf_bulletin_content content;
378abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	struct pf_vf_bulletin_size size;
379abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior};
380abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior
381be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior#define MAX_TLVS_IN_LIST 50
382be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
383be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Eliorenum channel_tlvs {
384be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	CHANNEL_TLV_NONE,
385be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	CHANNEL_TLV_ACQUIRE,
3868d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	CHANNEL_TLV_INIT,
3878d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	CHANNEL_TLV_SETUP_Q,
3888d9ac297d18dbe05b6e7cb4378da51e67143b452Ariel Elior	CHANNEL_TLV_SET_Q_FILTERS,
389b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	CHANNEL_TLV_ACTIVATE_Q,
390b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	CHANNEL_TLV_DEACTIVATE_Q,
3919b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	CHANNEL_TLV_TEARDOWN_Q,
3929b176b6b63ed07472c26b6833a0ac23b373e6bf8Ariel Elior	CHANNEL_TLV_CLOSE,
3934513f92576856c552212fb9608aca56b88022454Ariel Elior	CHANNEL_TLV_RELEASE,
394b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	CHANNEL_TLV_UPDATE_RSS_DEPRECATED,
395f1929b016c2161c364e45c21788aaae938ae557cAriel Elior	CHANNEL_TLV_PF_RELEASE_VF,
396be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	CHANNEL_TLV_LIST_END,
397d16132cef8a72ff7563aff95f03bf505779fe3e6Ariel Elior	CHANNEL_TLV_FLR,
398abc5a021ba645cd162205209bd5664a0d4b866a6Ariel Elior	CHANNEL_TLV_PF_SET_MAC,
3993ec9f9ca79757c54b12f87e51a6664ba1e597b17Ariel Elior	CHANNEL_TLV_PF_SET_VLAN,
400b9871bcfd211d316adee317608dab44c58d6ea2dAriel Elior	CHANNEL_TLV_UPDATE_RSS,
401be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior	CHANNEL_TLV_MAX
402be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior};
403be1f1ffaf9acf06f556a00e2d1548c70af2b6deaAriel Elior
4046411280ac94db94a09770807d3871d2661803604Ariel Elior#endif /* CONFIG_BNX2X_SRIOV */
4051ab4434c64f8d4786e4a26299e0ebb138a0a6415Ariel Elior#endif /* VF_PF_IF_H */
406