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:
8 * http://www.apache.org/licenses/LICENSE-2.0
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 *------------------------------------------------------------------
18 #ifndef _AVF_VIRTCHNL_H_
19 #define _AVF_VIRTCHNL_H_
21 #define VIRTCHNL_VERSION_MAJOR 1
22 #define VIRTCHNL_VERSION_MINOR 1
24 #define foreach_avf_promisc_flags \
25 _(0, UNICAST_PROMISC, "unicast") \
26 _(1, MULTICAST_PROMISC, "multicast")
30 #define _(a, b, c) FLAG_VF_ ##b = (1 << a),
31 foreach_avf_promisc_flags
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))
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)
65 #define foreach_virtchnl_op \
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) \
80 _ (14, CONFIG_PROMISCUOUS_MODE) \
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)
121 #define _(v,n) VIRTCHNL_OP_##n = v,
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;
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")
167 #define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
168 foreach_avf_vf_cap_flag
174 VIRTCHNL_VSI_TYPE_INVALID = 0,
175 VIRTCHNL_VSI_SRIOV = 6,
176 } virtchnl_vsi_type_t;
180 VIRTCHNL_VFR_INPROGRESS = 0,
181 VIRTCHNL_VFR_COMPLETED,
182 VIRTCHNL_VFR_VFACTIVE,
183 } virtchnl_vfr_states_t;
189 virtchnl_vsi_type_t vsi_type;
191 u8 default_mac_addr[6];
192 } virtchnl_vsi_resource_t;
203 virtchnl_vsi_resource_t vsi_res[1];
204 } virtchnl_vf_resource_t;
206 #define foreach_virtchnl_event_code \
209 _(2, RESET_IMPENDING) \
210 _(3, PF_DRIVER_CLOSE)
214 #define _(a,b) VIRTCHNL_EVENT_##b = (a),
215 foreach_virtchnl_event_code
217 } virtchnl_event_codes_t;
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") \
231 VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
232 #define _(a,b,c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
233 foreach_virtchnl_link_speed
235 } virtchnl_link_speed_t;
239 virtchnl_event_codes_t event;
244 virtchnl_link_speed_t link_speed;
254 } virtchnl_pf_event_t;
256 STATIC_ASSERT_SIZEOF (virtchnl_pf_event_t, 16);
262 } virtchnl_version_info_t;
273 virtchnl_ops_t v_opcode;
278 virtchnl_status_code_t v_retval;
294 STATIC_ASSERT_SIZEOF (avf_aq_desc_t, 32);
303 } virtchnl_txq_info_t;
305 STATIC_ASSERT_SIZEOF (virtchnl_txq_info_t, 24);
313 u16 splithdr_enabled;
320 } virtchnl_rxq_info_t;
322 STATIC_ASSERT_SIZEOF (virtchnl_rxq_info_t, 40);
326 virtchnl_txq_info_t txq;
327 virtchnl_rxq_info_t rxq;
328 } virtchnl_queue_pair_info_t;
335 virtchnl_queue_pair_info_t qpair[1];
336 } virtchnl_vsi_queue_config_info_t;
338 STATIC_ASSERT_SIZEOF (virtchnl_vsi_queue_config_info_t, 72);
346 } virtchnl_queue_select_t;
348 STATIC_ASSERT_SIZEOF (virtchnl_queue_select_t, 12);
358 } virtchnl_vector_map_t;
363 virtchnl_vector_map_t vecmap[1];
364 } virtchnl_irq_map_info_t;
366 STATIC_ASSERT_SIZEOF (virtchnl_irq_map_info_t, 14);
372 } virtchnl_ether_addr_t;
378 virtchnl_ether_addr_t list[1];
379 } virtchnl_ether_addr_list_t;
381 #define foreach_virtchnl_eth_stats \
387 _(rx_unknown_protocol)\
398 foreach_virtchnl_eth_stats
400 } virtchnl_eth_stats_t;
407 } virtchnl_rss_key_t;
409 STATIC_ASSERT_SIZEOF (virtchnl_rss_key_t, 6);
416 } virtchnl_rss_lut_t;
418 STATIC_ASSERT_SIZEOF (virtchnl_rss_lut_t, 6);
420 /* VIRTCHNL_OP_REQUEST_QUEUES */
424 } virtchnl_vf_res_request_t;
430 } virtchnl_vlan_supported_caps_t;
434 virtchnl_vlan_supported_caps_t filtering_support;
438 } virtchnl_vlan_filtering_caps_t;
440 typedef struct virtchnl_vlan_offload_caps
442 virtchnl_vlan_supported_caps_t stripping_support;
443 virtchnl_vlan_supported_caps_t insertion_support;
447 } virtchnl_vlan_offload_caps_t;
451 virtchnl_vlan_filtering_caps_t filtering;
452 virtchnl_vlan_offload_caps_t offloads;
453 } virtchnl_vlan_caps_t;
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")
470 VIRTCHNL_VLAN_UNSUPPORTED = 0,
471 #define _(a, b, c) VIRTCHNL_VLAN_##b = (1 << a),
472 foreach_virtchnl_vlan_support_bit
474 } virtchnl_vlan_support_t;
478 u32 outer_ethertype_setting;
479 u32 inner_ethertype_setting;
482 } virtchnl_vlan_setting_t;
484 #endif /* AVF_VIRTCHNL_H */
487 * fd.io coding-style-patch-verification: ON
490 * eval: (c-set-style "gnu")