diff options
author | Ting Xu <ting.xu@intel.com> | 2022-12-15 02:10:59 +0000 |
---|---|---|
committer | Dave Wallace <dwallacelf@gmail.com> | 2023-08-17 01:37:44 +0000 |
commit | 737edea328d701e33cde6ad9601e546ded6dd08f (patch) | |
tree | 5764c71d4209b90654c9e4395eedb1fb23cc3fa5 /src/plugins/idpf/virtchnl2.h | |
parent | cc22d38100ee7d2c03289457095baa85583c762a (diff) |
idpf: add native idpf driver plugin
Add a new native idpf driver. This patch enables the device
initialization. Add some necessary functions and definations
for input and output. A new version of virtchnl is introduced.
Type: feature
Signed-off-by: Ting Xu <ting.xu@intel.com>
Change-Id: Ibbd9cd645e64469f1c4c8b33346c1301be3f6927
Diffstat (limited to 'src/plugins/idpf/virtchnl2.h')
-rw-r--r-- | src/plugins/idpf/virtchnl2.h | 855 |
1 files changed, 855 insertions, 0 deletions
diff --git a/src/plugins/idpf/virtchnl2.h b/src/plugins/idpf/virtchnl2.h new file mode 100644 index 00000000000..8db68483f22 --- /dev/null +++ b/src/plugins/idpf/virtchnl2.h @@ -0,0 +1,855 @@ +/* + *------------------------------------------------------------------ + * Copyright (c) 2023 Intel and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------ + */ + +#ifndef _IDPF_VIRTCHNL_H_ +#define _IDPF_VIRTCHNL_H_ + +#include <idpf/virtchnl2_lan_desc.h> + +#define foreach_virtchnl2_status \ + _ (0, SUCCESS) \ + _ (-5, ERR_PARAM) \ + _ (-38, ERR_OPCODE_MISMATCH) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_STATUS_##n = v, + foreach_virtchnl2_status +#undef _ +} virtchnl2_status_t; + +#define foreach_virtchnl2_op \ + _ (0, UNKNOWN) \ + _ (1, VERSION) \ + _ (500, GET_CAPS) \ + _ (501, CREATE_VPORT) \ + _ (502, DESTROY_VPORT) \ + _ (503, ENABLE_VPORT) \ + _ (504, DISABLE_VPORT) \ + _ (505, CONFIG_TX_QUEUES) \ + _ (506, CONFIG_RX_QUEUES) \ + _ (507, ENABLE_QUEUES) \ + _ (508, DISABLE_QUEUES) \ + _ (509, ADD_QUEUES) \ + _ (510, DEL_QUEUES) \ + _ (511, MAP_QUEUE_VECTOR) \ + _ (512, UNMAP_QUEUE_VECTOR) \ + _ (513, GET_RSS_KEY) \ + _ (514, SET_RSS_KEY) \ + _ (515, GET_RSS_LUT) \ + _ (516, SET_RSS_LUT) \ + _ (517, GET_RSS_HASH) \ + _ (518, SET_RSS_HASH) \ + _ (519, SET_SRIOV_VFS) \ + _ (520, ALLOC_VECTORS) \ + _ (521, DEALLOC_VECTORS) \ + _ (522, EVENT) \ + _ (523, GET_STATS) \ + _ (524, RESET_VF) \ + _ (526, GET_PTYPE_INFO) \ + _ (532, CREATE_ADI) \ + _ (533, DESTROY_ADI) \ + _ (534, LOOPBACK) \ + _ (535, ADD_MAC_ADDR) \ + _ (536, DEL_MAC_ADDR) \ + _ (537, CONFIG_PROMISCUOUS_MODE) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_OP_##n = v, + foreach_virtchnl2_op +#undef _ +} virtchnl2_op_t; + +/* VIRTCHNL2_VPORT_TYPE + * Type of virtual port + */ +#define foreach_virtchnl2_vport_type \ + _ (0, DEFAULT) \ + _ (1, SRIOV) \ + _ (2, SIOV) \ + _ (3, SUBDEV) \ + _ (4, MNG) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_VPORT_TYPE_##n = v, + foreach_virtchnl2_vport_type +#undef _ +} virtchnl2_vport_type_t; + +/* VIRTCHNL2_QUEUE_MODEL + * Type of queue model + */ +#define VIRTCHNL2_QUEUE_MODEL_SINGLE 0 +#define VIRTCHNL2_QUEUE_MODEL_SPLIT 1 + +#define foreach_idpf_checksum_cap_flag \ + _ (0, TX_CSUM_L3_IPV4, "tx-csum-l3-ipv4") \ + _ (1, TX_CSUM_L4_IPV4_TCP, "tx-csum-l4-ipv4-tcp") \ + _ (2, TX_CSUM_L4_IPV4_UDP, "tx-csum-l4-ipv4-udp") \ + _ (3, TX_CSUM_L4_IPV4_SCTP, "tx-csum-l4-ipv4-sctp") \ + _ (4, TX_CSUM_L4_IPV6_TCP, "tx-csum-l4-ipv6-tcp") \ + _ (5, TX_CSUM_L4_IPV6_UDP, "tx-csum-l4-ipv6-udp") \ + _ (6, TX_CSUM_L4_IPV6_SCTP, "tx-csum-l4-ipv6-sctp") \ + _ (7, TX_CSUM_GENERIC, "tx-csum-generic") \ + _ (8, RX_CSUM_L3_IPV4, "rx-csum-l3-ipv4") \ + _ (9, RX_CSUM_L4_IPV4_TCP, "rx-csum-l4-ipv4-tcp") \ + _ (10, RX_CSUM_L4_IPV4_UDP, "rx-csum-l4-ipv4-udp") \ + _ (11, RX_CSUM_L4_IPV4_SCTP, "rx-csum-l4-ipv4-sctp") \ + _ (12, RX_CSUM_L4_IPV6_TCP, "rx-csum-l4-ipv6-tcp") \ + _ (13, RX_CSUM_L4_IPV6_UDP, "rx-csum-l4-ipv6-udp") \ + _ (14, RX_CSUM_L4_IPV6_SCTP, "rx-csum-l4-ipv6-sctp") \ + _ (15, RX_CSUM_GENERIC, "rx-csum-generic") \ + _ (16, TX_CSUM_L3_SINGLE_TUNNEL, "tx-csum-l3-single-tunnel") \ + _ (17, TX_CSUM_L3_DOUBLE_TUNNEL, "tx-csum-l3-double-tunnel") \ + _ (18, RX_CSUM_L3_SINGLE_TUNNEL, "rx-csum-l3-single-tunnel") \ + _ (19, RX_CSUM_L3_DOUBLE_TUNNEL, "rx-csum-l3-double-tunnel") \ + _ (20, TX_CSUM_L4_SINGLE_TUNNEL, "tx-csum-l4-single-tunnel") \ + _ (21, TX_CSUM_L4_DOUBLE_TUNNEL, "tx-csum-l4-double-tunnel") \ + _ (22, RX_CSUM_L4_SINGLE_TUNNEL, "rx-csum-l4-single-tunnel") \ + _ (23, RX_CSUM_L4_DOUBLE_TUNNEL, "rx-csum-l4-double-tunnel") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_##b = (1 << a), + foreach_idpf_checksum_cap_flag +#undef _ +} idpf_checksum_cap_flag_t; + +#define foreach_idpf_seg_cap_flag \ + _ (0, IPV4_TCP, "ipv4-tcp") \ + _ (1, IPV4_UDP, "ipv4-udp") \ + _ (2, IPV4_SCTP, "ipv4-sctp") \ + _ (3, IPV6_TCP, "ipv6-tcp") \ + _ (4, IPV6_UDP, "ipv6-udp") \ + _ (5, IPV6_SCTP, "ipv6-sctp") \ + _ (6, GENERIC, "generic") \ + _ (7, TX_SINGLE_TUNNEL, "tx-single-tunnel") \ + _ (8, TX_DOUBLE_TUNNEL, "tx-double-tunnel") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_SEG_##b = (1 << a), + foreach_idpf_seg_cap_flag +#undef _ +} idpf_seg_cap_flag_t; + +#define foreach_idpf_rss_cap_flag \ + _ (0, IPV4_TCP, "ipv4-tcp") \ + _ (1, IPV4_UDP, "ipv4-udp") \ + _ (2, IPV4_SCTP, "ipv4-sctp") \ + _ (3, IPV4_OTHER, "ipv4-other") \ + _ (4, IPV6_TCP, "ipv6-tcp") \ + _ (5, IPV6_UDP, "ipv6-udp") \ + _ (6, IPV6_SCTP, "ipv6-sctp") \ + _ (7, IPV6_OTHER, "ipv6-other") \ + _ (8, IPV4_AH, "ipv4-ah") \ + _ (9, IPV4_ESP, "ipv4-esp") \ + _ (10, IPV4_AH_ESP, "ipv4-ah-esp") \ + _ (11, IPV6_AH, "ipv6-ah") \ + _ (12, IPV6_ESP, "ipv6-esp") \ + _ (13, IPV6_AH_ESP, "ipv6-ah-esp") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_RSS_##b = (1 << a), + foreach_idpf_rss_cap_flag +#undef _ +} idpf_rss_cap_flag_t; + +#define foreach_idpf_hsplit_cap_flag \ + _ (0, AT_L2, "at-l2") \ + _ (1, AT_L3, "at-l3") \ + _ (2, AT_L4V4, "at-l4v4") \ + _ (3, AT_L4V6, "at-l4v6") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_RX_HSPLIT_##b = (1 << a), + foreach_idpf_hsplit_cap_flag +#undef _ +} idpf_hsplit_cap_flag_t; + +#define foreach_idpf_rsc_cap_flag \ + _ (0, IPV4_TCP, "ipv4-tcp") \ + _ (1, IPV4_SCTP, "ipv4-sctp") \ + _ (2, IPV6_TCP, "ipv6-tcp") \ + _ (3, IPV6_SCTP, "ipv6-sctp") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_RSC_##b = (1 << a), + foreach_idpf_rsc_cap_flag +#undef _ +} idpf_rsc_cap_flag_t; + +#define foreach_idpf_other_cap_flag \ + _ (0, RDMA, "rdma") \ + _ (1, SRIOV, "sriov") \ + _ (2, MACFILTER, "macfilter") \ + _ (3, FLOW_DIRECTOR, "flow-director") \ + _ (4, SPLITQ_QSCHED, "spliteq-qsched") \ + _ (5, CRC, "crc") \ + _ (6, ADQ, "adq") \ + _ (7, WB_ON_ITR, "wb-on-itr") \ + _ (8, PROMISC, "promisc") \ + _ (9, LINK_SPEED, "link-speed") \ + _ (10, INLINE_IPSEC, "inline-ipsec") \ + _ (11, LARGE_NUM_QUEUES, "large-num-queues") \ + _ (12, VLAN, "vlan") \ + _ (13, PTP, "ptp") \ + _ (15, ADV_RSS, "adv-rss") \ + _ (16, FDIR, "fdir") \ + _ (17, RX_FLEX_DESC, "rx-flex-desc") \ + _ (18, PTYPE, "ptype") \ + _ (19, LOOPBACK, "loopback") \ + _ (20, OEM, "oem") + +typedef enum +{ +#define _(a, b, c) VIRTCHNL2_CAP_##b = (1 << a), + foreach_idpf_other_cap_flag +#undef _ +} idpf_other_cap_flag_t; + +#define VIRTCHNL2_TXQ_SCHED_MODE_QUEUE 0 +#define VIRTCHNL2_TXQ_SCHED_MODE_FLOW 1 + +#define VIRTCHNL2_TXQ_ENABLE_MISS_COMPL BIT (0) + +#define VIRTCHNL2_RDMA_CPF 0 +#define VIRTCHNL2_NVME_CPF 1 +#define VIRTCHNL2_ATE_CPF 2 +#define VIRTCHNL2_LCE_CPF 3 + +#define VIRTCHNL2_RXQ_RSC BIT (0) +#define VIRTCHNL2_RXQ_HDR_SPLIT BIT (1) +#define VIRTCHNL2_RXQ_IMMEDIATE_WRITE_BACK BIT (2) +#define VIRTCHNL2_RX_DESC_SIZE_16BYTE BIT (3) +#define VIRTCHNL2_RX_DESC_SIZE_32BYTE BIT (4) + +#define foreach_virtchnl2_rss_alg \ + _ (0, TOEPLITZ_ASYMMETRIC) \ + _ (1, R_ASYMMETRIC) \ + _ (2, TOEPLITZ_SYMMETRIC) \ + _ (3, XOR_SYMMETRIC) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_RSS_ALG_##n = v, + foreach_virtchnl2_rss_alg +#undef _ +} virtchnl2_rss_alg_t; + +#define foreach_virtchnl2_event \ + _ (0, UNKNOWN) \ + _ (1, LINK_CHANGE) \ + _ (2, START_RESET_ADI) \ + _ (3, FINISH_RESET_ADI) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_EVENT_##n = v, + foreach_virtchnl2_event +#undef _ +} virtchnl2_event_name_t; + +#define foreach_idpf_queue_type \ + _ (0, TX) \ + _ (1, RX) \ + _ (2, TX_COMPLETION) \ + _ (3, RX_BUFFER) \ + _ (4, CONFIG_TX) \ + _ (5, CONFIG_RX) \ + _ (6, P2P_TX) \ + _ (7, P2P_RX) \ + _ (8, P2P_TX_COMPLETION) \ + _ (9, P2P_RX_BUFFER) \ + _ (10, MBX_TX) \ + _ (11, MBX_RX) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_QUEUE_TYPE_##n = v, + foreach_idpf_queue_type +#undef _ +} idpf_queue_type_t; + +#define foreach_virtchnl2_itr_idx \ + _ (0, 0) \ + _ (1, 1) \ + _ (2, 2) \ + _ (3, NO_ITR) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_ITR_IDX_##n = v, + foreach_virtchnl2_itr_idx +#undef _ +} virtchnl2_itr_idx_t; + +#define VIRTCHNL2_MAC_ADDR_PRIMARY 1 +#define VIRTCHNL2_MAC_ADDR_EXTRA 2 + +#define VIRTCHNL2_UNICAST_PROMISC BIT (0) +#define VIRTCHNL2_MULTICAST_PROMISC BIT (1) + +#define foreach_virtchnl2_proto_hdr \ + _ (0, ANY) \ + _ (1, PRE_MAC) \ + _ (2, MAC) \ + _ (3, POST_MAC) \ + _ (4, ETHERTYPE) \ + _ (5, VLAN) \ + _ (6, SVLAN) \ + _ (7, CVLAN) \ + _ (8, MPLS) \ + _ (9, UMPLS) \ + _ (10, MMPLS) \ + _ (11, PTP) \ + _ (12, CTRL) \ + _ (13, LLDP) \ + _ (14, ARP) \ + _ (15, ECP) \ + _ (16, EAPOL) \ + _ (17, PPPOD) \ + _ (18, PPPOE) \ + _ (19, IPV4) \ + _ (20, IPV4_FRAG) \ + _ (21, IPV6) \ + _ (22, IPV6_FRAG) \ + _ (23, IPV6_EH) \ + _ (24, UDP) \ + _ (25, TCP) \ + _ (26, SCTP) \ + _ (27, ICMP) \ + _ (28, ICMPV6) \ + _ (29, IGMP) \ + _ (30, AH) \ + _ (31, ESP) \ + _ (32, IKE) \ + _ (33, NATT_KEEP) \ + _ (34, PAY) \ + _ (35, L2TPV2) \ + _ (36, L2TPV2_CONTROL) \ + _ (37, L2TPV3) \ + _ (38, GTP) \ + _ (39, GTP_EH) \ + _ (40, GTPCV2) \ + _ (41, GTPC_TEID) \ + _ (42, GTPU) \ + _ (43, GTPU_UL) \ + _ (44, GTPU_DL) \ + _ (45, ECPRI) \ + _ (46, VRRP) \ + _ (47, OSPF) \ + _ (48, TUN) \ + _ (49, GRE) \ + _ (50, NVGRE) \ + _ (51, VXLAN) \ + _ (52, VXLAN_GPE) \ + _ (53, GENEVE) \ + _ (54, NSH) \ + _ (55, QUIC) \ + _ (56, PFCP) \ + _ (57, PFCP_NODE) \ + _ (58, PFCP_SESSION) \ + _ (59, RTP) \ + _ (60, ROCE) \ + _ (61, ROCEV1) \ + _ (62, ROCEV2) \ + _ (65535, NO_PROTO) + +typedef enum +{ +#define _(v, n) VIRTCHNL2_PROTO_HDR_##n = v, + foreach_virtchnl2_proto_hdr +#undef _ +} virtchnl2_proto_hdr_t; + +#define VIRTCHNL2_VERSION_MAJOR_2 2 +#define VIRTCHNL2_VERSION_MINOR_0 0 + +typedef struct +{ + u32 major; + u32 minor; +} virtchnl2_version_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_version_info_t, 8); + +typedef struct +{ + u32 csum_caps; + u32 seg_caps; + u32 hsplit_caps; + u32 rsc_caps; + u64 rss_caps; + u64 other_caps; + + u32 mailbox_dyn_ctl; + u16 mailbox_vector_id; + u16 num_allocated_vectors; + + u16 max_rx_q; + u16 max_tx_q; + u16 max_rx_bufq; + u16 max_tx_complq; + + u16 max_sriov_vfs; + + u16 max_vports; + u16 default_num_vports; + + u16 max_tx_hdr_size; + + u8 max_sg_bufs_per_tx_pkt; + + u8 itr_idx_map; + + u16 pad1; + + u16 oem_cp_ver_major; + u16 oem_cp_ver_minor; + u32 device_type; + + u8 reserved[12]; +} virtchnl2_get_capabilities_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_get_capabilities_t, 80); + +typedef struct +{ + /* see VIRTCHNL2_QUEUE_TYPE definitions */ + u32 type; + u32 start_queue_id; + u32 num_queues; + u32 pad; + + /* Queue tail register offset and spacing provided by CP */ + u64 qtail_reg_start; + u32 qtail_reg_spacing; + + u8 reserved[4]; +} virtchnl2_queue_reg_chunk_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_reg_chunk_t, 32); + +/* structure to specify several chunks of contiguous queues */ +typedef struct +{ + u16 num_chunks; + u8 reserved[6]; + virtchnl2_queue_reg_chunk_t chunks[1]; +} virtchnl2_queue_reg_chunks_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_reg_chunks_t, 40); + +#define VIRTCHNL2_ETH_LENGTH_OF_ADDRESS 6 + +typedef struct +{ + u16 vport_type; + u16 txq_model; + u16 rxq_model; + u16 num_tx_q; + u16 num_tx_complq; + u16 num_rx_q; + u16 num_rx_bufq; + u16 default_rx_q; + u16 vport_index; + + u16 max_mtu; + u32 vport_id; + u8 default_mac_addr[VIRTCHNL2_ETH_LENGTH_OF_ADDRESS]; + u16 pad; + u64 rx_desc_ids; + u64 tx_desc_ids; + +#define MAX_Q_REGIONS 16 + u32 max_qs_per_qregion[MAX_Q_REGIONS]; + u32 qregion_total_qs; + u16 qregion_type; + u16 pad2; + + u32 rss_algorithm; + u16 rss_key_size; + u16 rss_lut_size; + + u32 rx_split_pos; + + u8 reserved[20]; + virtchnl2_queue_reg_chunks_t chunks; +} virtchnl2_create_vport_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_create_vport_t, 192); + +typedef struct +{ + u32 vport_id; + u8 reserved[4]; +} virtchnl2_vport_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_vport_t, 8); + +typedef struct +{ + u64 dma_ring_addr; + u32 type; + u32 queue_id; + u16 relative_queue_id; + u16 model; + u16 sched_mode; + u16 qflags; + u16 ring_len; + + u16 tx_compl_queue_id; + u16 peer_type; + u16 peer_rx_queue_id; + + u16 qregion_id; + u8 pad[2]; + + u32 egress_pasid; + u32 egress_hdr_pasid; + u32 egress_buf_pasid; + + u8 reserved[8]; +} virtchnl2_txq_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_txq_info_t, 56); + +typedef struct +{ + u32 vport_id; + u16 num_qinfo; + + u8 reserved[10]; + virtchnl2_txq_info_t qinfo[1]; +} virtchnl2_config_tx_queues_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_config_tx_queues_t, 72); + +/* Receive queue config info */ +typedef struct +{ + u64 desc_ids; + u64 dma_ring_addr; + + u32 type; + u32 queue_id; + + u16 model; + + u16 hdr_buffer_size; + u32 data_buffer_size; + u32 max_pkt_size; + + u16 ring_len; + u8 buffer_notif_stride; + u8 pad[1]; + + u64 dma_head_wb_addr; + + u16 qflags; + + u16 rx_buffer_low_watermark; + + u16 rx_bufq1_id; + u16 rx_bufq2_id; + u8 bufq2_ena; + u8 pad2; + + u16 qregion_id; + + u32 ingress_pasid; + u32 ingress_hdr_pasid; + u32 ingress_buf_pasid; + + u8 reserved[16]; +} virtchnl2_rxq_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_rxq_info_t, 88); + +typedef struct +{ + u32 vport_id; + u16 num_qinfo; + + u8 reserved[18]; + virtchnl2_rxq_info_t qinfo[1]; +} virtchnl2_config_rx_queues_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_config_rx_queues_t, 112); + +typedef struct +{ + u32 vport_id; + u16 num_tx_q; + u16 num_tx_complq; + u16 num_rx_q; + u16 num_rx_bufq; + u8 reserved[4]; + virtchnl2_queue_reg_chunks_t chunks; +} virtchnl2_add_queues_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_add_queues_t, 56); + +typedef struct +{ + u16 start_vector_id; + u16 start_evv_id; + u16 num_vectors; + u16 pad1; + + u32 dynctl_reg_start; + u32 dynctl_reg_spacing; + + u32 itrn_reg_start; + u32 itrn_reg_spacing; + u8 reserved[8]; +} virtchnl2_vector_chunk_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_vector_chunk_t, 32); + +typedef struct +{ + u16 num_vchunks; + u8 reserved[14]; + virtchnl2_vector_chunk_t vchunks[1]; +} virtchnl2_vector_chunks_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_vector_chunks_t, 48); + +typedef struct +{ + u16 num_vectors; + u8 reserved[14]; + virtchnl2_vector_chunks_t vchunks; +} virtchnl2_alloc_vectors_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_alloc_vectors_t, 64); + +typedef struct +{ + u32 vport_id; + u16 lut_entries_start; + u16 lut_entries; + u8 reserved[4]; + u32 lut[1]; /* RSS lookup table */ +} virtchnl2_rss_lut_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_rss_lut_t, 16); + +typedef struct +{ + /* Packet Type Groups bitmap */ + u64 ptype_groups; + u32 vport_id; + u8 reserved[4]; +} virtchnl2_rss_hash_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_rss_hash_t, 16); + +typedef struct +{ + u16 num_vfs; + u16 pad; +} virtchnl2_sriov_vfs_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_sriov_vfs_info_t, 4); + +typedef struct +{ + u32 pasid; + u16 mbx_id; + u16 mbx_vec_id; + u16 adi_id; + u8 reserved[64]; + u8 pad[6]; + virtchnl2_queue_reg_chunks_t chunks; + virtchnl2_vector_chunks_t vchunks; +} virtchnl2_create_adi_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_create_adi_t, 168); + +typedef struct +{ + u16 adi_id; + u8 reserved[2]; +} virtchnl2_destroy_adi_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_destroy_adi_t, 4); + +typedef struct +{ + u16 ptype_id_10; + u8 ptype_id_8; + u8 proto_id_count; + u16 pad; + u16 proto_id[1]; +} virtchnl2_ptype_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_ptype_t, 8); + +typedef struct +{ + u16 start_ptype_id; + u16 num_ptypes; + u32 pad; + virtchnl2_ptype_t ptype[1]; +} virtchnl2_get_ptype_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_get_ptype_info_t, 16); + +typedef struct +{ + u32 vport_id; + u8 pad[4]; + + u64 rx_bytes; + u64 rx_unicast; + u64 rx_multicast; + u64 rx_broadcast; + u64 rx_discards; + u64 rx_errors; + u64 rx_unknown_protocol; + u64 tx_bytes; + u64 tx_unicast; + u64 tx_multicast; + u64 tx_broadcast; + u64 tx_discards; + u64 tx_errors; + u64 rx_invalid_frame_length; + u64 rx_overflow_drop; +} virtchnl2_vport_stats_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_vport_stats_t, 128); + +typedef struct +{ + u32 event; + u32 link_speed; + u32 vport_id; + u8 link_status; + u8 pad[1]; + u16 adi_id; +} virtchnl2_event_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_event_t, 16); + +typedef struct +{ + u32 vport_id; + u16 key_len; + u8 pad; + u8 key[1]; +} virtchnl2_rss_key_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_rss_key_t, 8); + +typedef struct +{ + u32 type; + u32 start_queue_id; + u32 num_queues; + u8 reserved[4]; +} virtchnl2_queue_chunk_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_chunk_t, 16); + +typedef struct +{ + u16 num_chunks; + u8 reserved[6]; + virtchnl2_queue_chunk_t chunks[1]; +} virtchnl2_queue_chunks_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_chunks_t, 24); + +typedef struct +{ + u32 vport_id; + u8 reserved[4]; + virtchnl2_queue_chunks_t chunks; +} virtchnl2_del_ena_dis_queues_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_del_ena_dis_queues_t, 32); + +typedef struct +{ + u32 queue_id; + u16 vector_id; + u8 pad[2]; + + u32 itr_idx; + + u32 queue_type; + u8 reserved[8]; +} virtchnl2_queue_vector_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_vector_t, 24); + +typedef struct +{ + u32 vport_id; + u16 num_qv_maps; + u8 pad[10]; + virtchnl2_queue_vector_t qv_maps[1]; +} virtchnl2_queue_vector_maps_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_queue_vector_maps_t, 40); + +typedef struct +{ + u32 vport_id; + u8 enable; + u8 pad[3]; +} virtchnl2_loopback_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_loopback_t, 8); + +typedef struct +{ + u8 addr[VIRTCHNL2_ETH_LENGTH_OF_ADDRESS]; + u8 type; + u8 pad; +} virtchnl2_mac_addr_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_mac_addr_t, 8); + +typedef struct +{ + u32 vport_id; + u16 num_mac_addr; + u8 pad[2]; + virtchnl2_mac_addr_t mac_addr_list[1]; +} virtchnl2_mac_addr_list_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_mac_addr_list_t, 16); + +typedef struct +{ + u32 vport_id; + u16 flags; + u8 pad[2]; +} virtchnl2_promisc_info_t; + +STATIC_ASSERT_SIZEOF (virtchnl2_promisc_info_t, 8); + +#endif /* _IDPF_VIRTCHNL_H_ */ |