FD.io VPP  v21.06-1-gbb7418cf9
Vector Packet Processing
virtchnl.h
Go to the documentation of this file.
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),
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  _ (47, ADD_FDIR_FILTER) \
101  _ (48, DEL_FDIR_FILTER) \
102  _ (49, QUERY_FDIR_FILTER) \
103  _ (50, GET_MAX_RSS_QREGION) \
104  _ (51, GET_OFFLOAD_VLAN_V2_CAPS) \
105  _ (52, ADD_VLAN_V2) \
106  _ (53, DEL_VLAN_V2) \
107  _ (54, ENABLE_VLAN_STRIPPING_V2) \
108  _ (55, DISABLE_VLAN_STRIPPING_V2) \
109  _ (56, ENABLE_VLAN_INSERTION_V2) \
110  _ (57, DISABLE_VLAN_INSERTION_V2) \
111  _ (58, ENABLE_VLAN_FILTERING_V2) \
112  _ (59, DISABLE_VLAN_FILTERING_V2) \
113  _ (107, ENABLE_QUEUES_V2) \
114  _ (108, DISABLE_QUEUES_V2) \
115  _ (111, MAP_QUEUE_VECTOR)
116 
117 typedef enum
118 {
119 #define _(v,n) VIRTCHNL_OP_##n = v,
121 #undef _
124 
125 typedef enum
126 {
136 
137 #define foreach_avf_vf_cap_flag \
138  _ (0, OFFLOAD_L2, "l2") \
139  _ (1, OFFLOAD_IWARP, "iwarp") \
140  _ (2, OFFLOAD_RSVD, "rsvd") \
141  _ (3, OFFLOAD_RSS_AQ, "rss-aq") \
142  _ (4, OFFLOAD_RSS_REG, "rss-reg") \
143  _ (5, OFFLOAD_WB_ON_ITR, "wb-on-itr") \
144  _ (6, OFFLOAD_REQ_QUEUES, "req-queues") \
145  _ (7, CAP_ADV_LINK_SPEED, "adv-link-speed") \
146  _ (9, LARGE_NUM_QPAIRS, "large-num-qpairs") \
147  _ (15, OFFLOAD_VLAN_V2, "vlan-v2") \
148  _ (16, OFFLOAD_VLAN, "vlan") \
149  _ (17, OFFLOAD_RX_POLLING, "rx-polling") \
150  _ (18, OFFLOAD_RSS_PCTYPE_V2, "rss-pctype-v2") \
151  _ (19, OFFLOAD_RSS_PF, "rss-pf") \
152  _ (20, OFFLOAD_ENCAP, "encap") \
153  _ (21, OFFLOAD_ENCAP_CSUM, "encap-csum") \
154  _ (22, OFFLOAD_RX_ENCAP_CSUM, "rx-encap-csum") \
155  _ (23, OFFLOAD_ADQ, "offload-adq") \
156  _ (24, OFFLOAD_ADQ_v2, "offload-adq-v2") \
157  _ (25, OFFLOAD_USO, "offload-uso") \
158  _ (26, OFFLOAD_RX_FLEX_DESC, "offload-rx-flex-desc") \
159  _ (27, OFFLOAD_ADV_RSS_PF, "offload-adv-rss-pf") \
160  _ (28, OFFLOAD_FDIR_PF, "offload-fdir-pf") \
161  _ (30, CAP_DCF, "dcf")
162 
163 typedef enum
164 {
165 #define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
167 #undef _
169 
170 typedef enum
171 {
175 
176 typedef enum
177 {
182 
183 typedef struct
184 {
189  u8 default_mac_addr[6];
191 
192 typedef struct
193 {
203 
204 #define foreach_virtchnl_event_code \
205  _(0, UNKNOWN) \
206  _(1, LINK_CHANGE) \
207  _(2, RESET_IMPENDING) \
208  _(3, PF_DRIVER_CLOSE)
209 
210 typedef enum
211 {
212 #define _(a,b) VIRTCHNL_EVENT_##b = (a),
214 #undef _
216 
217 #define foreach_virtchnl_link_speed \
218  _(0, 2_5GB, "2.5 Gbps") \
219  _(1, 100MB, "100 Mbps") \
220  _(2, 1GB, "1 Gbps") \
221  _(3, 10GB, "10 Gbps") \
222  _(4, 40GB, "40 Gbps") \
223  _(5, 20GB, "20 Gbps") \
224  _(6, 25GB, "25 Gbps") \
225  _(7, 5GB, "5 Gbps")
226 
227 typedef enum
228 {
230 #define _(a,b,c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
232 #undef _
234 
235 typedef struct
236 {
238  union
239  {
240  struct
241  {
244  } link_event;
245  struct
246  {
248  u8 link_status;
249  } link_event_adv;
250  } event_data;
251  int severity;
253 
255 
256 typedef struct
257 {
261 
262 typedef struct
263 {
268  union
269  {
272  };
273  union
274  {
277  };
280  union
281  {
284  };
285  union
286  {
289  };
290 } avf_aq_desc_t;
291 
293 
294 typedef struct
295 {
302 
304 
305 typedef struct
306 {
319 
321 
322 typedef struct
323 {
327 
328 typedef struct
329 {
335 
337 
338 typedef struct
339 {
345 
347 
348 typedef struct
349 {
357 
358 typedef struct
359 {
363 
365 
366 typedef struct
367 {
368  u8 addr[6];
369  u8 pad[2];
371 
372 typedef struct
373 {
378 
379 #define foreach_virtchnl_eth_stats \
380  _(rx_bytes) \
381  _(rx_unicast) \
382  _(rx_multicast) \
383  _(rx_broadcast) \
384  _(rx_discards) \
385  _(rx_unknown_protocol)\
386  _(tx_bytes) \
387  _(tx_unicast) \
388  _(tx_multicast) \
389  _(tx_broadcast) \
390  _(tx_discards) \
391  _(tx_errors)
392 
393 typedef struct
394 {
395 #define _(s) u64 s;
397 #undef _
399 
400 typedef struct
401 {
404  u8 key[1];
406 
408 
409 typedef struct
410 {
413  u8 lut[1];
415 
417 
418 /* VIRTCHNL_OP_REQUEST_QUEUES */
419 typedef struct
420 {
423 
424 typedef struct
425 {
429 
430 typedef struct
431 {
435  u8 pad[2];
437 
439 {
444  u8 pad[3];
446 
447 typedef struct
448 {
452 
453 #define foreach_virtchnl_vlan_support_bit \
454  _ (0, ETHERTYPE_8100, "dot1Q") \
455  _ (1, ETHERTYPE_88A8, "dot1AD") \
456  _ (2, ETHERTYPE_9100, "QinQ") \
457  _ (8, TAG_LOCATION_L2TAG1, "l2tag1") \
458  _ (9, TAG_LOCATION_L2TAG2, "l2tag2") \
459  _ (10, TAG_LOCATION_L2TAG2_2, "l2tag2_2") \
460  _ (24, PRIO, "prio") \
461  _ (28, FILTER_MASK, "filter-mask") \
462  _ (29, ETHERTYPE_AND, "etype-and") \
463  _ (30, ETHERTYPE_XOR, "etype-xor") \
464  _ (31, TOGGLE, "toggle")
465 
466 typedef enum
467 {
469 #define _(a, b, c) VIRTCHNL_VLAN_##b = (1 << a),
471 #undef _
473 
474 typedef struct
475 {
479  u8 pad[6];
481 
482 #endif /* AVF_VIRTCHNL_H */
483 
484 /*
485  * fd.io coding-style-patch-verification: ON
486  *
487  * Local Variables:
488  * eval: (c-set-style "gnu")
489  * End:
490  */
u8 pad[3]
log2 (size of the packing page block)
Definition: bihash_doc.h:61
#define foreach_avf_vf_cap_flag
Definition: virtchnl.h:137
virtchnl_vsi_type_t vsi_type
Definition: virtchnl.h:187
virtchnl_vlan_supported_caps_t insertion_support
Definition: virtchnl.h:441
unsigned long u64
Definition: types.h:89
#define foreach_virtchnl_eth_stats
Definition: virtchnl.h:379
struct virtchnl_vlan_offload_caps virtchnl_vlan_offload_caps_t
virtchnl_link_speed_t
Definition: virtchnl.h:227
virtchnl_vsi_type_t
Definition: virtchnl.h:170
vhost_vring_addr_t addr
Definition: vhost_user.h:130
unsigned char u8
Definition: types.h:56
virtchnl_ops_t
Definition: virtchnl.h:117
unsigned int u32
Definition: types.h:88
#define foreach_virtchnl_event_code
Definition: virtchnl.h:204
virtchnl_vlan_supported_caps_t stripping_support
Definition: virtchnl.h:440
virtchnl_link_speed_t link_speed
Definition: virtchnl.h:242
#define foreach_virtchnl_vlan_support_bit
Definition: virtchnl.h:453
virtchnl_vfr_states_t
Definition: virtchnl.h:176
virtchnl_txq_info_t txq
Definition: virtchnl.h:324
unsigned short u16
Definition: types.h:57
#define foreach_avf_promisc_flags
Definition: virtchnl.h:24
virtchnl_event_codes_t
Definition: virtchnl.h:210
virtchnl_status_code_t
Definition: virtchnl.h:125
virtchnl_ops_t v_opcode
Definition: virtchnl.h:271
virtchnl_status_code_t v_retval
Definition: virtchnl.h:276
virtchnl_vlan_offload_caps_t offloads
Definition: virtchnl.h:450
STATIC_ASSERT_SIZEOF(virtchnl_pf_event_t, 16)
virtchnl_vlan_supported_caps_t filtering_support
Definition: virtchnl.h:432
#define foreach_virtchnl_link_speed
Definition: virtchnl.h:217
virtchnl_event_codes_t event
Definition: virtchnl.h:237
typedef key
Definition: ipsec_types.api:88
virtchnl_rxq_info_t rxq
Definition: virtchnl.h:325
virtchnl_vlan_filtering_caps_t filtering
Definition: virtchnl.h:449
#define foreach_virtchnl_op
Definition: virtchnl.h:65
virtchnl_vlan_support_t
Definition: virtchnl.h:466
avf_vf_cap_flag_t
Definition: virtchnl.h:163