2023-10-17 16:08:18 +00:00
|
|
|
/* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
* Copyright (c) 2023 Cisco Systems, Inc.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef _IIAVF_VIRTCHNL_H_
|
|
|
|
|
#define _IIAVF_VIRTCHNL_H_
|
|
|
|
|
|
|
|
|
|
#define VIRTCHNL_VERSION_MAJOR 1
|
|
|
|
|
#define VIRTCHNL_VERSION_MINOR 1
|
|
|
|
|
|
|
|
|
|
#define foreach_iavf_promisc_flags \
|
|
|
|
|
_ (0, UNICAST_PROMISC, "unicast") \
|
|
|
|
|
_ (1, MULTICAST_PROMISC, "multicast")
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
#define _(a, b, c) FLAG_VF_##b = (1 << a),
|
|
|
|
|
foreach_iavf_promisc_flags
|
|
|
|
|
#undef _
|
|
|
|
|
};
|
|
|
|
|
|
2023-11-06 00:05:57 +00:00
|
|
|
#define IAVF_VFINT_DYN_CTLN(x) (0x00003800 + (0x4 * x))
|
|
|
|
|
#define IAVF_VFINT_ICR0 0x00004800
|
|
|
|
|
#define IAVF_VFINT_ICR0_ENA1 0x00005000
|
|
|
|
|
#define IAVF_VFINT_DYN_CTL0 0x00005C00
|
|
|
|
|
#define IAVF_ARQBAH 0x00006000
|
|
|
|
|
#define IAVF_ATQH 0x00006400
|
|
|
|
|
#define IAVF_ATQLEN 0x00006800
|
|
|
|
|
#define IAVF_ARQBAL 0x00006C00
|
|
|
|
|
#define IAVF_ARQT 0x00007000
|
|
|
|
|
#define IAVF_ARQH 0x00007400
|
|
|
|
|
#define IAVF_ATQBAH 0x00007800
|
|
|
|
|
#define IAVF_ATQBAL 0x00007C00
|
|
|
|
|
#define IAVF_ARQLEN 0x00008000
|
|
|
|
|
#define IAVF_ATQT 0x00008400
|
|
|
|
|
#define IAVF_VFGEN_RSTAT 0x00008800
|
|
|
|
|
#define IAVF_QTX_TAIL(q) (0x00000000 + (0x4 * q))
|
|
|
|
|
#define IAVF_QRX_TAIL(q) (0x00002000 + (0x4 * q))
|
2023-10-17 16:08:18 +00:00
|
|
|
|
|
|
|
|
#define foreach_virtchnl_op \
|
|
|
|
|
_ (0, UNKNOWN) \
|
|
|
|
|
_ (1, VERSION) \
|
|
|
|
|
_ (2, RESET_VF) \
|
|
|
|
|
_ (3, GET_VF_RESOURCES) \
|
|
|
|
|
_ (4, CONFIG_TX_QUEUE) \
|
|
|
|
|
_ (5, CONFIG_RX_QUEUE) \
|
|
|
|
|
_ (6, CONFIG_VSI_QUEUES) \
|
|
|
|
|
_ (7, CONFIG_IRQ_MAP) \
|
|
|
|
|
_ (8, ENABLE_QUEUES) \
|
|
|
|
|
_ (9, DISABLE_QUEUES) \
|
|
|
|
|
_ (10, ADD_ETH_ADDR) \
|
|
|
|
|
_ (11, DEL_ETH_ADDR) \
|
|
|
|
|
_ (12, ADD_VLAN) \
|
|
|
|
|
_ (13, DEL_VLAN) \
|
|
|
|
|
_ (14, CONFIG_PROMISCUOUS_MODE) \
|
|
|
|
|
_ (15, GET_STATS) \
|
|
|
|
|
_ (16, RSVD) \
|
|
|
|
|
_ (17, EVENT) \
|
|
|
|
|
_ (18, UNDEF_18) \
|
|
|
|
|
_ (19, UNDEF_19) \
|
|
|
|
|
_ (20, IWARP) \
|
|
|
|
|
_ (21, CONFIG_IWARP_IRQ_MAP) \
|
|
|
|
|
_ (22, RELEASE_IWARP_IRQ_MAP) \
|
|
|
|
|
_ (23, CONFIG_RSS_KEY) \
|
|
|
|
|
_ (24, CONFIG_RSS_LUT) \
|
|
|
|
|
_ (25, GET_RSS_HENA_CAPS) \
|
|
|
|
|
_ (26, SET_RSS_HENA) \
|
|
|
|
|
_ (27, ENABLE_VLAN_STRIPPING) \
|
|
|
|
|
_ (28, DISABLE_VLAN_STRIPPING) \
|
|
|
|
|
_ (29, REQUEST_QUEUES) \
|
|
|
|
|
_ (30, ENABLE_CHANNELS) \
|
|
|
|
|
_ (31, DISABLE_CHANNELS) \
|
|
|
|
|
_ (32, ADD_CLOUD_FILTER) \
|
|
|
|
|
_ (33, DEL_CLOUD_FILTER) \
|
|
|
|
|
_ (45, ADD_RSS_CFG) \
|
|
|
|
|
_ (46, DEL_RSS_CFG) \
|
|
|
|
|
_ (47, ADD_FDIR_FILTER) \
|
|
|
|
|
_ (48, DEL_FDIR_FILTER) \
|
|
|
|
|
_ (49, QUERY_FDIR_FILTER) \
|
|
|
|
|
_ (50, GET_MAX_RSS_QREGION) \
|
|
|
|
|
_ (51, GET_OFFLOAD_VLAN_V2_CAPS) \
|
|
|
|
|
_ (52, ADD_VLAN_V2) \
|
|
|
|
|
_ (53, DEL_VLAN_V2) \
|
|
|
|
|
_ (54, ENABLE_VLAN_STRIPPING_V2) \
|
|
|
|
|
_ (55, DISABLE_VLAN_STRIPPING_V2) \
|
|
|
|
|
_ (56, ENABLE_VLAN_INSERTION_V2) \
|
|
|
|
|
_ (57, DISABLE_VLAN_INSERTION_V2) \
|
|
|
|
|
_ (58, ENABLE_VLAN_FILTERING_V2) \
|
|
|
|
|
_ (59, DISABLE_VLAN_FILTERING_V2) \
|
|
|
|
|
_ (107, ENABLE_QUEUES_V2) \
|
|
|
|
|
_ (108, DISABLE_QUEUES_V2) \
|
|
|
|
|
_ (111, MAP_QUEUE_VECTOR)
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
#define _(v, n) VIRTCHNL_OP_##n = v,
|
|
|
|
|
foreach_virtchnl_op
|
|
|
|
|
#undef _
|
|
|
|
|
VIRTCHNL_N_OPS,
|
|
|
|
|
} virtchnl_op_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_virtchnl_status \
|
|
|
|
|
_ (0, SUCCESS) \
|
|
|
|
|
_ (-5, ERR_PARAM) \
|
|
|
|
|
_ (-18, ERR_NO_MEMORY) \
|
|
|
|
|
_ (-38, ERR_OPCODE_MISMATCH) \
|
|
|
|
|
_ (-39, ERR_CQP_COMPL_ERROR) \
|
|
|
|
|
_ (-40, ERR_INVALID_VF_ID) \
|
|
|
|
|
_ (-53, ERR_ADMIN_QUEUE_ERROR) \
|
|
|
|
|
_ (-64, NOT_SUPPORTED)
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
#define _(a, b) VIRTCHNL_STATUS_##b = a,
|
|
|
|
|
foreach_virtchnl_status
|
|
|
|
|
#undef _
|
|
|
|
|
} virtchnl_status_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_iavf_vf_cap_flag \
|
|
|
|
|
_ (0, OFFLOAD_L2, "l2") \
|
|
|
|
|
_ (1, OFFLOAD_IWARP, "iwarp") \
|
|
|
|
|
_ (2, OFFLOAD_RSVD, "rsvd") \
|
|
|
|
|
_ (3, OFFLOAD_RSS_AQ, "rss-aq") \
|
|
|
|
|
_ (4, OFFLOAD_RSS_REG, "rss-reg") \
|
|
|
|
|
_ (5, OFFLOAD_WB_ON_ITR, "wb-on-itr") \
|
|
|
|
|
_ (6, OFFLOAD_REQ_QUEUES, "req-queues") \
|
|
|
|
|
_ (7, CAP_ADV_LINK_SPEED, "adv-link-speed") \
|
|
|
|
|
_ (9, LARGE_NUM_QPAIRS, "large-num-qpairs") \
|
|
|
|
|
_ (15, OFFLOAD_VLAN_V2, "vlan-v2") \
|
|
|
|
|
_ (16, OFFLOAD_VLAN, "vlan") \
|
|
|
|
|
_ (17, OFFLOAD_RX_POLLING, "rx-polling") \
|
|
|
|
|
_ (18, OFFLOAD_RSS_PCTYPE_V2, "rss-pctype-v2") \
|
|
|
|
|
_ (19, OFFLOAD_RSS_PF, "rss-pf") \
|
|
|
|
|
_ (20, OFFLOAD_ENCAP, "encap") \
|
|
|
|
|
_ (21, OFFLOAD_ENCAP_CSUM, "encap-csum") \
|
|
|
|
|
_ (22, OFFLOAD_RX_ENCAP_CSUM, "rx-encap-csum") \
|
|
|
|
|
_ (23, OFFLOAD_ADQ, "offload-adq") \
|
|
|
|
|
_ (24, OFFLOAD_ADQ_v2, "offload-adq-v2") \
|
|
|
|
|
_ (25, OFFLOAD_USO, "offload-uso") \
|
|
|
|
|
_ (26, OFFLOAD_RX_FLEX_DESC, "offload-rx-flex-desc") \
|
|
|
|
|
_ (27, OFFLOAD_ADV_RSS_PF, "offload-adv-rss-pf") \
|
|
|
|
|
_ (28, OFFLOAD_FDIR_PF, "offload-fdir-pf") \
|
|
|
|
|
_ (30, CAP_DCF, "dcf")
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
#define _(a, b, c) VIRTCHNL_VF_##b = (1 << a),
|
|
|
|
|
foreach_iavf_vf_cap_flag
|
|
|
|
|
#undef _
|
|
|
|
|
} iavf_vf_cap_flag_t;
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
VIRTCHNL_VSI_TYPE_INVALID = 0,
|
|
|
|
|
VIRTCHNL_VSI_SRIOV = 6,
|
|
|
|
|
} virtchnl_vsi_type_t;
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
VIRTCHNL_VFR_INPROGRESS = 0,
|
|
|
|
|
VIRTCHNL_VFR_COMPLETED,
|
|
|
|
|
VIRTCHNL_VFR_VFACTIVE,
|
|
|
|
|
} virtchnl_vfr_states_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 num_queue_pairs;
|
|
|
|
|
virtchnl_vsi_type_t vsi_type;
|
|
|
|
|
u16 qset_handle;
|
|
|
|
|
u8 default_mac_addr[6];
|
|
|
|
|
} virtchnl_vsi_resource_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 num_vsis;
|
|
|
|
|
u16 num_queue_pairs;
|
|
|
|
|
u16 max_vectors;
|
|
|
|
|
u16 max_mtu;
|
|
|
|
|
u32 vf_cap_flags;
|
|
|
|
|
u32 rss_key_size;
|
|
|
|
|
u32 rss_lut_size;
|
|
|
|
|
virtchnl_vsi_resource_t vsi_res[1];
|
|
|
|
|
} virtchnl_vf_resource_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_virtchnl_event_code \
|
|
|
|
|
_ (0, UNKNOWN) \
|
|
|
|
|
_ (1, LINK_CHANGE) \
|
|
|
|
|
_ (2, RESET_IMPENDING) \
|
|
|
|
|
_ (3, PF_DRIVER_CLOSE)
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
#define _(a, b) VIRTCHNL_EVENT_##b = (a),
|
|
|
|
|
foreach_virtchnl_event_code
|
|
|
|
|
#undef _
|
|
|
|
|
} virtchnl_event_codes_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_virtchnl_link_speed \
|
|
|
|
|
_ (0, 2_5GB, "2.5 Gbps") \
|
|
|
|
|
_ (1, 100MB, "100 Mbps") \
|
|
|
|
|
_ (2, 1GB, "1 Gbps") \
|
|
|
|
|
_ (3, 10GB, "10 Gbps") \
|
|
|
|
|
_ (4, 40GB, "40 Gbps") \
|
|
|
|
|
_ (5, 20GB, "20 Gbps") \
|
|
|
|
|
_ (6, 25GB, "25 Gbps") \
|
|
|
|
|
_ (7, 5GB, "5 Gbps")
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
|
|
|
|
|
#define _(a, b, c) VIRTCHNL_LINK_SPEED_##b = (1 << a),
|
|
|
|
|
foreach_virtchnl_link_speed
|
|
|
|
|
#undef _
|
|
|
|
|
} virtchnl_link_speed_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
virtchnl_event_codes_t event;
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
virtchnl_link_speed_t link_speed;
|
|
|
|
|
u8 link_status;
|
|
|
|
|
} link_event;
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
u32 link_speed;
|
|
|
|
|
u8 link_status;
|
|
|
|
|
} link_event_adv;
|
|
|
|
|
} event_data;
|
|
|
|
|
int severity;
|
|
|
|
|
} virtchnl_pf_event_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_pf_event_t, 16);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u32 major;
|
|
|
|
|
u32 minor;
|
|
|
|
|
} virtchnl_version_info_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_iavf_aq_desc_flag \
|
|
|
|
|
_ (1, dd) \
|
|
|
|
|
_ (1, cmp) \
|
|
|
|
|
_ (1, err) \
|
|
|
|
|
_ (1, vfe) \
|
|
|
|
|
_ (5, reserved) \
|
|
|
|
|
_ (1, lb) \
|
|
|
|
|
_ (1, rd) \
|
|
|
|
|
_ (1, vfc) \
|
|
|
|
|
_ (1, buf) \
|
|
|
|
|
_ (1, si) \
|
|
|
|
|
_ (1, ie) \
|
|
|
|
|
_ (1, fe)
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
{
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
#define _(n, s) u16 s : n;
|
|
|
|
|
foreach_iavf_aq_desc_flag
|
|
|
|
|
#undef _
|
|
|
|
|
};
|
|
|
|
|
u16 as_u16;
|
|
|
|
|
} iavf_aq_desc_flags_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (iavf_aq_desc_flags_t, 2);
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
IIAVF_AQ_DESC_OP_QUEUE_SHUTDOWN = 0x0003,
|
|
|
|
|
IIAVF_AQ_DESC_OP_SEND_TO_PF = 0x0801,
|
|
|
|
|
IIAVF_AQ_DESC_OP_MESSAGE_FROM_PF = 0x0802,
|
|
|
|
|
} __clib_packed iavf_aq_desc_op_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_iavf_aq_desc_retval \
|
|
|
|
|
_ (0, OK) \
|
|
|
|
|
_ (1, EPERM) \
|
|
|
|
|
_ (2, ENOENT) \
|
|
|
|
|
_ (3, ESRCH) \
|
|
|
|
|
_ (4, EINTR) \
|
|
|
|
|
_ (5, EIO) \
|
|
|
|
|
_ (6, ENXIO) \
|
|
|
|
|
_ (7, E2BIG) \
|
|
|
|
|
_ (8, EAGAIN) \
|
|
|
|
|
_ (9, ENOMEM) \
|
|
|
|
|
_ (10, EACCES) \
|
|
|
|
|
_ (11, EFAULT) \
|
|
|
|
|
_ (12, EBUSY) \
|
|
|
|
|
_ (13, EEXIST) \
|
|
|
|
|
_ (14, EINVAL) \
|
|
|
|
|
_ (15, ENOTTY) \
|
|
|
|
|
_ (16, ENOSPC) \
|
|
|
|
|
_ (17, ENOSYS) \
|
|
|
|
|
_ (18, ERANGE) \
|
|
|
|
|
_ (19, EFLUSHED) \
|
|
|
|
|
_ (20, BAD_ADDR) \
|
|
|
|
|
_ (21, EMODE) \
|
|
|
|
|
_ (22, EFBIG) \
|
|
|
|
|
_ (23, ESBCOMP) \
|
|
|
|
|
_ (24, ENOSEC) \
|
|
|
|
|
_ (25, EBADSIG) \
|
|
|
|
|
_ (26, ESVN) \
|
|
|
|
|
_ (27, EBADMAN) \
|
|
|
|
|
_ (28, EBADBUF) \
|
|
|
|
|
_ (29, EACCES_BMCU)
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
#define _(a, b) IIAVF_AQ_DESC_RETVAL_##b = a,
|
|
|
|
|
foreach_iavf_aq_desc_retval
|
|
|
|
|
#undef _
|
|
|
|
|
} __clib_packed iavf_aq_desc_retval_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
iavf_aq_desc_flags_t flags;
|
|
|
|
|
iavf_aq_desc_op_t opcode;
|
|
|
|
|
u16 datalen;
|
|
|
|
|
u16 retval;
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
u32 cookie_hi;
|
|
|
|
|
virtchnl_op_t v_opcode;
|
|
|
|
|
};
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
u32 cookie_lo;
|
|
|
|
|
virtchnl_status_t v_retval;
|
|
|
|
|
};
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
u8 driver_unloading : 1;
|
|
|
|
|
u32 param0;
|
|
|
|
|
};
|
|
|
|
|
u32 param1;
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
u32 param2;
|
|
|
|
|
u32 addr_hi;
|
|
|
|
|
};
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
u32 param3;
|
|
|
|
|
u32 addr_lo;
|
|
|
|
|
};
|
|
|
|
|
} iavf_aq_desc_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (iavf_aq_desc_t, 32);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 queue_id;
|
|
|
|
|
u16 ring_len;
|
|
|
|
|
u64 dma_ring_addr;
|
|
|
|
|
u64 dma_headwb_addr;
|
|
|
|
|
} virtchnl_txq_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_txq_info_t, 24);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 queue_id;
|
|
|
|
|
u32 ring_len;
|
|
|
|
|
u16 hdr_size;
|
|
|
|
|
u16 splithdr_enabled;
|
|
|
|
|
u32 databuffer_size;
|
|
|
|
|
u32 max_pkt_size;
|
|
|
|
|
u8 crc_disable;
|
|
|
|
|
u8 rxdid;
|
|
|
|
|
u8 pad[2];
|
|
|
|
|
u64 dma_ring_addr;
|
|
|
|
|
i32 rx_split_pos;
|
|
|
|
|
u32 pad2;
|
|
|
|
|
} virtchnl_rxq_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_rxq_info_t, 40);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
virtchnl_txq_info_t txq;
|
|
|
|
|
virtchnl_rxq_info_t rxq;
|
|
|
|
|
} virtchnl_queue_pair_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_queue_pair_info_t, 64);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 num_queue_pairs;
|
|
|
|
|
u32 pad;
|
|
|
|
|
virtchnl_queue_pair_info_t qpair[1];
|
|
|
|
|
} virtchnl_vsi_queue_config_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_vsi_queue_config_info_t, 72);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 pad;
|
|
|
|
|
u32 rx_queues;
|
|
|
|
|
u32 tx_queues;
|
|
|
|
|
} virtchnl_queue_select_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_queue_select_t, 12);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 vector_id;
|
|
|
|
|
u16 rxq_map;
|
|
|
|
|
u16 txq_map;
|
|
|
|
|
u16 rxitr_idx;
|
|
|
|
|
u16 txitr_idx;
|
|
|
|
|
} virtchnl_vector_map_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 num_vectors;
|
|
|
|
|
virtchnl_vector_map_t vecmap[1];
|
|
|
|
|
} virtchnl_irq_map_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_irq_map_info_t, 14);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u8 addr[6];
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
u8 primary : 1;
|
|
|
|
|
u8 extra : 1;
|
|
|
|
|
};
|
|
|
|
|
u8 type;
|
|
|
|
|
};
|
|
|
|
|
u8 pad[1];
|
|
|
|
|
} virtchnl_ether_addr_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 num_elements;
|
|
|
|
|
virtchnl_ether_addr_t list[1];
|
|
|
|
|
} virtchnl_ether_addr_list_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_virtchnl_eth_stats \
|
|
|
|
|
_ (rx_bytes) \
|
|
|
|
|
_ (rx_unicast) \
|
|
|
|
|
_ (rx_multicast) \
|
|
|
|
|
_ (rx_broadcast) \
|
|
|
|
|
_ (rx_discards) \
|
|
|
|
|
_ (rx_unknown_protocol) \
|
|
|
|
|
_ (tx_bytes) \
|
|
|
|
|
_ (tx_unicast) \
|
|
|
|
|
_ (tx_multicast) \
|
|
|
|
|
_ (tx_broadcast) \
|
|
|
|
|
_ (tx_discards) \
|
|
|
|
|
_ (tx_errors)
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
#define _(s) u64 s;
|
|
|
|
|
foreach_virtchnl_eth_stats
|
|
|
|
|
#undef _
|
|
|
|
|
} virtchnl_eth_stats_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 key_len;
|
|
|
|
|
u8 key[1];
|
|
|
|
|
} virtchnl_rss_key_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_rss_key_t, 6);
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
u16 lut_entries;
|
|
|
|
|
u8 lut[1];
|
|
|
|
|
} virtchnl_rss_lut_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_rss_lut_t, 6);
|
|
|
|
|
|
|
|
|
|
/* VIRTCHNL_OP_REQUEST_QUEUES */
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 num_queue_pairs;
|
|
|
|
|
} virtchnl_vf_res_request_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u32 outer;
|
|
|
|
|
u32 inner;
|
|
|
|
|
} virtchnl_vlan_supported_caps_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
virtchnl_vlan_supported_caps_t filtering_support;
|
|
|
|
|
u32 ethertype_init;
|
|
|
|
|
u16 max_filters;
|
|
|
|
|
u8 pad[2];
|
|
|
|
|
} virtchnl_vlan_filtering_caps_t;
|
|
|
|
|
|
|
|
|
|
typedef struct virtchnl_vlan_offload_caps
|
|
|
|
|
{
|
|
|
|
|
virtchnl_vlan_supported_caps_t stripping_support;
|
|
|
|
|
virtchnl_vlan_supported_caps_t insertion_support;
|
|
|
|
|
u32 ethertype_init;
|
|
|
|
|
u8 ethertype_match;
|
|
|
|
|
u8 pad[3];
|
|
|
|
|
} virtchnl_vlan_offload_caps_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
virtchnl_vlan_filtering_caps_t filtering;
|
|
|
|
|
virtchnl_vlan_offload_caps_t offloads;
|
|
|
|
|
} virtchnl_vlan_caps_t;
|
|
|
|
|
|
|
|
|
|
#define foreach_virtchnl_vlan_support_bit \
|
|
|
|
|
_ (0, ETHERTYPE_8100, "dot1Q") \
|
|
|
|
|
_ (1, ETHERTYPE_88A8, "dot1AD") \
|
|
|
|
|
_ (2, ETHERTYPE_9100, "QinQ") \
|
|
|
|
|
_ (8, TAG_LOCATION_L2TAG1, "l2tag1") \
|
|
|
|
|
_ (9, TAG_LOCATION_L2TAG2, "l2tag2") \
|
|
|
|
|
_ (10, TAG_LOCATION_L2TAG2_2, "l2tag2_2") \
|
|
|
|
|
_ (24, PRIO, "prio") \
|
|
|
|
|
_ (28, FILTER_MASK, "filter-mask") \
|
|
|
|
|
_ (29, ETHERTYPE_AND, "etype-and") \
|
|
|
|
|
_ (30, ETHERTYPE_XOR, "etype-xor") \
|
|
|
|
|
_ (31, TOGGLE, "toggle")
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
VIRTCHNL_VLAN_UNSUPPORTED = 0,
|
|
|
|
|
#define _(a, b, c) VIRTCHNL_VLAN_##b = (1 << a),
|
|
|
|
|
foreach_virtchnl_vlan_support_bit
|
|
|
|
|
#undef _
|
|
|
|
|
} virtchnl_vlan_support_caps_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u32 outer_ethertype_setting;
|
|
|
|
|
u32 inner_ethertype_setting;
|
|
|
|
|
u16 vport_id;
|
|
|
|
|
u8 pad[6];
|
|
|
|
|
} virtchnl_vlan_setting_t;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
u16 vsi_id;
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
u16 unicast_promisc : 1;
|
|
|
|
|
u16 multicast_promisc : 1;
|
|
|
|
|
};
|
|
|
|
|
u16 flags;
|
|
|
|
|
};
|
|
|
|
|
} virtchnl_promisc_info_t;
|
|
|
|
|
|
|
|
|
|
STATIC_ASSERT_SIZEOF (virtchnl_promisc_info_t, 4);
|
|
|
|
|
|
|
|
|
|
#endif /* IAVF_VIRTCHNL_H */
|