common/iavf: add IPv6 prefix protocol header fields
[dpdk.git] / drivers / common / iavf / virtchnl.h
index ef41a4f..81eabd7 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2020
+ * Copyright(c) 2001-2020 Intel Corporation
  */
 
 #ifndef _VIRTCHNL_H_
@@ -254,10 +254,11 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
 #define VIRTCHNL_VF_OFFLOAD_ADQ                        0X00800000
 #define VIRTCHNL_VF_OFFLOAD_ADQ_V2             0X01000000
 #define VIRTCHNL_VF_OFFLOAD_USO                        0X02000000
-#define VIRTCHNL_VF_CAP_DCF                    0X40000000
 #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 */
@@ -435,9 +436,36 @@ VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_queue_select);
  * PF removes the filters and returns status.
  */
 
+/* VIRTCHNL_ETHER_ADDR_LEGACY
+ * Prior to adding the @type member to virtchnl_ether_addr, there were 2 pad
+ * bytes. Moving forward all VF drivers should not set type to
+ * VIRTCHNL_ETHER_ADDR_LEGACY. This is only here to not break previous/legacy
+ * behavior. The control plane function (i.e. PF) can use a best effort method
+ * of tracking the primary/device unicast in this case, but there is no
+ * guarantee and functionality depends on the implementation of the PF.
+ */
+
+/* VIRTCHNL_ETHER_ADDR_PRIMARY
+ * All VF drivers should set @type to VIRTCHNL_ETHER_ADDR_PRIMARY for the
+ * primary/device unicast MAC address filter for VIRTCHNL_OP_ADD_ETH_ADDR and
+ * VIRTCHNL_OP_DEL_ETH_ADDR. This allows for the underlying control plane
+ * function (i.e. PF) to accurately track and use this MAC address for
+ * displaying on the host and for VM/function reset.
+ */
+
+/* VIRTCHNL_ETHER_ADDR_EXTRA
+ * All VF drivers should set @type to VIRTCHNL_ETHER_ADDR_EXTRA for any extra
+ * unicast and/or multicast filters that are being added/deleted via
+ * VIRTCHNL_OP_DEL_ETH_ADDR/VIRTCHNL_OP_ADD_ETH_ADDR respectively.
+ */
 struct virtchnl_ether_addr {
        u8 addr[VIRTCHNL_ETH_LENGTH_OF_ADDRESS];
-       u8 pad[2];
+       u8 type;
+#define VIRTCHNL_ETHER_ADDR_LEGACY     0
+#define VIRTCHNL_ETHER_ADDR_PRIMARY    1
+#define VIRTCHNL_ETHER_ADDR_EXTRA      2
+#define VIRTCHNL_ETHER_ADDR_TYPE_MASK  3 /* first two bits of type are valid */
+       u8 pad;
 };
 
 VIRTCHNL_CHECK_STRUCT_LEN(8, virtchnl_ether_addr);
@@ -663,7 +691,7 @@ struct virtchnl_dcf_vsi_map {
        u16 num_vfs;    /* The actual number of VFs allocated */
 #define VIRTCHNL_DCF_VF_VSI_ID_S       0
 #define VIRTCHNL_DCF_VF_VSI_ID_M       (0xFFF << VIRTCHNL_DCF_VF_VSI_ID_S)
-#define VIRTCHNL_DCF_VF_VSI_VALID      (1 << 15)
+#define VIRTCHNL_DCF_VF_VSI_VALID      BIT(15)
        u16 vf_vsi[1];
 };
 
@@ -852,6 +880,7 @@ enum virtchnl_proto_hdr_type {
        VIRTCHNL_PROTO_HDR_ESP,
        VIRTCHNL_PROTO_HDR_AH,
        VIRTCHNL_PROTO_HDR_PFCP,
+       VIRTCHNL_PROTO_HDR_GTPC,
 };
 
 /* Protocol header field within a protocol header. */
@@ -881,6 +910,19 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_IPV6_TC,
        VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
        VIRTCHNL_PROTO_HDR_IPV6_PROT,
+       /* IPV6 Prefix */
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX32_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX40_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX48_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX56_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX64_DST,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_SRC,
+       VIRTCHNL_PROTO_HDR_IPV6_PREFIX96_DST,
        /* TCP */
        VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
@@ -916,6 +958,9 @@ enum virtchnl_proto_hdr_field {
        VIRTCHNL_PROTO_HDR_PFCP_S_FIELD =
                PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_PFCP),
        VIRTCHNL_PROTO_HDR_PFCP_SEID,
+       /* GTPC */
+       VIRTCHNL_PROTO_HDR_GTPC_TEID =
+               PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPC),
 };
 
 struct virtchnl_proto_hdr {
@@ -1272,13 +1317,10 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
                /* These two opcodes are specific to handle the AdminQ command,
                 * so the validation needs to be done in PF's context.
                 */
-               return 0;
+               valid_len = msglen;
+               break;
        case VIRTCHNL_OP_DCF_DISABLE:
        case VIRTCHNL_OP_DCF_GET_VSI_MAP:
-               /* The two opcodes are required by DCF without message buffer,
-                * so the valid length keeps the default value 0.
-                */
-               break;
        case VIRTCHNL_OP_DCF_GET_PKG_INFO:
                break;
        case VIRTCHNL_OP_GET_SUPPORTED_RXDIDS: