1 /* SPDX-License-Identifier: Apache-2.0
2 * Copyright (c) 2023 Cisco Systems, Inc.
5 #ifndef _IIAVF_VIRTCHNL_H_
6 #define _IIAVF_VIRTCHNL_H_
8 #define VIRTCHNL_VERSION_MAJOR 1
9 #define VIRTCHNL_VERSION_MINOR 1
11 #define foreach_iavf_promisc_flags \
12 _ (0, UNICAST_PROMISC, "unicast") \
13 _ (1, MULTICAST_PROMISC, "multicast")
17 #define _(a, b, c) FLAG_VF_##b = (1 << a),
18 foreach_iavf_promisc_flags
22 #define IAVF_VFINT_DYN_CTLN(x) (0x00003800 + (0x4 * x))
23 #define IAVF_VFINT_ICR0 0x00004800
24 #define IAVF_VFINT_ICR0_ENA1 0x00005000
25 #define IAVF_VFINT_DYN_CTL0 0x00005C00
26 #define IAVF_ARQBAH 0x00006000
27 #define IAVF_ATQH 0x00006400
28 #define IAVF_ATQLEN 0x00006800
29 #define IAVF_ARQBAL 0x00006C00
30 #define IAVF_ARQT 0x00007000
31 #define IAVF_ARQH 0x00007400
32 #define IAVF_ATQBAH 0x00007800
33 #define IAVF_ATQBAL 0x00007C00
34 #define IAVF_ARQLEN 0x00008000
35 #define IAVF_ATQT 0x00008400
36 #define IAVF_VFGEN_RSTAT 0x00008800
37 #define IAVF_QTX_TAIL(q) (0x00000000 + (0x4 * q))
38 #define IAVF_QRX_TAIL(q) (0x00002000 + (0x4 * q))
40 #define foreach_virtchnl_op \
44 _ (3, GET_VF_RESOURCES) \
45 _ (4, CONFIG_TX_QUEUE) \
46 _ (5, CONFIG_RX_QUEUE) \
47 _ (6, CONFIG_VSI_QUEUES) \
48 _ (7, CONFIG_IRQ_MAP) \
49 _ (8, ENABLE_QUEUES) \
50 _ (9, DISABLE_QUEUES) \
51 _ (10, ADD_ETH_ADDR) \
52 _ (11, DEL_ETH_ADDR) \
55 _ (14, CONFIG_PROMISCUOUS_MODE) \
62 _ (21, CONFIG_IWARP_IRQ_MAP) \
63 _ (22, RELEASE_IWARP_IRQ_MAP) \
64 _ (23, CONFIG_RSS_KEY) \
65 _ (24, CONFIG_RSS_LUT) \
66 _ (25, GET_RSS_HENA_CAPS) \
67 _ (26, SET_RSS_HENA) \
68 _ (27, ENABLE_VLAN_STRIPPING) \
69 _ (28, DISABLE_VLAN_STRIPPING) \
70 _ (29, REQUEST_QUEUES) \
71 _ (30, ENABLE_CHANNELS) \
72 _ (31, DISABLE_CHANNELS) \
73 _ (32, ADD_CLOUD_FILTER) \
74 _ (33, DEL_CLOUD_FILTER) \
77 _ (47, ADD_FDIR_FILTER) \
78 _ (48, DEL_FDIR_FILTER) \
79 _ (49, QUERY_FDIR_FILTER) \
80 _ (50, GET_MAX_RSS_QREGION) \
81 _ (51, GET_OFFLOAD_VLAN_V2_CAPS) \
84 _ (54, ENABLE_VLAN_STRIPPING_V2) \
85 _ (55, DISABLE_VLAN_STRIPPING_V2) \
86 _ (56, ENABLE_VLAN_INSERTION_V2) \
87 _ (57, DISABLE_VLAN_INSERTION_V2) \
88 _ (58, ENABLE_VLAN_FILTERING_V2) \
89 _ (59, DISABLE_VLAN_FILTERING_V2) \
90 _ (107, ENABLE_QUEUES_V2) \
91 _ (108, DISABLE_QUEUES_V2) \
92 _ (111, MAP_QUEUE_VECTOR)
96 #define _(v, n) VIRTCHNL_OP_##n = v,
102 #define foreach_virtchnl_status \
105 _ (-18, ERR_NO_MEMORY) \
106 _ (-38, ERR_OPCODE_MISMATCH) \
107 _ (-39, ERR_CQP_COMPL_ERROR) \
108 _ (-40, ERR_INVALID_VF_ID) \
109 _ (-53, ERR_ADMIN_QUEUE_ERROR) \
110 _ (-64, NOT_SUPPORTED)
114 #define _(a, b) VIRTCHNL_STATUS_##b = a,
115 foreach_virtchnl_status
119 #define foreach_iavf_vf_cap_flag \
120 _ (0, OFFLOAD_L2, "l2") \
121 _ (1, OFFLOAD_IWARP, "iwarp") \
122 _ (2, OFFLOAD_RSVD, "rsvd") \
123 _ (3, OFFLOAD_RSS_AQ, "rss-aq") \
124 _ (4, OFFLOAD_RSS_REG, "rss-reg") \
125 _ (5, OFFLOAD_WB_ON_ITR, "wb-on-itr") \
126 _ (6, OFFLOAD_REQ_QUEUES, "req-queues") \
127 _ (7, CAP_ADV_LINK_SPEED, "adv-link-speed") \
128 _ (9, LARGE_NUM_QPAIRS, "large-num-qpairs") \
129 _ (15, OFFLOAD_VLAN_V2, "vlan-v2") \
130 _ (16, OFFLOAD_VLAN, "vlan") \
131 _ (17, OFFLOAD_RX_POLLING, "rx-polling") \
132 _ (18, OFFLOAD_RSS_PCTYPE_V2, "rss-pctype-v2") \
133 _ (19, OFFLOAD_RSS_PF, "rss-pf") \
134 _ (20, OFFLOAD_ENCAP, "encap") \
135 _ (21, OFFLOAD_ENCAP_CSUM, "encap-csum") \
136 _ (22, OFFLOAD_RX_ENCAP_CSUM, "rx-encap-csum") \
137 _ (23, OFFLOAD_ADQ, "offload-adq") \
138 _ (24, OFFLOAD_ADQ_v2, "offload-adq-v2") \
139 _ (25, OFFLOAD_USO, "offload-uso") \
140 _ (26, OFFLOAD_RX_FLEX_DESC, "offload-rx-flex-desc") \
141 _ (27, OFFLOAD_ADV_RSS_PF, "offload-adv-rss-pf") \
142 _ (28, OFFLOAD_FDIR_PF, "offload-fdir-pf") \
143 _ (30, CAP_DCF, "dcf")
147 #define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
148 foreach_iavf_vf_cap_flag
150 } iavf_vf_cap_flag_t;
154 VIRTCHNL_VSI_TYPE_INVALID = 0,
155 VIRTCHNL_VSI_SRIOV = 6,
156 } virtchnl_vsi_type_t;
160 VIRTCHNL_VFR_INPROGRESS = 0,
161 VIRTCHNL_VFR_COMPLETED,
162 VIRTCHNL_VFR_VFACTIVE,
163 } virtchnl_vfr_states_t;
169 virtchnl_vsi_type_t vsi_type;
171 u8 default_mac_addr[6];
172 } virtchnl_vsi_resource_t;
183 virtchnl_vsi_resource_t vsi_res[1];
184 } virtchnl_vf_resource_t;
186 #define foreach_virtchnl_event_code \
189 _ (2, RESET_IMPENDING) \
190 _ (3, PF_DRIVER_CLOSE)
194 #define _(a, b) VIRTCHNL_EVENT_##b = (a),
195 foreach_virtchnl_event_code
197 } virtchnl_event_codes_t;
199 #define foreach_virtchnl_link_speed \
200 _ (0, 2_5GB, "2.5 Gbps") \
201 _ (1, 100MB, "100 Mbps") \
202 _ (2, 1GB, "1 Gbps") \
203 _ (3, 10GB, "10 Gbps") \
204 _ (4, 40GB, "40 Gbps") \
205 _ (5, 20GB, "20 Gbps") \
206 _ (6, 25GB, "25 Gbps") \
211 VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
212 #define _(a, b, c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
213 foreach_virtchnl_link_speed
215 } virtchnl_link_speed_t;
219 virtchnl_event_codes_t event;
224 virtchnl_link_speed_t link_speed;
234 } virtchnl_pf_event_t;
236 STATIC_ASSERT_SIZEOF (virtchnl_pf_event_t, 16);
242 } virtchnl_version_info_t;
244 #define foreach_iavf_aq_desc_flag \
262 #define _(n, s) u16 s : n;
263 foreach_iavf_aq_desc_flag
267 } iavf_aq_desc_flags_t;
269 STATIC_ASSERT_SIZEOF (iavf_aq_desc_flags_t, 2);
273 IIAVF_AQ_DESC_OP_QUEUE_SHUTDOWN = 0x0003,
274 IIAVF_AQ_DESC_OP_SEND_TO_PF = 0x0801,
275 IIAVF_AQ_DESC_OP_MESSAGE_FROM_PF = 0x0802,
276 } __clib_packed iavf_aq_desc_op_t;
278 #define foreach_iavf_aq_desc_retval \
312 #define _(a, b) IIAVF_AQ_DESC_RETVAL_##b = a,
313 foreach_iavf_aq_desc_retval
315 } __clib_packed iavf_aq_desc_retval_t;
319 iavf_aq_desc_flags_t flags;
320 iavf_aq_desc_op_t opcode;
326 virtchnl_op_t v_opcode;
331 virtchnl_status_t v_retval;
335 u8 driver_unloading : 1;
351 STATIC_ASSERT_SIZEOF (iavf_aq_desc_t, 32);
360 } virtchnl_txq_info_t;
362 STATIC_ASSERT_SIZEOF (virtchnl_txq_info_t, 24);
370 u16 splithdr_enabled;
379 } virtchnl_rxq_info_t;
381 STATIC_ASSERT_SIZEOF (virtchnl_rxq_info_t, 40);
385 virtchnl_txq_info_t txq;
386 virtchnl_rxq_info_t rxq;
387 } virtchnl_queue_pair_info_t;
389 STATIC_ASSERT_SIZEOF (virtchnl_queue_pair_info_t, 64);
396 virtchnl_queue_pair_info_t qpair[1];
397 } virtchnl_vsi_queue_config_info_t;
399 STATIC_ASSERT_SIZEOF (virtchnl_vsi_queue_config_info_t, 72);
407 } virtchnl_queue_select_t;
409 STATIC_ASSERT_SIZEOF (virtchnl_queue_select_t, 12);
419 } virtchnl_vector_map_t;
424 virtchnl_vector_map_t vecmap[1];
425 } virtchnl_irq_map_info_t;
427 STATIC_ASSERT_SIZEOF (virtchnl_irq_map_info_t, 14);
442 } virtchnl_ether_addr_t;
448 virtchnl_ether_addr_t list[1];
449 } virtchnl_ether_addr_list_t;
451 #define foreach_virtchnl_eth_stats \
457 _ (rx_unknown_protocol) \
468 foreach_virtchnl_eth_stats
470 } virtchnl_eth_stats_t;
477 } virtchnl_rss_key_t;
479 STATIC_ASSERT_SIZEOF (virtchnl_rss_key_t, 6);
486 } virtchnl_rss_lut_t;
488 STATIC_ASSERT_SIZEOF (virtchnl_rss_lut_t, 6);
490 /* VIRTCHNL_OP_REQUEST_QUEUES */
494 } virtchnl_vf_res_request_t;
500 } virtchnl_vlan_supported_caps_t;
504 virtchnl_vlan_supported_caps_t filtering_support;
508 } virtchnl_vlan_filtering_caps_t;
510 typedef struct virtchnl_vlan_offload_caps
512 virtchnl_vlan_supported_caps_t stripping_support;
513 virtchnl_vlan_supported_caps_t insertion_support;
517 } virtchnl_vlan_offload_caps_t;
521 virtchnl_vlan_filtering_caps_t filtering;
522 virtchnl_vlan_offload_caps_t offloads;
523 } virtchnl_vlan_caps_t;
525 #define foreach_virtchnl_vlan_support_bit \
526 _ (0, ETHERTYPE_8100, "dot1Q") \
527 _ (1, ETHERTYPE_88A8, "dot1AD") \
528 _ (2, ETHERTYPE_9100, "QinQ") \
529 _ (8, TAG_LOCATION_L2TAG1, "l2tag1") \
530 _ (9, TAG_LOCATION_L2TAG2, "l2tag2") \
531 _ (10, TAG_LOCATION_L2TAG2_2, "l2tag2_2") \
532 _ (24, PRIO, "prio") \
533 _ (28, FILTER_MASK, "filter-mask") \
534 _ (29, ETHERTYPE_AND, "etype-and") \
535 _ (30, ETHERTYPE_XOR, "etype-xor") \
536 _ (31, TOGGLE, "toggle")
540 VIRTCHNL_VLAN_UNSUPPORTED = 0,
541 #define _(a, b, c) VIRTCHNL_VLAN_##b = (1 << a),
542 foreach_virtchnl_vlan_support_bit
544 } virtchnl_vlan_support_caps_t;
548 u32 outer_ethertype_setting;
549 u32 inner_ethertype_setting;
552 } virtchnl_vlan_setting_t;
561 u16 unicast_promisc : 1;
562 u16 multicast_promisc : 1;
566 } virtchnl_promisc_info_t;
568 STATIC_ASSERT_SIZEOF (virtchnl_promisc_info_t, 4);
570 #endif /* IAVF_VIRTCHNL_H */