common/iavf: add session ID fields for L2TPv2
[dpdk.git] / drivers / common / iavf / virtchnl.h
index 1395697..3e44eca 100644 (file)
@@ -6,8 +6,9 @@
 #define _VIRTCHNL_H_
 
 /* Description:
- * This header file describes the VF-PF communication protocol used
- * by the drivers for all devices starting from our 40G product line
+ * This header file describes the Virtual Function (VF) - Physical Function
+ * (PF) communication protocol used by the drivers for all devices starting
+ * from our 40G product line
  *
  * Admin queue buffer usage:
  * desc->opcode is always aqc_opc_send_msg_to_pf
@@ -21,8 +22,8 @@
  * have a maximum of sixteen queues for all of its VSIs.
  *
  * The PF is required to return a status code in v_retval for all messages
- * except RESET_VF, which does not require any response. The return value
- * is of status_code type, defined in the shared type.h.
+ * except RESET_VF, which does not require any response. The returned value
+ * is of virtchnl_status_code type, defined in the shared type.h.
  *
  * In general, VF driver initialization should roughly follow the order of
  * these opcodes. The VF driver must first validate the API version of the
@@ -37,6 +38,8 @@
  * value in current and future projects
  */
 
+#include "virtchnl_inline_ipsec.h"
+
 /* Error Codes */
 enum virtchnl_status_code {
        VIRTCHNL_STATUS_SUCCESS                         = 0,
@@ -84,6 +87,10 @@ enum virtchnl_rx_hsplit {
        VIRTCHNL_RX_HSPLIT_SPLIT_SCTP    = 8,
 };
 
+enum virtchnl_bw_limit_type {
+       VIRTCHNL_BW_SHAPER = 0,
+};
+
 #define VIRTCHNL_ETH_LENGTH_OF_ADDRESS 6
 /* END GENERIC DEFINES */
 
@@ -128,7 +135,9 @@ enum virtchnl_ops {
        VIRTCHNL_OP_DISABLE_CHANNELS = 31,
        VIRTCHNL_OP_ADD_CLOUD_FILTER = 32,
        VIRTCHNL_OP_DEL_CLOUD_FILTER = 33,
-       /* opcodes 34, 35, 36, and 37 are reserved */
+       VIRTCHNL_OP_INLINE_IPSEC_CRYPTO = 34,
+       /* opcodes 35 and 36 are reserved */
+       VIRTCHNL_OP_DCF_CONFIG_BW = 37,
        VIRTCHNL_OP_DCF_VLAN_OFFLOAD = 38,
        VIRTCHNL_OP_DCF_CMD_DESC = 39,
        VIRTCHNL_OP_DCF_CMD_BUFF = 40,
@@ -140,7 +149,6 @@ enum virtchnl_ops {
        VIRTCHNL_OP_DEL_RSS_CFG = 46,
        VIRTCHNL_OP_ADD_FDIR_FILTER = 47,
        VIRTCHNL_OP_DEL_FDIR_FILTER = 48,
-       VIRTCHNL_OP_QUERY_FDIR_FILTER = 49,
        VIRTCHNL_OP_GET_MAX_RSS_QREGION = 50,
        VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS = 51,
        VIRTCHNL_OP_ADD_VLAN_V2 = 52,
@@ -151,6 +159,8 @@ enum virtchnl_ops {
        VIRTCHNL_OP_DISABLE_VLAN_INSERTION_V2 = 57,
        VIRTCHNL_OP_ENABLE_VLAN_FILTERING_V2 = 58,
        VIRTCHNL_OP_DISABLE_VLAN_FILTERING_V2 = 59,
+       VIRTCHNL_OP_GET_QOS_CAPS = 66,
+       VIRTCHNL_OP_CONFIG_QUEUE_TC_MAP = 67,
        VIRTCHNL_OP_ENABLE_QUEUES_V2 = 107,
        VIRTCHNL_OP_DISABLE_QUEUES_V2 = 108,
        VIRTCHNL_OP_MAP_QUEUE_VECTOR = 111,
@@ -218,10 +228,12 @@ static inline const char *virtchnl_op_str(enum virtchnl_ops v_opcode)
                return "VIRTCHNL_OP_ADD_CLOUD_FILTER";
        case VIRTCHNL_OP_DEL_CLOUD_FILTER:
                return "VIRTCHNL_OP_DEL_CLOUD_FILTER";
+       case VIRTCHNL_OP_INLINE_IPSEC_CRYPTO:
+               return "VIRTCHNL_OP_INLINE_IPSEC_CRYPTO";
        case VIRTCHNL_OP_DCF_CMD_DESC:
                return "VIRTCHNL_OP_DCF_CMD_DESC";
        case VIRTCHNL_OP_DCF_CMD_BUFF:
-               return "VIRTCHHNL_OP_DCF_CMD_BUFF";
+               return "VIRTCHNL_OP_DCF_CMD_BUFF";
        case VIRTCHNL_OP_DCF_DISABLE:
                return "VIRTCHNL_OP_DCF_DISABLE";
        case VIRTCHNL_OP_DCF_GET_VSI_MAP:
@@ -236,8 +248,6 @@ static inline const char *virtchnl_op_str(enum virtchnl_ops v_opcode)
                return "VIRTCHNL_OP_ADD_FDIR_FILTER";
        case VIRTCHNL_OP_DEL_FDIR_FILTER:
                return "VIRTCHNL_OP_DEL_FDIR_FILTER";
-       case VIRTCHNL_OP_QUERY_FDIR_FILTER:
-               return "VIRTCHNL_OP_QUERY_FDIR_FILTER";
        case VIRTCHNL_OP_GET_MAX_RSS_QREGION:
                return "VIRTCHNL_OP_GET_MAX_RSS_QREGION";
        case VIRTCHNL_OP_ENABLE_QUEUES_V2:
@@ -287,8 +297,12 @@ static inline const char *virtchnl_op_str(enum virtchnl_ops v_opcode)
 
 struct virtchnl_msg {
        u8 pad[8];                       /* AQ flags/opcode/len/retval fields */
-       enum virtchnl_ops v_opcode; /* avoid confusion with desc->opcode */
-       enum virtchnl_status_code v_retval;  /* ditto for desc->retval */
+
+       /* avoid confusion with desc->opcode */
+       enum virtchnl_ops v_opcode;
+
+       /* ditto for desc->retval */
+       enum virtchnl_status_code v_retval;
        u32 vfid;                        /* used by PF when sending to VF */
 };
 
@@ -354,7 +368,9 @@ enum virtchnl_vsi_type {
 struct virtchnl_vsi_resource {
        u16 vsi_id;
        u16 num_queue_pairs;
-       enum virtchnl_vsi_type vsi_type;
+
+       /* see enum virtchnl_vsi_type */
+       s32 vsi_type;
        u16 qset_handle;
        u8 default_mac_addr[VIRTCHNL_ETH_LENGTH_OF_ADDRESS];
 };
@@ -365,36 +381,36 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
  * VIRTCHNL_VF_OFFLOAD_L2 flag is inclusive of base mode L2 offloads including
  * TX/RX Checksum offloading and TSO for non-tunnelled packets.
  */
-#define VIRTCHNL_VF_OFFLOAD_L2                 0x00000001
-#define VIRTCHNL_VF_OFFLOAD_IWARP              0x00000002
-#define VIRTCHNL_VF_OFFLOAD_RSVD               0x00000004
-#define VIRTCHNL_VF_OFFLOAD_RSS_AQ             0x00000008
-#define VIRTCHNL_VF_OFFLOAD_RSS_REG            0x00000010
-#define VIRTCHNL_VF_OFFLOAD_WB_ON_ITR          0x00000020
-#define VIRTCHNL_VF_OFFLOAD_REQ_QUEUES         0x00000040
-#define VIRTCHNL_VF_OFFLOAD_CRC                        0x00000080
-       /* 0X00000100 is reserved */
-#define VIRTCHNL_VF_LARGE_NUM_QPAIRS           0x00000200
-#define VIRTCHNL_VF_OFFLOAD_VLAN_V2            0x00008000
-#define VIRTCHNL_VF_OFFLOAD_VLAN               0x00010000
-#define VIRTCHNL_VF_OFFLOAD_RX_POLLING         0x00020000
-#define VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2      0x00040000
-#define VIRTCHNL_VF_OFFLOAD_RSS_PF             0X00080000
-#define VIRTCHNL_VF_OFFLOAD_ENCAP              0X00100000
-#define VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM         0X00200000
-#define VIRTCHNL_VF_OFFLOAD_RX_ENCAP_CSUM      0X00400000
-#define VIRTCHNL_VF_OFFLOAD_ADQ                        0X00800000
-#define VIRTCHNL_VF_OFFLOAD_ADQ_V2             0X01000000
-#define VIRTCHNL_VF_OFFLOAD_USO                        0X02000000
-#define VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC       0X04000000
-#define VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF         0X08000000
-#define VIRTCHNL_VF_OFFLOAD_FDIR_PF            0X10000000
-       /* 0X20000000 is reserved */
-#define VIRTCHNL_VF_CAP_DCF                    0X40000000
-       /* 0X80000000 is reserved */
-
-/* Define below the capability flags that are not offloads */
-#define VIRTCHNL_VF_CAP_ADV_LINK_SPEED         0x00000080
+#define VIRTCHNL_VF_OFFLOAD_L2                 BIT(0)
+#define VIRTCHNL_VF_OFFLOAD_IWARP              BIT(1)
+#define VIRTCHNL_VF_OFFLOAD_RSVD               BIT(2)
+#define VIRTCHNL_VF_OFFLOAD_RSS_AQ             BIT(3)
+#define VIRTCHNL_VF_OFFLOAD_RSS_REG            BIT(4)
+#define VIRTCHNL_VF_OFFLOAD_WB_ON_ITR          BIT(5)
+#define VIRTCHNL_VF_OFFLOAD_REQ_QUEUES         BIT(6)
+/* used to negotiate communicating link speeds in Mbps */
+#define VIRTCHNL_VF_CAP_ADV_LINK_SPEED         BIT(7)
+#define VIRTCHNL_VF_OFFLOAD_INLINE_IPSEC_CRYPTO        BIT(8)
+#define VIRTCHNL_VF_LARGE_NUM_QPAIRS           BIT(9)
+#define VIRTCHNL_VF_OFFLOAD_CRC                        BIT(10)
+#define VIRTCHNL_VF_OFFLOAD_VLAN_V2            BIT(15)
+#define VIRTCHNL_VF_OFFLOAD_VLAN               BIT(16)
+#define VIRTCHNL_VF_OFFLOAD_RX_POLLING         BIT(17)
+#define VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2      BIT(18)
+#define VIRTCHNL_VF_OFFLOAD_RSS_PF             BIT(19)
+#define VIRTCHNL_VF_OFFLOAD_ENCAP              BIT(20)
+#define VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM         BIT(21)
+#define VIRTCHNL_VF_OFFLOAD_RX_ENCAP_CSUM      BIT(22)
+#define VIRTCHNL_VF_OFFLOAD_ADQ                        BIT(23)
+#define VIRTCHNL_VF_OFFLOAD_ADQ_V2             BIT(24)
+#define VIRTCHNL_VF_OFFLOAD_USO                        BIT(25)
+#define VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC       BIT(26)
+#define VIRTCHNL_VF_OFFLOAD_ADV_RSS_PF         BIT(27)
+#define VIRTCHNL_VF_OFFLOAD_FDIR_PF            BIT(28)
+#define VIRTCHNL_VF_OFFLOAD_QOS                BIT(29)
+#define VIRTCHNL_VF_CAP_DCF                    BIT(30)
+       /* BIT(31) is reserved */
+
 #define VF_BASE_MODE_OFFLOADS (VIRTCHNL_VF_OFFLOAD_L2 | \
                               VIRTCHNL_VF_OFFLOAD_VLAN | \
                               VIRTCHNL_VF_OFFLOAD_RSS_PF)
@@ -432,6 +448,54 @@ struct virtchnl_txq_info {
 
 VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_txq_info);
 
+/* RX descriptor IDs (range from 0 to 63) */
+enum virtchnl_rx_desc_ids {
+       VIRTCHNL_RXDID_0_16B_BASE               = 0,
+       /* 32B_BASE and FLEX_SPLITQ share desc ids as default descriptors
+        * because they can be differentiated based on queue model; e.g. single
+        * queue model can only use 32B_BASE and split queue model can only use
+        * FLEX_SPLITQ.  Having these as 1 allows them to be used as default
+        * descriptors without negotiation.
+        */
+       VIRTCHNL_RXDID_1_32B_BASE               = 1,
+       VIRTCHNL_RXDID_1_FLEX_SPLITQ            = 1,
+       VIRTCHNL_RXDID_2_FLEX_SQ_NIC            = 2,
+       VIRTCHNL_RXDID_3_FLEX_SQ_SW             = 3,
+       VIRTCHNL_RXDID_4_FLEX_SQ_NIC_VEB        = 4,
+       VIRTCHNL_RXDID_5_FLEX_SQ_NIC_ACL        = 5,
+       VIRTCHNL_RXDID_6_FLEX_SQ_NIC_2          = 6,
+       VIRTCHNL_RXDID_7_HW_RSVD                = 7,
+       /* 9 through 15 are reserved */
+       VIRTCHNL_RXDID_16_COMMS_GENERIC         = 16,
+       VIRTCHNL_RXDID_17_COMMS_AUX_VLAN        = 17,
+       VIRTCHNL_RXDID_18_COMMS_AUX_IPV4        = 18,
+       VIRTCHNL_RXDID_19_COMMS_AUX_IPV6        = 19,
+       VIRTCHNL_RXDID_20_COMMS_AUX_FLOW        = 20,
+       VIRTCHNL_RXDID_21_COMMS_AUX_TCP         = 21,
+       /* 22 through 63 are reserved */
+};
+
+/* RX descriptor ID bitmasks */
+enum virtchnl_rx_desc_id_bitmasks {
+       VIRTCHNL_RXDID_0_16B_BASE_M             = BIT(VIRTCHNL_RXDID_0_16B_BASE),
+       VIRTCHNL_RXDID_1_32B_BASE_M             = BIT(VIRTCHNL_RXDID_1_32B_BASE),
+       VIRTCHNL_RXDID_1_FLEX_SPLITQ_M          = BIT(VIRTCHNL_RXDID_1_FLEX_SPLITQ),
+       VIRTCHNL_RXDID_2_FLEX_SQ_NIC_M          = BIT(VIRTCHNL_RXDID_2_FLEX_SQ_NIC),
+       VIRTCHNL_RXDID_3_FLEX_SQ_SW_M           = BIT(VIRTCHNL_RXDID_3_FLEX_SQ_SW),
+       VIRTCHNL_RXDID_4_FLEX_SQ_NIC_VEB_M      = BIT(VIRTCHNL_RXDID_4_FLEX_SQ_NIC_VEB),
+       VIRTCHNL_RXDID_5_FLEX_SQ_NIC_ACL_M      = BIT(VIRTCHNL_RXDID_5_FLEX_SQ_NIC_ACL),
+       VIRTCHNL_RXDID_6_FLEX_SQ_NIC_2_M        = BIT(VIRTCHNL_RXDID_6_FLEX_SQ_NIC_2),
+       VIRTCHNL_RXDID_7_HW_RSVD_M              = BIT(VIRTCHNL_RXDID_7_HW_RSVD),
+       /* 9 through 15 are reserved */
+       VIRTCHNL_RXDID_16_COMMS_GENERIC_M       = BIT(VIRTCHNL_RXDID_16_COMMS_GENERIC),
+       VIRTCHNL_RXDID_17_COMMS_AUX_VLAN_M      = BIT(VIRTCHNL_RXDID_17_COMMS_AUX_VLAN),
+       VIRTCHNL_RXDID_18_COMMS_AUX_IPV4_M      = BIT(VIRTCHNL_RXDID_18_COMMS_AUX_IPV4),
+       VIRTCHNL_RXDID_19_COMMS_AUX_IPV6_M      = BIT(VIRTCHNL_RXDID_19_COMMS_AUX_IPV6),
+       VIRTCHNL_RXDID_20_COMMS_AUX_FLOW_M      = BIT(VIRTCHNL_RXDID_20_COMMS_AUX_FLOW),
+       VIRTCHNL_RXDID_21_COMMS_AUX_TCP_M       = BIT(VIRTCHNL_RXDID_21_COMMS_AUX_TCP),
+       /* 22 through 63 are reserved */
+};
+
 /* VIRTCHNL_OP_CONFIG_RX_QUEUE
  * VF sends this message to set up parameters for one RX queue.
  * External data buffer contains one instance of virtchnl_rxq_info.
@@ -454,11 +518,17 @@ struct virtchnl_rxq_info {
        u32 databuffer_size;
        u32 max_pkt_size;
        u8 crc_disable;
-       /* only used when VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC is supported */
+       /* see enum virtchnl_rx_desc_ids;
+        * only used when VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC is supported. Note
+        * that when the offload is not supported, the descriptor format aligns
+        * with VIRTCHNL_RXDID_1_32B_BASE.
+        */
        u8 rxdid;
        u8 pad1[2];
        u64 dma_ring_addr;
-       enum virtchnl_rx_hsplit rx_split_pos; /* deprecated with AVF 1.0 */
+
+       /* see enum virtchnl_rx_hsplit; deprecated with AVF 1.0 */
+       s32 rx_split_pos;
        u32 pad2;
 };
 
@@ -1213,14 +1283,26 @@ enum virtchnl_flow_type {
 struct virtchnl_filter {
        union   virtchnl_flow_spec data;
        union   virtchnl_flow_spec mask;
-       enum    virtchnl_flow_type flow_type;
-       enum    virtchnl_action action;
+
+       /* see enum virtchnl_flow_type */
+       s32     flow_type;
+
+       /* see enum virtchnl_action */
+       s32     action;
        u32     action_meta;
        u8      field_flags;
 };
 
 VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter);
 
+struct virtchnl_shaper_bw {
+       /* Unit is Kbps */
+       u32 committed;
+       u32 peak;
+};
+
+VIRTCHNL_CHECK_STRUCT_LEN(8, virtchnl_shaper_bw);
+
 /* VIRTCHNL_OP_DCF_GET_VSI_MAP
  * VF sends this message to get VSI mapping table.
  * PF responds with an indirect message containing VF's
@@ -1293,7 +1375,39 @@ struct virtchnl_dcf_vlan_offload {
 
 VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_dcf_vlan_offload);
 
+struct virtchnl_dcf_bw_cfg {
+       u8 tc_num;
+#define VIRTCHNL_DCF_BW_CIR            BIT(0)
+#define VIRTCHNL_DCF_BW_PIR            BIT(1)
+       u8 bw_type;
+       u8 pad[2];
+       enum virtchnl_bw_limit_type type;
+       union {
+               struct virtchnl_shaper_bw shaper;
+               u8 pad2[32];
+       };
+};
+
+VIRTCHNL_CHECK_STRUCT_LEN(40, virtchnl_dcf_bw_cfg);
+
+/* VIRTCHNL_OP_DCF_CONFIG_BW
+ * VF send this message to set the bandwidth configuration of each
+ * TC with a specific vf id. The flag node_type is to indicate that
+ * this message is to configure VSI node or TC node bandwidth.
+ */
+struct virtchnl_dcf_bw_cfg_list {
+       u16 vf_id;
+       u8 num_elem;
+#define VIRTCHNL_DCF_TARGET_TC_BW      0
+#define VIRTCHNL_DCF_TARGET_VF_BW      1
+       u8 node_type;
+       struct virtchnl_dcf_bw_cfg cfg[1];
+};
+
+VIRTCHNL_CHECK_STRUCT_LEN(44, virtchnl_dcf_bw_cfg_list);
+
 struct virtchnl_supported_rxdids {
+       /* see enum virtchnl_rx_desc_id_bitmasks */
        u64 supported_rxdids;
 };
 
@@ -1318,7 +1432,8 @@ enum virtchnl_event_codes {
 #define PF_EVENT_SEVERITY_CERTAIN_DOOM 255
 
 struct virtchnl_pf_event {
-       enum virtchnl_event_codes event;
+       /* see enum virtchnl_event_codes */
+       s32 event;
        union {
                /* If the PF driver does not support the new speed reporting
                 * capabilities then use link_event else use link_event_adv to
@@ -1415,9 +1530,7 @@ enum virtchnl_proto_hdr_type {
        VIRTCHNL_PROTO_HDR_S_VLAN,
        VIRTCHNL_PROTO_HDR_C_VLAN,
        VIRTCHNL_PROTO_HDR_IPV4,
-       VIRTCHNL_PROTO_HDR_IPV4_FRAG,
        VIRTCHNL_PROTO_HDR_IPV6,
-       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
        VIRTCHNL_PROTO_HDR_TCP,
        VIRTCHNL_PROTO_HDR_UDP,
        VIRTCHNL_PROTO_HDR_SCTP,
@@ -1434,6 +1547,13 @@ enum virtchnl_proto_hdr_type {
        VIRTCHNL_PROTO_HDR_ECPRI,
        VIRTCHNL_PROTO_HDR_L2TPV2,
        VIRTCHNL_PROTO_HDR_PPP,
+       /* IPv4 and IPv6 Fragment header types are only associated to
+        * VIRTCHNL_PROTO_HDR_IPV4 and VIRTCHNL_PROTO_HDR_IPV6 respectively,
+        * cannot be used independently.
+        */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG,
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG,
+       VIRTCHNL_PROTO_HDR_GRE,
 };
 
 /* Protocol header field within a protocol header. */
@@ -1456,8 +1576,7 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV4_DSCP,
        VIRTCHNL_PROTO_HDR_IPV4_TTL,
        VIRTCHNL_PROTO_HDR_IPV4_PROT,
-       VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID =
-               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV4_FRAG),
+       VIRTCHNL_PROTO_HDR_IPV4_CHKSUM,
        /* IPV6 */
        VIRTCHNL_PROTO_HDR_IPV6_SRC =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6),
@@ -1478,21 +1597,21 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
        VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
        VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
-       /* IPv6 Extension Header Fragment */
-       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID =
-               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG),
        /* TCP */
        VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
        VIRTCHNL_PROTO_HDR_TCP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_TCP_CHKSUM,
        /* UDP */
        VIRTCHNL_PROTO_HDR_UDP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_UDP),
        VIRTCHNL_PROTO_HDR_UDP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_UDP_CHKSUM,
        /* SCTP */
        VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_SCTP),
        VIRTCHNL_PROTO_HDR_SCTP_DST_PORT,
+       VIRTCHNL_PROTO_HDR_SCTP_CHKSUM,
        /* GTPU_IP */
        VIRTCHNL_PROTO_HDR_GTPU_IP_TEID =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_IP),
@@ -1523,10 +1642,26 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_ECPRI_MSG_TYPE =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_ECPRI),
        VIRTCHNL_PROTO_HDR_ECPRI_PC_RTC_ID,
+       /* IPv4 Dummy Fragment */
+       VIRTCHNL_PROTO_HDR_IPV4_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV4_FRAG),
+       /* IPv6 Extension Fragment */
+       VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG_PKID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6_EH_FRAG),
+       /* GTPU_DWN/UP */
+       VIRTCHNL_PROTO_HDR_GTPU_DWN_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_DWN),
+       VIRTCHNL_PROTO_HDR_GTPU_UP_QFI =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP),
+       /* L2TPv2 */
+       VIRTCHNL_PROTO_HDR_L2TPV2_SESS_ID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_L2TPV2),
+       VIRTCHNL_PROTO_HDR_L2TPV2_LEN_SESS_ID,
 };
 
 struct virtchnl_proto_hdr {
-       enum virtchnl_proto_hdr_type type;
+       /* see enum virtchnl_proto_hdr_type */
+       s32 type;
        u32 field_selector; /* a bit mask to select field for header type */
        u8 buffer[64];
        /**
@@ -1555,7 +1690,9 @@ VIRTCHNL_CHECK_STRUCT_LEN(2312, virtchnl_proto_hdrs);
 
 struct virtchnl_rss_cfg {
        struct virtchnl_proto_hdrs proto_hdrs;     /* protocol headers */
-       enum virtchnl_rss_algorithm rss_algorithm; /* rss algorithm type */
+
+       /* see enum virtchnl_rss_algorithm; rss algorithm type */
+       s32 rss_algorithm;
        u8 reserved[128];                          /* reserve for future */
 };
 
@@ -1563,7 +1700,8 @@ VIRTCHNL_CHECK_STRUCT_LEN(2444, virtchnl_rss_cfg);
 
 /* action configuration for FDIR */
 struct virtchnl_filter_action {
-       enum virtchnl_action type;
+       /* see enum virtchnl_action type */
+       s32 type;
        union {
                /* used for queue and qgroup action */
                struct {
@@ -1602,20 +1740,6 @@ struct virtchnl_fdir_rule {
 
 VIRTCHNL_CHECK_STRUCT_LEN(2604, virtchnl_fdir_rule);
 
-/* query information to retrieve fdir rule counters.
- * PF will fill out this structure to reset counter.
- */
-struct virtchnl_fdir_query_info {
-       u32 match_packets_valid:1;
-       u32 match_bytes_valid:1;
-       u32 reserved:30;  /* Reserved, must be zero. */
-       u32 pad;
-       u64 matched_packets; /* Number of packets for this rule. */
-       u64 matched_bytes;   /* Number of bytes through this rule. */
-};
-
-VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_fdir_query_info);
-
 /* Status returned to VF after VF requests FDIR commands
  * VIRTCHNL_FDIR_SUCCESS
  * VF FDIR related request is successfully done by PF
@@ -1670,7 +1794,9 @@ struct virtchnl_fdir_add {
        u16 validate_only; /* INPUT */
        u32 flow_id;       /* OUTPUT */
        struct virtchnl_fdir_rule rule_cfg; /* INPUT */
-       enum virtchnl_fdir_prgm_status status; /* OUTPUT */
+
+       /* see enum virtchnl_fdir_prgm_status; OUTPUT */
+       s32 status;
 };
 
 VIRTCHNL_CHECK_STRUCT_LEN(2616, virtchnl_fdir_add);
@@ -1683,27 +1809,69 @@ struct virtchnl_fdir_del {
        u16 vsi_id;  /* INPUT */
        u16 pad;
        u32 flow_id; /* INPUT */
-       enum virtchnl_fdir_prgm_status status; /* OUTPUT */
+
+       /* see enum virtchnl_fdir_prgm_status; OUTPUT */
+       s32 status;
 };
 
 VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_fdir_del);
 
-/* VIRTCHNL_OP_QUERY_FDIR_FILTER
- * VF sends this request to PF by filling out vsi_id,
- * flow_id and reset_counter. PF will return query_info
- * and query_status to VF.
+/* VIRTCHNL_OP_GET_QOS_CAPS
+ * VF sends this message to get its QoS Caps, such as
+ * TC number, Arbiter and Bandwidth.
  */
-struct virtchnl_fdir_query {
-       u16 vsi_id;   /* INPUT */
-       u16 pad1[3];
-       u32 flow_id;  /* INPUT */
-       u32 reset_counter:1; /* INPUT */
-       struct virtchnl_fdir_query_info query_info; /* OUTPUT */
-       enum virtchnl_fdir_prgm_status status;  /* OUTPUT */
-       u32 pad2;
+struct virtchnl_qos_cap_elem {
+       u8 tc_num;
+       u8 tc_prio;
+#define VIRTCHNL_ABITER_STRICT      0
+#define VIRTCHNL_ABITER_ETS         2
+       u8 arbiter;
+#define VIRTCHNL_STRICT_WEIGHT      1
+       u8 weight;
+       enum virtchnl_bw_limit_type type;
+       union {
+               struct virtchnl_shaper_bw shaper;
+               u8 pad2[32];
+       };
 };
 
-VIRTCHNL_CHECK_STRUCT_LEN(48, virtchnl_fdir_query);
+VIRTCHNL_CHECK_STRUCT_LEN(40, virtchnl_qos_cap_elem);
+
+struct virtchnl_qos_cap_list {
+       u16 vsi_id;
+       u16 num_elem;
+       struct virtchnl_qos_cap_elem cap[1];
+};
+
+VIRTCHNL_CHECK_STRUCT_LEN(44, virtchnl_qos_cap_list);
+
+/* VIRTCHNL_OP_CONFIG_QUEUE_TC_MAP
+ * VF sends message virtchnl_queue_tc_mapping to set queue to tc
+ * mapping for all the Tx and Rx queues with a specified VSI, and
+ * would get response about bitmap of valid user priorities
+ * associated with queues.
+ */
+struct virtchnl_queue_tc_mapping {
+       u16 vsi_id;
+       u16 num_tc;
+       u16 num_queue_pairs;
+       u8 pad[2];
+       union {
+               struct {
+                       u16 start_queue_id;
+                       u16 queue_count;
+               } req;
+               struct {
+#define VIRTCHNL_USER_PRIO_TYPE_UP     0
+#define VIRTCHNL_USER_PRIO_TYPE_DSCP   1
+                       u16 prio_type;
+                       u16 valid_prio_bitmap;
+               } resp;
+       } tc[1];
+};
+
+VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_queue_tc_mapping);
+
 
 /* TX and RX queue types are valid in legacy as well as split queue models.
  * With Split Queue model, 2 additional types are introduced - TX_COMPLETION
@@ -1722,7 +1890,8 @@ enum virtchnl_queue_type {
 
 /* structure to specify a chunk of contiguous queues */
 struct virtchnl_queue_chunk {
-       enum virtchnl_queue_type type;
+       /* see enum virtchnl_queue_type */
+       s32 type;
        u16 start_queue_id;
        u16 num_queues;
 };
@@ -1775,8 +1944,12 @@ struct virtchnl_queue_vector {
        u16 queue_id;
        u16 vector_id;
        u8 pad[4];
-       enum virtchnl_itr_idx itr_idx;
-       enum virtchnl_queue_type queue_type;
+
+       /* see enum virtchnl_itr_idx */
+       s32 itr_idx;
+
+       /* see enum virtchnl_queue_type */
+       s32 queue_type;
 };
 
 VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_queue_vector);
@@ -2031,6 +2204,19 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
        case VIRTCHNL_OP_DCF_GET_VSI_MAP:
        case VIRTCHNL_OP_DCF_GET_PKG_INFO:
                break;
+       case VIRTCHNL_OP_DCF_CONFIG_BW:
+               valid_len = sizeof(struct virtchnl_dcf_bw_cfg_list);
+               if (msglen >= valid_len) {
+                       struct virtchnl_dcf_bw_cfg_list *cfg_list =
+                               (struct virtchnl_dcf_bw_cfg_list *)msg;
+                       if (cfg_list->num_elem == 0) {
+                               err_msg_format = true;
+                               break;
+                       }
+                       valid_len += (cfg_list->num_elem - 1) *
+                                        sizeof(struct virtchnl_dcf_bw_cfg);
+               }
+               break;
        case VIRTCHNL_OP_GET_SUPPORTED_RXDIDS:
                break;
        case VIRTCHNL_OP_ADD_RSS_CFG:
@@ -2043,8 +2229,20 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
        case VIRTCHNL_OP_DEL_FDIR_FILTER:
                valid_len = sizeof(struct virtchnl_fdir_del);
                break;
-       case VIRTCHNL_OP_QUERY_FDIR_FILTER:
-               valid_len = sizeof(struct virtchnl_fdir_query);
+       case VIRTCHNL_OP_GET_QOS_CAPS:
+               break;
+       case VIRTCHNL_OP_CONFIG_QUEUE_TC_MAP:
+               valid_len = sizeof(struct virtchnl_queue_tc_mapping);
+               if (msglen >= valid_len) {
+                       struct virtchnl_queue_tc_mapping *q_tc =
+                               (struct virtchnl_queue_tc_mapping *)msg;
+                       if (q_tc->num_tc == 0) {
+                               err_msg_format = true;
+                               break;
+                       }
+                       valid_len += (q_tc->num_tc - 1) *
+                                        sizeof(q_tc->tc[0]);
+               }
                break;
        case VIRTCHNL_OP_GET_OFFLOAD_VLAN_V2_CAPS:
                break;
@@ -2102,6 +2300,14 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
                                      sizeof(struct virtchnl_queue_vector);
                }
                break;
+
+       case VIRTCHNL_OP_INLINE_IPSEC_CRYPTO:
+       {
+               struct inline_ipsec_msg *iim = (struct inline_ipsec_msg *)msg;
+               valid_len =
+                       virtchnl_inline_ipsec_val_msg_len(iim->ipsec_opcode);
+               break;
+       }
        /* These are always errors coming from the VF. */
        case VIRTCHNL_OP_EVENT:
        case VIRTCHNL_OP_UNKNOWN: