avf: update virtchnl header file
[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
25 #define AVFINT_DYN_CTLN(x)  (0x00003800 + (0x4 * x))
26 #define AVFINT_ICR0         0x00004800
27 #define AVFINT_ICR0_ENA1    0x00005000
28 #define AVFINT_DYN_CTL0     0x00005C00
29 #define AVF_ARQBAH          0x00006000
30 #define AVF_ATQH            0x00006400
31 #define AVF_ATQLEN          0x00006800
32 #define AVF_ARQBAL          0x00006C00
33 #define AVF_ARQT            0x00007000
34 #define AVF_ARQH            0x00007400
35 #define AVF_ATQBAH          0x00007800
36 #define AVF_ATQBAL          0x00007C00
37 #define AVF_ARQLEN          0x00008000
38 #define AVF_ATQT            0x00008400
39 #define AVFGEN_RSTAT        0x00008800
40 #define AVF_QTX_TAIL(q)     (0x00000000 + (0x4 * q))
41 #define AVF_QRX_TAIL(q)     (0x00002000 + (0x4 * q))
42
43 #define AVF_AQ_F_DD  (1 << 0)
44 #define AVF_AQ_F_CMP (1 << 1)
45 #define AVF_AQ_F_ERR (1 << 2)
46 #define AVF_AQ_F_VFE (1 << 3)
47 #define AVF_AQ_F_LB  (1 << 9)
48 #define AVF_AQ_F_RD  (1 << 10)
49 #define AVF_AQ_F_VFC (1 << 11)
50 #define AVF_AQ_F_BUF (1 << 12)
51 #define AVF_AQ_F_SI  (1 << 13)
52 #define AVF_AQ_F_EI  (1 << 14)
53 #define AVF_AQ_F_FE  (1 << 15)
54
55
56 #define foreach_virtchnl_op \
57   _(0, UNKNOWN)                                 \
58   _(1, VERSION)                                 \
59   _(2, RESET_VF)                                \
60   _(3, GET_VF_RESOURCES)                        \
61   _(4, CONFIG_TX_QUEUE)                         \
62   _(5, CONFIG_RX_QUEUE)                         \
63   _(6, CONFIG_VSI_QUEUES)                       \
64   _(7, CONFIG_IRQ_MAP)                          \
65   _(8, ENABLE_QUEUES)                           \
66   _(9, DISABLE_QUEUES)                          \
67   _(10, ADD_ETH_ADDR)                           \
68   _(11, DEL_ETH_ADDR)                           \
69   _(12, ADD_VLAN)                               \
70   _(13, DEL_VLAN)                               \
71   _(14, CONFIG_PROMISCUOUS_MODE)                \
72   _(15, GET_STATS)                              \
73   _(16, RSVD)                                   \
74   _(17, EVENT)                                  \
75   _(18, UNDEF_18)                               \
76   _(19, UNDEF_19)                               \
77   _(20, IWARP)                                  \
78   _(21, CONFIG_IWARP_IRQ_MAP)                   \
79   _(22, RELEASE_IWARP_IRQ_MAP)                  \
80   _(23, CONFIG_RSS_KEY)                         \
81   _(24, CONFIG_RSS_LUT)                         \
82   _(25, GET_RSS_HENA_CAPS)                      \
83   _(26, SET_RSS_HENA)                           \
84   _(27, ENABLE_VLAN_STRIPPING)                  \
85   _(28, DISABLE_VLAN_STRIPPING)                 \
86   _(29, REQUEST_QUEUES)                         \
87   _(30, ENABLE_CHANNELS)                        \
88   _(31, DISABLE_CHANNELS)                       \
89   _(32, ADD_CLOUD_FILTER)                       \
90   _(33, DEL_CLOUD_FILTER)
91
92
93 typedef enum
94 {
95 #define _(v,n) VIRTCHNL_OP_##n = v,
96   foreach_virtchnl_op
97 #undef _
98     VIRTCHNL_N_OPS,
99 } virtchnl_ops_t;
100
101 typedef enum
102 {
103   VIRTCHNL_STATUS_SUCCESS = 0,
104   VIRTCHNL_STATUS_ERR_PARAM = -5,
105   VIRTCHNL_STATUS_ERR_NO_MEMORY = -18,
106   VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH = -38,
107   VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR = -39,
108   VIRTCHNL_STATUS_ERR_INVALID_VF_ID = -40,
109   VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR = -53,
110   VIRTCHNL_STATUS_NOT_SUPPORTED = -64,
111 } virtchnl_status_code_t;
112
113 #define foreach_avf_vf_cap_flag \
114   _( 0, OFFLOAD_L2, "l2") \
115   _( 1, OFFLOAD_IWARP, "iwarp") \
116   _( 2, OFFLOAD_RSVD, "rsvd") \
117   _( 3, OFFLOAD_RSS_AQ, "rss-aq") \
118   _( 4, OFFLOAD_RSS_REG, "rss-reg") \
119   _( 5, OFFLOAD_WB_ON_ITR, "wb-on-itr") \
120   _( 6, OFFLOAD_REQ_QUEUES, "req-queues") \
121   _( 7, CAP_ADV_LINK_SPEED, "adv-link-speed") \
122   _(16, OFFLOAD_VLAN, "vlan") \
123   _(17, OFFLOAD_RX_POLLING, "rx-polling") \
124   _(18, OFFLOAD_RSS_PCTYPE_V2, "rss-pctype-v2") \
125   _(19, OFFLOAD_RSS_PF, "rss-pf") \
126   _(20, OFFLOAD_ENCAP, "encap") \
127   _(21, OFFLOAD_ENCAP_CSUM, "encap-csum") \
128   _(22, OFFLOAD_RX_ENCAP_CSUM, "rx-encap-csum") \
129   _(23, OFFLOAD_ADQ, "offload-adq")
130
131 typedef enum
132 {
133 #define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
134   foreach_avf_vf_cap_flag
135 #undef _
136 } avf_vf_cap_flag_t;
137
138 typedef enum
139 {
140   VIRTCHNL_VSI_TYPE_INVALID = 0,
141   VIRTCHNL_VSI_SRIOV = 6,
142 } virtchnl_vsi_type_t;
143
144 typedef enum
145 {
146   VIRTCHNL_VFR_INPROGRESS = 0,
147   VIRTCHNL_VFR_COMPLETED,
148   VIRTCHNL_VFR_VFACTIVE,
149 } virtchnl_vfr_states_t;
150
151 typedef struct
152 {
153   u16 vsi_id;
154   u16 num_queue_pairs;
155   virtchnl_vsi_type_t vsi_type;
156   u16 qset_handle;
157   u8 default_mac_addr[6];
158 } virtchnl_vsi_resource_t;
159
160 typedef struct
161 {
162   u16 num_vsis;
163   u16 num_queue_pairs;
164   u16 max_vectors;
165   u16 max_mtu;
166   u32 vf_offload_flags;
167   u32 rss_key_size;
168   u32 rss_lut_size;
169   virtchnl_vsi_resource_t vsi_res[1];
170 } virtchnl_vf_resource_t;
171
172 typedef enum
173 {
174   VIRTCHNL_EVENT_UNKNOWN = 0,
175   VIRTCHNL_EVENT_LINK_CHANGE,
176   VIRTCHNL_EVENT_RESET_IMPENDING,
177   VIRTCHNL_EVENT_PF_DRIVER_CLOSE,
178 } virtchnl_event_codes_t;
179
180 #define foreach_virtchnl_link_speed \
181   _(1, 100MB, "100 Mbps")               \
182   _(2, 1GB, "1 Gbps")                   \
183   _(3, 10GB, "10 Gbps")                 \
184   _(4, 40GB, "40 Gbps")                 \
185   _(5, 20GB, "20 Gbps")                 \
186   _(6, 25GB, "25 Gbps")
187
188 typedef enum
189 {
190   VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
191 #define _(a,b,c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
192   foreach_virtchnl_link_speed
193 #undef _
194 } virtchnl_link_speed_t;
195
196 typedef struct
197 {
198   virtchnl_event_codes_t event;
199   union
200   {
201     struct
202     {
203       virtchnl_link_speed_t link_speed;
204       u8 link_status;
205     } link_event;
206     struct
207     {
208       u32 link_speed;
209       u8 link_status;
210     } link_event_adv;
211   } event_data;
212   int severity;
213 } virtchnl_pf_event_t;
214
215 STATIC_ASSERT_SIZEOF (virtchnl_pf_event_t, 16);
216
217 typedef struct
218 {
219   u32 major;
220   u32 minor;
221 } virtchnl_version_info_t;
222
223 typedef struct
224 {
225   u16 flags;
226   u16 opcode;
227   u16 datalen;
228   u16 retval;
229   union
230   {
231     u32 cookie_hi;
232     virtchnl_ops_t v_opcode;
233   };
234   union
235   {
236     u32 cookie_lo;
237     virtchnl_status_code_t v_retval;
238   };
239   u32 param0;
240   u32 param1;
241   union
242   {
243     u32 param2;
244     u32 addr_hi;
245   };
246   union
247   {
248     u32 param3;
249     u32 addr_lo;
250   };
251 } avf_aq_desc_t;
252
253 STATIC_ASSERT_SIZEOF (avf_aq_desc_t, 32);
254
255 typedef struct
256 {
257   u16 vsi_id;
258   u16 queue_id;
259   u16 ring_len;
260   u64 dma_ring_addr;
261   u64 dma_headwb_addr;
262 } virtchnl_txq_info_t;
263
264 STATIC_ASSERT_SIZEOF (virtchnl_txq_info_t, 24);
265
266 typedef struct
267 {
268   u16 vsi_id;
269   u16 queue_id;
270   u32 ring_len;
271   u16 hdr_size;
272   u16 splithdr_enabled;
273   u32 databuffer_size;
274   u32 max_pkt_size;
275   u32 pad1;
276   u64 dma_ring_addr;
277   int rx_split_pos;
278   u32 pad2;
279 } virtchnl_rxq_info_t;
280
281 STATIC_ASSERT_SIZEOF (virtchnl_rxq_info_t, 40);
282
283 typedef struct
284 {
285   virtchnl_txq_info_t txq;
286   virtchnl_rxq_info_t rxq;
287 } virtchnl_queue_pair_info_t;
288
289 typedef struct
290 {
291   u16 vsi_id;
292   u16 num_queue_pairs;
293   u32 pad;
294   virtchnl_queue_pair_info_t qpair[1];
295 } virtchnl_vsi_queue_config_info_t;
296
297 STATIC_ASSERT_SIZEOF (virtchnl_vsi_queue_config_info_t, 72);
298
299 typedef struct
300 {
301   u16 vsi_id;
302   u16 pad;
303   u32 rx_queues;
304   u32 tx_queues;
305 } virtchnl_queue_select_t;
306
307 STATIC_ASSERT_SIZEOF (virtchnl_queue_select_t, 12);
308
309 typedef struct
310 {
311   u16 vsi_id;
312   u16 vector_id;
313   u16 rxq_map;
314   u16 txq_map;
315   u16 rxitr_idx;
316   u16 txitr_idx;
317 } virtchnl_vector_map_t;
318
319 typedef struct
320 {
321   u16 num_vectors;
322   virtchnl_vector_map_t vecmap[1];
323 } virtchnl_irq_map_info_t;
324
325 STATIC_ASSERT_SIZEOF (virtchnl_irq_map_info_t, 14);
326
327 typedef struct
328 {
329   u8 addr[6];
330   u8 pad[2];
331 } virtchnl_ether_addr_t;
332
333 typedef struct
334 {
335   u16 vsi_id;
336   u16 num_elements;
337   virtchnl_ether_addr_t list[1];
338 } virtchnl_ether_addr_list_t;
339
340 #define foreach_virtchnl_eth_stats \
341   _(rx_bytes)           \
342   _(rx_unicast)         \
343   _(rx_multicast)       \
344   _(rx_broadcast)       \
345   _(rx_discards)        \
346   _(rx_unknown_protocol)\
347   _(tx_bytes)           \
348   _(tx_unicast)         \
349   _(tx_multicast)       \
350   _(tx_broadcast)       \
351   _(tx_discards)        \
352   _(tx_errors)
353
354 typedef struct
355 {
356 #define _(s) u64 s;
357   foreach_virtchnl_eth_stats
358 #undef _
359 } virtchnl_eth_stats_t;
360
361 typedef struct
362 {
363   u16 vsi_id;
364   u16 key_len;
365   u8 key[1];
366 } virtchnl_rss_key_t;
367
368 STATIC_ASSERT_SIZEOF (virtchnl_rss_key_t, 6);
369
370 typedef struct
371 {
372   u16 vsi_id;
373   u16 lut_entries;
374   u8 lut[1];
375 } virtchnl_rss_lut_t;
376
377 STATIC_ASSERT_SIZEOF (virtchnl_rss_lut_t, 6);
378
379 /* VIRTCHNL_OP_REQUEST_QUEUES */
380 typedef struct
381 {
382   u16 num_queue_pairs;
383 } virtchnl_vf_res_request_t;
384
385 #endif /* AVF_VIRTCHNL_H */
386
387 /*
388  * fd.io coding-style-patch-verification: ON
389  *
390  * Local Variables:
391  * eval: (c-set-style "gnu")
392  * End:
393  */