ethdev: fix RSS update when RSS is disabled
[dpdk.git] / lib / ethdev / ethdev_driver.h
index 0dac55f..69d9dc2 100644 (file)
@@ -5,6 +5,10 @@
 #ifndef _RTE_ETHDEV_DRIVER_H_
 #define _RTE_ETHDEV_DRIVER_H_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /**
  * @file
  *
@@ -138,7 +142,12 @@ struct rte_eth_dev_data {
                 * Indicates whether the device is configured:
                 * CONFIGURED(1) / NOT CONFIGURED(0)
                 */
-               dev_configured : 1;
+               dev_configured : 1,
+               /**
+                * Indicates whether the flow engine is configured:
+                * CONFIGURED(1) / NOT CONFIGURED(0)
+                */
+               flow_configured : 1;
 
        /** Queues state: HAIRPIN(2) / STARTED(1) / STOPPED(0) */
        uint8_t rx_queue_state[RTE_MAX_QUEUES_PER_PORT];
@@ -533,6 +542,13 @@ typedef int (*flow_ctrl_set_t)(struct rte_eth_dev *dev,
 typedef int (*priority_flow_ctrl_set_t)(struct rte_eth_dev *dev,
                                struct rte_eth_pfc_conf *pfc_conf);
 
+/** @internal Get info for queue based PFC on an Ethernet device. */
+typedef int (*priority_flow_ctrl_queue_info_get_t)(struct rte_eth_dev *dev,
+                       struct rte_eth_pfc_queue_info *pfc_queue_info);
+/** @internal Configure queue based PFC parameter on an Ethernet device. */
+typedef int (*priority_flow_ctrl_queue_config_t)(struct rte_eth_dev *dev,
+                       struct rte_eth_pfc_queue_conf *pfc_queue_conf);
+
 /** @internal Update RSS redirection table on an Ethernet device. */
 typedef int (*reta_update_t)(struct rte_eth_dev *dev,
                             struct rte_eth_rss_reta_entry64 *reta_conf,
@@ -990,6 +1006,73 @@ typedef int (*eth_representor_info_get_t)(struct rte_eth_dev *dev,
 typedef int (*eth_rx_metadata_negotiate_t)(struct rte_eth_dev *dev,
                                       uint64_t *features);
 
+/**
+ * @internal
+ * Get IP reassembly offload capability of a PMD.
+ *
+ * @param dev
+ *   Port (ethdev) handle
+ *
+ * @param[out] conf
+ *   IP reassembly capability supported by the PMD
+ *
+ * @return
+ *   Negative errno value on error, zero otherwise
+ */
+typedef int (*eth_ip_reassembly_capability_get_t)(struct rte_eth_dev *dev,
+               struct rte_eth_ip_reassembly_params *capa);
+
+/**
+ * @internal
+ * Get IP reassembly offload configuration parameters set in PMD.
+ *
+ * @param dev
+ *   Port (ethdev) handle
+ *
+ * @param[out] conf
+ *   Configuration parameters for IP reassembly.
+ *
+ * @return
+ *   Negative errno value on error, zero otherwise
+ */
+typedef int (*eth_ip_reassembly_conf_get_t)(struct rte_eth_dev *dev,
+               struct rte_eth_ip_reassembly_params *conf);
+
+/**
+ * @internal
+ * Set configuration parameters for enabling IP reassembly offload in hardware.
+ *
+ * @param dev
+ *   Port (ethdev) handle
+ *
+ * @param[in] conf
+ *   Configuration parameters for IP reassembly.
+ *
+ * @return
+ *   Negative errno value on error, zero otherwise
+ */
+typedef int (*eth_ip_reassembly_conf_set_t)(struct rte_eth_dev *dev,
+               const struct rte_eth_ip_reassembly_params *conf);
+
+/**
+ * @internal
+ * Dump private info from device to a file.
+ *
+ * @param dev
+ *   Port (ethdev) handle.
+ * @param file
+ *   A pointer to a file for output.
+ *
+ * @return
+ *   Negative value on error, 0 on success.
+ *
+ * @retval 0
+ *   Success
+ * @retval -EINVAL
+ *   Invalid file
+ */
+typedef int (*eth_dev_priv_dump_t)(struct rte_eth_dev *dev, FILE *file);
+
 /**
  * @internal A structure containing the functions exported by an Ethernet driver.
  */
@@ -1080,6 +1163,10 @@ struct eth_dev_ops {
        flow_ctrl_set_t            flow_ctrl_set; /**< Setup flow control */
        /** Setup priority flow control */
        priority_flow_ctrl_set_t   priority_flow_ctrl_set;
+       /** Priority flow control queue info get */
+       priority_flow_ctrl_queue_info_get_t priority_flow_ctrl_queue_info_get;
+       /** Priority flow control queue configure */
+       priority_flow_ctrl_queue_config_t priority_flow_ctrl_queue_config;
 
        /** Set Unicast Table Array */
        eth_uc_hash_table_set_t    uc_hash_table_set;
@@ -1186,6 +1273,16 @@ struct eth_dev_ops {
         * kinds of metadata to the PMD
         */
        eth_rx_metadata_negotiate_t rx_metadata_negotiate;
+
+       /** Get IP reassembly capability */
+       eth_ip_reassembly_capability_get_t ip_reassembly_capability_get;
+       /** Get IP reassembly configuration */
+       eth_ip_reassembly_conf_get_t ip_reassembly_conf_get;
+       /** Set IP reassembly configuration */
+       eth_ip_reassembly_conf_set_t ip_reassembly_conf_set;
+
+       /** Dump private info from device */
+       eth_dev_priv_dump_t eth_dev_priv_dump;
 };
 
 /**
@@ -1421,6 +1518,23 @@ rte_eth_linkstatus_get(const struct rte_eth_dev *dev,
        *dst = __atomic_load_n(src, __ATOMIC_SEQ_CST);
 }
 
+/**
+ * @internal
+ * Dummy DPDK callback for Rx/Tx packet burst.
+ *
+ * @param queue
+ *  Pointer to Rx/Tx queue
+ * @param pkts
+ *  Packet array
+ * @param nb_pkts
+ *  Number of packets in packet array
+ */
+__rte_internal
+uint16_t
+rte_eth_pkt_burst_dummy(void *queue __rte_unused,
+               struct rte_mbuf **pkts __rte_unused,
+               uint16_t nb_pkts __rte_unused);
+
 /**
  * Allocate an unique switch domain identifier.
  *
@@ -1670,6 +1784,14 @@ int
 rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,
                                  uint32_t direction);
 
+/**
+ * @internal
+ * Register mbuf dynamic field and flag for IP reassembly incomplete case.
+ */
+__rte_internal
+int
+rte_eth_ip_reassembly_dynfield_register(int *field_offset, int *flag);
+
 
 /*
  * Legacy ethdev API used internally by drivers.
@@ -1768,4 +1890,8 @@ struct rte_eth_tunnel_filter_conf {
        uint16_t queue_id;      /**< Queue assigned to if match */
 };
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _RTE_ETHDEV_DRIVER_H_ */