extern "C" {
#endif
+/**
+ * RX/TX queue states
+ */
+#define RTE_ETH_QUEUE_STATE_STOPPED 0
+#define RTE_ETH_QUEUE_STATE_STARTED 1
+#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
+
+/**
+ * @internal
+ * Check if the selected Rx queue is hairpin queue.
+ *
+ * @param dev
+ * Pointer to the selected device.
+ * @param queue_id
+ * The selected queue.
+ *
+ * @return
+ * - (1) if the queue is hairpin queue, 0 otherwise.
+ */
+int rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id);
+
+/**
+ * @internal
+ * Check if the selected Tx queue is hairpin queue.
+ *
+ * @param dev
+ * Pointer to the selected device.
+ * @param queue_id
+ * The selected queue.
+ *
+ * @return
+ * - (1) if the queue is hairpin queue, 0 otherwise.
+ */
+int rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id);
+
/**
* @internal
* Returns a ethdev slot specified by the unique identifier name.
/**
* @internal
- * Release the specified ethdev port.
+ * Notify RTE_ETH_EVENT_DESTROY and release the specified ethdev port.
*
- * @param eth_dev
- * Device to be detached.
- * @return
- * - 0 on success, negative on error
- */
-int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev);
-
-/**
- * @internal
- * Release the specified ethdev port in the local process.
- * Only set ethdev state to unused, but not reset shared data since
- * it assume other processes is still using it. typically it is
- * called by a secondary process.
+ * The following PMD-managed data fields will be freed:
+ * - dev_private
+ * - mac_addrs
+ * - hash_mac_addrs
+ * If one of these fields should not be freed,
+ * it must be reset to NULL by the PMD, typically in dev_close method.
*
* @param eth_dev
* Device to be detached.
* @return
* - 0 on success, negative on error
*/
-int rte_eth_dev_release_port_secondary(struct rte_eth_dev *eth_dev);
+int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev);
/**
* @internal
* @return
* Negative errno value on error, 0 on success.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_eth_switch_domain_alloc(uint16_t *domain_id);
/**
* @return
* Negative errno value on error, 0 on success.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_eth_switch_domain_free(uint16_t domain_id);
/** Generic Ethernet device arguments */
* @return
* Negative errno value on error, 0 on success.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs);
* @return
* Negative errno value on error, 0 on success.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_eth_dev_create(struct rte_device *device, const char *name,
size_t priv_data_size,
ethdev_bus_specific_init bus_specific_init, void *bus_init_params,
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * PMD helper function for cleaing up the resources of a ethdev port on it's
+ * PMD helper function for cleaning up the resources of a ethdev port on it's
* destruction.
*
* @param ethdev
* @return
* Negative errno value on error, 0 on success.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit);
#ifdef __cplusplus