hs-test: more debug output in http3 test
[vpp.git] / src / plugins / avf / virtchnl.h
1 /*
2  *------------------------------------------------------------------
3  * Copyright (c) 2018 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *------------------------------------------------------------------
16  */
17
18 #ifndef _AVF_VIRTCHNL_H_
19 #define _AVF_VIRTCHNL_H_
20
21 #define VIRTCHNL_VERSION_MAJOR 1
22 #define VIRTCHNL_VERSION_MINOR 1
23
24 #define foreach_avf_promisc_flags \
25   _(0, UNICAST_PROMISC, "unicast") \
26   _(1, MULTICAST_PROMISC, "multicast")
27
28 enum
29 {
30 #define _(a, b, c) FLAG_VF_ ##b = (1 << a),
31   foreach_avf_promisc_flags
32 #undef _
33 };
34
35 #define AVFINT_DYN_CTLN(x)  (0x00003800 + (0x4 * x))
36 #define AVFINT_ICR0         0x00004800
37 #define AVFINT_ICR0_ENA1    0x00005000
38 #define AVFINT_DYN_CTL0     0x00005C00
39 #define AVF_ARQBAH          0x00006000
40 #define AVF_ATQH            0x00006400
41 #define AVF_ATQLEN          0x00006800
42 #define AVF_ARQBAL          0x00006C00
43 #define AVF_ARQT            0x00007000
44 #define AVF_ARQH            0x00007400
45 #define AVF_ATQBAH          0x00007800
46 #define AVF_ATQBAL          0x00007C00
47 #define AVF_ARQLEN          0x00008000
48 #define AVF_ATQT            0x00008400
49 #define AVFGEN_RSTAT        0x00008800
50 #define AVF_QTX_TAIL(q)     (0x00000000 + (0x4 * q))
51 #define AVF_QRX_TAIL(q)     (0x00002000 + (0x4 * q))
52
53 #define AVF_AQ_F_DD  (1 << 0)
54 #define AVF_AQ_F_CMP (1 << 1)
55 #define AVF_AQ_F_ERR (1 << 2)
56 #define AVF_AQ_F_VFE (1 << 3)
57 #define AVF_AQ_F_LB  (1 << 9)
58 #define AVF_AQ_F_RD  (1 << 10)
59 #define AVF_AQ_F_VFC (1 << 11)
60 #define AVF_AQ_F_BUF (1 << 12)
61 #define AVF_AQ_F_SI  (1 << 13)
62 #define AVF_AQ_F_EI  (1 << 14)
63 #define AVF_AQ_F_FE  (1 << 15)
64
65 #define foreach_virtchnl_op                                                   \
66   _ (0, UNKNOWN)                                                              \
67   _ (1, VERSION)                                                              \
68   _ (2, RESET_VF)                                                             \
69   _ (3, GET_VF_RESOURCES)                                                     \
70   _ (4, CONFIG_TX_QUEUE)                                                      \
71   _ (5, CONFIG_RX_QUEUE)                                                      \
72   _ (6, CONFIG_VSI_QUEUES)                                                    \
73   _ (7, CONFIG_IRQ_MAP)                                                       \
74   _ (8, ENABLE_QUEUES)                                                        \
75   _ (9, DISABLE_QUEUES)                                                       \
76   _ (10, ADD_ETH_ADDR)                                                        \
77   _ (11, DEL_ETH_ADDR)                                                        \
78   _ (12, ADD_VLAN)                                                            \
79   _ (13, DEL_VLAN)                                                            \
80   _ (14, CONFIG_PROMISCUOUS_MODE)                                             \
81   _ (15, GET_STATS)                                                           \
82   _ (16, RSVD)                                                                \
83   _ (17, EVENT)                                                               \
84   _ (18, UNDEF_18)                                                            \
85   _ (19, UNDEF_19)                                                            \
86   _ (20, IWARP)                                                               \
87   _ (21, CONFIG_IWARP_IRQ_MAP)                                                \
88   _ (22, RELEASE_IWARP_IRQ_MAP)                                               \
89   _ (23, CONFIG_RSS_KEY)                                                      \
90   _ (24, CONFIG_RSS_LUT)                                                      \
91   _ (25, GET_RSS_HENA_CAPS)                                                   \
92   _ (26, SET_RSS_HENA)                                                        \
93   _ (27, ENABLE_VLAN_STRIPPING)                                               \
94   _ (28, DISABLE_VLAN_STRIPPING)                                              \
95   _ (29, REQUEST_QUEUES)                                                      \
96   _ (30, ENABLE_CHANNELS)                                                     \
97   _ (31, DISABLE_CHANNELS)                                                    \
98   _ (32, ADD_CLOUD_FILTER)                                                    \
99   _ (33, DEL_CLOUD_FILTER)                                                    \
100   _ (45, ADD_RSS_CFG)                                                         \
101   _ (46, DEL_RSS_CFG)                                                         \
102   _ (47, ADD_FDIR_FILTER)                                                     \
103   _ (48, DEL_FDIR_FILTER)                                                     \
104   _ (49, QUERY_FDIR_FILTER)                                                   \
105   _ (50, GET_MAX_RSS_QREGION)                                                 \
106   _ (51, GET_OFFLOAD_VLAN_V2_CAPS)                                            \
107   _ (52, ADD_VLAN_V2)                                                         \
108   _ (53, DEL_VLAN_V2)                                                         \
109   _ (54, ENABLE_VLAN_STRIPPING_V2)                                            \
110   _ (55, DISABLE_VLAN_STRIPPING_V2)                                           \
111   _ (56, ENABLE_VLAN_INSERTION_V2)                                            \
112   _ (57, DISABLE_VLAN_INSERTION_V2)                                           \
113   _ (58, ENABLE_VLAN_FILTERING_V2)                                            \
114   _ (59, DISABLE_VLAN_FILTERING_V2)                                           \
115   _ (107, ENABLE_QUEUES_V2)                                                   \
116   _ (108, DISABLE_QUEUES_V2)                                                  \
117   _ (111, MAP_QUEUE_VECTOR)
118
119 typedef enum
120 {
121 #define _(v,n) VIRTCHNL_OP_##n = v,
122   foreach_virtchnl_op
123 #undef _
124     VIRTCHNL_N_OPS,
125 } virtchnl_ops_t;
126
127 typedef enum
128 {
129   VIRTCHNL_STATUS_SUCCESS = 0,
130   VIRTCHNL_STATUS_ERR_PARAM = -5,
131   VIRTCHNL_STATUS_ERR_NO_MEMORY = -18,
132   VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH = -38,
133   VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR = -39,
134   VIRTCHNL_STATUS_ERR_INVALID_VF_ID = -40,
135   VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR = -53,
136   VIRTCHNL_STATUS_NOT_SUPPORTED = -64,
137 } virtchnl_status_code_t;
138
139 #define foreach_avf_vf_cap_flag                                               \
140   _ (0, OFFLOAD_L2, "l2")                                                     \
141   _ (1, OFFLOAD_IWARP, "iwarp")                                               \
142   _ (2, OFFLOAD_RSVD, "rsvd")                                                 \
143   _ (3, OFFLOAD_RSS_AQ, "rss-aq")                                             \
144   _ (4, OFFLOAD_RSS_REG, "rss-reg")                                           \
145   _ (5, OFFLOAD_WB_ON_ITR, "wb-on-itr")                                       \
146   _ (6, OFFLOAD_REQ_QUEUES, "req-queues")                                     \
147   _ (7, CAP_ADV_LINK_SPEED, "adv-link-speed")                                 \
148   _ (9, LARGE_NUM_QPAIRS, "large-num-qpairs")                                 \
149   _ (15, OFFLOAD_VLAN_V2, "vlan-v2")                                          \
150   _ (16, OFFLOAD_VLAN, "vlan")                                                \
151   _ (17, OFFLOAD_RX_POLLING, "rx-polling")                                    \
152   _ (18, OFFLOAD_RSS_PCTYPE_V2, "rss-pctype-v2")                              \
153   _ (19, OFFLOAD_RSS_PF, "rss-pf")                                            \
154   _ (20, OFFLOAD_ENCAP, "encap")                                              \
155   _ (21, OFFLOAD_ENCAP_CSUM, "encap-csum")                                    \
156   _ (22, OFFLOAD_RX_ENCAP_CSUM, "rx-encap-csum")                              \
157   _ (23, OFFLOAD_ADQ, "offload-adq")                                          \
158   _ (24, OFFLOAD_ADQ_v2, "offload-adq-v2")                                    \
159   _ (25, OFFLOAD_USO, "offload-uso")                                          \
160   _ (26, OFFLOAD_RX_FLEX_DESC, "offload-rx-flex-desc")                        \
161   _ (27, OFFLOAD_ADV_RSS_PF, "offload-adv-rss-pf")                            \
162   _ (28, OFFLOAD_FDIR_PF, "offload-fdir-pf")                                  \
163   _ (30, CAP_DCF, "dcf")
164
165 typedef enum
166 {
167 #define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
168   foreach_avf_vf_cap_flag
169 #undef _
170 } avf_vf_cap_flag_t;
171
172 typedef enum
173 {
174   VIRTCHNL_VSI_TYPE_INVALID = 0,
175   VIRTCHNL_VSI_SRIOV = 6,
176 } virtchnl_vsi_type_t;
177
178 typedef enum
179 {
180   VIRTCHNL_VFR_INPROGRESS = 0,
181   VIRTCHNL_VFR_COMPLETED,
182   VIRTCHNL_VFR_VFACTIVE,
183 } virtchnl_vfr_states_t;
184
185 typedef struct
186 {
187   u16 vsi_id;
188   u16 num_queue_pairs;
189   virtchnl_vsi_type_t vsi_type;
190   u16 qset_handle;
191   u8 default_mac_addr[6];
192 } virtchnl_vsi_resource_t;
193
194 typedef struct
195 {
196   u16 num_vsis;
197   u16 num_queue_pairs;
198   u16 max_vectors;
199   u16 max_mtu;
200   u32 vf_cap_flags;
201   u32 rss_key_size;
202   u32 rss_lut_size;
203   virtchnl_vsi_resource_t vsi_res[1];
204 } virtchnl_vf_resource_t;
205
206 #define foreach_virtchnl_event_code \
207   _(0, UNKNOWN)                         \
208   _(1, LINK_CHANGE)                     \
209   _(2, RESET_IMPENDING)                 \
210   _(3, PF_DRIVER_CLOSE)
211
212 typedef enum
213 {
214 #define _(a,b) VIRTCHNL_EVENT_##b = (a),
215   foreach_virtchnl_event_code
216 #undef _
217 } virtchnl_event_codes_t;
218
219 #define foreach_virtchnl_link_speed \
220   _(0, 2_5GB, "2.5 Gbps")               \
221   _(1, 100MB, "100 Mbps")               \
222   _(2, 1GB, "1 Gbps")                   \
223   _(3, 10GB, "10 Gbps")                 \
224   _(4, 40GB, "40 Gbps")                 \
225   _(5, 20GB, "20 Gbps")                 \
226   _(6, 25GB, "25 Gbps")                 \
227   _(7, 5GB, "5 Gbps")
228
229 typedef enum
230 {
231   VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
232 #define _(a,b,c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
233   foreach_virtchnl_link_speed
234 #undef _
235 } virtchnl_link_speed_t;
236
237 typedef struct
238 {
239   virtchnl_event_codes_t event;
240   union
241   {
242     struct
243     {
244       virtchnl_link_speed_t link_speed;
245       u8 link_status;
246     } link_event;
247     struct
248     {
249       u32 link_speed;
250       u8 link_status;
251     } link_event_adv;
252   } event_data;
253   int severity;
254 } virtchnl_pf_event_t;
255
256 STATIC_ASSERT_SIZEOF (virtchnl_pf_event_t, 16);
257
258 typedef struct
259 {
260   u32 major;
261   u32 minor;
262 } virtchnl_version_info_t;
263
264 typedef struct
265 {
266   u16 flags;
267   u16 opcode;
268   u16 datalen;
269   u16 retval;
270   union
271   {
272     u32 cookie_hi;
273     virtchnl_ops_t v_opcode;
274   };
275   union
276   {
277     u32 cookie_lo;
278     virtchnl_status_code_t v_retval;
279   };
280   u32 param0;
281   u32 param1;
282   union
283   {
284     u32 param2;
285     u32 addr_hi;
286   };
287   union
288   {
289     u32 param3;
290     u32 addr_lo;
291   };
292 } avf_aq_desc_t;
293
294 STATIC_ASSERT_SIZEOF (avf_aq_desc_t, 32);
295
296 typedef struct
297 {
298   u16 vsi_id;
299   u16 queue_id;
300   u16 ring_len;
301   u64 dma_ring_addr;
302   u64 dma_headwb_addr;
303 } virtchnl_txq_info_t;
304
305 STATIC_ASSERT_SIZEOF (virtchnl_txq_info_t, 24);
306
307 typedef struct
308 {
309   u16 vsi_id;
310   u16 queue_id;
311   u32 ring_len;
312   u16 hdr_size;
313   u16 splithdr_enabled;
314   u32 databuffer_size;
315   u32 max_pkt_size;
316   u32 pad1;
317   u64 dma_ring_addr;
318   int rx_split_pos;
319   u32 pad2;
320 } virtchnl_rxq_info_t;
321
322 STATIC_ASSERT_SIZEOF (virtchnl_rxq_info_t, 40);
323
324 typedef struct
325 {
326   virtchnl_txq_info_t txq;
327   virtchnl_rxq_info_t rxq;
328 } virtchnl_queue_pair_info_t;
329
330 typedef struct
331 {
332   u16 vsi_id;
333   u16 num_queue_pairs;
334   u32 pad;
335   virtchnl_queue_pair_info_t qpair[1];
336 } virtchnl_vsi_queue_config_info_t;
337
338 STATIC_ASSERT_SIZEOF (virtchnl_vsi_queue_config_info_t, 72);
339
340 typedef struct
341 {
342   u16 vsi_id;
343   u16 pad;
344   u32 rx_queues;
345   u32 tx_queues;
346 } virtchnl_queue_select_t;
347
348 STATIC_ASSERT_SIZEOF (virtchnl_queue_select_t, 12);
349
350 typedef struct
351 {
352   u16 vsi_id;
353   u16 vector_id;
354   u16 rxq_map;
355   u16 txq_map;
356   u16 rxitr_idx;
357   u16 txitr_idx;
358 } virtchnl_vector_map_t;
359
360 typedef struct
361 {
362   u16 num_vectors;
363   virtchnl_vector_map_t vecmap[1];
364 } virtchnl_irq_map_info_t;
365
366 STATIC_ASSERT_SIZEOF (virtchnl_irq_map_info_t, 14);
367
368 typedef struct
369 {
370   u8 addr[6];
371   u8 pad[2];
372 } virtchnl_ether_addr_t;
373
374 typedef struct
375 {
376   u16 vsi_id;
377   u16 num_elements;
378   virtchnl_ether_addr_t list[1];
379 } virtchnl_ether_addr_list_t;
380
381 #define foreach_virtchnl_eth_stats \
382   _(rx_bytes)           \
383   _(rx_unicast)         \
384   _(rx_multicast)       \
385   _(rx_broadcast)       \
386   _(rx_discards)        \
387   _(rx_unknown_protocol)\
388   _(tx_bytes)           \
389   _(tx_unicast)         \
390   _(tx_multicast)       \
391   _(tx_broadcast)       \
392   _(tx_discards)        \
393   _(tx_errors)
394
395 typedef struct
396 {
397 #define _(s) u64 s;
398   foreach_virtchnl_eth_stats
399 #undef _
400 } virtchnl_eth_stats_t;
401
402 typedef struct
403 {
404   u16 vsi_id;
405   u16 key_len;
406   u8 key[1];
407 } virtchnl_rss_key_t;
408
409 STATIC_ASSERT_SIZEOF (virtchnl_rss_key_t, 6);
410
411 typedef struct
412 {
413   u16 vsi_id;
414   u16 lut_entries;
415   u8 lut[1];
416 } virtchnl_rss_lut_t;
417
418 STATIC_ASSERT_SIZEOF (virtchnl_rss_lut_t, 6);
419
420 /* VIRTCHNL_OP_REQUEST_QUEUES */
421 typedef struct
422 {
423   u16 num_queue_pairs;
424 } virtchnl_vf_res_request_t;
425
426 typedef struct
427 {
428   u32 outer;
429   u32 inner;
430 } virtchnl_vlan_supported_caps_t;
431
432 typedef struct
433 {
434   virtchnl_vlan_supported_caps_t filtering_support;
435   u32 ethertype_init;
436   u16 max_filters;
437   u8 pad[2];
438 } virtchnl_vlan_filtering_caps_t;
439
440 typedef struct virtchnl_vlan_offload_caps
441 {
442   virtchnl_vlan_supported_caps_t stripping_support;
443   virtchnl_vlan_supported_caps_t insertion_support;
444   u32 ethertype_init;
445   u8 ethertype_match;
446   u8 pad[3];
447 } virtchnl_vlan_offload_caps_t;
448
449 typedef struct
450 {
451   virtchnl_vlan_filtering_caps_t filtering;
452   virtchnl_vlan_offload_caps_t offloads;
453 } virtchnl_vlan_caps_t;
454
455 #define foreach_virtchnl_vlan_support_bit                                     \
456   _ (0, ETHERTYPE_8100, "dot1Q")                                              \
457   _ (1, ETHERTYPE_88A8, "dot1AD")                                             \
458   _ (2, ETHERTYPE_9100, "QinQ")                                               \
459   _ (8, TAG_LOCATION_L2TAG1, "l2tag1")                                        \
460   _ (9, TAG_LOCATION_L2TAG2, "l2tag2")                                        \
461   _ (10, TAG_LOCATION_L2TAG2_2, "l2tag2_2")                                   \
462   _ (24, PRIO, "prio")                                                        \
463   _ (28, FILTER_MASK, "filter-mask")                                          \
464   _ (29, ETHERTYPE_AND, "etype-and")                                          \
465   _ (30, ETHERTYPE_XOR, "etype-xor")                                          \
466   _ (31, TOGGLE, "toggle")
467
468 typedef enum
469 {
470   VIRTCHNL_VLAN_UNSUPPORTED = 0,
471 #define _(a, b, c) VIRTCHNL_VLAN_##b = (1 << a),
472   foreach_virtchnl_vlan_support_bit
473 #undef _
474 } virtchnl_vlan_support_t;
475
476 typedef struct
477 {
478   u32 outer_ethertype_setting;
479   u32 inner_ethertype_setting;
480   u16 vport_id;
481   u8 pad[6];
482 } virtchnl_vlan_setting_t;
483
484 #endif /* AVF_VIRTCHNL_H */
485
486 /*
487  * fd.io coding-style-patch-verification: ON
488  *
489  * Local Variables:
490  * eval: (c-set-style "gnu")
491  * End:
492  */