X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_flow.h;h=19db8fce50e60e84e009e3f1c69a74d7586ce32a;hb=5b2b9236aacc5d4fcc4e950177ce5f4d32780c46;hp=35472ad3e8ccd45575ed73ea55db1bf77adbc1f5;hpb=44c0947bae498735c551e3bee563926602e54e64;p=dpdk.git diff --git a/drivers/net/sfc/sfc_flow.h b/drivers/net/sfc/sfc_flow.h index 35472ad3e8..19db8fce50 100644 --- a/drivers/net/sfc/sfc_flow.h +++ b/drivers/net/sfc/sfc_flow.h @@ -19,7 +19,13 @@ extern "C" { #endif -#if EFSYS_OPT_RX_SCALE +/* + * The maximum number of fully elaborated hardware filter specifications + * which can be produced from a template by means of multiplication, if + * missing match flags are needed to be taken into account + */ +#define SF_FLOW_SPEC_NB_FILTERS_MAX 8 + /* RSS configuration storage */ struct sfc_flow_rss { unsigned int rxq_hw_index_min; @@ -28,15 +34,43 @@ struct sfc_flow_rss { uint8_t rss_key[EFX_RSS_KEY_SIZE]; unsigned int rss_tbl[EFX_RSS_TBL_SIZE]; }; -#endif /* EFSYS_OPT_RX_SCALE */ + +/* Flow engines supported by the implementation */ +enum sfc_flow_spec_type { + SFC_FLOW_SPEC_FILTER = 0, + + SFC_FLOW_SPEC_NTYPES +}; + +/* VNIC-specific flow specification */ +struct sfc_flow_spec_filter { + /* partial specification from flow rule */ + efx_filter_spec_t template; + /* fully elaborated hardware filters specifications */ + efx_filter_spec_t filters[SF_FLOW_SPEC_NB_FILTERS_MAX]; + /* number of complete specifications */ + unsigned int count; + /* RSS toggle */ + boolean_t rss; + /* RSS configuration */ + struct sfc_flow_rss rss_conf; +}; + +/* Flow specification */ +struct sfc_flow_spec { + /* Flow specification type (engine-based) */ + enum sfc_flow_spec_type type; + + RTE_STD_C11 + union { + /* Filter-based (VNIC level flows) specification */ + struct sfc_flow_spec_filter filter; + }; +}; /* PMD-specific definition of the opaque type from rte_flow.h */ struct rte_flow { - efx_filter_spec_t spec; /* filter specification */ -#if EFSYS_OPT_RX_SCALE - boolean_t rss; /* RSS toggle */ - struct sfc_flow_rss rss_conf; /* RSS configuration */ -#endif /* EFSYS_OPT_RX_SCALE */ + struct sfc_flow_spec spec; /* flow specification */ TAILQ_ENTRY(rte_flow) entries; /* flow list entries */ }; @@ -51,6 +85,12 @@ void sfc_flow_fini(struct sfc_adapter *sa); int sfc_flow_start(struct sfc_adapter *sa); void sfc_flow_stop(struct sfc_adapter *sa); +typedef int (sfc_flow_parse_cb_t)(struct rte_eth_dev *dev, + const struct rte_flow_item items[], + const struct rte_flow_action actions[], + struct rte_flow *flow, + struct rte_flow_error *error); + #ifdef __cplusplus } #endif