X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_ether%2Frte_ethdev.h;h=62c166e0d22543f60d87bdb1c8068bc96ae68a00;hb=48cc0baf8ac69aded9f96d291ff3ad75940c4a8e;hp=16dbe00ee679f87d8933eafa14a96c3c15f50b71;hpb=7283260541526f08dffe1f7e538f2545fda70ade;p=dpdk.git diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 16dbe00ee6..62c166e0d2 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -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 #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