1*d14abf15SRobert Mustacchi #ifndef VF_PF_SW_IF_H
2*d14abf15SRobert Mustacchi #define VF_PF_SW_IF_H
3*d14abf15SRobert Mustacchi 
4*d14abf15SRobert Mustacchi 
5*d14abf15SRobert Mustacchi /*
6*d14abf15SRobert Mustacchi  * common flags - right now it duplicates the #defines in the PF code -
7*d14abf15SRobert Mustacchi  * TODO: put in another common header file
8*d14abf15SRobert Mustacchi  */
9*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_TPA   		0x0001
10*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_CACHE_ALIGN   	0x0002
11*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_STATS		0x0004
12*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_OV    		0x0008
13*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_VLAN  		0x0010
14*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_COS   		0x0020
15*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_HC		0x0040
16*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_FLG_DHC		0x0080
17*d14abf15SRobert Mustacchi 
18*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_DROP_IP_CS_ERR	(1 << 0)
19*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_DROP_TCP_CS_ERR	(1 << 1)
20*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_DROP_TTL0		(1 << 2)
21*d14abf15SRobert Mustacchi #define SW_VFPF_QUEUE_DROP_UDP_CS_ERR	(1 << 3)
22*d14abf15SRobert Mustacchi 
23*d14abf15SRobert Mustacchi #define SW_VFPF_VFDEF_INFO_AUX_DIRECT_DQ   0x01
24*d14abf15SRobert Mustacchi 
25*d14abf15SRobert Mustacchi enum {
26*d14abf15SRobert Mustacchi 	SW_PFVF_STATUS_WAITING = 0,
27*d14abf15SRobert Mustacchi 	SW_PFVF_STATUS_SUCCESS,
28*d14abf15SRobert Mustacchi 	SW_PFVF_STATUS_FAILURE,
29*d14abf15SRobert Mustacchi 	SW_PFVF_STATUS_NOT_SUPPORTED,
30*d14abf15SRobert Mustacchi     SW_PFVF_STATUS_MISMATCH_PF_VF_VERSION,
31*d14abf15SRobert Mustacchi     SW_PFVF_STATUS_NO_RESOURCE,
32*d14abf15SRobert Mustacchi     SW_PFVF_STATUS_MISMATCH_FW_HSI
33*d14abf15SRobert Mustacchi };
34*d14abf15SRobert Mustacchi 
35*d14abf15SRobert Mustacchi /*  Headers */
36*d14abf15SRobert Mustacchi struct vf_pf_msg_hdr {
37*d14abf15SRobert Mustacchi 	u16 opcode;
38*d14abf15SRobert Mustacchi 
39*d14abf15SRobert Mustacchi #define PFVF_IF_VERSION     	   1
40*d14abf15SRobert Mustacchi 	u8  if_ver;
41*d14abf15SRobert Mustacchi 	u8  opcode_ver;
42*d14abf15SRobert Mustacchi 	u32 resp_msg_offset;
43*d14abf15SRobert Mustacchi };
44*d14abf15SRobert Mustacchi 
45*d14abf15SRobert Mustacchi struct pf_vf_msg_hdr {
46*d14abf15SRobert Mustacchi 	u8 status;
47*d14abf15SRobert Mustacchi 	u8 opcode_ver;
48*d14abf15SRobert Mustacchi 	u16 opcode;
49*d14abf15SRobert Mustacchi };
50*d14abf15SRobert Mustacchi 
51*d14abf15SRobert Mustacchi /* simple response */
52*d14abf15SRobert Mustacchi struct pf_vf_msg_resp {
53*d14abf15SRobert Mustacchi 	struct pf_vf_msg_hdr    hdr;
54*d14abf15SRobert Mustacchi };
55*d14abf15SRobert Mustacchi 
56*d14abf15SRobert Mustacchi 
57*d14abf15SRobert Mustacchi /* Acquire */
58*d14abf15SRobert Mustacchi struct vf_pf_msg_acquire {
59*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr hdr;
60*d14abf15SRobert Mustacchi 
61*d14abf15SRobert Mustacchi 	struct sw_vf_pf_vfdev_info
62*d14abf15SRobert Mustacchi 	{
63*d14abf15SRobert Mustacchi 		/* the following fields are for debug purposes */
64*d14abf15SRobert Mustacchi 		u8  vf_id;      	/* ME register value */
65*d14abf15SRobert Mustacchi 		u8  vf_os;      	/* e.g. Linux, W2K8 */
66*d14abf15SRobert Mustacchi         u8  vf_aux;
67*d14abf15SRobert Mustacchi         u8  fp_hsi_ver;
68*d14abf15SRobert Mustacchi         u32 vf_fw_hsi_version;  /* e.g. 6.0.12 */
69*d14abf15SRobert Mustacchi 	} vfdev_info;
70*d14abf15SRobert Mustacchi 
71*d14abf15SRobert Mustacchi 	struct sw_vf_pf_resc_request
72*d14abf15SRobert Mustacchi 	{
73*d14abf15SRobert Mustacchi 		u8  num_rxqs;
74*d14abf15SRobert Mustacchi 		u8  num_txqs;
75*d14abf15SRobert Mustacchi 		u8  num_sbs;
76*d14abf15SRobert Mustacchi 		u8  num_mac_filters;
77*d14abf15SRobert Mustacchi 		u8  num_vlan_filters;
78*d14abf15SRobert Mustacchi 		u8  num_mc_filters;
79*d14abf15SRobert Mustacchi         u8  reserved1;
80*d14abf15SRobert Mustacchi         u8  reserved2;
81*d14abf15SRobert Mustacchi 
82*d14abf15SRobert Mustacchi 	/* TODO: future:
83*d14abf15SRobert Mustacchi 		statistics resc?, other resc?   */
84*d14abf15SRobert Mustacchi 	} resc_request;
85*d14abf15SRobert Mustacchi };
86*d14abf15SRobert Mustacchi 
87*d14abf15SRobert Mustacchi 
88*d14abf15SRobert Mustacchi /* simple operation request on queue */
89*d14abf15SRobert Mustacchi struct vf_pf_msg_q_op {
90*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr    hdr;
91*d14abf15SRobert Mustacchi 	u8      		vf_qid;
92*d14abf15SRobert Mustacchi 	u8			padding[3];
93*d14abf15SRobert Mustacchi };
94*d14abf15SRobert Mustacchi 
95*d14abf15SRobert Mustacchi struct vf_pf_msg_rss {
96*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr    hdr;
97*d14abf15SRobert Mustacchi 	u32   					rss_flags;
98*d14abf15SRobert Mustacchi 
99*d14abf15SRobert Mustacchi 	/* Number hash bits to take into an account */
100*d14abf15SRobert Mustacchi 	u8  					rss_result_mask;
101*d14abf15SRobert Mustacchi 
102*d14abf15SRobert Mustacchi 	u8						ind_table_size;
103*d14abf15SRobert Mustacchi 	u8						rss_key_size;
104*d14abf15SRobert Mustacchi 
105*d14abf15SRobert Mustacchi 	/* Indirection table */
106*d14abf15SRobert Mustacchi 	u8  					ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
107*d14abf15SRobert Mustacchi 
108*d14abf15SRobert Mustacchi 	/* RSS hash values */
109*d14abf15SRobert Mustacchi 	u32 					rss_key[10];
110*d14abf15SRobert Mustacchi };
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi struct vf_pf_msg_rsc {
113*d14abf15SRobert Mustacchi     struct vf_pf_msg_hdr    hdr;
114*d14abf15SRobert Mustacchi     u32                     rsc_ipv4_state;
115*d14abf15SRobert Mustacchi     u32                     rsc_ipv6_state;
116*d14abf15SRobert Mustacchi };
117*d14abf15SRobert Mustacchi 
118*d14abf15SRobert Mustacchi struct sw_hw_sb_info {
119*d14abf15SRobert Mustacchi 	u8 hw_sb_id;	/* aka absolute igu id, used to ack the sb */
120*d14abf15SRobert Mustacchi 	u8 sb_qid;	/* used to update DHC for sb */
121*d14abf15SRobert Mustacchi };
122*d14abf15SRobert Mustacchi 
123*d14abf15SRobert Mustacchi struct pf_vf_msg_acquire_resp {
124*d14abf15SRobert Mustacchi 	struct pf_vf_msg_hdr hdr;
125*d14abf15SRobert Mustacchi 
126*d14abf15SRobert Mustacchi 	struct sw_pf_vf_pfdev_info
127*d14abf15SRobert Mustacchi 	{
128*d14abf15SRobert Mustacchi 		u32 chip_num;
129*d14abf15SRobert Mustacchi 
130*d14abf15SRobert Mustacchi 		u32 pf_cap;
131*d14abf15SRobert Mustacchi 		#define PFVF_CAP_RSS        0x00000001
132*d14abf15SRobert Mustacchi 		#define PFVF_CAP_DHC        0x00000002
133*d14abf15SRobert Mustacchi 		#define PFVF_CAP_TPA        0x00000004
134*d14abf15SRobert Mustacchi                 #define PFVF_DEBUG          0x80000000
135*d14abf15SRobert Mustacchi 
136*d14abf15SRobert Mustacchi 		u16 db_size;
137*d14abf15SRobert Mustacchi 		u8  indices_per_sb;
138*d14abf15SRobert Mustacchi 		u8  padding;
139*d14abf15SRobert Mustacchi 	} pfdev_info;
140*d14abf15SRobert Mustacchi 
141*d14abf15SRobert Mustacchi 	struct sw_pf_vf_resc
142*d14abf15SRobert Mustacchi 	{
143*d14abf15SRobert Mustacchi 		/*
144*d14abf15SRobert Mustacchi 		 * in case of status NO_RESOURCE in message hdr, pf will fill
145*d14abf15SRobert Mustacchi 		 * this struct with suggested amount of resources for next
146*d14abf15SRobert Mustacchi 		 * acquire request
147*d14abf15SRobert Mustacchi 		 */
148*d14abf15SRobert Mustacchi 
149*d14abf15SRobert Mustacchi 		#define PFVF_MAX_QUEUES_PER_VF         16
150*d14abf15SRobert Mustacchi 		#define PFVF_MAX_SBS_PER_VF            16
151*d14abf15SRobert Mustacchi 		struct sw_hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
152*d14abf15SRobert Mustacchi 		u8	hw_qid[PFVF_MAX_QUEUES_PER_VF];
153*d14abf15SRobert Mustacchi 		u8	num_rxqs;
154*d14abf15SRobert Mustacchi 		u8	num_txqs;
155*d14abf15SRobert Mustacchi 		u8	num_sbs;
156*d14abf15SRobert Mustacchi 		u8	num_mac_filters;
157*d14abf15SRobert Mustacchi 		u8	num_vlan_filters;
158*d14abf15SRobert Mustacchi 		u8	num_mc_filters;
159*d14abf15SRobert Mustacchi 		u8  igu_test_cnt;
160*d14abf15SRobert Mustacchi 		u8  igu_cnt;
161*d14abf15SRobert Mustacchi 		u8 	permanent_mac_addr[8];
162*d14abf15SRobert Mustacchi 		u8 	current_mac_addr[8];
163*d14abf15SRobert Mustacchi 	/* TODO: stats resc? cid for the ramrod? stats_id? spq prod id? */
164*d14abf15SRobert Mustacchi 	} resc;
165*d14abf15SRobert Mustacchi };
166*d14abf15SRobert Mustacchi 
167*d14abf15SRobert Mustacchi /* Init VF */
168*d14abf15SRobert Mustacchi struct vf_pf_msg_init_vf {
169*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr hdr;
170*d14abf15SRobert Mustacchi 
171*d14abf15SRobert Mustacchi 	u64 sb_addr[PFVF_MAX_SBS_PER_VF]; /* vf_sb based */
172*d14abf15SRobert Mustacchi 	u64 spq_addr;
173*d14abf15SRobert Mustacchi 	u64 stats_addr;
174*d14abf15SRobert Mustacchi };
175*d14abf15SRobert Mustacchi 
176*d14abf15SRobert Mustacchi /* Setup Queue */
177*d14abf15SRobert Mustacchi struct vf_pf_msg_setup_q {
178*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr hdr;
179*d14abf15SRobert Mustacchi 	u8 vf_qid;			/* index in hw_qid[] */
180*d14abf15SRobert Mustacchi 
181*d14abf15SRobert Mustacchi 	u8 param_valid;
182*d14abf15SRobert Mustacchi 	#define VFPF_RXQ_VALID		0x01
183*d14abf15SRobert Mustacchi 	#define VFPF_TXQ_VALID		0x02
184*d14abf15SRobert Mustacchi 
185*d14abf15SRobert Mustacchi 	u16 padding;
186*d14abf15SRobert Mustacchi 
187*d14abf15SRobert Mustacchi 	struct sw_vf_pf_rxq_params {
188*d14abf15SRobert Mustacchi 		/* physical addresses */
189*d14abf15SRobert Mustacchi 		u64 rcq_addr;
190*d14abf15SRobert Mustacchi 		u64 rcq_np_addr;
191*d14abf15SRobert Mustacchi 		u64 rxq_addr;
192*d14abf15SRobert Mustacchi 		u64 sge_addr;
193*d14abf15SRobert Mustacchi 
194*d14abf15SRobert Mustacchi 		/* sb + hc info */
195*d14abf15SRobert Mustacchi 		u8  vf_sb;		/* index in hw_sbs[] */
196*d14abf15SRobert Mustacchi 		u8  sb_index;           /* Index in the SB */
197*d14abf15SRobert Mustacchi 		u16 hc_rate;		/* desired interrupts per sec. */
198*d14abf15SRobert Mustacchi 					/* valid iff VFPF_QUEUE_FLG_HC */
199*d14abf15SRobert Mustacchi 		/* rx buffer info */
200*d14abf15SRobert Mustacchi 		u16 mtu;
201*d14abf15SRobert Mustacchi 		u16 buf_sz;
202*d14abf15SRobert Mustacchi 		u16 flags;              /* VFPF_QUEUE_FLG_X flags */
203*d14abf15SRobert Mustacchi 		u16 stat_id;		/* valid iff VFPF_QUEUE_FLG_STATS */
204*d14abf15SRobert Mustacchi 
205*d14abf15SRobert Mustacchi 		/* valid iff VFPF_QUEUE_FLG_TPA */
206*d14abf15SRobert Mustacchi 		u16 sge_buf_sz;
207*d14abf15SRobert Mustacchi 		u16 tpa_agg_sz;
208*d14abf15SRobert Mustacchi 		u8 max_sge_pkt;
209*d14abf15SRobert Mustacchi 
210*d14abf15SRobert Mustacchi 		u8 drop_flags;		/* VFPF_QUEUE_DROP_X, for Linux all should
211*d14abf15SRobert Mustacchi 					 * be turned off, see setup_rx_queue()
212*d14abf15SRobert Mustacchi 					 * for reference
213*d14abf15SRobert Mustacchi 					 */
214*d14abf15SRobert Mustacchi 
215*d14abf15SRobert Mustacchi 		u8 cache_line_log;	/* VFPF_QUEUE_FLG_CACHE_ALIGN
216*d14abf15SRobert Mustacchi 					 * see init_rx_queue()
217*d14abf15SRobert Mustacchi 					 */
218*d14abf15SRobert Mustacchi 		u8 padding;
219*d14abf15SRobert Mustacchi 	} rxq;
220*d14abf15SRobert Mustacchi 
221*d14abf15SRobert Mustacchi 	struct sw_vf_pf_txq_params {
222*d14abf15SRobert Mustacchi 		/* physical addresses */
223*d14abf15SRobert Mustacchi 		u64 txq_addr;
224*d14abf15SRobert Mustacchi 
225*d14abf15SRobert Mustacchi 		/* sb + hc info */
226*d14abf15SRobert Mustacchi 		u8  vf_sb;		/* index in hw_sbs[] */
227*d14abf15SRobert Mustacchi 		u8  sb_index;		/* Index in the SB */
228*d14abf15SRobert Mustacchi 		u16 hc_rate;		/* desired interrupts per sec. */
229*d14abf15SRobert Mustacchi 					/* valid iff VFPF_QUEUE_FLG_HC */
230*d14abf15SRobert Mustacchi 		u32 flags;		/* VFPF_QUEUE_FLG_X flags */
231*d14abf15SRobert Mustacchi 		u16 stat_id;		/* valid iff VFPF_QUEUE_FLG_STATS */
232*d14abf15SRobert Mustacchi 		u8  traffic_type;	/* see in setup_context() */
233*d14abf15SRobert Mustacchi 		u8  padding;
234*d14abf15SRobert Mustacchi 	} txq;
235*d14abf15SRobert Mustacchi };
236*d14abf15SRobert Mustacchi 
237*d14abf15SRobert Mustacchi 
238*d14abf15SRobert Mustacchi /* Set Queue Filters */
239*d14abf15SRobert Mustacchi struct vf_pf_q_mac_vlan_filter {
240*d14abf15SRobert Mustacchi 	u32 flags;
241*d14abf15SRobert Mustacchi 	#define VFPF_Q_FILTER_DEST_MAC_PRESENT 	0x01
242*d14abf15SRobert Mustacchi 	#define VFPF_Q_FILTER_VLAN_TAG_PRESENT	0x02
243*d14abf15SRobert Mustacchi 
244*d14abf15SRobert Mustacchi 	#define VFPF_Q_FILTER_SET_MAC			0x100
245*d14abf15SRobert Mustacchi 
246*d14abf15SRobert Mustacchi 	u8  dest_mac[6];
247*d14abf15SRobert Mustacchi 	u16 vlan_tag;
248*d14abf15SRobert Mustacchi };
249*d14abf15SRobert Mustacchi 
250*d14abf15SRobert Mustacchi struct vf_pf_msg_set_q_filters {
251*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr hdr;
252*d14abf15SRobert Mustacchi 
253*d14abf15SRobert Mustacchi 	u32 flags;
254*d14abf15SRobert Mustacchi 	#define VFPF_SET_Q_FILTERS_MAC_VLAN_CHANGED 	0x01
255*d14abf15SRobert Mustacchi 	#define VFPF_SET_Q_FILTERS_MULTICAST_CHANGED	0x02
256*d14abf15SRobert Mustacchi 	#define VFPF_SET_Q_FILTERS_RX_MASK_CHANGED  	0x04
257*d14abf15SRobert Mustacchi 
258*d14abf15SRobert Mustacchi 	u8 vf_qid;			/* index in hw_qid[] */
259*d14abf15SRobert Mustacchi 	u8 n_mac_vlan_filters;
260*d14abf15SRobert Mustacchi 	u8 n_multicast;
261*d14abf15SRobert Mustacchi 	u8 padding;
262*d14abf15SRobert Mustacchi 
263*d14abf15SRobert Mustacchi 	#define PFVF_MAX_MAC_FILTERS			16
264*d14abf15SRobert Mustacchi 	#define PFVF_MAX_VLAN_FILTERS       		16
265*d14abf15SRobert Mustacchi //	#define PFVF_MAX_MAC_FILTERS			1
266*d14abf15SRobert Mustacchi //	#define PFVF_MAX_VLAN_FILTERS       		1
267*d14abf15SRobert Mustacchi 	#define PFVF_MAX_FILTERS 			(PFVF_MAX_MAC_FILTERS +\
268*d14abf15SRobert Mustacchi 							 PFVF_MAX_VLAN_FILTERS)
269*d14abf15SRobert Mustacchi 	struct vf_pf_q_mac_vlan_filter filters[PFVF_MAX_FILTERS];
270*d14abf15SRobert Mustacchi 
271*d14abf15SRobert Mustacchi 	#define PFVF_MAX_MULTICAST_PER_VF   		32
272*d14abf15SRobert Mustacchi //	#define PFVF_MAX_MULTICAST_PER_VF   		1
273*d14abf15SRobert Mustacchi 	u8  multicast[PFVF_MAX_MULTICAST_PER_VF][6];
274*d14abf15SRobert Mustacchi 
275*d14abf15SRobert Mustacchi 	u32 rx_mask;
276*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_NONE		0x00000000
277*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_MATCHED_UNICAST	0x00000001
278*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_MATCHED_MULTICAST	0x00000002
279*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_ALL_UNICAST		0x00000004
280*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_ALL_MULTICAST	0x00000008
281*d14abf15SRobert Mustacchi 	#define VFPF_RX_MASK_ACCEPT_BROADCAST		0x00000010
282*d14abf15SRobert Mustacchi 	/* TODO: #define VFPF_RX_MASK_ACCEPT_ANY_VLAN	0x00000020 */
283*d14abf15SRobert Mustacchi };
284*d14abf15SRobert Mustacchi 
285*d14abf15SRobert Mustacchi 
286*d14abf15SRobert Mustacchi /* close VF (disable VF) */
287*d14abf15SRobert Mustacchi struct vf_pf_msg_close_vf {
288*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr	hdr;
289*d14abf15SRobert Mustacchi 	u16			vf_id;  /* for debug */
290*d14abf15SRobert Mustacchi 	u16			padding;
291*d14abf15SRobert Mustacchi };
292*d14abf15SRobert Mustacchi 
293*d14abf15SRobert Mustacchi /* rlease the VF's acquired resources */
294*d14abf15SRobert Mustacchi struct vf_pf_msg_release_vf {
295*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr	hdr;
296*d14abf15SRobert Mustacchi 	u16			vf_id;  /* for debug */
297*d14abf15SRobert Mustacchi 	u16			padding;
298*d14abf15SRobert Mustacchi };
299*d14abf15SRobert Mustacchi 
300*d14abf15SRobert Mustacchi 
301*d14abf15SRobert Mustacchi union vf_pf_msg {
302*d14abf15SRobert Mustacchi 	struct vf_pf_msg_hdr		hdr;
303*d14abf15SRobert Mustacchi 	struct vf_pf_msg_acquire	acquire;
304*d14abf15SRobert Mustacchi 	struct vf_pf_msg_init_vf	init_vf;
305*d14abf15SRobert Mustacchi 	struct vf_pf_msg_close_vf	close_vf;
306*d14abf15SRobert Mustacchi 	struct vf_pf_msg_q_op		q_op;
307*d14abf15SRobert Mustacchi 	struct vf_pf_msg_setup_q	setup_q;
308*d14abf15SRobert Mustacchi 	struct vf_pf_msg_set_q_filters	set_q_filters;
309*d14abf15SRobert Mustacchi 	struct vf_pf_msg_release_vf	release_vf;
310*d14abf15SRobert Mustacchi 	struct vf_pf_msg_rss		update_rss;
311*d14abf15SRobert Mustacchi     struct vf_pf_msg_rsc        update_rsc;
312*d14abf15SRobert Mustacchi };
313*d14abf15SRobert Mustacchi 
314*d14abf15SRobert Mustacchi 
315*d14abf15SRobert Mustacchi union pf_vf_msg {
316*d14abf15SRobert Mustacchi 	struct pf_vf_msg_resp		resp;
317*d14abf15SRobert Mustacchi 	struct pf_vf_msg_acquire_resp	acquire_resp;
318*d14abf15SRobert Mustacchi };
319*d14abf15SRobert Mustacchi 
320*d14abf15SRobert Mustacchi typedef struct {
321*d14abf15SRobert Mustacchi 	u32 req_sz;
322*d14abf15SRobert Mustacchi 	u32 resp_sz;
323*d14abf15SRobert Mustacchi } msg_sz_t;
324*d14abf15SRobert Mustacchi 
325*d14abf15SRobert Mustacchi #define PFVF_OP_VER_MAX(op_arry)  (sizeof(op_arry)/sizeof(*op_arry) - 1)
326*d14abf15SRobert Mustacchi 
327*d14abf15SRobert Mustacchi static const msg_sz_t acquire_req_sz[] = {
328*d14abf15SRobert Mustacchi 	/* sizeof(vf_pf_msg_acquire) - offsetof(struct vf_pf_msg_acquire, fieldX), */
329*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_acquire),
330*d14abf15SRobert Mustacchi 	sizeof(struct pf_vf_msg_acquire_resp)}
331*d14abf15SRobert Mustacchi };
332*d14abf15SRobert Mustacchi #define PFVF_ACQUIRE_VER  PFVF_OP_VER_MAX(acquire_req_sz)
333*d14abf15SRobert Mustacchi 
334*d14abf15SRobert Mustacchi static const msg_sz_t init_vf_req_sz[] = {
335*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_init_vf), sizeof(struct pf_vf_msg_resp)}
336*d14abf15SRobert Mustacchi };
337*d14abf15SRobert Mustacchi #define PFVF_INIT_VF_VER  PFVF_OP_VER_MAX(init_vf_req_sz)
338*d14abf15SRobert Mustacchi 
339*d14abf15SRobert Mustacchi static const msg_sz_t setup_q_req_sz[] = {
340*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_setup_q), sizeof(struct pf_vf_msg_resp)}
341*d14abf15SRobert Mustacchi };
342*d14abf15SRobert Mustacchi #define PFVF_SETUP_Q_VER  PFVF_OP_VER_MAX(setup_q_req_sz)
343*d14abf15SRobert Mustacchi 
344*d14abf15SRobert Mustacchi static const msg_sz_t set_q_filters_req_sz[] = {
345*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_set_q_filters), sizeof(struct pf_vf_msg_resp)}
346*d14abf15SRobert Mustacchi };
347*d14abf15SRobert Mustacchi #define PFVF_SET_Q_FILTERS_VER  PFVF_OP_VER_MAX(set_q_filters_req_sz)
348*d14abf15SRobert Mustacchi 
349*d14abf15SRobert Mustacchi static const msg_sz_t activate_q_req_sz[] = {
350*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
351*d14abf15SRobert Mustacchi };
352*d14abf15SRobert Mustacchi #define PFVF_ACTIVATE_Q_VER  PFVF_OP_VER_MAX(activate_q_req_sz)
353*d14abf15SRobert Mustacchi 
354*d14abf15SRobert Mustacchi static const msg_sz_t deactivate_q_req_sz[] = {
355*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
356*d14abf15SRobert Mustacchi };
357*d14abf15SRobert Mustacchi #define PFVF_DEACTIVATE_Q_VER  PFVF_OP_VER_MAX(deactivate_q_req_sz)
358*d14abf15SRobert Mustacchi 
359*d14abf15SRobert Mustacchi static const msg_sz_t teardown_q_req_sz[] = {
360*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_q_op), sizeof(struct pf_vf_msg_resp)}
361*d14abf15SRobert Mustacchi };
362*d14abf15SRobert Mustacchi #define PFVF_TEARDOWN_Q_VER  PFVF_OP_VER_MAX(teardown_q_req_sz)
363*d14abf15SRobert Mustacchi 
364*d14abf15SRobert Mustacchi static const msg_sz_t close_vf_req_sz[] = {
365*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_close_vf), sizeof(struct pf_vf_msg_resp)}
366*d14abf15SRobert Mustacchi };
367*d14abf15SRobert Mustacchi #define PFVF_CLOSE_VF_VER  PFVF_OP_VER_MAX(close_vf_req_sz)
368*d14abf15SRobert Mustacchi 
369*d14abf15SRobert Mustacchi static const msg_sz_t release_vf_req_sz[] = {
370*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_release_vf), sizeof(struct pf_vf_msg_resp)}
371*d14abf15SRobert Mustacchi };
372*d14abf15SRobert Mustacchi #define PFVF_RELEASE_VF_VER  PFVF_OP_VER_MAX(release_vf_req_sz)
373*d14abf15SRobert Mustacchi 
374*d14abf15SRobert Mustacchi static const msg_sz_t update_rss_req_sz[] = {
375*d14abf15SRobert Mustacchi 	{sizeof(struct vf_pf_msg_rss), sizeof(struct pf_vf_msg_resp)}
376*d14abf15SRobert Mustacchi };
377*d14abf15SRobert Mustacchi #define PFVF_UPDATE_RSS_VER  PFVF_OP_VER_MAX(update_rss_req_sz)
378*d14abf15SRobert Mustacchi 
379*d14abf15SRobert Mustacchi static const msg_sz_t update_rsc_req_sz[] = {
380*d14abf15SRobert Mustacchi     {sizeof(struct vf_pf_msg_rsc), sizeof(struct pf_vf_msg_resp)}
381*d14abf15SRobert Mustacchi };
382*d14abf15SRobert Mustacchi #define PFVF_UPDATE_RSC_VER  PFVF_OP_VER_MAX(update_rsc_req_sz)
383*d14abf15SRobert Mustacchi 
384*d14abf15SRobert Mustacchi enum {
385*d14abf15SRobert Mustacchi 	PFVF_OP_ACQUIRE = 0,
386*d14abf15SRobert Mustacchi 	PFVF_OP_INIT_VF,
387*d14abf15SRobert Mustacchi 	PFVF_OP_SETUP_Q,
388*d14abf15SRobert Mustacchi 	PFVF_OP_SET_Q_FILTERS,
389*d14abf15SRobert Mustacchi 	PFVF_OP_ACTIVATE_Q,
390*d14abf15SRobert Mustacchi 	PFVF_OP_DEACTIVATE_Q,
391*d14abf15SRobert Mustacchi 	PFVF_OP_TEARDOWN_Q,
392*d14abf15SRobert Mustacchi 	PFVF_OP_CLOSE_VF,
393*d14abf15SRobert Mustacchi 	PFVF_OP_RELEASE_VF,
394*d14abf15SRobert Mustacchi 	PFVF_OP_UPDATE_RSS,
395*d14abf15SRobert Mustacchi     PFVF_OP_UPDATE_RSC,
396*d14abf15SRobert Mustacchi 	PFVF_OP_MAX
397*d14abf15SRobert Mustacchi };
398*d14abf15SRobert Mustacchi 
399*d14abf15SRobert Mustacchi 
400*d14abf15SRobert Mustacchi /** To get size of message of the type X(request or response)
401*d14abf15SRobert Mustacchi  *  for the op_code Y of the version Z one should use
402*d14abf15SRobert Mustacchi  *
403*d14abf15SRobert Mustacchi  *  op_code_req_sz[Y][Z].req_sz/resp_sz
404*d14abf15SRobert Mustacchi  ******************************************************************/
405*d14abf15SRobert Mustacchi /* const msg_sz_t* op_codes_req_sz[] = {
406*d14abf15SRobert Mustacchi 	(const msg_sz_t*)acquire_req_sz,
407*d14abf15SRobert Mustacchi 	(const msg_sz_t*)init_vf_req_sz,
408*d14abf15SRobert Mustacchi 	(const msg_sz_t*)setup_q_req_sz,
409*d14abf15SRobert Mustacchi 	(const msg_sz_t*)set_q_filters_req_sz,
410*d14abf15SRobert Mustacchi 	(const msg_sz_t*)activate_q_req_sz,
411*d14abf15SRobert Mustacchi 	(const msg_sz_t*)deactivate_q_req_sz,
412*d14abf15SRobert Mustacchi 	(const msg_sz_t*)teardown_q_req_sz,
413*d14abf15SRobert Mustacchi 	(const msg_sz_t*)close_vf_req_sz,
414*d14abf15SRobert Mustacchi 	(const msg_sz_t*)release_vf_req_sz
415*d14abf15SRobert Mustacchi }; */
416*d14abf15SRobert Mustacchi 
417*d14abf15SRobert Mustacchi #endif /* VF_PF_SW_IF_H */
418