ethdev: fix C linkage type of latest functions
[dpdk.git] / lib / librte_ether / rte_ethdev.h
index 16dbe00..62c166e 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;
 };
 
 /**
@@ -632,7 +645,9 @@ struct rte_eth_rxconf {
 struct rte_eth_txconf {
        struct rte_eth_thresh tx_thresh; /**< TX ring threshold registers. */
        uint16_t tx_rs_thresh; /**< Drives the setting of RS bit on TXDs. */
-       uint16_t tx_free_thresh; /**< Drives the freeing of TX buffers. */
+       uint16_t tx_free_thresh; /**< Start freeing TX buffers if there are
+                                     less free descriptors than this value. */
+
        uint32_t txq_flags; /**< Set flags for the Tx queue */
        uint8_t tx_deferred_start; /**< Do not start queue with rte_eth_dev_start(). */
 };
@@ -887,6 +902,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.
@@ -899,6 +915,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. */
@@ -918,6 +935,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 */
@@ -1040,10 +1058,10 @@ typedef void (*eth_queue_release_t)(void *queue);
 
 typedef uint32_t (*eth_rx_queue_count_t)(struct rte_eth_dev *dev,
                                         uint16_t rx_queue_id);
-/**< @Get number of available descriptors on a receive queue of an Ethernet device. */
+/**< @internal Get number of available descriptors on a receive queue of an Ethernet device. */
 
 typedef int (*eth_rx_descriptor_done_t)(void *rxq, uint16_t offset);
-/**< @Check DD bit of specific RX descriptor */
+/**< @internal Check DD bit of specific RX descriptor */
 
 typedef int (*mtu_set_t)(struct rte_eth_dev *dev, uint16_t mtu);
 /**< @internal Set MTU. */
@@ -1211,7 +1229,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 */
@@ -1228,6 +1246,43 @@ typedef int (*eth_udp_tunnel_del_t)(struct rte_eth_dev *dev,
                                    struct rte_eth_udp_tunnel *tunnel_udp);
 /**< @internal Delete tunneling UDP info */
 
+typedef int (*eth_set_mc_addr_list_t)(struct rte_eth_dev *dev,
+                                     struct ether_addr *mc_addr_set,
+                                     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
 
@@ -1368,6 +1423,17 @@ struct eth_dev_ops {
        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;
@@ -1386,6 +1452,16 @@ struct eth_dev_ops {
        /** Get current RSS hash configuration. */
        rss_hash_conf_get_t rss_hash_conf_get;
        eth_filter_ctrl_t              filter_ctrl;          /**< common filter control*/
+       eth_set_mc_addr_list_t set_mc_addr_list; /**< set list of mcast addrs */
+
+       /** 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;
 };
 
 /**
@@ -1451,8 +1527,8 @@ struct rte_eth_rxtx_callback {
        void *param;
 };
 
-/*
- * The eth device type
+/**
+ * The eth device type.
  */
 enum rte_eth_dev_type {
        RTE_ETH_DEV_UNKNOWN,    /**< unknown device type */
@@ -1570,8 +1646,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
@@ -1580,8 +1657,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.
  *
@@ -1594,8 +1670,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
@@ -1621,10 +1696,12 @@ 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.
- * @param addr
+ * @param devname
  *  A pointer to a device name actually detached.
  * @return
  *  0 on success and devname is filled, negative on error
@@ -1852,6 +1929,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
@@ -1974,7 +2062,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.
@@ -2469,7 +2559,7 @@ rte_eth_rx_queue_count(uint8_t port_id, uint16_t queue_id)
  *  The port identifier of the Ethernet device.
  * @param queue_id
  *  The queue id on the specific port.
- * @offset
+ * @param offset
  *  The offset of the descriptor ID from tail.
  * @return
  *  - (1) if the specific DD bit is set.
@@ -2529,10 +2619,9 @@ rte_eth_rx_descriptor_done(uint8_t port_id, uint16_t queue_id, uint16_t offset)
  * transparently free the memory buffers of packets previously sent.
  * This feature is driven by the *tx_free_thresh* value supplied to the
  * rte_eth_dev_configure() function at device configuration time.
- * When the number of previously sent packets reached the "minimum transmit
- * packets to free" threshold, the rte_eth_tx_burst() function must
- * [attempt to] free the *rte_mbuf*  buffers of those packets whose
- * transmission was effectively completed.
+ * When the number of free TX descriptors drops below this threshold, the
+ * rte_eth_tx_burst() function must [attempt to] free the *rte_mbuf*  buffers
+ * of those packets whose transmission was effectively completed.
  *
  * @param port_id
  *   The port identifier of the Ethernet device.
@@ -2981,6 +3070,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.
  *
@@ -3168,7 +3273,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);
 
@@ -3261,7 +3366,7 @@ int rte_eth_dev_bypass_state_show(uint8_t port, uint32_t *state);
  *
  * @param port
  *   The port identifier of the Ethernet device.
- * @param state
+ * @param new_state
  *   The current bypass state.
  *   - (1) Normal mode
  *   - (2) Bypass mode
@@ -3326,7 +3431,7 @@ int rte_eth_dev_bypass_event_store(uint8_t port, uint32_t event, uint32_t state)
  *
  * @param port
  *   The port identifier of the Ethernet device.
- * @param state
+ * @param timeout
  *   The timeout to be set.
  *   - (0) 0 seconds (timer is off)
  *   - (1) 1.5 seconds
@@ -3503,6 +3608,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
@@ -3528,6 +3635,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
@@ -3555,9 +3664,9 @@ void *rte_eth_add_tx_callback(uint8_t port_id, uint16_t queue_id,
  * since the it may still be in use. The memory for the callback can be
  * subsequently freed back by the application by calling rte_free():
  *
- *  - Immediately - if the port is stopped, or the user knows that no
- *    callbacks are in flight e.g. if called from the thread doing RX/TX
- *    on that queue.
+ * - Immediately - if the port is stopped, or the user knows that no
+ *   callbacks are in flight e.g. if called from the thread doing RX/TX
+ *   on that queue.
  *
  * - After a short delay - where the delay is sufficient to allow any
  *   in-flight callbacks to complete.
@@ -3588,9 +3697,9 @@ int rte_eth_remove_rx_callback(uint8_t port_id, uint16_t queue_id,
  * since the it may still be in use. The memory for the callback can be
  * subsequently freed back by the application by calling rte_free():
  *
- *  - Immediately - if the port is stopped, or the user knows that no
- *    callbacks are in flight e.g. if called from the thread doing RX/TX
- *    on that queue.
+ * - Immediately - if the port is stopped, or the user knows that no
+ *   callbacks are in flight e.g. if called from the thread doing RX/TX
+ *   on that queue.
  *
  * - After a short delay - where the delay is sufficient to allow any
  *   in-flight callbacks to complete.
@@ -3611,6 +3720,164 @@ 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);
 
+/**
+ * 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.
+ *
+ * @param port_id
+ *   The port identifier of the Ethernet device.
+ * @param mc_addr_set
+ *   The array of multicast addresses to set. Equal to NULL when the function
+ *   is invoked to flush the set of filtered addresses.
+ * @param nb_mc_addr
+ *   The number of multicast addresses in the *mc_addr_set* array. Equal to 0
+ *   when the function is invoked to flush the set of filtered addresses.
+ * @return
+ *   - (0) if successful.
+ *   - (-ENODEV) if *port_id* invalid.
+ *   - (-ENOTSUP) if PMD of *port_id* doesn't support multicast filtering.
+ *   - (-ENOSPC) if *port_id* has not enough multicast filtering resources.
+ */
+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