net/ice: add flow director create and destroy
[dpdk.git] / drivers / net / ice / ice_ethdev.h
index 6790f64..914e065 100644 (file)
@@ -241,15 +241,28 @@ struct ice_vsi {
        bool offset_loaded;
 };
 
-extern const struct rte_flow_ops ice_flow_ops;
+struct rte_flow;
+TAILQ_HEAD(ice_flow_list, rte_flow);
+
+struct ice_flow_parser_node;
+TAILQ_HEAD(ice_parser_list, ice_flow_parser_node);
 
-/* Struct to store flow created. */
-struct rte_flow {
-       TAILQ_ENTRY(rte_flow) node;
-       void *rule;
+struct ice_fdir_filter_conf {
+       struct ice_fdir_fltr input;
+       uint64_t input_set;
 };
 
-TAILQ_HEAD(ice_flow_list, rte_flow);
+/**
+ *  A structure used to define fields of a FDIR related info.
+ */
+struct ice_fdir_info {
+       struct ice_vsi *fdir_vsi;     /* pointer to fdir VSI structure */
+       struct ice_tx_queue *txq;
+       struct ice_rx_queue *rxq;
+       void *prg_pkt;                 /* memory for fdir program packet */
+       uint64_t dma_addr;             /* physic address of packet memory*/
+       struct ice_fdir_filter_conf conf;
+};
 
 struct ice_pf {
        struct ice_adapter *adapter; /* The adapter this PF associate to */
@@ -271,6 +284,11 @@ struct ice_pf {
        uint16_t lan_nb_qps; /* The number of queue pairs of LAN */
        uint16_t base_queue; /* The base queue pairs index  in the device */
        uint8_t *proto_xtr; /* Protocol extraction type for all queues */
+       uint16_t fdir_nb_qps; /* The number of queue pairs of Flow Director */
+       uint16_t fdir_qp_offset;
+       struct ice_fdir_info fdir; /* flow director info */
+       uint16_t hw_prof_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX];
+       uint16_t fdir_fltr_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX];
        struct ice_hw_port_stats stats_offset;
        struct ice_hw_port_stats stats;
        /* internal packet statistics, it should be excluded from the total */
@@ -279,6 +297,9 @@ struct ice_pf {
        bool offset_loaded;
        bool adapter_stopped;
        struct ice_flow_list flow_list;
+       struct ice_parser_list rss_parser_list;
+       struct ice_parser_list perm_parser_list;
+       struct ice_parser_list dist_parser_list;
 };
 
 #define ICE_MAX_QUEUE_NUM  2048
@@ -354,6 +375,11 @@ struct ice_vsi_vlan_pvid_info {
 #define ICE_PF_TO_ETH_DEV(pf) \
        (((struct ice_pf *)pf)->adapter->eth_dev)
 
+struct ice_vsi *
+ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type);
+int
+ice_release_vsi(struct ice_vsi *vsi);
+
 static inline int
 ice_align_floor(int n)
 {