aboutsummaryrefslogtreecommitdiffstats
path: root/build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch
diff options
context:
space:
mode:
Diffstat (limited to 'build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch')
-rw-r--r--build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch238
1 files changed, 238 insertions, 0 deletions
diff --git a/build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch b/build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch
new file mode 100644
index 00000000000..adf36133c8a
--- /dev/null
+++ b/build/external/patches/dpdk_20.02/0016-common-iavf-add-flow-director-support-in-virtual-cha.patch
@@ -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
+