ethdev: add API to retrieve queue information
[dpdk.git] / lib / librte_ether / rte_ethdev.h
index d1e2f2a..c835a2f 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
  *   All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
@@ -182,6 +182,7 @@ extern "C" {
 #include <rte_devargs.h>
 #include "rte_ether.h"
 #include "rte_eth_ctrl.h"
+#include "rte_dev_info.h"
 
 struct rte_mbuf;
 
@@ -193,19 +194,29 @@ struct rte_eth_stats {
        uint64_t opackets;  /**< Total number of successfully transmitted packets.*/
        uint64_t ibytes;    /**< Total number of successfully received bytes. */
        uint64_t obytes;    /**< Total number of successfully transmitted bytes. */
-       uint64_t imissed;   /**< Total of RX missed packets (e.g full FIFO). */
-       uint64_t ibadcrc;   /**< Total of RX packets with CRC error. */
-       uint64_t ibadlen;   /**< Total of RX packets with bad length. */
+       uint64_t imissed;
+       /**< Deprecated; Total of RX missed packets (e.g full FIFO). */
+       uint64_t ibadcrc;
+       /**< Deprecated; Total of RX packets with CRC error. */
+       uint64_t ibadlen;
+       /**< Deprecated; Total of RX packets with bad length. */
        uint64_t ierrors;   /**< Total number of erroneous received packets. */
        uint64_t oerrors;   /**< Total number of failed transmitted packets. */
-       uint64_t imcasts;   /**< Total number of multicast received packets. */
+       uint64_t imcasts;
+       /**< Deprecated; Total number of multicast received packets. */
        uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */
-       uint64_t fdirmatch; /**< Total number of RX packets matching a filter. */
-       uint64_t fdirmiss;  /**< Total number of RX packets not matching any filter. */
-       uint64_t tx_pause_xon;  /**< Total nb. of XON pause frame sent. */
-       uint64_t rx_pause_xon;  /**< Total nb. of XON pause frame received. */
-       uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */
-       uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */
+       uint64_t fdirmatch;
+       /**< Deprecated; Total number of RX packets matching a filter. */
+       uint64_t fdirmiss;
+       /**< Deprecated; Total number of RX packets not matching any filter. */
+       uint64_t tx_pause_xon;
+        /**< Deprecated; Total nb. of XON pause frame sent. */
+       uint64_t rx_pause_xon;
+       /**< Deprecated; Total nb. of XON pause frame received. */
+       uint64_t tx_pause_xoff;
+       /**< Deprecated; Total nb. of XOFF pause frame sent. */
+       uint64_t rx_pause_xoff;
+       /**< Deprecated; Total nb. of XOFF pause frame received. */
        uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
        /**< Total number of queue RX packets. */
        uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
@@ -467,31 +478,33 @@ struct rte_eth_rss_conf {
 #define ETH_VMDQ_ACCEPT_BROADCAST   0x0008 /**< accept broadcast packets. */
 #define ETH_VMDQ_ACCEPT_MULTICAST   0x0010 /**< multicast promiscuous. */
 
-/* Definitions used for VMDQ mirror rules setting */
-#define ETH_VMDQ_NUM_MIRROR_RULE     4 /**< Maximum nb. of mirror rules. . */
+/** Maximum nb. of vlan per mirror rule */
+#define ETH_MIRROR_MAX_VLANS       64
 
-#define ETH_VMDQ_POOL_MIRROR    0x0001 /**< Virtual Pool Mirroring. */
-#define ETH_VMDQ_UPLINK_MIRROR  0x0002 /**< Uplink Port Mirroring. */
-#define ETH_VMDQ_DOWNLIN_MIRROR 0x0004 /**< Downlink Port Mirroring. */
-#define ETH_VMDQ_VLAN_MIRROR    0x0008 /**< VLAN Mirroring. */
+#define ETH_MIRROR_VIRTUAL_POOL_UP     0x01  /**< Virtual Pool uplink Mirroring. */
+#define ETH_MIRROR_UPLINK_PORT         0x02  /**< Uplink Port Mirroring. */
+#define ETH_MIRROR_DOWNLINK_PORT       0x04  /**< Downlink Port Mirroring. */
+#define ETH_MIRROR_VLAN                0x08  /**< VLAN Mirroring. */
+#define ETH_MIRROR_VIRTUAL_POOL_DOWN   0x10  /**< Virtual Pool downlink Mirroring. */
 
 /**
  * A structure used to configure VLAN traffic mirror of an Ethernet port.
  */
 struct rte_eth_vlan_mirror {
        uint64_t vlan_mask; /**< mask for valid VLAN ID. */
-       uint16_t vlan_id[ETH_VMDQ_MAX_VLAN_FILTERS];
-       /** VLAN ID list for vlan mirror. */
+       /** VLAN ID list for vlan mirroring. */
+       uint16_t vlan_id[ETH_MIRROR_MAX_VLANS];
 };
 
 /**
  * A structure used to configure traffic mirror of an Ethernet port.
  */
-struct rte_eth_vmdq_mirror_conf {
-       uint8_t rule_type_mask; /**< Mirroring rule type mask we want to set */
-       uint8_t dst_pool; /**< Destination pool for this mirror rule. */
+struct rte_eth_mirror_conf {
+       uint8_t rule_type; /**< Mirroring rule type */
+       uint8_t dst_pool;  /**< Destination pool for this mirror rule. */
        uint64_t pool_mask; /**< Bitmap of pool for pool mirroring */
-       struct rte_eth_vlan_mirror vlan; /**< VLAN ID setting for VLAN mirroring */
+       /** VLAN ID setting for VLAN mirroring. */
+       struct rte_eth_vlan_mirror vlan;
 };
 
 /**
@@ -530,20 +543,20 @@ enum rte_eth_nb_pools {
 /* This structure may be extended in future. */
 struct rte_eth_dcb_rx_conf {
        enum rte_eth_nb_tcs nb_tcs; /**< Possible DCB TCs, 4 or 8 TCs */
-       uint8_t dcb_queue[ETH_DCB_NUM_USER_PRIORITIES];
-       /**< Possible DCB queue,4 or 8. */
+       /** Traffic class each UP mapped to. */
+       uint8_t dcb_tc[ETH_DCB_NUM_USER_PRIORITIES];
 };
 
 struct rte_eth_vmdq_dcb_tx_conf {
        enum rte_eth_nb_pools nb_queue_pools; /**< With DCB, 16 or 32 pools. */
-       uint8_t dcb_queue[ETH_DCB_NUM_USER_PRIORITIES];
-       /**< Possible DCB queue,4 or 8. */
+       /** Traffic class each UP mapped to. */
+       uint8_t dcb_tc[ETH_DCB_NUM_USER_PRIORITIES];
 };
 
 struct rte_eth_dcb_tx_conf {
        enum rte_eth_nb_tcs nb_tcs; /**< Possible DCB TCs, 4 or 8 TCs. */
-       uint8_t dcb_queue[ETH_DCB_NUM_USER_PRIORITIES];
-       /**< Possible DCB queue,4 or 8. */
+       /** Traffic class each UP mapped to. */
+       uint8_t dcb_tc[ETH_DCB_NUM_USER_PRIORITIES];
 };
 
 struct rte_eth_vmdq_tx_conf {
@@ -570,7 +583,7 @@ struct rte_eth_vmdq_dcb_conf {
                uint16_t vlan_id; /**< The vlan id of the received frame */
                uint64_t pools;   /**< Bitmask of pools for packet rx */
        } pool_map[ETH_VMDQ_MAX_VLAN_FILTERS]; /**< VMDq vlan pool maps. */
-       uint8_t dcb_queue[ETH_DCB_NUM_USER_PRIORITIES];
+       uint8_t dcb_tc[ETH_DCB_NUM_USER_PRIORITIES];
        /**< Selects a queue in a pool */
 };
 
@@ -639,6 +652,15 @@ struct rte_eth_txconf {
        uint8_t tx_deferred_start; /**< Do not start queue with rte_eth_dev_start(). */
 };
 
+/**
+ * A structure contains information about HW descriptor ring limitations.
+ */
+struct rte_eth_desc_lim {
+       uint16_t nb_max;   /**< Max allowed number of descriptors. */
+       uint16_t nb_min;   /**< Min allowed number of descriptors. */
+       uint16_t nb_align; /**< Number of descriptors should be aligned to. */
+};
+
 /**
  * This enum indicates the flow control mode
  */
@@ -718,120 +740,14 @@ struct rte_eth_udp_tunnel {
        uint8_t prot_type;
 };
 
-/**
- *  Possible l4type of FDIR filters.
- */
-enum rte_l4type {
-       RTE_FDIR_L4TYPE_NONE = 0,       /**< None. */
-       RTE_FDIR_L4TYPE_UDP,            /**< UDP. */
-       RTE_FDIR_L4TYPE_TCP,            /**< TCP. */
-       RTE_FDIR_L4TYPE_SCTP,           /**< SCTP. */
-};
-
-/**
- *  Select IPv4 or IPv6 FDIR filters.
- */
-enum rte_iptype {
-       RTE_FDIR_IPTYPE_IPV4 = 0,     /**< IPv4. */
-       RTE_FDIR_IPTYPE_IPV6 ,        /**< IPv6. */
-};
-
-/**
- *  A structure used to define a FDIR packet filter.
- */
-struct rte_fdir_filter {
-       uint16_t flex_bytes; /**< Flex bytes value to match. */
-       uint16_t vlan_id; /**< VLAN ID value to match, 0 otherwise. */
-       uint16_t port_src; /**< Source port to match, 0 otherwise. */
-       uint16_t port_dst; /**< Destination port to match, 0 otherwise. */
-       union {
-               uint32_t ipv4_addr; /**< IPv4 source address to match. */
-               uint32_t ipv6_addr[4]; /**< IPv6 source address to match. */
-       } ip_src; /**< IPv4/IPv6 source address to match (union of above). */
-       union {
-               uint32_t ipv4_addr; /**< IPv4 destination address to match. */
-               uint32_t ipv6_addr[4]; /**< IPv6 destination address to match */
-       } ip_dst; /**< IPv4/IPv6 destination address to match (union of above). */
-       enum rte_l4type l4type; /**< l4type to match: NONE/UDP/TCP/SCTP. */
-       enum rte_iptype iptype; /**< IP packet type to match: IPv4 or IPv6. */
-};
-
-/**
- *  A structure used to configure FDIR masks that are used by the device
- *  to match the various fields of RX packet headers.
- *  @note The only_ip_flow field has the opposite meaning compared to other
- *  masks!
- */
-struct rte_fdir_masks {
-       /** When set to 1, packet l4type is \b NOT relevant in filters, and
-          source and destination port masks must be set to zero. */
-       uint8_t only_ip_flow;
-       /** If set to 1, vlan_id is relevant in filters. */
-       uint8_t vlan_id;
-       /** If set to 1, vlan_prio is relevant in filters. */
-       uint8_t vlan_prio;
-       /** If set to 1, flexbytes is relevant in filters. */
-       uint8_t flexbytes;
-       /** If set to 1, set the IPv6 masks. Otherwise set the IPv4 masks. */
-       uint8_t set_ipv6_mask;
-       /** When set to 1, comparison of destination IPv6 address with IP6AT
-           registers is meaningful. */
-       uint8_t comp_ipv6_dst;
-       /** Mask of Destination IPv4 Address. All bits set to 1 define the
-           relevant bits to use in the destination address of an IPv4 packet
-           when matching it against FDIR filters. */
-       uint32_t dst_ipv4_mask;
-       /** Mask of Source IPv4 Address. All bits set to 1 define
-           the relevant bits to use in the source address of an IPv4 packet
-           when matching it against FDIR filters. */
-       uint32_t src_ipv4_mask;
-       /** Mask of Source IPv6 Address. All bits set to 1 define the
-           relevant BYTES to use in the source address of an IPv6 packet
-           when matching it against FDIR filters. */
-       uint16_t dst_ipv6_mask;
-       /** Mask of Destination IPv6 Address. All bits set to 1 define the
-           relevant BYTES to use in the destination address of an IPv6 packet
-           when matching it against FDIR filters. */
-       uint16_t src_ipv6_mask;
-       /** Mask of Source Port. All bits set to 1 define the relevant
-           bits to use in the source port of an IP packets when matching it
-           against FDIR filters. */
-       uint16_t src_port_mask;
-       /** Mask of Destination Port. All bits set to 1 define the relevant
-           bits to use in the destination port of an IP packet when matching it
-           against FDIR filters. */
-       uint16_t dst_port_mask;
-};
-
-/**
- *  A structure used to report the status of the flow director filters in use.
- */
-struct rte_eth_fdir {
-       /** Number of filters with collision indication. */
-       uint16_t collision;
-       /** Number of free (non programmed) filters. */
-       uint16_t free;
-       /** The Lookup hash value of the added filter that updated the value
-          of the MAXLEN field */
-       uint16_t maxhash;
-       /** Longest linked list of filters in the table. */
-       uint8_t maxlen;
-       /** Number of added filters. */
-       uint64_t add;
-       /** Number of removed filters. */
-       uint64_t remove;
-       /** Number of failed added filters (no more space in device). */
-       uint64_t f_add;
-       /** Number of failed removed filters. */
-       uint64_t f_remove;
-};
-
 /**
  * A structure used to enable/disable specific device interrupts.
  */
 struct rte_intr_conf {
        /** enable/disable lsc interrupt. 0 (default) - disable, 1 enable */
        uint16_t lsc;
+       /** enable/disable rxq interrupt. 0 (default) - disable, 1 enable */
+       uint16_t rxq;
 };
 
 /**
@@ -889,6 +805,7 @@ struct rte_eth_conf {
 #define DEV_RX_OFFLOAD_UDP_CKSUM   0x00000004
 #define DEV_RX_OFFLOAD_TCP_CKSUM   0x00000008
 #define DEV_RX_OFFLOAD_TCP_LRO     0x00000010
+#define DEV_RX_OFFLOAD_QINQ_STRIP  0x00000020
 
 /**
  * TX offload capabilities of a device.
@@ -901,6 +818,7 @@ struct rte_eth_conf {
 #define DEV_TX_OFFLOAD_TCP_TSO     0x00000020
 #define DEV_TX_OFFLOAD_UDP_TSO     0x00000040
 #define DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM 0x00000080 /**< Used for tunneling packet. */
+#define DEV_TX_OFFLOAD_QINQ_INSERT 0x00000100
 
 struct rte_eth_dev_info {
        struct rte_pci_device *pci_dev; /**< Device PCI information. */
@@ -920,6 +838,7 @@ struct rte_eth_dev_info {
        uint32_t tx_offload_capa; /**< Device TX offload capabilities. */
        uint16_t reta_size;
        /**< Device redirection table size, the total number of entries. */
+       uint8_t hash_key_size; /**< Hash key size in bytes */
        /** Bit mask of RSS offloads, the bit offset also means flow type */
        uint64_t flow_type_rss_offloads;
        struct rte_eth_rxconf default_rxconf; /**< Default RX configuration */
@@ -927,8 +846,30 @@ struct rte_eth_dev_info {
        uint16_t vmdq_queue_base; /**< First queue ID for VMDQ pools. */
        uint16_t vmdq_queue_num;  /**< Queue number for VMDQ pools. */
        uint16_t vmdq_pool_base;  /**< First ID of VMDQ pools. */
+       struct rte_eth_desc_lim rx_desc_lim;  /**< RX descriptors limits */
+       struct rte_eth_desc_lim tx_desc_lim;  /**< TX descriptors limits */
 };
 
+/**
+ * Ethernet device RX queue information structure.
+ * Used to retieve information about configured queue.
+ */
+struct rte_eth_rxq_info {
+       struct rte_mempool *mp;     /**< mempool used by that queue. */
+       struct rte_eth_rxconf conf; /**< queue config parameters. */
+       uint8_t scattered_rx;       /**< scattered packets RX supported. */
+       uint16_t nb_desc;           /**< configured number of RXDs. */
+} __rte_cache_aligned;
+
+/**
+ * Ethernet device TX queue information structure.
+ * Used to retieve information about configured queue.
+ */
+struct rte_eth_txq_info {
+       struct rte_eth_txconf conf; /**< queue config parameters. */
+       uint16_t nb_desc;           /**< configured number of TXDs. */
+} __rte_cache_aligned;
+
 /** Maximum name length for extended statistics counters */
 #define RTE_ETH_XSTATS_NAME_SIZE 64
 
@@ -944,6 +885,38 @@ struct rte_eth_xstats {
        uint64_t value;
 };
 
+#define ETH_DCB_NUM_TCS    8
+#define ETH_MAX_VMDQ_POOL  64
+
+/**
+ * A structure used to get the information of queue and
+ * TC mapping on both TX and RX paths.
+ */
+struct rte_eth_dcb_tc_queue_mapping {
+       /** rx queues assigned to tc per Pool */
+       struct {
+               uint8_t base;
+               uint8_t nb_queue;
+       } tc_rxq[ETH_MAX_VMDQ_POOL][ETH_DCB_NUM_TCS];
+       /** rx queues assigned to tc per Pool */
+       struct {
+               uint8_t base;
+               uint8_t nb_queue;
+       } tc_txq[ETH_MAX_VMDQ_POOL][ETH_DCB_NUM_TCS];
+};
+
+/**
+ * A structure used to get the information of DCB.
+ * It includes TC UP mapping and queue TC mapping.
+ */
+struct rte_eth_dcb_info {
+       uint8_t nb_tcs;        /**< number of TCs */
+       uint8_t prio_tc[ETH_DCB_NUM_USER_PRIORITIES]; /**< Priority to tc */
+       uint8_t tc_bws[ETH_DCB_NUM_TCS]; /**< TX BW percentage for each TC */
+       /** rx queues assigned to tc */
+       struct rte_eth_dcb_tc_queue_mapping tc_queue;
+};
+
 struct rte_eth_dev;
 
 struct rte_eth_dev_callback;
@@ -1037,6 +1010,14 @@ typedef int (*eth_tx_queue_setup_t)(struct rte_eth_dev *dev,
                                    const struct rte_eth_txconf *tx_conf);
 /**< @internal Setup a transmit queue of an Ethernet device. */
 
+typedef int (*eth_rx_enable_intr_t)(struct rte_eth_dev *dev,
+                                   uint16_t rx_queue_id);
+/**< @internal Enable interrupt of a receive queue of an Ethernet device. */
+
+typedef int (*eth_rx_disable_intr_t)(struct rte_eth_dev *dev,
+                                   uint16_t rx_queue_id);
+/**< @internal Disable interrupt of a receive queue of an Ethernet device. */
+
 typedef void (*eth_queue_release_t)(void *queue);
 /**< @internal Release memory resources allocated by given RX/TX queue. */
 
@@ -1047,6 +1028,12 @@ typedef uint32_t (*eth_rx_queue_count_t)(struct rte_eth_dev *dev,
 typedef int (*eth_rx_descriptor_done_t)(void *rxq, uint16_t offset);
 /**< @internal Check DD bit of specific RX descriptor */
 
+typedef void (*eth_rxq_info_get_t)(struct rte_eth_dev *dev,
+       uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo);
+
+typedef void (*eth_txq_info_get_t)(struct rte_eth_dev *dev,
+       uint16_t tx_queue_id, struct rte_eth_txq_info *qinfo);
+
 typedef int (*mtu_set_t)(struct rte_eth_dev *dev, uint16_t mtu);
 /**< @internal Set MTU. */
 
@@ -1082,45 +1069,6 @@ typedef uint16_t (*eth_tx_burst_t)(void *txq,
                                   uint16_t nb_pkts);
 /**< @internal Send output packets on a transmit queue of an Ethernet device. */
 
-typedef int (*fdir_add_signature_filter_t)(struct rte_eth_dev *dev,
-                                          struct rte_fdir_filter *fdir_ftr,
-                                          uint8_t rx_queue);
-/**< @internal Setup a new signature filter rule on an Ethernet device */
-
-typedef int (*fdir_update_signature_filter_t)(struct rte_eth_dev *dev,
-                                             struct rte_fdir_filter *fdir_ftr,
-                                             uint8_t rx_queue);
-/**< @internal Update a signature filter rule on an Ethernet device */
-
-typedef int (*fdir_remove_signature_filter_t)(struct rte_eth_dev *dev,
-                                             struct rte_fdir_filter *fdir_ftr);
-/**< @internal Remove a  signature filter rule on an Ethernet device */
-
-typedef void (*fdir_infos_get_t)(struct rte_eth_dev *dev,
-                                struct rte_eth_fdir *fdir);
-/**< @internal Get information about fdir status */
-
-typedef int (*fdir_add_perfect_filter_t)(struct rte_eth_dev *dev,
-                                        struct rte_fdir_filter *fdir_ftr,
-                                        uint16_t soft_id, uint8_t rx_queue,
-                                        uint8_t drop);
-/**< @internal Setup a new perfect filter rule on an Ethernet device */
-
-typedef int (*fdir_update_perfect_filter_t)(struct rte_eth_dev *dev,
-                                           struct rte_fdir_filter *fdir_ftr,
-                                           uint16_t soft_id, uint8_t rx_queue,
-                                           uint8_t drop);
-/**< @internal Update a perfect filter rule on an Ethernet device */
-
-typedef int (*fdir_remove_perfect_filter_t)(struct rte_eth_dev *dev,
-                                           struct rte_fdir_filter *fdir_ftr,
-                                           uint16_t soft_id);
-/**< @internal Remove a perfect filter rule on an Ethernet device */
-
-typedef int (*fdir_set_masks_t)(struct rte_eth_dev *dev,
-                               struct rte_fdir_masks *fdir_masks);
-/**< @internal Setup flow director masks on an Ethernet device */
-
 typedef int (*flow_ctrl_get_t)(struct rte_eth_dev *dev,
                               struct rte_eth_fc_conf *fc_conf);
 /**< @internal Get current flow control parameter on an Ethernet device */
@@ -1213,7 +1161,7 @@ typedef int (*eth_set_vf_rate_limit_t)(struct rte_eth_dev *dev,
 /**< @internal Set VF TX rate */
 
 typedef int (*eth_mirror_rule_set_t)(struct rte_eth_dev *dev,
-                                 struct rte_eth_vmdq_mirror_conf *mirror_conf,
+                                 struct rte_eth_mirror_conf *mirror_conf,
                                  uint8_t rule_id,
                                  uint8_t on);
 /**< @internal Add a traffic mirroring rule on an Ethernet device */
@@ -1235,6 +1183,39 @@ typedef int (*eth_set_mc_addr_list_t)(struct rte_eth_dev *dev,
                                      uint32_t nb_mc_addr);
 /**< @internal set the list of multicast addresses on an Ethernet device */
 
+typedef int (*eth_timesync_enable_t)(struct rte_eth_dev *dev);
+/**< @internal Function used to enable IEEE1588/802.1AS timestamping. */
+
+typedef int (*eth_timesync_disable_t)(struct rte_eth_dev *dev);
+/**< @internal Function used to disable IEEE1588/802.1AS timestamping. */
+
+typedef int (*eth_timesync_read_rx_timestamp_t)(struct rte_eth_dev *dev,
+                                               struct timespec *timestamp,
+                                               uint32_t flags);
+/**< @internal Function used to read an RX IEEE1588/802.1AS timestamp. */
+
+typedef int (*eth_timesync_read_tx_timestamp_t)(struct rte_eth_dev *dev,
+                                               struct timespec *timestamp);
+/**< @internal Function used to read a TX IEEE1588/802.1AS timestamp. */
+
+typedef int (*eth_get_reg_length_t)(struct rte_eth_dev *dev);
+/**< @internal Retrieve device register count  */
+
+typedef int (*eth_get_reg_t)(struct rte_eth_dev *dev,
+                               struct rte_dev_reg_info *info);
+/**< @internal Retrieve registers  */
+
+typedef int (*eth_get_eeprom_length_t)(struct rte_eth_dev *dev);
+/**< @internal Retrieve eeprom size  */
+
+typedef int (*eth_get_eeprom_t)(struct rte_eth_dev *dev,
+                               struct rte_dev_eeprom_info *info);
+/**< @internal Retrieve eeprom data  */
+
+typedef int (*eth_set_eeprom_t)(struct rte_eth_dev *dev,
+                               struct rte_dev_eeprom_info *info);
+/**< @internal Program eeprom data  */
+
 #ifdef RTE_NIC_BYPASS
 
 enum {
@@ -1295,6 +1276,10 @@ typedef int (*eth_filter_ctrl_t)(struct rte_eth_dev *dev,
                                 void *arg);
 /**< @internal Take operations to assigned filter type on an Ethernet device */
 
+typedef int (*eth_get_dcb_info)(struct rte_eth_dev *dev,
+                                struct rte_eth_dcb_info *dcb_info);
+/**< @internal Get dcb information on an Ethernet device */
+
 /**
  * @internal A structure containing the functions exported by an Ethernet driver.
  */
@@ -1331,6 +1316,10 @@ struct eth_dev_ops {
        eth_queue_release_t        rx_queue_release;/**< Release RX queue.*/
        eth_rx_queue_count_t       rx_queue_count; /**< Get Rx queue count. */
        eth_rx_descriptor_done_t   rx_descriptor_done;  /**< Check rxd DD bit */
+       /**< Enable Rx queue interrupt. */
+       eth_rx_enable_intr_t       rx_queue_intr_enable;
+       /**< Disable Rx queue interrupt.*/
+       eth_rx_disable_intr_t      rx_queue_intr_disable;
        eth_tx_queue_setup_t       tx_queue_setup;/**< Set up device TX queue.*/
        eth_queue_release_t        tx_queue_release;/**< Release TX queue.*/
        eth_dev_led_on_t           dev_led_on;    /**< Turn on LED. */
@@ -1353,27 +1342,21 @@ struct eth_dev_ops {
        eth_udp_tunnel_del_t       udp_tunnel_del;
        eth_set_queue_rate_limit_t set_queue_rate_limit;   /**< Set queue rate limit */
        eth_set_vf_rate_limit_t    set_vf_rate_limit;   /**< Set VF rate limit */
-
-       /** Add a signature filter. */
-       fdir_add_signature_filter_t fdir_add_signature_filter;
-       /** Update a signature filter. */
-       fdir_update_signature_filter_t fdir_update_signature_filter;
-       /** Remove a signature filter. */
-       fdir_remove_signature_filter_t fdir_remove_signature_filter;
-       /** Get information about FDIR status. */
-       fdir_infos_get_t fdir_infos_get;
-       /** Add a perfect filter. */
-       fdir_add_perfect_filter_t fdir_add_perfect_filter;
-       /** Update a perfect filter. */
-       fdir_update_perfect_filter_t fdir_update_perfect_filter;
-       /** Remove a perfect filter. */
-       fdir_remove_perfect_filter_t fdir_remove_perfect_filter;
-       /** Setup masks for FDIR filtering. */
-       fdir_set_masks_t fdir_set_masks;
        /** Update redirection table. */
        reta_update_t reta_update;
        /** Query redirection table. */
        reta_query_t reta_query;
+
+       eth_get_reg_length_t get_reg_length;
+       /**< Get # of registers */
+       eth_get_reg_t get_reg;
+       /**< Get registers */
+       eth_get_eeprom_length_t get_eeprom_length;
+       /**< Get eeprom length */
+       eth_get_eeprom_t get_eeprom;
+       /**< Get eeprom data */
+       eth_set_eeprom_t set_eeprom;
+       /**< Set eeprom */
   /* bypass control */
 #ifdef RTE_NIC_BYPASS
   bypass_init_t bypass_init;
@@ -1391,8 +1374,24 @@ struct eth_dev_ops {
        rss_hash_update_t rss_hash_update;
        /** Get current RSS hash configuration. */
        rss_hash_conf_get_t rss_hash_conf_get;
-       eth_filter_ctrl_t              filter_ctrl;          /**< common filter control*/
+       eth_filter_ctrl_t              filter_ctrl;
+       /**< common filter control. */
        eth_set_mc_addr_list_t set_mc_addr_list; /**< set list of mcast addrs */
+       eth_rxq_info_get_t rxq_info_get;
+       /**< retrieve RX queue information. */
+       eth_txq_info_get_t txq_info_get;
+       /**< retrieve TX queue information. */
+       /** Turn IEEE1588/802.1AS timestamping on. */
+       eth_timesync_enable_t timesync_enable;
+       /** Turn IEEE1588/802.1AS timestamping off. */
+       eth_timesync_disable_t timesync_disable;
+       /** Read the IEEE1588/802.1AS RX timestamp. */
+       eth_timesync_read_rx_timestamp_t timesync_read_rx_timestamp;
+       /** Read the IEEE1588/802.1AS TX timestamp. */
+       eth_timesync_read_tx_timestamp_t timesync_read_tx_timestamp;
+
+       /** Get DCB information */
+       eth_get_dcb_info get_dcb_info;
 };
 
 /**
@@ -1549,9 +1548,9 @@ struct rte_eth_dev_data {
        uint8_t port_id;           /**< Device [external] port identifier. */
        uint8_t promiscuous   : 1, /**< RX promiscuous mode ON(1) / OFF(0). */
                scattered_rx : 1,  /**< RX of scattered packets is ON(1) / OFF(0) */
-               lro          : 1,  /**< RX LRO is ON(1) / OFF(0) */
                all_multicast : 1, /**< RX all multicast mode ON(1) / OFF(0). */
-               dev_started : 1;   /**< Device state: STARTED(1) / STOPPED(0). */
+               dev_started : 1,   /**< Device state: STARTED(1) / STOPPED(0). */
+               lro         : 1;   /**< RX LRO is ON(1) / OFF(0) */
 };
 
 /**
@@ -1577,8 +1576,9 @@ extern struct rte_eth_dev rte_eth_devices[];
 extern uint8_t rte_eth_dev_count(void);
 
 /**
- * Function for internal use by port hotplug functions.
+ * @internal
  * Returns a ethdev slot specified by the unique identifier name.
+ *
  * @param      name
  *  The pointer to the Unique identifier name for each Ethernet device
  * @return
@@ -1587,8 +1587,7 @@ extern uint8_t rte_eth_dev_count(void);
 extern struct rte_eth_dev *rte_eth_dev_allocated(const char *name);
 
 /**
- * Function for internal use by dummy drivers primarily, e.g. ring-based
- * driver.
+ * @internal
  * Allocates a new ethdev slot for an ethernet device and returns the pointer
  * to that slot for the driver to use.
  *
@@ -1601,8 +1600,7 @@ struct rte_eth_dev *rte_eth_dev_allocate(const char *name,
                enum rte_eth_dev_type type);
 
 /**
- * Function for internal use by dummy drivers primarily, e.g. ring-based
- * driver.
+ * @internal
  * Release the specified ethdev port.
  *
  * @param eth_dev
@@ -1628,6 +1626,8 @@ int rte_eth_dev_attach(const char *devargs, uint8_t *port_id);
 
 /**
  * Detach a Ethernet device specified by port identifier.
+ * This function must be called when the device is in the
+ * closed state.
  *
  * @param port_id
  *   The port identifier of the device to detach.
@@ -1859,6 +1859,17 @@ extern int rte_eth_tx_queue_setup(uint8_t port_id, uint16_t tx_queue_id,
  */
 extern int rte_eth_dev_socket_id(uint8_t port_id);
 
+/*
+ * Check if port_id of device is attached
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device
+ * @return
+ *   - 0 if port is out of range or not attached
+ *   - 1 if device is attached
+ */
+extern int rte_eth_dev_is_valid_port(uint8_t port_id);
+
 /*
  * Allocate mbuf from mempool, setup the DMA physical address
  * and then start RX for specified queue of a port. It is used
@@ -1981,7 +1992,9 @@ extern int rte_eth_dev_set_link_up(uint8_t port_id);
 extern int rte_eth_dev_set_link_down(uint8_t port_id);
 
 /**
- * Close an Ethernet device. The device cannot be restarted!
+ * Close a stopped Ethernet device. The device cannot be restarted!
+ * The function frees all resources except for needed by the
+ * closed state. To free these resources, call rte_eth_dev_detach().
  *
  * @param port_id
  *   The port identifier of the Ethernet device.
@@ -2585,222 +2598,6 @@ rte_eth_tx_burst(uint8_t port_id, uint16_t queue_id,
 }
 #endif
 
-/**
- * Setup a new signature filter rule on an Ethernet device
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_filter
- *   The pointer to the fdir filter structure describing the signature filter
- *   rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- * @param rx_queue
- *   The index of the RX queue where to store RX packets matching the added
- *   signature filter defined in fdir_filter.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the FDIR mode is not configured in signature mode
- *               on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_add_signature_filter(uint8_t port_id,
-                                         struct rte_fdir_filter *fdir_filter,
-                                         uint8_t rx_queue);
-
-/**
- * Update a signature filter rule on an Ethernet device.
- * If the rule doesn't exits, it is created.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_ftr
- *   The pointer to the structure describing the signature filter rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- * @param rx_queue
- *   The index of the RX queue where to store RX packets matching the added
- *   signature filter defined in fdir_ftr.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in signature mode
- *     on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_update_signature_filter(uint8_t port_id,
-                                            struct rte_fdir_filter *fdir_ftr,
-                                            uint8_t rx_queue);
-
-/**
- * Remove a signature filter rule on an Ethernet device.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_ftr
- *   The pointer to the structure describing the signature filter rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in signature mode
- *     on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_remove_signature_filter(uint8_t port_id,
-                                            struct rte_fdir_filter *fdir_ftr);
-
-/**
- * Retrieve the flow director information of an Ethernet device.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir
- *   A pointer to a structure of type *rte_eth_dev_fdir* to be filled with
- *   the flow director information of the Ethernet device.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured on *port_id*.
- */
-int rte_eth_dev_fdir_get_infos(uint8_t port_id, struct rte_eth_fdir *fdir);
-
-/**
- * Add a new perfect filter rule on an Ethernet device.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_filter
- *   The pointer to the structure describing the perfect filter rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- *   IPv6 are not supported.
- * @param soft_id
- *    The 16-bit value supplied in the field hash.fdir.id of mbuf for RX
- *    packets matching the perfect filter.
- * @param rx_queue
- *   The index of the RX queue where to store RX packets matching the added
- *   perfect filter defined in fdir_filter.
- * @param drop
- *    If drop is set to 1, matching RX packets are stored into the RX drop
- *    queue defined in the rte_fdir_conf.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in perfect mode
- *               on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_add_perfect_filter(uint8_t port_id,
-                                       struct rte_fdir_filter *fdir_filter,
-                                       uint16_t soft_id, uint8_t rx_queue,
-                                       uint8_t drop);
-
-/**
- * Update a perfect filter rule on an Ethernet device.
- * If the rule doesn't exits, it is created.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_filter
- *   The pointer to the structure describing the perfect filter rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- *   IPv6 are not supported.
- * @param soft_id
- *    The 16-bit value supplied in the field hash.fdir.id of mbuf for RX
- *    packets matching the perfect filter.
- * @param rx_queue
- *   The index of the RX queue where to store RX packets matching the added
- *   perfect filter defined in fdir_filter.
- * @param drop
- *    If drop is set to 1, matching RX packets are stored into the RX drop
- *    queue defined in the rte_fdir_conf.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in perfect mode
- *      on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_update_perfect_filter(uint8_t port_id,
-                                          struct rte_fdir_filter *fdir_filter,
-                                          uint16_t soft_id, uint8_t rx_queue,
-                                          uint8_t drop);
-
-/**
- * Remove a perfect filter rule on an Ethernet device.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_filter
- *   The pointer to the structure describing the perfect filter rule.
- *   The *rte_fdir_filter* structure includes the values of the different fields
- *   to match: source and destination IP addresses, vlan id, flexbytes, source
- *   and destination ports, and so on.
- *   IPv6 are not supported.
- * @param soft_id
- *    The soft_id value provided when adding/updating the removed filter.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in perfect mode
- *      on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct.
- */
-int rte_eth_dev_fdir_remove_perfect_filter(uint8_t port_id,
-                                          struct rte_fdir_filter *fdir_filter,
-                                          uint16_t soft_id);
-/**
- * Configure globally the masks for flow director mode for an Ethernet device.
- * For example, the device can match packets with only the first 24 bits of
- * the IPv4 source address.
- *
- * The following fields can be masked: IPv4 addresses and L4 port numbers.
- * The following fields can be either enabled or disabled completely for the
- * matching functionality: VLAN ID tag; VLAN Priority + CFI bit; Flexible 2-byte
- * tuple.
- * IPv6 masks are not supported.
- *
- * All filters must comply with the masks previously configured.
- * For example, with a mask equal to 255.255.255.0 for the source IPv4 address,
- * all IPv4 filters must be created with a source IPv4 address that fits the
- * "X.X.X.0" format.
- *
- * This function flushes all filters that have been previously added in
- * the device.
- *
- * @param port_id
- *   The port identifier of the Ethernet device.
- * @param fdir_mask
- *   The pointer to the fdir mask structure describing relevant headers fields
- *   and relevant bits to use when matching packets addresses and ports.
- *   IPv6 masks are not supported.
- * @return
- *   - (0) if successful.
- *   - (-ENOTSUP) if hardware doesn't support flow director mode.
- *   - (-ENODEV) if *port_id* invalid.
- *   - (-ENOSYS) if the flow director mode is not configured in perfect
- *      mode on *port_id*.
- *   - (-EINVAL) if the fdir_filter information is not correct
- */
-int rte_eth_dev_fdir_set_masks(uint8_t port_id,
-                              struct rte_fdir_masks *fdir_mask);
-
 /**
  * The eth device event type for interrupt, and maybe others in the future.
  */
@@ -2873,6 +2670,92 @@ int rte_eth_dev_callback_unregister(uint8_t port_id,
 void _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
                                enum rte_eth_event_type event);
 
+/**
+ * When there is no rx packet coming in Rx Queue for a long time, we can
+ * sleep lcore related to RX Queue for power saving, and enable rx interrupt
+ * to be triggered when rx packect arrives.
+ *
+ * The rte_eth_dev_rx_intr_enable() function enables rx queue
+ * interrupt on specific rx queue of a port.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param queue_id
+ *   The index of the receive queue from which to retrieve input packets.
+ *   The value must be in the range [0, nb_rx_queue - 1] previously supplied
+ *   to rte_eth_dev_configure().
+ * @return
+ *   - (0) if successful.
+ *   - (-ENOTSUP) if underlying hardware OR driver doesn't support
+ *     that operation.
+ *   - (-ENODEV) if *port_id* invalid.
+ */
+int rte_eth_dev_rx_intr_enable(uint8_t port_id, uint16_t queue_id);
+
+/**
+ * When lcore wakes up from rx interrupt indicating packet coming, disable rx
+ * interrupt and returns to polling mode.
+ *
+ * The rte_eth_dev_rx_intr_disable() function disables rx queue
+ * interrupt on specific rx queue of a port.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param queue_id
+ *   The index of the receive queue from which to retrieve input packets.
+ *   The value must be in the range [0, nb_rx_queue - 1] previously supplied
+ *   to rte_eth_dev_configure().
+ * @return
+ *   - (0) if successful.
+ *   - (-ENOTSUP) if underlying hardware OR driver doesn't support
+ *     that operation.
+ *   - (-ENODEV) if *port_id* invalid.
+ */
+int rte_eth_dev_rx_intr_disable(uint8_t port_id, uint16_t queue_id);
+
+/**
+ * RX Interrupt control per port.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param epfd
+ *   Epoll instance fd which the intr vector associated to.
+ *   Using RTE_EPOLL_PER_THREAD allows to use per thread epoll instance.
+ * @param op
+ *   The operation be performed for the vector.
+ *   Operation type of {RTE_INTR_EVENT_ADD, RTE_INTR_EVENT_DEL}.
+ * @param data
+ *   User raw data.
+ * @return
+ *   - On success, zero.
+ *   - On failure, a negative value.
+ */
+int rte_eth_dev_rx_intr_ctl(uint8_t port_id, int epfd, int op, void *data);
+
+/**
+ * RX Interrupt control per queue.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param queue_id
+ *   The index of the receive queue from which to retrieve input packets.
+ *   The value must be in the range [0, nb_rx_queue - 1] previously supplied
+ *   to rte_eth_dev_configure().
+ * @param epfd
+ *   Epoll instance fd which the intr vector associated to.
+ *   Using RTE_EPOLL_PER_THREAD allows to use per thread epoll instance.
+ * @param op
+ *   The operation be performed for the vector.
+ *   Operation type of {RTE_INTR_EVENT_ADD, RTE_INTR_EVENT_DEL}.
+ * @param data
+ *   User raw data.
+ * @return
+ *   - On success, zero.
+ *   - On failure, a negative value.
+ */
+int rte_eth_dev_rx_intr_ctl_q(uint8_t port_id, uint16_t queue_id,
+                             int epfd, int op, void *data);
+
 /**
  * Turn on the LED on the Ethernet device.
  * This function turns on the LED on the Ethernet device.
@@ -2987,6 +2870,22 @@ int rte_eth_dev_mac_addr_add(uint8_t port, struct ether_addr *mac_addr,
  */
 int rte_eth_dev_mac_addr_remove(uint8_t port, struct ether_addr *mac_addr);
 
+/**
+ * Set the default MAC address.
+ *
+ * @param port
+ *   The port identifier of the Ethernet device.
+ * @param mac_addr
+ *   New default MAC address.
+ * @return
+ *   - (0) if successful, or *mac_addr* didn't exist.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port* invalid.
+ *   - (-EINVAL) if MAC address is invalid.
+ */
+int rte_eth_dev_default_mac_addr_set(uint8_t port, struct ether_addr *mac_addr);
+
+
 /**
  * Update Redirection Table(RETA) of Receive Side Scaling of Ethernet device.
  *
@@ -3174,7 +3073,7 @@ rte_eth_dev_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id,
  *   - (-EINVAL) if the mr_conf information is not correct.
  */
 int rte_eth_mirror_rule_set(uint8_t port_id,
-                       struct rte_eth_vmdq_mirror_conf *mirror_conf,
+                       struct rte_eth_mirror_conf *mirror_conf,
                        uint8_t rule_id,
                        uint8_t on);
 
@@ -3501,6 +3400,21 @@ int rte_eth_dev_filter_supported(uint8_t port_id, enum rte_filter_type filter_ty
 int rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_type,
                        enum rte_filter_op filter_op, void *arg);
 
+/**
+ * Get DCB information on an Ethernet device.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param dcb_info
+ *   dcb information.
+ * @return
+ *   - (0) if successful.
+ *   - (-ENODEV) if port identifier is invalid.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ */
+int rte_eth_dev_get_dcb_info(uint8_t port_id,
+                            struct rte_eth_dcb_info *dcb_info);
+
 /**
  * Add a callback to be called on packet RX on a given port and queue.
  *
@@ -3509,6 +3423,8 @@ int rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_type,
  * that can be used to later remove the callback using
  * rte_eth_remove_rx_callback().
  *
+ * Multiple functions are called in the order that they are added.
+ *
  * @param port_id
  *   The port identifier of the Ethernet device.
  * @param queue_id
@@ -3534,6 +3450,8 @@ void *rte_eth_add_rx_callback(uint8_t port_id, uint16_t queue_id,
  * that can be used to later remove the callback using
  * rte_eth_remove_tx_callback().
  *
+ * Multiple functions are called in the order that they are added.
+ *
  * @param port_id
  *   The port identifier of the Ethernet device.
  * @param queue_id
@@ -3617,9 +3535,118 @@ int rte_eth_remove_rx_callback(uint8_t port_id, uint16_t queue_id,
 int rte_eth_remove_tx_callback(uint8_t port_id, uint16_t queue_id,
                struct rte_eth_rxtx_callback *user_cb);
 
-#ifdef __cplusplus
-}
-#endif
+/**
+ * Retrieve information about given port's RX queue.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param queue_id
+ *   The RX queue on the Ethernet device for which information
+ *   will be retrieved.
+ * @param qinfo
+ *   A pointer to a structure of type *rte_eth_rxq_info_info* to be filled with
+ *   the information of the Ethernet device.
+ *
+ * @return
+ *   - 0: Success
+ *   - -ENOTSUP: routine is not supported by the device PMD.
+ *   - -EINVAL:  The port_id or the queue_id is out of range.
+ */
+int rte_eth_rx_queue_info_get(uint8_t port_id, uint16_t queue_id,
+       struct rte_eth_rxq_info *qinfo);
+
+/**
+ * Retrieve information about given port's TX queue.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param queue_id
+ *   The TX queue on the Ethernet device for which information
+ *   will be retrieved.
+ * @param qinfo
+ *   A pointer to a structure of type *rte_eth_txq_info_info* to be filled with
+ *   the information of the Ethernet device.
+ *
+ * @return
+ *   - 0: Success
+ *   - -ENOTSUP: routine is not supported by the device PMD.
+ *   - -EINVAL:  The port_id or the queue_id is out of range.
+ */
+int rte_eth_tx_queue_info_get(uint8_t port_id, uint16_t queue_id,
+       struct rte_eth_txq_info *qinfo);
+
+/*
+ * Retrieve number of available registers for access
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @return
+ *   - (>=0) number of registers if successful.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - others depends on the specific operations implementation.
+ */
+int rte_eth_dev_get_reg_length(uint8_t port_id);
+
+/**
+ * Retrieve device registers and register attributes
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param info
+ *   The template includes buffer for register data and attribute to be filled.
+ * @return
+ *   - (0) if successful.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - others depends on the specific operations implementation.
+ */
+int rte_eth_dev_get_reg_info(uint8_t port_id, struct rte_dev_reg_info *info);
+
+/**
+ * Retrieve size of device EEPROM
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @return
+ *   - (>=0) EEPROM size if successful.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - others depends on the specific operations implementation.
+ */
+int rte_eth_dev_get_eeprom_length(uint8_t port_id);
+
+/**
+ * Retrieve EEPROM and EEPROM attribute
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param info
+ *   The template includes buffer for return EEPROM data and
+ *   EEPROM attributes to be filled.
+ * @return
+ *   - (0) if successful.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - others depends on the specific operations implementation.
+ */
+int rte_eth_dev_get_eeprom(uint8_t port_id, struct rte_dev_eeprom_info *info);
+
+/**
+ * Program EEPROM with provided data
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param info
+ *   The template includes EEPROM data for programming and
+ *   EEPROM attributes to be filled
+ * @return
+ *   - (0) if successful.
+ *   - (-ENOTSUP) if hardware doesn't support.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - others depends on the specific operations implementation.
+ */
+int rte_eth_dev_set_eeprom(uint8_t port_id, struct rte_dev_eeprom_info *info);
 
 /**
  * Set the list of multicast addresses to filter on an Ethernet device.
@@ -3642,4 +3669,72 @@ int rte_eth_dev_set_mc_addr_list(uint8_t port_id,
                                 struct ether_addr *mc_addr_set,
                                 uint32_t nb_mc_addr);
 
+/**
+ * Enable IEEE1588/802.1AS timestamping for an Ethernet device.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ *
+ * @return
+ *   - 0: Success.
+ *   - -ENODEV: The port ID is invalid.
+ *   - -ENOTSUP: The function is not supported by the Ethernet driver.
+ */
+extern int rte_eth_timesync_enable(uint8_t port_id);
+
+/**
+ * Disable IEEE1588/802.1AS timestamping for an Ethernet device.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ *
+ * @return
+ *   - 0: Success.
+ *   - -ENODEV: The port ID is invalid.
+ *   - -ENOTSUP: The function is not supported by the Ethernet driver.
+ */
+extern int rte_eth_timesync_disable(uint8_t port_id);
+
+/**
+ * Read an IEEE1588/802.1AS RX timestamp from an Ethernet device.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param timestamp
+ *   Pointer to the timestamp struct.
+ * @param flags
+ *   Device specific flags. Used to pass the RX timesync register index to
+ *   i40e. Unused in igb/ixgbe, pass 0 instead.
+ *
+ * @return
+ *   - 0: Success.
+ *   - -EINVAL: No timestamp is available.
+ *   - -ENODEV: The port ID is invalid.
+ *   - -ENOTSUP: The function is not supported by the Ethernet driver.
+ */
+extern int rte_eth_timesync_read_rx_timestamp(uint8_t port_id,
+                                             struct timespec *timestamp,
+                                             uint32_t flags);
+
+/**
+ * Read an IEEE1588/802.1AS TX timestamp from an Ethernet device.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param timestamp
+ *   Pointer to the timestamp struct.
+ *
+ * @return
+ *   - 0: Success.
+ *   - -EINVAL: No timestamp is available.
+ *   - -ENODEV: The port ID is invalid.
+ *   - -ENOTSUP: The function is not supported by the Ethernet driver.
+ */
+extern int rte_eth_timesync_read_tx_timestamp(uint8_t port_id,
+                                             struct timespec *timestamp);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* _RTE_ETHDEV_H_ */