dpdk: DPDK 20.05 iavf flow director backporting to DPDK 20.02
0001 ~ 0014 patches are for virtual channel and PMD 0015 is the iavf fdir framework 0016 ~ 0017 are for the iavf fidr driver Type: feature Signed-off-by: Chenmin Sun <chenmin.sun@intel.com> Change-Id: I38e69ca0065a71cc6ba0b44ef7c7db51193a0899
This commit is contained in:

committed by
Damjan Marion

parent
1e5ed97749
commit
7f83738b46
816
build/external/patches/dpdk_20.02/0001-net-iavf-unify-Rx-ptype-table.patch
vendored
Normal file
816
build/external/patches/dpdk_20.02/0001-net-iavf-unify-Rx-ptype-table.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
75
build/external/patches/dpdk_20.02/0002-common-iavf-add-virtual-channel-opcodes-39-40-43.patch
vendored
Normal file
75
build/external/patches/dpdk_20.02/0002-common-iavf-add-virtual-channel-opcodes-39-40-43.patch
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
From e2a382090a344152a79d079bb0af32bc7f03fb16 Mon Sep 17 00:00:00 2001
|
||||
From: Chenmin Sun <chenmin.sun@intel.com>
|
||||
Date: Fri, 27 Mar 2020 08:26:17 +0800
|
||||
Subject: [DPDK 02/17] common/iavf: add virtual channel opcodes 39,40,43
|
||||
|
||||
VIRTCHNL_OP_DCF_CMD_DESC = 39,
|
||||
VIRTCHNL_OP_DCF_CMD_BUFF = 40,
|
||||
VIRTCHNL_OP_DCF_GET_PKG_INFO = 43,
|
||||
|
||||
Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
|
||||
---
|
||||
drivers/common/iavf/virtchnl.h | 33 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 33 insertions(+)
|
||||
|
||||
diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
|
||||
index 2fbbb9e28..83a7a7174 100644
|
||||
--- a/drivers/common/iavf/virtchnl.h
|
||||
+++ b/drivers/common/iavf/virtchnl.h
|
||||
@@ -129,6 +129,9 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_ADD_CLOUD_FILTER = 32,
|
||||
VIRTCHNL_OP_DEL_CLOUD_FILTER = 33,
|
||||
/* opcodes 34, 35, 36, 37 and 38 are reserved */
|
||||
+ VIRTCHNL_OP_DCF_CMD_DESC = 39,
|
||||
+ VIRTCHNL_OP_DCF_CMD_BUFF = 40,
|
||||
+ VIRTCHNL_OP_DCF_GET_PKG_INFO = 43,
|
||||
};
|
||||
|
||||
/* These macros are used to generate compilation errors if a structure/union
|
||||
@@ -266,6 +269,28 @@ struct virtchnl_vf_resource {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(36, virtchnl_vf_resource);
|
||||
|
||||
+#define PKG_NAME_SIZE 32
|
||||
+#define DSN_SIZE 8
|
||||
+
|
||||
+struct pkg_version {
|
||||
+ u8 major;
|
||||
+ u8 minor;
|
||||
+ u8 update;
|
||||
+ u8 draft;
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(4, pkg_version);
|
||||
+
|
||||
+struct virtchnl_pkg_info {
|
||||
+ struct pkg_version pkg_ver;
|
||||
+ u32 track_id;
|
||||
+ char pkg_name[PKG_NAME_SIZE];
|
||||
+ u8 dsn[DSN_SIZE];
|
||||
+};
|
||||
+
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(48, virtchnl_pkg_info);
|
||||
+
|
||||
/* VIRTCHNL_OP_CONFIG_TX_QUEUE
|
||||
* VF sends this message to set up parameters for one TX queue.
|
||||
* External data buffer contains one instance of virtchnl_txq_info.
|
||||
@@ -879,6 +904,14 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
case VIRTCHNL_OP_DEL_CLOUD_FILTER:
|
||||
valid_len = sizeof(struct virtchnl_filter);
|
||||
break;
|
||||
+ case VIRTCHNL_OP_DCF_CMD_DESC:
|
||||
+ case VIRTCHNL_OP_DCF_CMD_BUFF:
|
||||
+ /* These two opcodes are specific to handle the AdminQ command,
|
||||
+ * so the validation needs to be done in PF's context.
|
||||
+ */
|
||||
+ return 0;
|
||||
+ case VIRTCHNL_OP_DCF_GET_PKG_INFO:
|
||||
+ break;
|
||||
/* These are always errors coming from the VF. */
|
||||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
--
|
||||
2.17.1
|
||||
|
90
build/external/patches/dpdk_20.02/0003-common-iavf-support-VSI-mapping-table.patch
vendored
Normal file
90
build/external/patches/dpdk_20.02/0003-common-iavf-support-VSI-mapping-table.patch
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
From a2c92bf26e724eacd52971c4a83861ada82a6cb4 Mon Sep 17 00:00:00 2001
|
||||
From: Chenmin Sun <chenmin.sun@intel.com>
|
||||
Date: Fri, 17 Apr 2020 00:37:41 +0800
|
||||
Subject: [DPDK 03/17] common/iavf: support VSI mapping table
|
||||
|
||||
Add an opcode for getting VSI mapping table.
|
||||
Add an virtchnl event code for VF reset done.
|
||||
|
||||
Signed-off-by: Beilei Xing <beilei.xing@intel.com>
|
||||
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
|
||||
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
|
||||
Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
|
||||
|
||||
Acked-by: Beilei Xing <beilei.xing@intel.com>
|
||||
---
|
||||
drivers/common/iavf/virtchnl.h | 30 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 30 insertions(+)
|
||||
|
||||
diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
|
||||
index 83a7a7174..6f9cf18cb 100644
|
||||
--- a/drivers/common/iavf/virtchnl.h
|
||||
+++ b/drivers/common/iavf/virtchnl.h
|
||||
@@ -131,6 +131,7 @@ enum virtchnl_ops {
|
||||
/* opcodes 34, 35, 36, 37 and 38 are reserved */
|
||||
VIRTCHNL_OP_DCF_CMD_DESC = 39,
|
||||
VIRTCHNL_OP_DCF_CMD_BUFF = 40,
|
||||
+ VIRTCHNL_OP_DCF_GET_VSI_MAP = 42,
|
||||
VIRTCHNL_OP_DCF_GET_PKG_INFO = 43,
|
||||
};
|
||||
|
||||
@@ -645,6 +646,25 @@ struct virtchnl_filter {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter);
|
||||
|
||||
+/* VIRTCHNL_OP_DCF_GET_VSI_MAP
|
||||
+ * VF sends this message to get VSI mapping table.
|
||||
+ * PF responds with an indirect message containing VF's
|
||||
+ * HW VSI IDs.
|
||||
+ * The index of vf_vsi array is the logical VF ID, the
|
||||
+ * value of vf_vsi array is the VF's HW VSI ID with its
|
||||
+ * valid configuration.
|
||||
+ */
|
||||
+struct virtchnl_dcf_vsi_map {
|
||||
+ u16 pf_vsi; /* PF's HW VSI ID */
|
||||
+ 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)
|
||||
+ u16 vf_vsi[1];
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_dcf_vsi_map);
|
||||
+
|
||||
/* VIRTCHNL_OP_EVENT
|
||||
* PF sends this message to inform the VF driver of events that may affect it.
|
||||
* No direct response is expected from the VF, though it may generate other
|
||||
@@ -655,6 +675,7 @@ enum virtchnl_event_codes {
|
||||
VIRTCHNL_EVENT_LINK_CHANGE,
|
||||
VIRTCHNL_EVENT_RESET_IMPENDING,
|
||||
VIRTCHNL_EVENT_PF_DRIVER_CLOSE,
|
||||
+ VIRTCHNL_EVENT_DCF_VSI_MAP_UPDATE,
|
||||
};
|
||||
|
||||
#define PF_EVENT_SEVERITY_INFO 0
|
||||
@@ -682,6 +703,10 @@ struct virtchnl_pf_event {
|
||||
u32 link_speed;
|
||||
u8 link_status;
|
||||
} link_event_adv;
|
||||
+ struct {
|
||||
+ u16 vf_id;
|
||||
+ u16 vsi_id;
|
||||
+ } vf_vsi_map;
|
||||
} event_data;
|
||||
|
||||
int severity;
|
||||
@@ -912,6 +937,11 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
return 0;
|
||||
case VIRTCHNL_OP_DCF_GET_PKG_INFO:
|
||||
break;
|
||||
+ 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;
|
||||
/* These are always errors coming from the VF. */
|
||||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
--
|
||||
2.17.1
|
||||
|
33
build/external/patches/dpdk_20.02/0004-common-iavf-add-PTYPE-definition.patch
vendored
Normal file
33
build/external/patches/dpdk_20.02/0004-common-iavf-add-PTYPE-definition.patch
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
From 585d75cec67cc3f4ee2eb32dc33fb7e2174b3125 Mon Sep 17 00:00:00 2001
|
||||
From: Qi Zhang <qi.z.zhang@intel.com>
|
||||
Date: Thu, 9 Apr 2020 12:50:56 +0800
|
||||
Subject: [DPDK 04/17] common/iavf: add PTYPE definition
|
||||
|
||||
Add IAVF_RX_PTYPE_PARSER_ABORTED definition, so iavf driver will know
|
||||
opcode for parser aborted packets.
|
||||
Without this definition driver would have to rely on magic numbers.
|
||||
|
||||
Signed-off-by: Przemyslaw Patynowski <przemyslawx.patynowski@intel.com>
|
||||
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
|
||||
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
|
||||
---
|
||||
drivers/common/iavf/iavf_type.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/common/iavf/iavf_type.h b/drivers/common/iavf/iavf_type.h
|
||||
index 6f85f8c04..97a25b2d1 100644
|
||||
--- a/drivers/common/iavf/iavf_type.h
|
||||
+++ b/drivers/common/iavf/iavf_type.h
|
||||
@@ -552,7 +552,8 @@ enum iavf_rx_l2_ptype {
|
||||
IAVF_RX_PTYPE_GRENAT4_MAC_PAY3 = 58,
|
||||
IAVF_RX_PTYPE_GRENAT4_MACVLAN_IPV6_ICMP_PAY4 = 87,
|
||||
IAVF_RX_PTYPE_GRENAT6_MAC_PAY3 = 124,
|
||||
- IAVF_RX_PTYPE_GRENAT6_MACVLAN_IPV6_ICMP_PAY4 = 153
|
||||
+ IAVF_RX_PTYPE_GRENAT6_MACVLAN_IPV6_ICMP_PAY4 = 153,
|
||||
+ IAVF_RX_PTYPE_PARSER_ABORTED = 255
|
||||
};
|
||||
|
||||
struct iavf_rx_ptype_decoded {
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,74 @@
|
||||
From 296799a9a9006e4c99e428c52818d1e34b26aec2 Mon Sep 17 00:00:00 2001
|
||||
From: Chenmin Sun <chenmin.sun@intel.com>
|
||||
Date: Fri, 17 Apr 2020 01:49:08 +0800
|
||||
Subject: [DPDK 05/17] common/iavf: add virtual channel support for Flex RXD
|
||||
|
||||
Add new VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC flag, opcode
|
||||
VIRTCHNL_OP_GET_SUPPORTED_RXDIDS and add member rxdid
|
||||
in struct virtchnl_rxq_info to support AVF Flex RXD
|
||||
extension.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
|
||||
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
|
||||
Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
|
||||
---
|
||||
drivers/common/iavf/virtchnl.h | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
|
||||
index 6f9cf18cb..e8d936843 100644
|
||||
--- a/drivers/common/iavf/virtchnl.h
|
||||
+++ b/drivers/common/iavf/virtchnl.h
|
||||
@@ -133,6 +133,7 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_DCF_CMD_BUFF = 40,
|
||||
VIRTCHNL_OP_DCF_GET_VSI_MAP = 42,
|
||||
VIRTCHNL_OP_DCF_GET_PKG_INFO = 43,
|
||||
+ VIRTCHNL_OP_GET_SUPPORTED_RXDIDS = 44,
|
||||
};
|
||||
|
||||
/* These macros are used to generate compilation errors if a structure/union
|
||||
@@ -247,6 +248,7 @@ 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_OFFLOAD_RX_FLEX_DESC 0X04000000
|
||||
/* 0X80000000 is reserved */
|
||||
|
||||
/* Define below the capability flags that are not offloads */
|
||||
@@ -332,7 +334,9 @@ struct virtchnl_rxq_info {
|
||||
u32 databuffer_size;
|
||||
u32 max_pkt_size;
|
||||
u8 crc_disable;
|
||||
- u8 pad1[3];
|
||||
+ /* only used when VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC is supported */
|
||||
+ u8 rxdid;
|
||||
+ u8 pad1[2];
|
||||
u64 dma_ring_addr;
|
||||
enum virtchnl_rx_hsplit rx_split_pos; /* deprecated with AVF 1.0 */
|
||||
u32 pad2;
|
||||
@@ -665,6 +669,12 @@ struct virtchnl_dcf_vsi_map {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_dcf_vsi_map);
|
||||
|
||||
+struct virtchnl_supported_rxdids {
|
||||
+ u64 supported_rxdids;
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(8, virtchnl_supported_rxdids);
|
||||
+
|
||||
/* VIRTCHNL_OP_EVENT
|
||||
* PF sends this message to inform the VF driver of events that may affect it.
|
||||
* No direct response is expected from the VF, though it may generate other
|
||||
@@ -937,6 +947,8 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
return 0;
|
||||
case VIRTCHNL_OP_DCF_GET_PKG_INFO:
|
||||
break;
|
||||
+ case VIRTCHNL_OP_GET_SUPPORTED_RXDIDS:
|
||||
+ break;
|
||||
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.
|
||||
--
|
||||
2.17.1
|
||||
|
264
build/external/patches/dpdk_20.02/0006-common-iavf-add-virtual-channel-protocol-header.patch
vendored
Normal file
264
build/external/patches/dpdk_20.02/0006-common-iavf-add-virtual-channel-protocol-header.patch
vendored
Normal file
@ -0,0 +1,264 @@
|
||||
From e9e33a31aa58293c0442ddbfb96f3b8badfad250 Mon Sep 17 00:00:00 2001
|
||||
From: Qi Zhang <qi.z.zhang@intel.com>
|
||||
Date: Thu, 9 Apr 2020 13:10:12 +0800
|
||||
Subject: [DPDK 06/17] common/iavf: add virtual channel protocol header
|
||||
|
||||
To support advanced AVF's FDIR and RSS feature, we need to figure out
|
||||
what kind of data structure should be passed from VF to PF to describe
|
||||
an FDIR rule or RSS config rule. The common part of the requirement is
|
||||
we need a data structure to represent the input set selection of a rule's
|
||||
hash key.
|
||||
|
||||
An input set selection is a group of fields be selected from one or more
|
||||
network protocol layers that could be identified as a specific flow.
|
||||
For example, select dst IP address from an IPv4 header combined with
|
||||
dst port from the TCP header as the input set for an IPv4/TCP flow.
|
||||
|
||||
The patch adds a new data structure virtchnl_proto_hdrs to abstract
|
||||
a network protocol headers group which is composed of layers of network
|
||||
protocol header(virtchnl_proto_hdr).
|
||||
|
||||
A protocol header contains a 32 bits mask (field_selector) to describe
|
||||
which fields are selected as input sets, as well as a header type
|
||||
(enum virtchnl_proto_hdr_type). Each bit is mapped to a field in
|
||||
enum virtchnl_proto_hdr_field guided by its header type.
|
||||
|
||||
+------------+-----------+------------------------------+
|
||||
| | Proto Hdr | Header Type A |
|
||||
| | +------------------------------+
|
||||
| | | BIT 31 | ... | BIT 1 | BIT 0 |
|
||||
| |-----------+------------------------------+
|
||||
|Proto Hdrs | Proto Hdr | Header Type B |
|
||||
| | +------------------------------+
|
||||
| | | BIT 31 | ... | BIT 1 | BIT 0 |
|
||||
| |-----------+------------------------------+
|
||||
| | Proto Hdr | Header Type C |
|
||||
| | +------------------------------+
|
||||
| | | BIT 31 | ... | BIT 1 | BIT 0 |
|
||||
| |-----------+------------------------------+
|
||||
| | .... |
|
||||
+-------------------------------------------------------+
|
||||
|
||||
All fields in enum virtchnl_proto_hdr_fields are grouped with header type
|
||||
and the value of the first field of a header type is always 32 aligned.
|
||||
|
||||
enum proto_hdr_type {
|
||||
header_type_A = 0;
|
||||
header_type_B = 1;
|
||||
....
|
||||
}
|
||||
|
||||
enum proto_hdr_field {
|
||||
/* header type A */
|
||||
header_A_field_0 = 0,
|
||||
header_A_field_1 = 1,
|
||||
header_A_field_2 = 2,
|
||||
header_A_field_3 = 3,
|
||||
|
||||
/* header type B */
|
||||
header_B_field_0 = 32, // = header_type_B << 5
|
||||
header_B_field_0 = 33,
|
||||
header_B_field_0 = 34
|
||||
header_B_field_0 = 35,
|
||||
....
|
||||
};
|
||||
|
||||
So we have:
|
||||
proto_hdr_type = proto_hdr_field / 32
|
||||
bit offset = proto_hdr_field % 32
|
||||
|
||||
To simply the protocol header's operations, couple help macros are added.
|
||||
For example, to select src IP and dst port as input set for an IPv4/UDP
|
||||
flow.
|
||||
|
||||
we have:
|
||||
struct virtchnl_proto_hdr hdr[2];
|
||||
|
||||
VIRTCHNL_SET_PROTO_HDR_TYPE(&hdr[0], IPV4)
|
||||
VIRTCHNL_ADD_PROTO_HDR_FIELD(&hdr[0], IPV4, SRC)
|
||||
|
||||
VIRTCHNL_SET_PROTO_HDR_TYPE(&hdr[1], UDP)
|
||||
VIRTCHNL_ADD_PROTO_HDR_FIELD(&hdr[1], UDP, DST)
|
||||
|
||||
A protocol header also contains a byte array, this field should only
|
||||
be used by an FDIR rule and should be ignored by RSS. For an FDIR rule,
|
||||
the byte array is used to store the protocol header of a training
|
||||
package. The byte array must be network order.
|
||||
|
||||
Signed-off-by: Jeff Guo <jia.guo@intel.com>
|
||||
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
|
||||
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
|
||||
---
|
||||
drivers/common/iavf/virtchnl.h | 156 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 156 insertions(+)
|
||||
|
||||
diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
|
||||
index e8d936843..667762643 100644
|
||||
--- a/drivers/common/iavf/virtchnl.h
|
||||
+++ b/drivers/common/iavf/virtchnl.h
|
||||
@@ -769,6 +769,162 @@ enum virtchnl_vfr_states {
|
||||
VIRTCHNL_VFR_VFACTIVE,
|
||||
};
|
||||
|
||||
+#define VIRTCHNL_MAX_NUM_PROTO_HDRS 32
|
||||
+#define PROTO_HDR_SHIFT 5
|
||||
+#define PROTO_HDR_FIELD_START(proto_hdr_type) \
|
||||
+ (proto_hdr_type << PROTO_HDR_SHIFT)
|
||||
+#define PROTO_HDR_FIELD_MASK ((1UL << PROTO_HDR_SHIFT) - 1)
|
||||
+
|
||||
+/* VF use these macros to configure each protocol header.
|
||||
+ * Specify which protocol headers and protocol header fields base on
|
||||
+ * virtchnl_proto_hdr_type and virtchnl_proto_hdr_field.
|
||||
+ * @param hdr: a struct of virtchnl_proto_hdr
|
||||
+ * @param hdr_type: ETH/IPV4/TCP, etc
|
||||
+ * @param field: SRC/DST/TEID/SPI, etc
|
||||
+ */
|
||||
+#define VIRTCHNL_ADD_PROTO_HDR_FIELD(hdr, field) \
|
||||
+ ((hdr)->field_selector |= BIT((field) & PROTO_HDR_FIELD_MASK))
|
||||
+#define VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr, field) \
|
||||
+ ((hdr)->field_selector &= ~BIT((field) & PROTO_HDR_FIELD_MASK))
|
||||
+#define VIRTCHNL_TEST_PROTO_HDR_FIELD(hdr, val) \
|
||||
+ ((hdr)->field_selector & BIT((val) & PROTO_HDR_FIELD_MASK))
|
||||
+#define VIRTCHNL_GET_PROTO_HDR_FIELD(hdr) ((hdr)->field_selector)
|
||||
+
|
||||
+#define VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, hdr_type, field) \
|
||||
+ (VIRTCHNL_ADD_PROTO_HDR_FIELD(hdr, \
|
||||
+ VIRTCHNL_PROTO_HDR_ ## hdr_type ## _ ## field))
|
||||
+#define VIRTCHNL_DEL_PROTO_HDR_FIELD_BIT(hdr, hdr_type, field) \
|
||||
+ (VIRTCHNL_DEL_PROTO_HDR_FIELD(hdr, \
|
||||
+ VIRTCHNL_PROTO_HDR_ ## hdr_type ## _ ## field))
|
||||
+
|
||||
+#define VIRTCHNL_SET_PROTO_HDR_TYPE(hdr, hdr_type) \
|
||||
+ ((hdr)->type = VIRTCHNL_PROTO_HDR_ ## hdr_type)
|
||||
+#define VIRTCHNL_GET_PROTO_HDR_TYPE(hdr) \
|
||||
+ (((hdr)->type) >> PROTO_HDR_SHIFT)
|
||||
+#define VIRTCHNL_TEST_PROTO_HDR_TYPE(hdr, val) \
|
||||
+ ((hdr)->type == ((val) >> PROTO_HDR_SHIFT))
|
||||
+#define VIRTCHNL_TEST_PROTO_HDR(hdr, val) \
|
||||
+ (VIRTCHNL_TEST_PROTO_HDR_TYPE(hdr, val) && \
|
||||
+ VIRTCHNL_TEST_PROTO_HDR_FIELD(hdr, val))
|
||||
+
|
||||
+/* Protocol header type within a packet segment. A segment consists of one or
|
||||
+ * more protocol headers that make up a logical group of protocol headers. Each
|
||||
+ * logical group of protocol headers encapsulates or is encapsulated using/by
|
||||
+ * tunneling or encapsulation protocols for network virtualization.
|
||||
+ */
|
||||
+enum virtchnl_proto_hdr_type {
|
||||
+ VIRTCHNL_PROTO_HDR_NONE,
|
||||
+ VIRTCHNL_PROTO_HDR_ETH,
|
||||
+ VIRTCHNL_PROTO_HDR_S_VLAN,
|
||||
+ VIRTCHNL_PROTO_HDR_C_VLAN,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6,
|
||||
+ VIRTCHNL_PROTO_HDR_TCP,
|
||||
+ VIRTCHNL_PROTO_HDR_UDP,
|
||||
+ VIRTCHNL_PROTO_HDR_SCTP,
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_IP,
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_EH,
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_DWN,
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP,
|
||||
+ VIRTCHNL_PROTO_HDR_PPPOE,
|
||||
+ VIRTCHNL_PROTO_HDR_L2TPV3,
|
||||
+ VIRTCHNL_PROTO_HDR_ESP,
|
||||
+ VIRTCHNL_PROTO_HDR_AH,
|
||||
+ VIRTCHNL_PROTO_HDR_PFCP,
|
||||
+};
|
||||
+
|
||||
+/* Protocol header field within a protocol header. */
|
||||
+enum virtchnl_proto_hdr_field {
|
||||
+ /* ETHER */
|
||||
+ VIRTCHNL_PROTO_HDR_ETH_SRC =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_ETH),
|
||||
+ VIRTCHNL_PROTO_HDR_ETH_DST,
|
||||
+ VIRTCHNL_PROTO_HDR_ETH_ETHERTYPE,
|
||||
+ /* S-VLAN */
|
||||
+ VIRTCHNL_PROTO_HDR_S_VLAN_ID =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_S_VLAN),
|
||||
+ /* C-VLAN */
|
||||
+ VIRTCHNL_PROTO_HDR_C_VLAN_ID =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_C_VLAN),
|
||||
+ /* IPV4 */
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4_SRC =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV4),
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4_DST,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4_DSCP,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4_TTL,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV4_PROT,
|
||||
+ /* IPV6 */
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6_SRC =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_IPV6),
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6_DST,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6_TC,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6_HOP_LIMIT,
|
||||
+ VIRTCHNL_PROTO_HDR_IPV6_PROT,
|
||||
+ /* TCP */
|
||||
+ VIRTCHNL_PROTO_HDR_TCP_SRC_PORT =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_TCP),
|
||||
+ VIRTCHNL_PROTO_HDR_TCP_DST_PORT,
|
||||
+ /* UDP */
|
||||
+ VIRTCHNL_PROTO_HDR_UDP_SRC_PORT =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_UDP),
|
||||
+ VIRTCHNL_PROTO_HDR_UDP_DST_PORT,
|
||||
+ /* SCTP */
|
||||
+ VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_SCTP),
|
||||
+ VIRTCHNL_PROTO_HDR_SCTP_DST_PORT,
|
||||
+ /* GTPU_IP */
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_IP_TEID =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_IP),
|
||||
+ /* GTPU_EH */
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_EH_PDU =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_GTPU_EH),
|
||||
+ VIRTCHNL_PROTO_HDR_GTPU_EH_QFI,
|
||||
+ /* PPPOE */
|
||||
+ VIRTCHNL_PROTO_HDR_PPPOE_SESS_ID =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_PPPOE),
|
||||
+ /* L2TPV3 */
|
||||
+ VIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_L2TPV3),
|
||||
+ /* ESP */
|
||||
+ VIRTCHNL_PROTO_HDR_ESP_SPI =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_ESP),
|
||||
+ /* AH */
|
||||
+ VIRTCHNL_PROTO_HDR_AH_SPI =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_AH),
|
||||
+ /* PFCP */
|
||||
+ VIRTCHNL_PROTO_HDR_PFCP_S_FIELD =
|
||||
+ PROTO_HDR_FIELD_START(VIRTCHNL_PROTO_HDR_PFCP),
|
||||
+ VIRTCHNL_PROTO_HDR_PFCP_SEID,
|
||||
+};
|
||||
+
|
||||
+struct virtchnl_proto_hdr {
|
||||
+ enum virtchnl_proto_hdr_type type;
|
||||
+ u32 field_selector; /* a bit mask to select field for header type */
|
||||
+ u8 buffer[64];
|
||||
+ /**
|
||||
+ * binary buffer in network order for specific header type.
|
||||
+ * For example, if type = VIRTCHNL_PROTO_HDR_IPV4, a IPv4
|
||||
+ * header is expected to be copied into the buffer.
|
||||
+ */
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(72, virtchnl_proto_hdr);
|
||||
+
|
||||
+struct virtchnl_proto_hdrs {
|
||||
+ u8 tunnel_level;
|
||||
+ /**
|
||||
+ * specify where protocol header start from.
|
||||
+ * 0 - from the outer layer
|
||||
+ * 1 - from the first inner layer
|
||||
+ * 2 - from the second inner layer
|
||||
+ * ....
|
||||
+ **/
|
||||
+ int count; /* the proto layers must < VIRTCHNL_MAX_NUM_PROTO_HDRS */
|
||||
+ struct virtchnl_proto_hdr proto_hdr[VIRTCHNL_MAX_NUM_PROTO_HDRS];
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(2312, virtchnl_proto_hdrs);
|
||||
+
|
||||
/**
|
||||
* virtchnl_vc_validate_vf_msg
|
||||
* @ver: Virtchnl version info
|
||||
--
|
||||
2.17.1
|
||||
|
226
build/external/patches/dpdk_20.02/0007-net-iavf-flexible-Rx-descriptor-definitions.patch
vendored
Normal file
226
build/external/patches/dpdk_20.02/0007-net-iavf-flexible-Rx-descriptor-definitions.patch
vendored
Normal file
@ -0,0 +1,226 @@
|
||||
From a7cbf4fabd46b0d02b651f5defac754e56e11e0e Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:00 +0800
|
||||
Subject: [DPDK 07/17] net/iavf: flexible Rx descriptor definitions
|
||||
|
||||
Add definitions for flexible Rx descriptor structures and macros.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf_rxtx.h | 200 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 200 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h
|
||||
index 09b5bd99e..5e309631e 100644
|
||||
--- a/drivers/net/iavf/iavf_rxtx.h
|
||||
+++ b/drivers/net/iavf/iavf_rxtx.h
|
||||
@@ -157,6 +157,206 @@ union iavf_tx_offload {
|
||||
};
|
||||
};
|
||||
|
||||
+/* Rx Flex Descriptors
|
||||
+ * These descriptors are used instead of the legacy version descriptors
|
||||
+ */
|
||||
+union iavf_16b_rx_flex_desc {
|
||||
+ struct {
|
||||
+ __le64 pkt_addr; /* Packet buffer address */
|
||||
+ __le64 hdr_addr; /* Header buffer address */
|
||||
+ /* bit 0 of hdr_addr is DD bit */
|
||||
+ } read;
|
||||
+ struct {
|
||||
+ /* Qword 0 */
|
||||
+ u8 rxdid; /* descriptor builder profile ID */
|
||||
+ u8 mir_id_umb_cast; /* mirror=[5:0], umb=[7:6] */
|
||||
+ __le16 ptype_flex_flags0; /* ptype=[9:0], ff0=[15:10] */
|
||||
+ __le16 pkt_len; /* [15:14] are reserved */
|
||||
+ __le16 hdr_len_sph_flex_flags1; /* header=[10:0] */
|
||||
+ /* sph=[11:11] */
|
||||
+ /* ff1/ext=[15:12] */
|
||||
+
|
||||
+ /* Qword 1 */
|
||||
+ __le16 status_error0;
|
||||
+ __le16 l2tag1;
|
||||
+ __le16 flex_meta0;
|
||||
+ __le16 flex_meta1;
|
||||
+ } wb; /* writeback */
|
||||
+};
|
||||
+
|
||||
+union iavf_32b_rx_flex_desc {
|
||||
+ struct {
|
||||
+ __le64 pkt_addr; /* Packet buffer address */
|
||||
+ __le64 hdr_addr; /* Header buffer address */
|
||||
+ /* bit 0 of hdr_addr is DD bit */
|
||||
+ __le64 rsvd1;
|
||||
+ __le64 rsvd2;
|
||||
+ } read;
|
||||
+ struct {
|
||||
+ /* Qword 0 */
|
||||
+ u8 rxdid; /* descriptor builder profile ID */
|
||||
+ u8 mir_id_umb_cast; /* mirror=[5:0], umb=[7:6] */
|
||||
+ __le16 ptype_flex_flags0; /* ptype=[9:0], ff0=[15:10] */
|
||||
+ __le16 pkt_len; /* [15:14] are reserved */
|
||||
+ __le16 hdr_len_sph_flex_flags1; /* header=[10:0] */
|
||||
+ /* sph=[11:11] */
|
||||
+ /* ff1/ext=[15:12] */
|
||||
+
|
||||
+ /* Qword 1 */
|
||||
+ __le16 status_error0;
|
||||
+ __le16 l2tag1;
|
||||
+ __le16 flex_meta0;
|
||||
+ __le16 flex_meta1;
|
||||
+
|
||||
+ /* Qword 2 */
|
||||
+ __le16 status_error1;
|
||||
+ u8 flex_flags2;
|
||||
+ u8 time_stamp_low;
|
||||
+ __le16 l2tag2_1st;
|
||||
+ __le16 l2tag2_2nd;
|
||||
+
|
||||
+ /* Qword 3 */
|
||||
+ __le16 flex_meta2;
|
||||
+ __le16 flex_meta3;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ __le16 flex_meta4;
|
||||
+ __le16 flex_meta5;
|
||||
+ } flex;
|
||||
+ __le32 ts_high;
|
||||
+ } flex_ts;
|
||||
+ } wb; /* writeback */
|
||||
+};
|
||||
+
|
||||
+/* Rx Flex Descriptor for Comms Package Profile
|
||||
+ * RxDID Profile ID 16-21
|
||||
+ * Flex-field 0: RSS hash lower 16-bits
|
||||
+ * Flex-field 1: RSS hash upper 16-bits
|
||||
+ * Flex-field 2: Flow ID lower 16-bits
|
||||
+ * Flex-field 3: Flow ID upper 16-bits
|
||||
+ * Flex-field 4: AUX0
|
||||
+ * Flex-field 5: AUX1
|
||||
+ */
|
||||
+struct iavf_32b_rx_flex_desc_comms {
|
||||
+ /* Qword 0 */
|
||||
+ u8 rxdid;
|
||||
+ u8 mir_id_umb_cast;
|
||||
+ __le16 ptype_flexi_flags0;
|
||||
+ __le16 pkt_len;
|
||||
+ __le16 hdr_len_sph_flex_flags1;
|
||||
+
|
||||
+ /* Qword 1 */
|
||||
+ __le16 status_error0;
|
||||
+ __le16 l2tag1;
|
||||
+ __le32 rss_hash;
|
||||
+
|
||||
+ /* Qword 2 */
|
||||
+ __le16 status_error1;
|
||||
+ u8 flexi_flags2;
|
||||
+ u8 ts_low;
|
||||
+ __le16 l2tag2_1st;
|
||||
+ __le16 l2tag2_2nd;
|
||||
+
|
||||
+ /* Qword 3 */
|
||||
+ __le32 flow_id;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ __le16 aux0;
|
||||
+ __le16 aux1;
|
||||
+ } flex;
|
||||
+ __le32 ts_high;
|
||||
+ } flex_ts;
|
||||
+};
|
||||
+
|
||||
+/* Rx Flex Descriptor for Comms Package Profile
|
||||
+ * RxDID Profile ID 22-23 (swap Hash and FlowID)
|
||||
+ * Flex-field 0: Flow ID lower 16-bits
|
||||
+ * Flex-field 1: Flow ID upper 16-bits
|
||||
+ * Flex-field 2: RSS hash lower 16-bits
|
||||
+ * Flex-field 3: RSS hash upper 16-bits
|
||||
+ * Flex-field 4: AUX0
|
||||
+ * Flex-field 5: AUX1
|
||||
+ */
|
||||
+struct iavf_32b_rx_flex_desc_comms_ovs {
|
||||
+ /* Qword 0 */
|
||||
+ u8 rxdid;
|
||||
+ u8 mir_id_umb_cast;
|
||||
+ __le16 ptype_flexi_flags0;
|
||||
+ __le16 pkt_len;
|
||||
+ __le16 hdr_len_sph_flex_flags1;
|
||||
+
|
||||
+ /* Qword 1 */
|
||||
+ __le16 status_error0;
|
||||
+ __le16 l2tag1;
|
||||
+ __le32 flow_id;
|
||||
+
|
||||
+ /* Qword 2 */
|
||||
+ __le16 status_error1;
|
||||
+ u8 flexi_flags2;
|
||||
+ u8 ts_low;
|
||||
+ __le16 l2tag2_1st;
|
||||
+ __le16 l2tag2_2nd;
|
||||
+
|
||||
+ /* Qword 3 */
|
||||
+ __le32 rss_hash;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ __le16 aux0;
|
||||
+ __le16 aux1;
|
||||
+ } flex;
|
||||
+ __le32 ts_high;
|
||||
+ } flex_ts;
|
||||
+};
|
||||
+
|
||||
+/* Receive Flex Descriptor profile IDs: There are a total
|
||||
+ * of 64 profiles where profile IDs 0/1 are for legacy; and
|
||||
+ * profiles 2-63 are flex profiles that can be programmed
|
||||
+ * with a specific metadata (profile 7 reserved for HW)
|
||||
+ */
|
||||
+enum iavf_rxdid {
|
||||
+ IAVF_RXDID_LEGACY_0 = 0,
|
||||
+ IAVF_RXDID_LEGACY_1 = 1,
|
||||
+ IAVF_RXDID_FLEX_NIC = 2,
|
||||
+ IAVF_RXDID_FLEX_NIC_2 = 6,
|
||||
+ IAVF_RXDID_HW = 7,
|
||||
+ IAVF_RXDID_COMMS_GENERIC = 16,
|
||||
+ IAVF_RXDID_COMMS_AUX_VLAN = 17,
|
||||
+ IAVF_RXDID_COMMS_AUX_IPV4 = 18,
|
||||
+ IAVF_RXDID_COMMS_AUX_IPV6 = 19,
|
||||
+ IAVF_RXDID_COMMS_AUX_IPV6_FLOW = 20,
|
||||
+ IAVF_RXDID_COMMS_AUX_TCP = 21,
|
||||
+ IAVF_RXDID_COMMS_OVS_1 = 22,
|
||||
+ IAVF_RXDID_COMMS_OVS_2 = 23,
|
||||
+ IAVF_RXDID_LAST = 63,
|
||||
+};
|
||||
+
|
||||
+enum iavf_rx_flex_desc_status_error_0_bits {
|
||||
+ /* Note: These are predefined bit offsets */
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_DD_S = 0,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_EOF_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_HBO_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_L3L4P_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XSUM_IPE_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XSUM_L4E_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XSUM_EUDPE_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_LPBK_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_IPV6EXADD_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_RXE_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_CRCP_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_RSS_VALID_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_L2TAG1P_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XTRMD0_VALID_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_XTRMD1_VALID_S,
|
||||
+ IAVF_RX_FLEX_DESC_STATUS0_LAST /* this entry must be last!!! */
|
||||
+};
|
||||
+
|
||||
+/* for iavf_32b_rx_flex_desc.ptype_flex_flags0 member */
|
||||
+#define IAVF_RX_FLEX_DESC_PTYPE_M (0x3FF) /* 10-bits */
|
||||
+
|
||||
+/* for iavf_32b_rx_flex_desc.pkt_len member */
|
||||
+#define IAVF_RX_FLX_DESC_PKT_LEN_M (0x3FFF) /* 14-bits */
|
||||
+
|
||||
int iavf_dev_rx_queue_setup(struct rte_eth_dev *dev,
|
||||
uint16_t queue_idx,
|
||||
uint16_t nb_desc,
|
||||
--
|
||||
2.17.1
|
||||
|
33
build/external/patches/dpdk_20.02/0008-net-iavf-return-error-if-opcode-is-mismatched.patch
vendored
Normal file
33
build/external/patches/dpdk_20.02/0008-net-iavf-return-error-if-opcode-is-mismatched.patch
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
From 91d510242b7aae1aff4468059840feff4075f99c Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:01 +0800
|
||||
Subject: [DPDK 08/17] net/iavf: return error if opcode is mismatched
|
||||
|
||||
Adds error return when the opcode of read message is
|
||||
mismatched which is received from adminQ.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf_vchnl.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c
|
||||
index fa4da3a6d..b7fb05d32 100644
|
||||
--- a/drivers/net/iavf/iavf_vchnl.c
|
||||
+++ b/drivers/net/iavf/iavf_vchnl.c
|
||||
@@ -52,9 +52,11 @@ iavf_read_msg_from_pf(struct iavf_adapter *adapter, uint16_t buf_len,
|
||||
PMD_DRV_LOG(DEBUG, "AQ from pf carries opcode %u, retval %d",
|
||||
opcode, vf->cmd_retval);
|
||||
|
||||
- if (opcode != vf->pend_cmd)
|
||||
+ if (opcode != vf->pend_cmd) {
|
||||
PMD_DRV_LOG(WARNING, "command mismatch, expect %u, get %u",
|
||||
vf->pend_cmd, opcode);
|
||||
+ return IAVF_ERR_OPCODE_MISMATCH;
|
||||
+ }
|
||||
|
||||
return IAVF_SUCCESS;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
729
build/external/patches/dpdk_20.02/0009-net-iavf-flexible-Rx-descriptor-support-in-normal-pa.patch
vendored
Normal file
729
build/external/patches/dpdk_20.02/0009-net-iavf-flexible-Rx-descriptor-support-in-normal-pa.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
671
build/external/patches/dpdk_20.02/0010-net-iavf-flexible-Rx-descriptor-support-in-AVX-path.patch
vendored
Normal file
671
build/external/patches/dpdk_20.02/0010-net-iavf-flexible-Rx-descriptor-support-in-AVX-path.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
78
build/external/patches/dpdk_20.02/0011-net-iavf-add-flow-director-enabled-switch-value.patch
vendored
Normal file
78
build/external/patches/dpdk_20.02/0011-net-iavf-add-flow-director-enabled-switch-value.patch
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
From e69d36c549609c02b6814cd06232e340fe0b873b Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:05 +0800
|
||||
Subject: [DPDK 11/17] net/iavf: add flow director enabled switch value
|
||||
|
||||
The commit adds fdir_enabled flag into iavf_rx_queue structure
|
||||
to identify if fdir id is active. Rx data path can be benefit if
|
||||
fdir id parsing is not needed, especially in vector path.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf.h | 1 +
|
||||
drivers/net/iavf/iavf_rxtx.h | 30 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h
|
||||
index 67d625053..0cd0117c2 100644
|
||||
--- a/drivers/net/iavf/iavf.h
|
||||
+++ b/drivers/net/iavf/iavf.h
|
||||
@@ -134,6 +134,7 @@ struct iavf_adapter {
|
||||
bool tx_vec_allowed;
|
||||
const uint32_t *ptype_tbl;
|
||||
bool stopped;
|
||||
+ uint16_t fdir_ref_cnt;
|
||||
};
|
||||
|
||||
/* IAVF_DEV_PRIVATE_TO */
|
||||
diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h
|
||||
index 8e1db2588..f37438953 100644
|
||||
--- a/drivers/net/iavf/iavf_rxtx.h
|
||||
+++ b/drivers/net/iavf/iavf_rxtx.h
|
||||
@@ -103,6 +103,7 @@ struct iavf_rx_queue {
|
||||
|
||||
uint16_t port_id; /* device port ID */
|
||||
uint8_t crc_len; /* 0 if CRC stripped, 4 otherwise */
|
||||
+ uint8_t fdir_enabled; /* 0 if FDIR disabled, 1 when enabled */
|
||||
uint16_t queue_id; /* Rx queue index */
|
||||
uint16_t rx_buf_len; /* The packet buffer size */
|
||||
uint16_t rx_hdr_len; /* The header buffer size */
|
||||
@@ -485,6 +486,35 @@ void iavf_dump_tx_descriptor(const struct iavf_tx_queue *txq,
|
||||
tx_desc->cmd_type_offset_bsz);
|
||||
}
|
||||
|
||||
+#define FDIR_PROC_ENABLE_PER_QUEUE(ad, on) do { \
|
||||
+ int i; \
|
||||
+ for (i = 0; i < (ad)->eth_dev->data->nb_rx_queues; i++) { \
|
||||
+ struct iavf_rx_queue *rxq = (ad)->eth_dev->data->rx_queues[i]; \
|
||||
+ if (!rxq) \
|
||||
+ continue; \
|
||||
+ rxq->fdir_enabled = on; \
|
||||
+ } \
|
||||
+ PMD_DRV_LOG(DEBUG, "FDIR processing on RX set to %d", on); \
|
||||
+} while (0)
|
||||
+
|
||||
+/* Enable/disable flow director Rx processing in data path. */
|
||||
+static inline
|
||||
+void iavf_fdir_rx_proc_enable(struct iavf_adapter *ad, bool on)
|
||||
+{
|
||||
+ if (on) {
|
||||
+ /* enable flow director processing */
|
||||
+ if (ad->fdir_ref_cnt++ == 0)
|
||||
+ FDIR_PROC_ENABLE_PER_QUEUE(ad, on);
|
||||
+ } else {
|
||||
+ if (ad->fdir_ref_cnt >= 1) {
|
||||
+ ad->fdir_ref_cnt--;
|
||||
+
|
||||
+ if (ad->fdir_ref_cnt == 0)
|
||||
+ FDIR_PROC_ENABLE_PER_QUEUE(ad, on);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
#ifdef RTE_LIBRTE_IAVF_DEBUG_DUMP_DESC
|
||||
#define IAVF_DUMP_RX_DESC(rxq, desc, rx_id) \
|
||||
iavf_dump_rx_descriptor(rxq, desc, rx_id)
|
||||
--
|
||||
2.17.1
|
||||
|
113
build/external/patches/dpdk_20.02/0012-net-iavf-support-flow-mark-in-normal-data-path.patch
vendored
Normal file
113
build/external/patches/dpdk_20.02/0012-net-iavf-support-flow-mark-in-normal-data-path.patch
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
From 8aa451f16a44c4d278e38991b0c24e89a5a9aff2 Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:06 +0800
|
||||
Subject: [DPDK 12/17] net/iavf: support flow mark in normal data path
|
||||
|
||||
Support Flow Director mark ID parsing in normal path.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf.h | 3 +++
|
||||
drivers/net/iavf/iavf_rxtx.c | 37 ++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 40 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h
|
||||
index 0cd0117c2..b63efd4e8 100644
|
||||
--- a/drivers/net/iavf/iavf.h
|
||||
+++ b/drivers/net/iavf/iavf.h
|
||||
@@ -67,6 +67,9 @@
|
||||
#define IAVF_48_BIT_WIDTH (CHAR_BIT * 6)
|
||||
#define IAVF_48_BIT_MASK RTE_LEN2MASK(IAVF_48_BIT_WIDTH, uint64_t)
|
||||
|
||||
+#define IAVF_RX_DESC_EXT_STATUS_FLEXBH_MASK 0x03
|
||||
+#define IAVF_RX_DESC_EXT_STATUS_FLEXBH_FD_ID 0x01
|
||||
+
|
||||
struct iavf_adapter;
|
||||
struct iavf_rx_queue;
|
||||
struct iavf_tx_queue;
|
||||
diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
|
||||
index 34c41d104..ca47c6ab6 100644
|
||||
--- a/drivers/net/iavf/iavf_rxtx.c
|
||||
+++ b/drivers/net/iavf/iavf_rxtx.c
|
||||
@@ -756,6 +756,10 @@ iavf_rxd_to_pkt_flags(uint64_t qword)
|
||||
IAVF_RX_DESC_FLTSTAT_RSS_HASH) ==
|
||||
IAVF_RX_DESC_FLTSTAT_RSS_HASH) ? PKT_RX_RSS_HASH : 0;
|
||||
|
||||
+ /* Check if FDIR Match */
|
||||
+ flags |= (qword & (1 << IAVF_RX_DESC_STATUS_FLM_SHIFT) ?
|
||||
+ PKT_RX_FDIR : 0);
|
||||
+
|
||||
if (likely((error_bits & IAVF_RX_ERR_BITS) == 0)) {
|
||||
flags |= (PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_GOOD);
|
||||
return flags;
|
||||
@@ -776,6 +780,25 @@ iavf_rxd_to_pkt_flags(uint64_t qword)
|
||||
return flags;
|
||||
}
|
||||
|
||||
+static inline uint64_t
|
||||
+iavf_rxd_build_fdir(volatile union iavf_rx_desc *rxdp, struct rte_mbuf *mb)
|
||||
+{
|
||||
+ uint64_t flags = 0;
|
||||
+ uint16_t flexbh;
|
||||
+
|
||||
+ flexbh = (rte_le_to_cpu_32(rxdp->wb.qword2.ext_status) >>
|
||||
+ IAVF_RX_DESC_EXT_STATUS_FLEXBH_SHIFT) &
|
||||
+ IAVF_RX_DESC_EXT_STATUS_FLEXBH_MASK;
|
||||
+
|
||||
+ if (flexbh == IAVF_RX_DESC_EXT_STATUS_FLEXBH_FD_ID) {
|
||||
+ mb->hash.fdir.hi =
|
||||
+ rte_le_to_cpu_32(rxdp->wb.qword3.hi_dword.fd_id);
|
||||
+ flags |= PKT_RX_FDIR_ID;
|
||||
+ }
|
||||
+
|
||||
+ return flags;
|
||||
+}
|
||||
+
|
||||
/* Translate the rx flex descriptor status to pkt flags */
|
||||
static inline void
|
||||
iavf_rxd_to_pkt_fields(struct rte_mbuf *mb,
|
||||
@@ -792,6 +815,11 @@ iavf_rxd_to_pkt_fields(struct rte_mbuf *mb,
|
||||
mb->hash.rss = rte_le_to_cpu_32(desc->rss_hash);
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+ if (desc->flow_id != 0xFFFFFFFF) {
|
||||
+ mb->ol_flags |= PKT_RX_FDIR | PKT_RX_FDIR_ID;
|
||||
+ mb->hash.fdir.hi = rte_le_to_cpu_32(desc->flow_id);
|
||||
+ }
|
||||
}
|
||||
|
||||
#define IAVF_RX_FLEX_ERR0_BITS \
|
||||
@@ -951,6 +979,9 @@ iavf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
|
||||
rxm->hash.rss =
|
||||
rte_le_to_cpu_32(rxd.wb.qword0.hi_dword.rss);
|
||||
|
||||
+ if (pkt_flags & PKT_RX_FDIR)
|
||||
+ pkt_flags |= iavf_rxd_build_fdir(&rxd, rxm);
|
||||
+
|
||||
rxm->ol_flags |= pkt_flags;
|
||||
|
||||
rx_pkts[nb_rx++] = rxm;
|
||||
@@ -1349,6 +1380,9 @@ iavf_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
first_seg->hash.rss =
|
||||
rte_le_to_cpu_32(rxd.wb.qword0.hi_dword.rss);
|
||||
|
||||
+ if (pkt_flags & PKT_RX_FDIR)
|
||||
+ pkt_flags |= iavf_rxd_build_fdir(&rxd, first_seg);
|
||||
+
|
||||
first_seg->ol_flags |= pkt_flags;
|
||||
|
||||
/* Prefetch data of first segment, if configured to do so. */
|
||||
@@ -1515,6 +1549,9 @@ iavf_rx_scan_hw_ring(struct iavf_rx_queue *rxq)
|
||||
mb->hash.rss = rte_le_to_cpu_32(
|
||||
rxdp[j].wb.qword0.hi_dword.rss);
|
||||
|
||||
+ if (pkt_flags & PKT_RX_FDIR)
|
||||
+ pkt_flags |= iavf_rxd_build_fdir(&rxdp[j], mb);
|
||||
+
|
||||
mb->ol_flags |= pkt_flags;
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
121
build/external/patches/dpdk_20.02/0013-net-iavf-support-flow-mark-in-AVX-path.patch
vendored
Normal file
121
build/external/patches/dpdk_20.02/0013-net-iavf-support-flow-mark-in-AVX-path.patch
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
From f5de510dd842be737259ef31d1300b57890ae90e Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:07 +0800
|
||||
Subject: [DPDK 13/17] net/iavf: support flow mark in AVX path
|
||||
|
||||
Support Flow Director mark ID parsing from Flex
|
||||
Rx descriptor in AVX path.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf_rxtx_vec_avx2.c | 72 +++++++++++++++++++++++++--
|
||||
1 file changed, 67 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx2.c b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
index b23188fd3..3bf5833fa 100644
|
||||
--- a/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
+++ b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
@@ -616,6 +616,25 @@ _iavf_recv_raw_pkts_vec_avx2(struct iavf_rx_queue *rxq,
|
||||
return received;
|
||||
}
|
||||
|
||||
+static inline __m256i
|
||||
+flex_rxd_to_fdir_flags_vec_avx2(const __m256i fdir_id0_7)
|
||||
+{
|
||||
+#define FDID_MIS_MAGIC 0xFFFFFFFF
|
||||
+ RTE_BUILD_BUG_ON(PKT_RX_FDIR != (1 << 2));
|
||||
+ RTE_BUILD_BUG_ON(PKT_RX_FDIR_ID != (1 << 13));
|
||||
+ const __m256i pkt_fdir_bit = _mm256_set1_epi32(PKT_RX_FDIR |
|
||||
+ PKT_RX_FDIR_ID);
|
||||
+ /* desc->flow_id field == 0xFFFFFFFF means fdir mismatch */
|
||||
+ const __m256i fdir_mis_mask = _mm256_set1_epi32(FDID_MIS_MAGIC);
|
||||
+ __m256i fdir_mask = _mm256_cmpeq_epi32(fdir_id0_7,
|
||||
+ fdir_mis_mask);
|
||||
+ /* this XOR op results to bit-reverse the fdir_mask */
|
||||
+ fdir_mask = _mm256_xor_si256(fdir_mask, fdir_mis_mask);
|
||||
+ const __m256i fdir_flags = _mm256_and_si256(fdir_mask, pkt_fdir_bit);
|
||||
+
|
||||
+ return fdir_flags;
|
||||
+}
|
||||
+
|
||||
static inline uint16_t
|
||||
_iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
struct rte_mbuf **rx_pkts,
|
||||
@@ -678,8 +697,8 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
const __m256i shuf_msk =
|
||||
_mm256_set_epi8
|
||||
(/* first descriptor */
|
||||
- 15, 14,
|
||||
- 13, 12, /* octet 12~15, 32 bits rss */
|
||||
+ 0xFF, 0xFF,
|
||||
+ 0xFF, 0xFF, /* rss not supported */
|
||||
11, 10, /* octet 10~11, 16 bits vlan_macip */
|
||||
5, 4, /* octet 4~5, 16 bits data_len */
|
||||
0xFF, 0xFF, /* skip hi 16 bits pkt_len, zero out */
|
||||
@@ -687,8 +706,8 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
0xFF, 0xFF, /* pkt_type set as unknown */
|
||||
0xFF, 0xFF, /*pkt_type set as unknown */
|
||||
/* second descriptor */
|
||||
- 15, 14,
|
||||
- 13, 12, /* octet 12~15, 32 bits rss */
|
||||
+ 0xFF, 0xFF,
|
||||
+ 0xFF, 0xFF, /* rss not supported */
|
||||
11, 10, /* octet 10~11, 16 bits vlan_macip */
|
||||
5, 4, /* octet 4~5, 16 bits data_len */
|
||||
0xFF, 0xFF, /* skip hi 16 bits pkt_len, zero out */
|
||||
@@ -930,8 +949,51 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
rss_vlan_flag_bits);
|
||||
|
||||
/* merge flags */
|
||||
- const __m256i mbuf_flags = _mm256_or_si256(l3_l4_flags,
|
||||
+ __m256i mbuf_flags = _mm256_or_si256(l3_l4_flags,
|
||||
rss_vlan_flags);
|
||||
+
|
||||
+ if (rxq->fdir_enabled) {
|
||||
+ const __m256i fdir_id4_7 =
|
||||
+ _mm256_unpackhi_epi32(raw_desc6_7, raw_desc4_5);
|
||||
+
|
||||
+ const __m256i fdir_id0_3 =
|
||||
+ _mm256_unpackhi_epi32(raw_desc2_3, raw_desc0_1);
|
||||
+
|
||||
+ const __m256i fdir_id0_7 =
|
||||
+ _mm256_unpackhi_epi64(fdir_id4_7, fdir_id0_3);
|
||||
+
|
||||
+ const __m256i fdir_flags =
|
||||
+ flex_rxd_to_fdir_flags_vec_avx2(fdir_id0_7);
|
||||
+
|
||||
+ /* merge with fdir_flags */
|
||||
+ mbuf_flags = _mm256_or_si256(mbuf_flags, fdir_flags);
|
||||
+
|
||||
+ /* write to mbuf: have to use scalar store here */
|
||||
+ rx_pkts[i + 0]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 3);
|
||||
+
|
||||
+ rx_pkts[i + 1]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 7);
|
||||
+
|
||||
+ rx_pkts[i + 2]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 2);
|
||||
+
|
||||
+ rx_pkts[i + 3]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 6);
|
||||
+
|
||||
+ rx_pkts[i + 4]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 1);
|
||||
+
|
||||
+ rx_pkts[i + 5]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 5);
|
||||
+
|
||||
+ rx_pkts[i + 6]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 0);
|
||||
+
|
||||
+ rx_pkts[i + 7]->hash.fdir.hi =
|
||||
+ _mm256_extract_epi32(fdir_id0_7, 4);
|
||||
+ } /* if() on fdir_enabled */
|
||||
+
|
||||
/**
|
||||
* At this point, we have the 8 sets of flags in the low 16-bits
|
||||
* of each 32-bit value in vlan0.
|
||||
--
|
||||
2.17.1
|
||||
|
133
build/external/patches/dpdk_20.02/0014-net-iavf-add-RSS-hash-parsing-in-AVX-path.patch
vendored
Normal file
133
build/external/patches/dpdk_20.02/0014-net-iavf-add-RSS-hash-parsing-in-AVX-path.patch
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
From d338aa7cb45638b3a14177a8d83ef01c4ec20d1b Mon Sep 17 00:00:00 2001
|
||||
From: Leyi Rong <leyi.rong@intel.com>
|
||||
Date: Wed, 8 Apr 2020 14:22:09 +0800
|
||||
Subject: [DPDK 14/17] net/iavf: add RSS hash parsing in AVX path
|
||||
|
||||
Support RSS hash parsing from Flex Rx
|
||||
descriptor in AVX data path.
|
||||
|
||||
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
|
||||
---
|
||||
drivers/net/iavf/iavf_rxtx_vec_avx2.c | 92 ++++++++++++++++++++++++++-
|
||||
1 file changed, 90 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx2.c b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
index 3bf5833fa..22f1b7887 100644
|
||||
--- a/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
+++ b/drivers/net/iavf/iavf_rxtx_vec_avx2.c
|
||||
@@ -698,7 +698,7 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
_mm256_set_epi8
|
||||
(/* first descriptor */
|
||||
0xFF, 0xFF,
|
||||
- 0xFF, 0xFF, /* rss not supported */
|
||||
+ 0xFF, 0xFF, /* rss hash parsed separately */
|
||||
11, 10, /* octet 10~11, 16 bits vlan_macip */
|
||||
5, 4, /* octet 4~5, 16 bits data_len */
|
||||
0xFF, 0xFF, /* skip hi 16 bits pkt_len, zero out */
|
||||
@@ -707,7 +707,7 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
0xFF, 0xFF, /*pkt_type set as unknown */
|
||||
/* second descriptor */
|
||||
0xFF, 0xFF,
|
||||
- 0xFF, 0xFF, /* rss not supported */
|
||||
+ 0xFF, 0xFF, /* rss hash parsed separately */
|
||||
11, 10, /* octet 10~11, 16 bits vlan_macip */
|
||||
5, 4, /* octet 4~5, 16 bits data_len */
|
||||
0xFF, 0xFF, /* skip hi 16 bits pkt_len, zero out */
|
||||
@@ -994,6 +994,94 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq,
|
||||
_mm256_extract_epi32(fdir_id0_7, 4);
|
||||
} /* if() on fdir_enabled */
|
||||
|
||||
+ /**
|
||||
+ * needs to load 2nd 16B of each desc for RSS hash parsing,
|
||||
+ * will cause performance drop to get into this context.
|
||||
+ */
|
||||
+ if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads &
|
||||
+ DEV_RX_OFFLOAD_RSS_HASH) {
|
||||
+ /* load bottom half of every 32B desc */
|
||||
+ const __m128i raw_desc_bh7 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[7].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh6 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[6].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh5 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[5].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh4 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[4].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh3 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[3].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh2 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[2].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh1 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[1].wb.status_error1));
|
||||
+ rte_compiler_barrier();
|
||||
+ const __m128i raw_desc_bh0 =
|
||||
+ _mm_load_si128
|
||||
+ ((void *)(&rxdp[0].wb.status_error1));
|
||||
+
|
||||
+ __m256i raw_desc_bh6_7 =
|
||||
+ _mm256_inserti128_si256
|
||||
+ (_mm256_castsi128_si256(raw_desc_bh6),
|
||||
+ raw_desc_bh7, 1);
|
||||
+ __m256i raw_desc_bh4_5 =
|
||||
+ _mm256_inserti128_si256
|
||||
+ (_mm256_castsi128_si256(raw_desc_bh4),
|
||||
+ raw_desc_bh5, 1);
|
||||
+ __m256i raw_desc_bh2_3 =
|
||||
+ _mm256_inserti128_si256
|
||||
+ (_mm256_castsi128_si256(raw_desc_bh2),
|
||||
+ raw_desc_bh3, 1);
|
||||
+ __m256i raw_desc_bh0_1 =
|
||||
+ _mm256_inserti128_si256
|
||||
+ (_mm256_castsi128_si256(raw_desc_bh0),
|
||||
+ raw_desc_bh1, 1);
|
||||
+
|
||||
+ /**
|
||||
+ * to shift the 32b RSS hash value to the
|
||||
+ * highest 32b of each 128b before mask
|
||||
+ */
|
||||
+ __m256i rss_hash6_7 =
|
||||
+ _mm256_slli_epi64(raw_desc_bh6_7, 32);
|
||||
+ __m256i rss_hash4_5 =
|
||||
+ _mm256_slli_epi64(raw_desc_bh4_5, 32);
|
||||
+ __m256i rss_hash2_3 =
|
||||
+ _mm256_slli_epi64(raw_desc_bh2_3, 32);
|
||||
+ __m256i rss_hash0_1 =
|
||||
+ _mm256_slli_epi64(raw_desc_bh0_1, 32);
|
||||
+
|
||||
+ __m256i rss_hash_msk =
|
||||
+ _mm256_set_epi32(0xFFFFFFFF, 0, 0, 0,
|
||||
+ 0xFFFFFFFF, 0, 0, 0);
|
||||
+
|
||||
+ rss_hash6_7 = _mm256_and_si256
|
||||
+ (rss_hash6_7, rss_hash_msk);
|
||||
+ rss_hash4_5 = _mm256_and_si256
|
||||
+ (rss_hash4_5, rss_hash_msk);
|
||||
+ rss_hash2_3 = _mm256_and_si256
|
||||
+ (rss_hash2_3, rss_hash_msk);
|
||||
+ rss_hash0_1 = _mm256_and_si256
|
||||
+ (rss_hash0_1, rss_hash_msk);
|
||||
+
|
||||
+ mb6_7 = _mm256_or_si256(mb6_7, rss_hash6_7);
|
||||
+ mb4_5 = _mm256_or_si256(mb4_5, rss_hash4_5);
|
||||
+ mb2_3 = _mm256_or_si256(mb2_3, rss_hash2_3);
|
||||
+ mb0_1 = _mm256_or_si256(mb0_1, rss_hash0_1);
|
||||
+ } /* if() on RSS hash parsing */
|
||||
+
|
||||
/**
|
||||
* At this point, we have the 8 sets of flags in the low 16-bits
|
||||
* of each 32-bit value in vlan0.
|
||||
--
|
||||
2.17.1
|
||||
|
1531
build/external/patches/dpdk_20.02/0015-net-iavf-support-generic-flow.patch
vendored
Normal file
1531
build/external/patches/dpdk_20.02/0015-net-iavf-support-generic-flow.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
238
build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch
vendored
Normal file
238
build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch
vendored
Normal file
@ -0,0 +1,238 @@
|
||||
From 5e4e6320a3c306b277d71a1811cf616fc2a6de93 Mon Sep 17 00:00:00 2001
|
||||
From: Chenmin Sun <chenmin.sun@intel.com>
|
||||
Date: Fri, 17 Apr 2020 05:53:35 +0800
|
||||
Subject: [DPDK 16/17] common/iavf: add flow director support in virtual
|
||||
channel
|
||||
|
||||
Adds new ops and structures to support VF to add/delete/validate/
|
||||
query flow director.
|
||||
|
||||
ADD and VALIDATE FDIR share one ops: VIRTCHNL_OP_ADD_FDIR_FILTER.
|
||||
VF sends this request to PF by filling out the related field in
|
||||
virtchnl_fdir_add. If the rule is created successfully, PF
|
||||
will return flow id and program status to VF. If the rule is
|
||||
validated successfully, the PF will only return program status
|
||||
to VF.
|
||||
|
||||
DELETE FDIR uses ops: VIRTCHNL_OP_DEL_FDIR_FILTER.
|
||||
VF sends this request to PF by filling out the related field in
|
||||
virtchnl_fdir_del. If the rule is deleted successfully, PF
|
||||
will return program status to VF.
|
||||
|
||||
Query FDIR uses ops: VIRTCHNL_OP_QUERY_FDIR_FILTER.
|
||||
VF sends this request to PF by filling out the related field in
|
||||
virtchnl_fdir_query. If the request is successfully done by PF,
|
||||
PF will return program status and query info to VF.
|
||||
|
||||
Signed-off-by: Simei Su <simei.su@intel.com>
|
||||
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
|
||||
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
|
||||
Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
|
||||
---
|
||||
drivers/common/iavf/virtchnl.h | 162 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 162 insertions(+)
|
||||
|
||||
diff --git a/drivers/common/iavf/virtchnl.h b/drivers/common/iavf/virtchnl.h
|
||||
index 667762643..4dbf9c1c2 100644
|
||||
--- a/drivers/common/iavf/virtchnl.h
|
||||
+++ b/drivers/common/iavf/virtchnl.h
|
||||
@@ -134,6 +134,9 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_DCF_GET_VSI_MAP = 42,
|
||||
VIRTCHNL_OP_DCF_GET_PKG_INFO = 43,
|
||||
VIRTCHNL_OP_GET_SUPPORTED_RXDIDS = 44,
|
||||
+ VIRTCHNL_OP_ADD_FDIR_FILTER = 47,
|
||||
+ VIRTCHNL_OP_DEL_FDIR_FILTER = 48,
|
||||
+ VIRTCHNL_OP_QUERY_FDIR_FILTER = 49,
|
||||
};
|
||||
|
||||
/* These macros are used to generate compilation errors if a structure/union
|
||||
@@ -249,6 +252,7 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
|
||||
#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_FDIR_PF 0X10000000
|
||||
/* 0X80000000 is reserved */
|
||||
|
||||
/* Define below the capability flags that are not offloads */
|
||||
@@ -629,6 +633,11 @@ enum virtchnl_action {
|
||||
/* action types */
|
||||
VIRTCHNL_ACTION_DROP = 0,
|
||||
VIRTCHNL_ACTION_TC_REDIRECT,
|
||||
+ VIRTCHNL_ACTION_PASSTHRU,
|
||||
+ VIRTCHNL_ACTION_QUEUE,
|
||||
+ VIRTCHNL_ACTION_Q_REGION,
|
||||
+ VIRTCHNL_ACTION_MARK,
|
||||
+ VIRTCHNL_ACTION_COUNT,
|
||||
};
|
||||
|
||||
enum virtchnl_flow_type {
|
||||
@@ -925,6 +934,150 @@ struct virtchnl_proto_hdrs {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(2312, virtchnl_proto_hdrs);
|
||||
|
||||
+/* action configuration for FDIR */
|
||||
+struct virtchnl_filter_action {
|
||||
+ enum virtchnl_action type;
|
||||
+ union {
|
||||
+ /* used for queue and qgroup action */
|
||||
+ struct {
|
||||
+ u16 index;
|
||||
+ u8 region;
|
||||
+ } queue;
|
||||
+ /* used for count action */
|
||||
+ struct {
|
||||
+ /* share counter ID with other flow rules */
|
||||
+ u8 shared;
|
||||
+ u32 id; /* counter ID */
|
||||
+ } count;
|
||||
+ /* used for mark action */
|
||||
+ u32 mark_id;
|
||||
+ u8 reserve[32];
|
||||
+ } act_conf;
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(36, virtchnl_filter_action);
|
||||
+
|
||||
+#define VIRTCHNL_MAX_NUM_ACTIONS 8
|
||||
+
|
||||
+struct virtchnl_filter_action_set {
|
||||
+ /* action number must be less then VIRTCHNL_MAX_NUM_ACTIONS */
|
||||
+ int count;
|
||||
+ struct virtchnl_filter_action actions[VIRTCHNL_MAX_NUM_ACTIONS];
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(292, virtchnl_filter_action_set);
|
||||
+
|
||||
+/* pattern and action for FDIR rule */
|
||||
+struct virtchnl_fdir_rule {
|
||||
+ struct virtchnl_proto_hdrs proto_hdrs;
|
||||
+ struct virtchnl_filter_action_set action_set;
|
||||
+};
|
||||
+
|
||||
+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
|
||||
+ * The request can be OP_ADD/DEL/QUERY_FDIR_FILTER.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE
|
||||
+ * OP_ADD_FDIR_FILTER request is failed due to no Hardware resource.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_EXIST
|
||||
+ * OP_ADD_FDIR_FILTER request is failed due to the rule is already existed.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_CONFLICT
|
||||
+ * OP_ADD_FDIR_FILTER request is failed due to conflict with existing rule.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_NONEXIST
|
||||
+ * OP_DEL_FDIR_FILTER request is failed due to this rule doesn't exist.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_INVALID
|
||||
+ * OP_ADD_FDIR_FILTER request is failed due to parameters validation
|
||||
+ * or HW doesn't support.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_RULE_TIMEOUT
|
||||
+ * OP_ADD/DEL_FDIR_FILTER request is failed due to timing out
|
||||
+ * for programming.
|
||||
+ *
|
||||
+ * VIRTCHNL_FDIR_FAILURE_QUERY_INVALID
|
||||
+ * OP_QUERY_FDIR_FILTER request is failed due to parameters validation,
|
||||
+ * for example, VF query counter of a rule who has no counter action.
|
||||
+ */
|
||||
+enum virtchnl_fdir_prgm_status {
|
||||
+ VIRTCHNL_FDIR_SUCCESS = 0,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_NORESOURCE,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_EXIST,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_CONFLICT,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_NONEXIST,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_INVALID,
|
||||
+ VIRTCHNL_FDIR_FAILURE_RULE_TIMEOUT,
|
||||
+ VIRTCHNL_FDIR_FAILURE_QUERY_INVALID,
|
||||
+};
|
||||
+
|
||||
+/* VIRTCHNL_OP_ADD_FDIR_FILTER
|
||||
+ * VF sends this request to PF by filling out vsi_id,
|
||||
+ * validate_only and rule_cfg. PF will return flow_id
|
||||
+ * if the request is successfully done and return add_status to VF.
|
||||
+ */
|
||||
+struct virtchnl_fdir_add {
|
||||
+ u16 vsi_id; /* INPUT */
|
||||
+ /*
|
||||
+ * 1 for validating a fdir rule, 0 for creating a fdir rule.
|
||||
+ * Validate and create share one ops: VIRTCHNL_OP_ADD_FDIR_FILTER.
|
||||
+ */
|
||||
+ u16 validate_only; /* INPUT */
|
||||
+ u32 flow_id; /* OUTPUT */
|
||||
+ struct virtchnl_fdir_rule rule_cfg; /* INPUT */
|
||||
+ enum virtchnl_fdir_prgm_status status; /* OUTPUT */
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(2616, virtchnl_fdir_add);
|
||||
+
|
||||
+/* VIRTCHNL_OP_DEL_FDIR_FILTER
|
||||
+ * VF sends this request to PF by filling out vsi_id
|
||||
+ * and flow_id. PF will return del_status to VF.
|
||||
+ */
|
||||
+struct virtchnl_fdir_del {
|
||||
+ u16 vsi_id; /* INPUT */
|
||||
+ u16 pad;
|
||||
+ u32 flow_id; /* INPUT */
|
||||
+ enum virtchnl_fdir_prgm_status status; /* OUTPUT */
|
||||
+};
|
||||
+
|
||||
+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.
|
||||
+ */
|
||||
+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;
|
||||
+};
|
||||
+
|
||||
+VIRTCHNL_CHECK_STRUCT_LEN(48, virtchnl_fdir_query);
|
||||
+
|
||||
/**
|
||||
* virtchnl_vc_validate_vf_msg
|
||||
* @ver: Virtchnl version info
|
||||
@@ -1110,6 +1263,15 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
* so the valid length keeps the default value 0.
|
||||
*/
|
||||
break;
|
||||
+ case VIRTCHNL_OP_ADD_FDIR_FILTER:
|
||||
+ valid_len = sizeof(struct virtchnl_fdir_add);
|
||||
+ break;
|
||||
+ 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);
|
||||
+ break;
|
||||
/* These are always errors coming from the VF. */
|
||||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
--
|
||||
2.17.1
|
||||
|
1211
build/external/patches/dpdk_20.02/0017-net-iavf-add-support-for-FDIR-basic-rule.patch
vendored
Normal file
1211
build/external/patches/dpdk_20.02/0017-net-iavf-add-support-for-FDIR-basic-rule.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user