X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_ether%2Frte_ethdev.h;h=01b93bbf54690d7ad49b589cc21f19958fca11b5;hb=e9d48c0072d36eb6423b45fba4ec49d0def6c36f;hp=cb99d0c59d7df5099fd3c72d851f46a6db11168e;hpb=dada9ef6edc59015b6674b5a95258787c71401b0;p=dpdk.git diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index cb99d0c59d..01b93bbf54 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -1,35 +1,34 @@ /*- * BSD LICENSE * - * Copyright(c) 2010-2012 Intel Corporation. All rights reserved. + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions * are met: * - * * Redistributions of source code must retain the above copyright + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * */ #ifndef _RTE_ETHDEV_H_ @@ -116,11 +115,11 @@ * - VLAN filtering configuration * - MAC addresses supplied to MAC address array * - flow director filtering mode (but not filtering rules) + * - NIC queue statistics mappings * * Any other configuration will not be stored and will need to be re-entered * after a call to rte_eth_dev_start(). * - * * Finally, a network application can close an Ethernet device by invoking the * rte_eth_dev_close() function. * @@ -193,6 +192,24 @@ struct rte_eth_stats { 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 q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS]; + /**< Total number of queue RX packets. */ + uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS]; + /**< Total number of queue TX packets. */ + uint64_t q_ibytes[RTE_ETHDEV_QUEUE_STAT_CNTRS]; + /**< Total number of successfully received queue bytes. */ + uint64_t q_obytes[RTE_ETHDEV_QUEUE_STAT_CNTRS]; + /**< Total number of successfully transmitted queue bytes. */ + uint64_t q_errors[RTE_ETHDEV_QUEUE_STAT_CNTRS]; + /**< Total number of queue packets received that are dropped. */ + uint64_t ilbpackets; + /**< Total number of good packets received from loopback,VF Only */ + uint64_t olbpackets; + /**< Total number of good packets transmitted to loopback,VF Only */ + uint64_t ilbbytes; + /**< Total number of good bytes received from loopback,VF Only */ + uint64_t olbbytes; + /**< Total number of good bytes transmitted to loopback,VF Only */ }; /** @@ -229,23 +246,58 @@ struct rte_eth_thresh { * packets to multiple queues. */ enum rte_eth_rx_mq_mode { - ETH_RSS = 0, /**< Default to RSS mode */ - ETH_VMDQ_DCB /**< Use VMDQ+DCB to route traffic to queues */ + ETH_MQ_RX_NONE = 0, /**< None of DCB,RSS or VMDQ mode */ + + ETH_MQ_RX_RSS, /**< For RX side, only RSS is on */ + ETH_MQ_RX_DCB, /**< For RX side,only DCB is on. */ + ETH_MQ_RX_DCB_RSS, /**< Both DCB and RSS enable */ + + ETH_MQ_RX_VMDQ_ONLY, /**< Only VMDQ, no RSS nor DCB */ + ETH_MQ_RX_VMDQ_RSS, /**< RSS mode with VMDQ */ + ETH_MQ_RX_VMDQ_DCB, /**< Use VMDQ+DCB to route traffic to queues */ + ETH_MQ_RX_VMDQ_DCB_RSS, /**< Enable both VMDQ and DCB in VMDq */ +}; + +/** + * for rx mq mode backward compatible + */ +#define ETH_RSS ETH_MQ_RX_RSS +#define VMDQ_DCB ETH_MQ_RX_VMDQ_DCB +#define ETH_DCB_RX ETH_MQ_RX_DCB + +/** + * A set of values to identify what method is to be used to transmit + * packets using multi-TCs. + */ +enum rte_eth_tx_mq_mode { + ETH_MQ_TX_NONE = 0, /**< It is in neither DCB nor VT mode. */ + ETH_MQ_TX_DCB, /**< For TX side,only DCB is on. */ + ETH_MQ_TX_VMDQ_DCB, /**< For TX side,both DCB and VT is on. */ + ETH_MQ_TX_VMDQ_ONLY, /**< Only VT on, no DCB */ }; +/** + * for tx mq mode backward compatible + */ +#define ETH_DCB_NONE ETH_MQ_TX_NONE +#define ETH_VMDQ_DCB_TX ETH_MQ_TX_VMDQ_DCB +#define ETH_DCB_TX ETH_MQ_TX_DCB + /** * A structure used to configure the RX features of an Ethernet port. */ struct rte_eth_rxmode { /** The multi-queue packet distribution mode to be used, e.g. RSS. */ enum rte_eth_rx_mq_mode mq_mode; - uint32_t max_rx_pkt_len; /**< Only used if jumbo_frame enabled. */ - uint16_t split_hdr_size; /**< hdr buf size (header_split enabled).*/ - uint8_t header_split : 1, /**< Header Split enable. */ - hw_ip_checksum : 1, /**< IP/UDP/TCP checksum offload enable. */ - hw_vlan_filter : 1, /**< VLAN filter enable. */ - jumbo_frame : 1, /**< Jumbo Frame Receipt enable. */ - hw_strip_crc : 1; /**< Enable CRC stripping by hardware. */ + uint32_t max_rx_pkt_len; /**< Only used if jumbo_frame enabled. */ + uint16_t split_hdr_size; /**< hdr buf size (header_split enabled).*/ + uint8_t header_split : 1, /**< Header Split enable. */ + hw_ip_checksum : 1, /**< IP/UDP/TCP checksum offload enable. */ + hw_vlan_filter : 1, /**< VLAN filter enable. */ + hw_vlan_strip : 1, /**< VLAN strip enable. */ + hw_vlan_extend : 1, /**< Extended VLAN enable. */ + jumbo_frame : 1, /**< Jumbo Frame Receipt enable. */ + hw_strip_crc : 1; /**< Enable CRC stripping by hardware. */ }; /** @@ -275,19 +327,125 @@ struct rte_eth_rss_conf { #define ETH_RSS_IPV4_UDP 0x0040 /**< IPv4/UDP packet. */ #define ETH_RSS_IPV6_UDP 0x0080 /**< IPv6/UDP packet. */ #define ETH_RSS_IPV6_UDP_EX 0x0100 /**< IPv6/UDP with extension headers. */ +/* Definitions used for redirection table entry size */ +#define ETH_RSS_RETA_NUM_ENTRIES 128 +#define ETH_RSS_RETA_MAX_QUEUE 16 /* Definitions used for VMDQ and DCB functionality */ #define ETH_VMDQ_MAX_VLAN_FILTERS 64 /**< Maximum nb. of VMDQ vlan filters. */ #define ETH_DCB_NUM_USER_PRIORITIES 8 /**< Maximum nb. of DCB priorities. */ #define ETH_VMDQ_DCB_NUM_QUEUES 128 /**< Maximum nb. of VMDQ DCB queues. */ +#define ETH_DCB_NUM_QUEUES 128 /**< Maximum nb. of DCB queues. */ + +/* DCB capability defines */ +#define ETH_DCB_PG_SUPPORT 0x00000001 /**< Priority Group(ETS) support. */ +#define ETH_DCB_PFC_SUPPORT 0x00000002 /**< Priority Flow Control support. */ + +/* Definitions used for VLAN Offload functionality */ +#define ETH_VLAN_STRIP_OFFLOAD 0x0001 /**< VLAN Strip On/Off */ +#define ETH_VLAN_FILTER_OFFLOAD 0x0002 /**< VLAN Filter On/Off */ +#define ETH_VLAN_EXTEND_OFFLOAD 0x0004 /**< VLAN Extend On/Off */ + +/* Definitions used for mask VLAN setting */ +#define ETH_VLAN_STRIP_MASK 0x0001 /**< VLAN Strip setting mask */ +#define ETH_VLAN_FILTER_MASK 0x0002 /**< VLAN Filter setting mask*/ +#define ETH_VLAN_EXTEND_MASK 0x0004 /**< VLAN Extend setting mask*/ +#define ETH_VLAN_ID_MAX 0x0FFF /**< VLAN ID is in lower 12 bits*/ + +/* Definitions used for receive MAC address */ +#define ETH_NUM_RECEIVE_MAC_ADDR 128 /**< Maximum nb. of receive mac addr. */ + + +/* Definitions used for unicast hash */ +#define ETH_VMDQ_NUM_UC_HASH_ARRAY 128 /**< Maximum nb. of UC hash array. */ + +/* Definitions used for VMDQ pool rx mode setting */ +#define ETH_VMDQ_ACCEPT_UNTAG 0x0001 /**< accept untagged packets. */ +#define ETH_VMDQ_ACCEPT_HASH_MC 0x0002 /**< accept packets in multicast table . */ +#define ETH_VMDQ_ACCEPT_HASH_UC 0x0004 /**< accept packets in unicast table. */ +#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. . */ + +#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. */ + +/** + * 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. */ +}; + +/** + * 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. */ + uint64_t pool_mask; /**< Bitmap of pool for pool mirroring */ + struct rte_eth_vlan_mirror vlan; /**< VLAN ID setting for VLAN mirroring */ +}; + +/** + * A structure used to configure Redirection Table of the Receive Side + * Scaling (RSS) feature of an Ethernet port. + */ +struct rte_eth_rss_reta { + /** First 64 mask bits indicate which entry(s) need to updated/queried. */ + uint64_t mask_lo; + /** Second 64 mask bits indicate which entry(s) need to updated/queried. */ + uint64_t mask_hi; + uint8_t reta[ETH_RSS_RETA_NUM_ENTRIES]; /**< 128 RETA entries*/ +}; + +/** + * This enum indicates the possible number of traffic classes + * in DCB configratioins + */ +enum rte_eth_nb_tcs { + ETH_4_TCS = 4, /**< 4 TCs with DCB. */ + ETH_8_TCS = 8 /**< 8 TCs with DCB. */ +}; /** * This enum indicates the possible number of queue pools - * in VMDQ+DCB configurations. + * in VMDQ configurations. */ enum rte_eth_nb_pools { - ETH_16_POOLS = 16, /**< 16 pools with DCB. */ - ETH_32_POOLS = 32 /**< 32 pools with DCB. */ + ETH_8_POOLS = 8, /**< 8 VMDq pools. */ + ETH_16_POOLS = 16, /**< 16 VMDq pools. */ + ETH_32_POOLS = 32, /**< 32 VMDq pools. */ + ETH_64_POOLS = 64 /**< 64 VMDq 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. */ +}; + +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. */ +}; + +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. */ +}; + +struct rte_eth_vmdq_tx_conf { + enum rte_eth_nb_pools nb_queue_pools; /**< VMDq mode, 64 pools. */ }; /** @@ -314,11 +472,22 @@ struct rte_eth_vmdq_dcb_conf { /**< Selects a queue in a pool */ }; +struct rte_eth_vmdq_rx_conf { + enum rte_eth_nb_pools nb_queue_pools; /**< VMDq only mode, 8 or 64 pools */ + uint8_t enable_default_pool; /**< If non-zero, use a default pool */ + uint8_t default_pool; /**< The default pool, if applicable */ + uint8_t nb_pool_maps; /**< We can have up to 64 filters/mappings */ + struct { + 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. */ +}; + /** * A structure used to configure the TX features of an Ethernet port. - * For future extensions. */ struct rte_eth_txmode { + enum rte_eth_tx_mq_mode mq_mode; /**< TX multi-queues mode. */ }; /** @@ -327,8 +496,19 @@ struct rte_eth_txmode { struct rte_eth_rxconf { struct rte_eth_thresh rx_thresh; /**< RX ring threshold registers. */ uint16_t rx_free_thresh; /**< Drives the freeing of RX descriptors. */ + uint8_t rx_drop_en; /**< Drop packets if no descriptors are available. */ }; +#define ETH_TXQ_FLAGS_NOMULTSEGS 0x0001 /**< nb_segs=1 for all mbufs */ +#define ETH_TXQ_FLAGS_NOREFCOUNT 0x0002 /**< refcnt can be ignored */ +#define ETH_TXQ_FLAGS_NOMULTMEMP 0x0004 /**< all bufs come from same mempool */ +#define ETH_TXQ_FLAGS_NOVLANOFFL 0x0100 /**< disable VLAN offload */ +#define ETH_TXQ_FLAGS_NOXSUMSCTP 0x0200 /**< disable SCTP checksum offload */ +#define ETH_TXQ_FLAGS_NOXSUMUDP 0x0400 /**< disable UDP checksum offload */ +#define ETH_TXQ_FLAGS_NOXSUMTCP 0x0800 /**< disable TCP checksum offload */ +#define ETH_TXQ_FLAGS_NOOFFLOADS \ + (ETH_TXQ_FLAGS_NOVLANOFFL | ETH_TXQ_FLAGS_NOXSUMSCTP | \ + ETH_TXQ_FLAGS_NOXSUMUDP | ETH_TXQ_FLAGS_NOXSUMTCP) /** * A structure used to configure a TX ring of an Ethernet port. */ @@ -336,6 +516,7 @@ 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. */ + uint32_t txq_flags; /**< Set flags for the Tx queue */ }; /** @@ -359,6 +540,17 @@ struct rte_eth_fc_conf { uint16_t pause_time; /**< Pause quota in the Pause frame */ uint16_t send_xon; /**< Is XON frame need be sent */ enum rte_eth_fc_mode mode; /**< Link flow control mode */ + uint8_t mac_ctrl_frame_fwd; /**< Forward MAC control frames */ +}; + +/** + * A structure used to configure Ethernet priority flow control parameter. + * These parameters will be configured into the register of the NIC. + * Please refer to the corresponding data sheet for proper value. + */ +struct rte_eth_pfc_conf { + struct rte_eth_fc_conf fc; /**< General flow control parameter. */ + uint8_t priority; /**< VLAN User Priority. */ }; /** @@ -399,9 +591,9 @@ struct rte_fdir_conf { enum rte_fdir_mode mode; /**< Flow Director mode. */ enum rte_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */ enum rte_fdir_status_mode status; /**< How to report FDIR hash. */ - /* Offset of flexbytes field in RX packets (in 16-bit word units). */ + /** Offset of flexbytes field in RX packets (in 16-bit word units). */ uint8_t flexbytes_offset; - /* RX queue of packets matching a "drop" filter in perfect mode. */ + /** RX queue of packets matching a "drop" filter in perfect mode. */ uint8_t drop_queue; }; @@ -409,10 +601,10 @@ struct rte_fdir_conf { * Possible l4type of FDIR filters. */ enum rte_l4type { - RTE_FDIR_L4TYPE_NONE = 0, /**< Nnoe. */ + RTE_FDIR_L4TYPE_NONE = 0, /**< None. */ RTE_FDIR_L4TYPE_UDP, /**< UDP. */ RTE_FDIR_L4TYPE_TCP, /**< TCP. */ - RTE_FDIR_L4TYPE_SCTP, /**< SCTP. */ + RTE_FDIR_L4TYPE_SCTP, /**< SCTP. */ }; /** @@ -446,33 +638,47 @@ struct rte_fdir_filter { /** * 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 not relevant in filters, and + /** 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; - uint8_t vlan_id; /**< If set to 1, vlan_id is relevant in filters. */ - uint8_t vlan_prio; /**< If set to 1, vlan_prio is relevant in filters. */ - uint8_t flexbytes; /**< If set to 1, flexbytes is relevant in filters. */ + /** 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. */ + 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. */ + 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. */ + 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. */ + 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. */ + bits to use in the destination port of an IP packet when matching it + against FDIR filters. */ uint16_t dst_port_mask; }; @@ -523,7 +729,22 @@ struct rte_eth_conf { struct rte_eth_rss_conf rss_conf; /**< Port RSS configuration */ struct rte_eth_vmdq_dcb_conf vmdq_dcb_conf; /**< Port vmdq+dcb configuration. */ + struct rte_eth_dcb_rx_conf dcb_rx_conf; + /**< Port dcb RX configuration. */ + struct rte_eth_vmdq_rx_conf vmdq_rx_conf; + /**< Port vmdq RX configuration. */ } rx_adv_conf; /**< Port RX filtering configuration (union). */ + union { + struct rte_eth_vmdq_dcb_tx_conf vmdq_dcb_tx_conf; + /**< Port vmdq+dcb TX configuration. */ + struct rte_eth_dcb_tx_conf dcb_tx_conf; + /**< Port dcb TX configuration. */ + struct rte_eth_vmdq_tx_conf vmdq_tx_conf; + /**< Port vmdq TX configuration. */ + } tx_adv_conf; /**< Port TX DCB configuration (union). */ + /** Currently,Priority Flow Control(PFC) are supported,if DCB with PFC + is needed,and the variable must be set ETH_DCB_PFC_SUPPORT. */ + uint32_t dcb_capability_en; struct rte_fdir_conf fdir_conf; /**< FDIR configuration. */ struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */ }; @@ -541,11 +762,13 @@ struct rte_eth_dev_info { uint16_t max_rx_queues; /**< Maximum number of RX queues. */ uint16_t max_tx_queues; /**< Maximum number of TX queues. */ uint32_t max_mac_addrs; /**< Maximum number of MAC addresses. */ + uint32_t max_hash_mac_addrs; + /** Maximum number of hash MAC addresses for MTA and UTA. */ + uint16_t max_vfs; /**< Maximum number of VFs. */ + uint16_t max_vmdq_pools; /**< Maximum number of VMDq pools. */ }; struct rte_eth_dev; -struct igb_rx_queue; -struct igb_tx_queue; struct rte_eth_dev_callback; /** @internal Structure to keep track of registered callbacks */ @@ -557,45 +780,50 @@ TAILQ_HEAD(rte_eth_dev_cb_list, rte_eth_dev_callback); * structure associated with an Ethernet device. */ -typedef int (*eth_dev_configure_t)(struct rte_eth_dev *dev, uint16_t nb_rx_q, - uint16_t nb_tx_q); -/**< Ethernet device configuration. */ +typedef int (*eth_dev_configure_t)(struct rte_eth_dev *dev); +/**< @internal Ethernet device configuration. */ typedef int (*eth_dev_start_t)(struct rte_eth_dev *dev); -/**< Function used to start a configured Ethernet device. */ +/**< @internal Function used to start a configured Ethernet device. */ typedef void (*eth_dev_stop_t)(struct rte_eth_dev *dev); -/**< Function used to stop a configured Ethernet device. */ +/**< @internal Function used to stop a configured Ethernet device. */ typedef void (*eth_dev_close_t)(struct rte_eth_dev *dev); /**< @internal Function used to close a configured Ethernet device. */ typedef void (*eth_promiscuous_enable_t)(struct rte_eth_dev *dev); -/**< Function used to enable the RX promiscuous mode of an Ethernet device. */ +/**< @internal Function used to enable the RX promiscuous mode of an Ethernet device. */ typedef void (*eth_promiscuous_disable_t)(struct rte_eth_dev *dev); -/**< Function used to disable the RX promiscuous mode of an Ethernet device. */ +/**< @internal Function used to disable the RX promiscuous mode of an Ethernet device. */ typedef void (*eth_allmulticast_enable_t)(struct rte_eth_dev *dev); -/**< Enable the receipt of all multicast packets by an Ethernet device. */ +/**< @internal Enable the receipt of all multicast packets by an Ethernet device. */ typedef void (*eth_allmulticast_disable_t)(struct rte_eth_dev *dev); -/**< Disable the receipt of all multicast packets by an Ethernet device. */ +/**< @internal Disable the receipt of all multicast packets by an Ethernet device. */ typedef int (*eth_link_update_t)(struct rte_eth_dev *dev, int wait_to_complete); -/**< Get link speed, duplex mode and state (up/down) of an Ethernet device. */ +/**< @internal Get link speed, duplex mode and state (up/down) of an Ethernet device. */ typedef void (*eth_stats_get_t)(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats); -/**< Get global I/O statistics of an Ethernet device. */ +/**< @internal Get global I/O statistics of an Ethernet device. */ typedef void (*eth_stats_reset_t)(struct rte_eth_dev *dev); -/**< Reset global I/O statistics of an Ethernet device to 0. */ +/**< @internal Reset global I/O statistics of an Ethernet device to 0. */ + +typedef int (*eth_queue_stats_mapping_set_t)(struct rte_eth_dev *dev, + uint16_t queue_id, + uint8_t stat_idx, + uint8_t is_rx); +/**< @internal Set a queue statistics mapping for a tx/rx queue of an Ethernet device. */ typedef void (*eth_dev_infos_get_t)(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); -/**< Get specific informations of an Ethernet device. */ +/**< @internal Get specific informations of an Ethernet device. */ typedef int (*eth_rx_queue_setup_t)(struct rte_eth_dev *dev, uint16_t rx_queue_id, @@ -603,90 +831,220 @@ typedef int (*eth_rx_queue_setup_t)(struct rte_eth_dev *dev, unsigned int socket_id, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool); -/**< Set up a receive queue of an Ethernet device. */ +/**< @internal Set up a receive queue of an Ethernet device. */ typedef int (*eth_tx_queue_setup_t)(struct rte_eth_dev *dev, uint16_t tx_queue_id, uint16_t nb_tx_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); -/**< Setup a transmit queue of an Ethernet device. */ +/**< @internal Setup a transmit queue of an Ethernet device. */ + +typedef void (*eth_queue_release_t)(void *queue); +/**< @internal Release memory resources allocated by given RX/TX 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. */ -typedef void (*vlan_filter_set_t)(struct rte_eth_dev *dev, +typedef int (*eth_rx_descriptor_done_t)(void *rxq, uint16_t offset); +/**< @Check DD bit of specific RX descriptor */ + +typedef int (*vlan_filter_set_t)(struct rte_eth_dev *dev, uint16_t vlan_id, int on); -/**< Enable/Disable filtering of a VLAN Tag Identifier by an Ethernet device. */ +/**< @internal filtering of a VLAN Tag Identifier by an Ethernet device. */ + +typedef void (*vlan_tpid_set_t)(struct rte_eth_dev *dev, + uint16_t tpid); +/**< @internal set the outer VLAN-TPID by an Ethernet device. */ + +typedef void (*vlan_offload_set_t)(struct rte_eth_dev *dev, int mask); +/**< @internal set VLAN offload function by an Ethernet device. */ + +typedef void (*vlan_strip_queue_set_t)(struct rte_eth_dev *dev, + uint16_t rx_queue_id, + int on); +/**< @internal VLAN stripping enable/disable by an queue of Ethernet device. */ -typedef uint16_t (*eth_rx_burst_t)(struct igb_rx_queue *rxq, +typedef uint16_t (*eth_rx_burst_t)(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); -/**< Retrieve input packets from a receive queue of an Ethernet device. */ +/**< @internal Retrieve input packets from a receive queue of an Ethernet device. */ -typedef uint16_t (*eth_tx_burst_t)(struct igb_tx_queue *txq, +typedef uint16_t (*eth_tx_burst_t)(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); -/**< Send output packets on a transmit queue of an Ethernet device. */ +/**< @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); -/**< Setup a new signature filter rule on an Ethernet device */ +/**< @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); -/**< Update a signature filter rule on an Ethernet device */ +/**< @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); -/**< Remove a signature filter rule on an Ethernet device */ +/**< @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); -/**< Get information about fdir status */ +/**< @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); -/**< Setup a new perfect filter rule on an Ethernet device */ +/**< @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); -/**< Update a perfect filter rule on an Ethernet device */ +/**< @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); -/**< Remove a perfect filter rule on an Ethernet device */ +/**< @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); -/**< Setup flow director masks on an Ethernet device */ +/**< @internal Setup flow director masks on an Ethernet device */ typedef int (*flow_ctrl_set_t)(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); -/**< Setup flow control parameter on an Ethernet device */ +/**< @internal Setup flow control parameter on an Ethernet device */ + +typedef int (*priority_flow_ctrl_set_t)(struct rte_eth_dev *dev, + struct rte_eth_pfc_conf *pfc_conf); +/**< @internal Setup priority flow control parameter on an Ethernet device */ + +typedef int (*reta_update_t)(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf); +/**< @internal Update RSS redirection table on an Ethernet device */ + +typedef int (*reta_query_t)(struct rte_eth_dev *dev, + struct rte_eth_rss_reta *reta_conf); +/**< @internal Query RSS redirection table on an Ethernet device */ typedef int (*eth_dev_led_on_t)(struct rte_eth_dev *dev); -/**< Turn on SW controllable LED on an Ethernet device */ +/**< @internal Turn on SW controllable LED on an Ethernet device */ typedef int (*eth_dev_led_off_t)(struct rte_eth_dev *dev); -/**< Turn off SW controllable LED on an Ethernet device */ +/**< @internal Turn off SW controllable LED on an Ethernet device */ typedef void (*eth_mac_addr_remove_t)(struct rte_eth_dev *dev, uint32_t index); -/**< Remove MAC address from receive address register */ +/**< @internal Remove MAC address from receive address register */ typedef void (*eth_mac_addr_add_t)(struct rte_eth_dev *dev, struct ether_addr *mac_addr, uint32_t index, uint32_t vmdq); -/**< Set a MAC address into Receive Address Address Register */ +/**< @internal Set a MAC address into Receive Address Address Register */ + +typedef int (*eth_uc_hash_table_set_t)(struct rte_eth_dev *dev, + struct ether_addr *mac_addr, + uint8_t on); +/**< @internal Set a Unicast Hash bitmap */ + +typedef int (*eth_uc_all_hash_table_set_t)(struct rte_eth_dev *dev, + uint8_t on); +/**< @internal Set all Unicast Hash bitmap */ + +typedef int (*eth_set_vf_rx_mode_t)(struct rte_eth_dev *dev, + uint16_t vf, + uint16_t rx_mode, + uint8_t on); +/**< @internal Set a VF receive mode */ + +typedef int (*eth_set_vf_rx_t)(struct rte_eth_dev *dev, + uint16_t vf, + uint8_t on); +/**< @internal Set a VF receive mode */ + +typedef int (*eth_set_vf_tx_t)(struct rte_eth_dev *dev, + uint16_t vf, + uint8_t on); +/**< @internal Enable or disable a VF transmit */ + +typedef int (*eth_set_vf_vlan_filter_t)(struct rte_eth_dev *dev, + uint16_t vlan, + uint64_t vf_mask, + uint8_t vlan_on); +/**< @internal Set VF VLAN pool filter */ + +typedef int (*eth_mirror_rule_set_t)(struct rte_eth_dev *dev, + struct rte_eth_vmdq_mirror_conf *mirror_conf, + uint8_t rule_id, + uint8_t on); +/**< @internal Add a traffic mirroring rule on an Ethernet device */ + +typedef int (*eth_mirror_rule_reset_t)(struct rte_eth_dev *dev, + uint8_t rule_id); +/**< @internal Remove a traffic mirroring rule on an Ethernet device */ + +#ifdef RTE_NIC_BYPASS + +enum { + RTE_BYPASS_MODE_NONE, + RTE_BYPASS_MODE_NORMAL, + RTE_BYPASS_MODE_BYPASS, + RTE_BYPASS_MODE_ISOLATE, + RTE_BYPASS_MODE_NUM, +}; + +#define RTE_BYPASS_MODE_VALID(x) \ + ((x) > RTE_BYPASS_MODE_NONE && (x) < RTE_BYPASS_MODE_NUM) + +enum { + RTE_BYPASS_EVENT_NONE, + RTE_BYPASS_EVENT_START, + RTE_BYPASS_EVENT_OS_ON = RTE_BYPASS_EVENT_START, + RTE_BYPASS_EVENT_POWER_ON, + RTE_BYPASS_EVENT_OS_OFF, + RTE_BYPASS_EVENT_POWER_OFF, + RTE_BYPASS_EVENT_TIMEOUT, + RTE_BYPASS_EVENT_NUM +}; + +#define RTE_BYPASS_EVENT_VALID(x) \ + ((x) > RTE_BYPASS_EVENT_NONE && (x) < RTE_BYPASS_MODE_NUM) + +enum { + RTE_BYPASS_TMT_OFF, /* timeout disabled. */ + RTE_BYPASS_TMT_1_5_SEC, /* timeout for 1.5 seconds */ + RTE_BYPASS_TMT_2_SEC, /* timeout for 2 seconds */ + RTE_BYPASS_TMT_3_SEC, /* timeout for 3 seconds */ + RTE_BYPASS_TMT_4_SEC, /* timeout for 4 seconds */ + RTE_BYPASS_TMT_8_SEC, /* timeout for 8 seconds */ + RTE_BYPASS_TMT_16_SEC, /* timeout for 16 seconds */ + RTE_BYPASS_TMT_32_SEC, /* timeout for 32 seconds */ + RTE_BYPASS_TMT_NUM +}; + +#define RTE_BYPASS_TMT_VALID(x) \ + ((x) == RTE_BYPASS_TMT_OFF || \ + ((x) > RTE_BYPASS_TMT_OFF && (x) < RTE_BYPASS_TMT_NUM)) + +typedef void (*bypass_init_t)(struct rte_eth_dev *dev); +typedef int32_t (*bypass_state_set_t)(struct rte_eth_dev *dev, uint32_t *new_state); +typedef int32_t (*bypass_state_show_t)(struct rte_eth_dev *dev, uint32_t *state); +typedef int32_t (*bypass_event_set_t)(struct rte_eth_dev *dev, uint32_t state, uint32_t event); +typedef int32_t (*bypass_event_show_t)(struct rte_eth_dev *dev, uint32_t event_shift, uint32_t *event); +typedef int32_t (*bypass_wd_timeout_set_t)(struct rte_eth_dev *dev, uint32_t timeout); +typedef int32_t (*bypass_wd_timeout_show_t)(struct rte_eth_dev *dev, uint32_t *wd_timeout); +typedef int32_t (*bypass_ver_show_t)(struct rte_eth_dev *dev, uint32_t *ver); +typedef int32_t (*bypass_wd_reset_t)(struct rte_eth_dev *dev); +#endif + /** - * A structure containing the functions exported by an Ethernet driver. + * @internal A structure containing the functions exported by an Ethernet driver. */ struct eth_dev_ops { eth_dev_configure_t dev_configure; /**< Configure device. */ @@ -700,15 +1058,33 @@ struct eth_dev_ops { eth_link_update_t link_update; /**< Get device link state. */ eth_stats_get_t stats_get; /**< Get device statistics. */ eth_stats_reset_t stats_reset; /**< Reset device statistics. */ + eth_queue_stats_mapping_set_t queue_stats_mapping_set; + /**< Configure per queue stat counter mapping. */ eth_dev_infos_get_t dev_infos_get; /**< Get device info. */ - vlan_filter_set_t vlan_filter_set; /**< Filter VLAN on/off. */ + vlan_filter_set_t vlan_filter_set; /**< Filter VLAN Setup. */ + vlan_tpid_set_t vlan_tpid_set; /**< Outer VLAN TPID Setup. */ + vlan_strip_queue_set_t vlan_strip_queue_set; /**< VLAN Stripping on queue. */ + vlan_offload_set_t vlan_offload_set; /**< Set VLAN Offload. */ eth_rx_queue_setup_t rx_queue_setup;/**< Set up device RX queue.*/ + 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 */ 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. */ eth_dev_led_off_t dev_led_off; /**< Turn off LED. */ flow_ctrl_set_t flow_ctrl_set; /**< Setup flow control. */ + priority_flow_ctrl_set_t priority_flow_ctrl_set; /**< Setup priority flow control.*/ eth_mac_addr_remove_t mac_addr_remove; /**< Remove MAC address */ eth_mac_addr_add_t mac_addr_add; /**< Add a MAC address */ + eth_uc_hash_table_set_t uc_hash_table_set; /**< Set Unicast Table Array */ + eth_uc_all_hash_table_set_t uc_all_hash_table_set; /**< Set Unicast hash bitmap */ + eth_mirror_rule_set_t mirror_rule_set; /**< Add a traffic mirror rule.*/ + eth_mirror_rule_reset_t mirror_rule_reset; /**< reset a traffic mirror rule.*/ + eth_set_vf_rx_mode_t set_vf_rx_mode; /**< Set VF RX mode */ + eth_set_vf_rx_t set_vf_rx; /**< enable/disable a VF receive */ + eth_set_vf_tx_t set_vf_tx; /**< enable/disable a VF transmit */ + eth_set_vf_vlan_filter_t set_vf_vlan_filter; /**< Set VF VLAN filter */ /** Add a signature filter. */ fdir_add_signature_filter_t fdir_add_signature_filter; @@ -726,9 +1102,27 @@ struct eth_dev_ops { 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; + /* bypass control */ +#ifdef RTE_NIC_BYPASS + bypass_init_t bypass_init; + bypass_state_set_t bypass_state_set; + bypass_state_show_t bypass_state_show; + bypass_event_set_t bypass_event_set; + bypass_event_show_t bypass_event_show; + bypass_wd_timeout_set_t bypass_wd_timeout_set; + bypass_wd_timeout_show_t bypass_wd_timeout_show; + bypass_ver_show_t bypass_ver_show; + bypass_wd_reset_t bypass_wd_reset; +#endif + }; /** + * @internal * The generic data structure associated with each ethernet device. * * Pointers to burst-oriented packet receive and transmit functions are @@ -747,17 +1141,28 @@ struct rte_eth_dev { struct rte_eth_dev_cb_list callbacks; /**< User application callbacks */ }; +struct rte_eth_dev_sriov { + uint8_t active; /**< SRIOV is active with 16, 32 or 64 pools */ + uint8_t nb_q_per_pool; /**< rx queue number per pool */ + uint16_t def_vmdq_idx; /**< Default pool num used for PF */ + uint16_t def_pool_q_idx; /**< Default pool queue start reg index */ +}; +#define RTE_ETH_DEV_SRIOV(dev) ((dev)->data->sriov) + /** + * @internal * The data part, with no function pointers, associated with each ethernet device. * * This structure is safe to place in shared memory to be common among different * processes in a multi-process configuration. */ struct rte_eth_dev_data { - struct igb_rx_queue **rx_queues; /**< Array of pointers to RX queues. */ - struct igb_tx_queue **tx_queues; /**< Array of pointers to TX queues. */ + void **rx_queues; /**< Array of pointers to RX queues. */ + void **tx_queues; /**< Array of pointers to TX queues. */ uint16_t nb_rx_queues; /**< Number of RX queues. */ uint16_t nb_tx_queues; /**< Number of TX queues. */ + + struct rte_eth_dev_sriov sriov; /**< SRIOV data */ void *dev_private; /**< PMD-specific private data */ @@ -769,6 +1174,10 @@ struct rte_eth_dev_data { uint64_t rx_mbuf_alloc_failed; /**< RX ring mbuf allocation failures. */ struct ether_addr* mac_addrs;/**< Device Ethernet Link address. */ + uint64_t mac_pool_sel[ETH_NUM_RECEIVE_MAC_ADDR]; + /** bitmap array of associating Ethernet MAC addresses to pools */ + struct ether_addr* hash_mac_addrs; + /** Device Ethernet MAC addresses of hash filtering. */ 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) */ @@ -777,6 +1186,7 @@ struct rte_eth_dev_data { }; /** + * @internal * The pool of *rte_eth_dev* structures. The size of the pool * is configured at compile-time in the file. */ @@ -793,8 +1203,20 @@ extern struct rte_eth_dev rte_eth_devices[]; */ extern uint8_t rte_eth_dev_count(void); +/** + * Function for internal use by dummy drivers primarily, e.g. ring-based + * driver. + * Allocates a new ethdev slot for an ethernet device and returns the pointer + * to that slot for the driver to use. + * + * @return + * - Slot in the rte_dev_devices array for a new device; + */ +struct rte_eth_dev *rte_eth_dev_allocate(void); + struct eth_driver; /** + * @internal * Initialization function of an Ethernet driver invoked for each matching * Ethernet PCI device detected during the PCI probing phase. * @@ -829,6 +1251,7 @@ typedef int (*eth_dev_init_t)(struct eth_driver *eth_drv, struct rte_eth_dev *eth_dev); /** + * @internal * The structure associated with a PMD Ethernet driver. * * Each Ethernet driver acts as a PCI driver and is represented by a generic @@ -847,6 +1270,7 @@ struct eth_driver { }; /** + * @internal * A function invoked by the initialization function of an Ethernet driver * to simultaneously register itself as a PCI driver and as an Ethernet * Poll Mode Driver (PMD). @@ -866,6 +1290,24 @@ extern void rte_eth_driver_register(struct eth_driver *eth_drv); */ extern int rte_igb_pmd_init(void); +/** + * The initialization function of the driver for + * Intel(r) EM Gigabit Ethernet Controller devices. + * This function is invoked once at EAL start time. + * @return + * 0 on success + */ +extern int rte_em_pmd_init(void); + +/** + * The initialization function of the driver for 1Gbps Intel IGB_VF + * Ethernet devices. + * Invoked once at EAL start time. + * @return + * 0 on success + */ +extern int rte_igbvf_pmd_init(void); + /** * The initialization function of the driver for 10Gbps Intel IXGBE * Ethernet devices. @@ -884,6 +1326,76 @@ extern int rte_ixgbe_pmd_init(void); */ extern int rte_ixgbevf_pmd_init(void); +/** + * The initialization function of the driver for Qumranet virtio-net + * Ethernet devices. + * Invoked once at EAL start time. + * @return + * 0 on success + */ +extern int rte_virtio_pmd_init(void); + +/** + * The initialization function of *all* supported and enabled drivers. + * Right now, the following PMDs are supported: + * - igb + * - igbvf + * - em + * - ixgbe + * - ixgbevf + * This function is invoked once at EAL start time. + * @return + * 0 on success. + * Error code of the device initialization failure, + * -ENODEV if there are no drivers available + * (e.g. if all driver config options are = n). + */ +static inline +int rte_pmd_init_all(void) +{ + int ret = -ENODEV; + +#ifdef RTE_LIBRTE_IGB_PMD + if ((ret = rte_igb_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init igb PMD\n"); + return (ret); + } + if ((ret = rte_igbvf_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init igbvf PMD\n"); + return (ret); + } +#endif /* RTE_LIBRTE_IGB_PMD */ + +#ifdef RTE_LIBRTE_EM_PMD + if ((ret = rte_em_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init em PMD\n"); + return (ret); + } +#endif /* RTE_LIBRTE_EM_PMD */ + +#ifdef RTE_LIBRTE_IXGBE_PMD + if ((ret = rte_ixgbe_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init ixgbe PMD\n"); + return (ret); + } + if ((ret = rte_ixgbevf_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init ixgbevf PMD\n"); + return (ret); + } +#endif /* RTE_LIBRTE_IXGBE_PMD */ + +#ifdef RTE_LIBRTE_VIRTIO_PMD + if ((ret = rte_virtio_pmd_init()) != 0) { + RTE_LOG(ERR, PMD, "Cannot init virtio PMD\n"); + return (ret); + } +#endif /* RTE_LIBRTE_VIRTIO_PMD */ + + if (ret == -ENODEV) + RTE_LOG(ERR, PMD, "No PMD(s) are configured\n"); + return (ret); +} + /** * Configure an Ethernet device. * This function must be invoked first before any other function in the @@ -991,6 +1503,9 @@ extern int rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id, * The *tx_rs_thresh* value should be less or equal then * *tx_free_thresh* value, and both of them should be less then * *nb_tx_desc* - 3. + * - The *txq_flags* member contains flags to pass to the TX queue setup + * function to configure the behavior of the TX queue. This should be set + * to 0 if no special configuration is required. * * Note that setting *tx_free_thresh* or *tx_rs_thresh* value to 0 forces * the transmit function to use default values. @@ -1002,6 +1517,19 @@ extern int rte_eth_tx_queue_setup(uint8_t port_id, uint16_t tx_queue_id, uint16_t nb_tx_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); +/* + * Return the NUMA socket to which an Ethernet device is connected + * + * @param port_id + * The port identifier of the Ethernet device + * @return + * The NUMA socket id to which the Ethernet device is connected or + * a default of zero if the socket could not be determined. + * -1 is returned is the port_id value is out of range. + */ +extern int rte_eth_dev_socket_id(uint8_t port_id); + + /** * Start an Ethernet device. * @@ -1144,6 +1672,48 @@ extern void rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats); */ extern void rte_eth_stats_reset(uint8_t port_id); +/** + * Set a mapping for the specified transmit queue to the specified per-queue + * statistics counter. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param tx_queue_id + * The index of the transmit queue for which a queue stats mapping is required. + * The value must be in the range [0, nb_tx_queue - 1] previously supplied + * to rte_eth_dev_configure(). + * @param stat_idx + * The per-queue packet statistics functionality number that the transmit + * queue is to be assigned. + * The value must be in the range [0, RTE_MAX_ETHPORT_QUEUE_STATS_MAPS - 1]. + * @return + * Zero if successful. Non-zero otherwise. + */ +extern int rte_eth_dev_set_tx_queue_stats_mapping(uint8_t port_id, + uint16_t tx_queue_id, + uint8_t stat_idx); + +/** + * Set a mapping for the specified receive queue to the specified per-queue + * statistics counter. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param rx_queue_id + * The index of the receive queue for which a queue stats mapping is required. + * The value must be in the range [0, nb_rx_queue - 1] previously supplied + * to rte_eth_dev_configure(). + * @param stat_idx + * The per-queue packet statistics functionality number that the receive + * queue is to be assigned. + * The value must be in the range [0, RTE_MAX_ETHPORT_QUEUE_STATS_MAPS - 1]. + * @return + * Zero if successful. Non-zero otherwise. + */ +extern int rte_eth_dev_set_rx_queue_stats_mapping(uint8_t port_id, + uint16_t rx_queue_id, + uint8_t stat_idx); + /** * Retrieve the Ethernet address of an Ethernet device. * @@ -1185,7 +1755,81 @@ extern void rte_eth_dev_info_get(uint8_t port_id, * - (-ENOSYS) if VLAN filtering on *port_id* disabled. * - (-EINVAL) if *vlan_id* > 4095. */ -extern int rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id, int on); +extern int rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id , int on); + +/** + * Enable/Disable hardware VLAN Strip by a rx queue of an Ethernet device. + * 82599/X540 can support VLAN stripping at the rx queue level + * + * @param port_id + * The port identifier of the Ethernet device. + * @param rx_queue_id + * The index of the receive queue for which a queue stats mapping is required. + * The value must be in the range [0, nb_rx_queue - 1] previously supplied + * to rte_eth_dev_configure(). + * @param on + * If 1, Enable VLAN Stripping of the receive queue of the Ethernet port. + * If 0, Disable VLAN Stripping of the receive queue of the Ethernet port. + * @return + * - (0) if successful. + * - (-ENOSUP) if hardware-assisted VLAN stripping not configured. + * - (-ENODEV) if *port_id* invalid. + * - (-EINVAL) if *rx_queue_id* invalid. + */ +extern int rte_eth_dev_set_vlan_strip_on_queue(uint8_t port_id, + uint16_t rx_queue_id, int on); + +/** + * Set the Outer VLAN Ether Type by an Ethernet device, it can be inserted to + * the VLAN Header. This is a register setup available on some Intel NIC, not + * but all, please check the data sheet for availability. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param tag_type + * The Tag Protocol ID + * @return + * - (0) if successful. + * - (-ENOSUP) if hardware-assisted VLAN TPID setup is not supported. + * - (-ENODEV) if *port_id* invalid. + */ +extern int rte_eth_dev_set_vlan_ether_type(uint8_t port_id, uint16_t tag_type); + +/** + * Set VLAN offload configuration on an Ethernet device + * Enable/Disable Extended VLAN by an Ethernet device, This is a register setup + * available on some Intel NIC, not but all, please check the data sheet for + * availability. + * Enable/Disable VLAN Strip can be done on rx queue for certain NIC, but here + * the configuration is applied on the port level. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param offload_mask + * The VLAN Offload bit mask can be mixed use with "OR" + * ETH_VLAN_STRIP_OFFLOAD + * ETH_VLAN_FILTER_OFFLOAD + * ETH_VLAN_EXTEND_OFFLOAD + * @return + * - (0) if successful. + * - (-ENOSUP) if hardware-assisted VLAN filtering not configured. + * - (-ENODEV) if *port_id* invalid. + */ +extern int rte_eth_dev_set_vlan_offload(uint8_t port_id, int offload_mask); + +/** + * Read VLAN Offload configuration from an Ethernet device + * + * @param port_id + * The port identifier of the Ethernet device. + * @return + * - (>0) if successful. Bit mask to indicate + * ETH_VLAN_STRIP_OFFLOAD + * ETH_VLAN_FILTER_OFFLOAD + * ETH_VLAN_EXTEND_OFFLOAD + * - (-ENODEV) if *port_id* invalid. + */ +extern int rte_eth_dev_get_vlan_offload(uint8_t port_id); /** * @@ -1284,6 +1928,59 @@ rte_eth_rx_burst(uint8_t port_id, uint16_t queue_id, } #endif +/** + * Get the number of used descriptors in a specific queue + * + * @param port_id + * The port identifier of the Ethernet device. + * @param queue_id + * The queue id on the specific port. + * @return + * The number of used descriptors in the specific queue. + */ +#ifdef RTE_LIBRTE_ETHDEV_DEBUG +extern uint32_t rte_eth_rx_queue_count(uint8_t port_id, uint16_t queue_id); +#else +static inline uint32_t +rte_eth_rx_queue_count(uint8_t port_id, uint16_t queue_id) +{ + struct rte_eth_dev *dev; + + dev = &rte_eth_devices[port_id]; + return (*dev->dev_ops->rx_queue_count)(dev, queue_id); +} +#endif + +/** + * Check if the DD bit of the specific RX descriptor in the queue has been set + * + * @param port_id + * The port identifier of the Ethernet device. + * @param queue_id + * The queue id on the specific port. + * @offset + * The offset of the descriptor ID from tail. + * @return + * - (1) if the specific DD bit is set. + * - (0) if the specific DD bit is not set. + * - (-ENODEV) if *port_id* invalid. + */ +#ifdef RTE_LIBRTE_ETHDEV_DEBUG +extern int rte_eth_rx_descriptor_done(uint8_t port_id, + uint16_t queue_id, + uint16_t offset); +#else +static inline int +rte_eth_rx_descriptor_done(uint8_t port_id, uint16_t queue_id, uint16_t offset) +{ + struct rte_eth_dev *dev; + + dev = &rte_eth_devices[port_id]; + return (*dev->dev_ops->rx_descriptor_done)( \ + dev->data->rx_queues[queue_id], offset); +} +#endif + /** * Send a burst of output packets on a transmit queue of an Ethernet device. * @@ -1683,7 +2380,7 @@ int rte_eth_led_off(uint8_t port_id); * The pointer to the structure of the flow control parameters. * @return * - (0) if successful. - * - (-ENOTSUP) if hardware doesn't support flow director mode. + * - (-ENOTSUP) if hardware doesn't support flow control mode. * - (-ENODEV) if *port_id* invalid. * - (-EINVAL) if bad parameter * - (-EIO) if flow control setup failure @@ -1691,6 +2388,24 @@ int rte_eth_led_off(uint8_t port_id); int rte_eth_dev_flow_ctrl_set(uint8_t port_id, struct rte_eth_fc_conf *fc_conf); +/** + * Configure the Ethernet priority flow control under DCB environment + * for Ethernet device. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param pfc_conf + * The pointer to the structure of the priority flow control parameters. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support priority flow control mode. + * - (-ENODEV) if *port_id* invalid. + * - (-EINVAL) if bad parameter + * - (-EIO) if flow control setup failure + */ +int rte_eth_dev_priority_flow_ctrl_set(uint8_t port_id, + struct rte_eth_pfc_conf *pfc_conf); + /** * Add a MAC address to an internal array of addresses used to enable whitelist * filtering to accept packets only if the destination MAC address matches. @@ -1727,79 +2442,369 @@ 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); +/** + * Update Redirection Table(RETA) of Receive Side Scaling of Ethernet device. + * + * @param port + * The port identifier of the Ethernet device. + * @param reta_conf + * RETA to update. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_rss_reta_update(uint8_t port, + struct rte_eth_rss_reta *reta_conf); -/*-------------------------- Deprecated definitions --------------------------*/ + /** + * Query Redirection Table(RETA) of Receive Side Scaling of Ethernet device. + * + * @param port + * The port identifier of the Ethernet device. + * @param reta_conf + * RETA to query. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_rss_reta_query(uint8_t port, + struct rte_eth_rss_reta *reta_conf); + + /** + * Updates unicast hash table for receiving packet with the given destination + * MAC address, and the packet is routed to all VFs for which the RX mode is + * accept packets that match the unicast hash table. + * + * @param port + * The port identifier of the Ethernet device. + * @param addr + * Unicast MAC address. + * @param on + * 1 - Set an unicast hash bit for receiving packets with the MAC address. + * 0 - Clear an unicast hash bit. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENODEV) if *port_id* invalid. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_uc_hash_table_set(uint8_t port,struct ether_addr *addr, + uint8_t on); -/* Needed to stop deprecation warnings becoming errors with GCC. */ -#ifndef __INTEL_COMPILER -#pragma GCC diagnostic warning "-Wdeprecated-declarations" -#endif + /** + * Updates all unicast hash bitmaps for receiving packet with any Unicast + * Ethernet MAC addresses,the packet is routed to all VFs for which the RX + * mode is accept packets that match the unicast hash table. + * + * @param port + * The port identifier of the Ethernet device. + * @param on + * 1 - Set all unicast hash bitmaps for receiving all the Ethernet + * MAC addresses + * 0 - Clear all unicast hash bitmaps + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENODEV) if *port_id* invalid. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_uc_all_hash_table_set(uint8_t port,uint8_t on); -#ifdef RTE_LIBRTE_82576_PMD -#pragma message "\nWARNING: CONFIG_RTE_LIBRTE_82576_PMD is deprecated. " \ -"CONFIG_RTE_LIBRTE_IGB_PMD must be set in the config file to use Intel(R) " \ -"DPDK supported Gigabit Ethernet Controllers." -#endif + /** + * Set RX L2 Filtering mode of a VF of an Ethernet device. + * + * @param port + * The port identifier of the Ethernet device. + * @param vf + * VF id. + * @param rx_mode + * The RX mode mask, which is one or more of accepting Untagged Packets, + * packets that match the PFUTA table, Broadcast and Multicast Promiscuous. + * ETH_VMDQ_ACCEPT_UNTAG,ETH_VMDQ_ACCEPT_HASH_UC, + * ETH_VMDQ_ACCEPT_BROADCAST and ETH_VMDQ_ACCEPT_MULTICAST will be used + * in rx_mode. + * @param on + * 1 - Enable a VF RX mode. + * 0 - Disable a VF RX mode. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_set_vf_rxmode(uint8_t port, uint16_t vf, uint16_t rx_mode, + uint8_t on); + +/** +* Enable or disable a VF traffic transmit of the Ethernet device. +* +* @param port +* The port identifier of the Ethernet device. +* @param vf +* VF id. +* @param on +* 1 - Enable a VF traffic transmit. +* 0 - Disable a VF traffic transmit. +* @return +* - (0) if successful. +* - (-ENODEV) if *port_id* invalid. +* - (-ENOTSUP) if hardware doesn't support. +* - (-EINVAL) if bad parameter. +*/ +int +rte_eth_dev_set_vf_tx(uint8_t port,uint16_t vf, uint8_t on); + +/** +* Enable or disable a VF traffic receive of an Ethernet device. +* +* @param port +* The port identifier of the Ethernet device. +* @param vf +* VF id. +* @param on +* 1 - Enable a VF traffic receive. +* 0 - Disable a VF traffic receive. +* @return +* - (0) if successful. +* - (-ENOTSUP) if hardware doesn't support. +* - (-ENODEV) if *port_id* invalid. +* - (-EINVAL) if bad parameter. +*/ +int +rte_eth_dev_set_vf_rx(uint8_t port,uint16_t vf, uint8_t on); + +/** +* Enable/Disable hardware VF VLAN filtering by an Ethernet device of +* received VLAN packets tagged with a given VLAN Tag Identifier. +* +* @param port id +* The port identifier of the Ethernet device. +* @param vlan_id +* The VLAN Tag Identifier whose filtering must be enabled or disabled. +* @param vf_mask +* Bitmap listing which VFs participate in the VLAN filtering. +* @param vlan_on +* 1 - Enable VFs VLAN filtering. +* 0 - Disable VFs VLAN filtering. +* @return +* - (0) if successful. +* - (-ENOTSUP) if hardware doesn't support. +* - (-ENODEV) if *port_id* invalid. +* - (-EINVAL) if bad parameter. +*/ +int +rte_eth_dev_set_vf_vlan_filter(uint8_t port, uint16_t vlan_id, + uint64_t vf_mask, + uint8_t vlan_on); + +/** + * Set a traffic mirroring rule on an Ethernet device + * + * @param port_id + * The port identifier of the Ethernet device. + * @param mirror_conf + * The pointer to the traffic mirroring structure describing the mirroring rule. + * The *rte_eth_vm_mirror_conf* structure includes the type of mirroring rule, + * destination pool and the value of rule if enable vlan or pool mirroring. + * + * @param rule_id + * The index of traffic mirroring rule, we support four separated rules. + * @param on + * 1 - Enable a mirroring rule. + * 0 - Disable a mirroring rule. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support this feature. + * - (-ENODEV) if *port_id* invalid. + * - (-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, + uint8_t rule_id, + uint8_t on); -#ifdef RTE_LIBRTE_IGB_PMD /** - * @deprecated The config file option CONFIG_RTE_LIBRTE_82576_PMD and resulting - * preprocessor define RTE_LIBRTE_82576_PMD are deprecated. - * CONFIG_RTE_LIBRTE_IGB_PMD must be set in the config file to use Intel(R) DPDK - * supported Gigabit Ethernet Controllers, and RTE_LIBRTE_IGB_PMD should be used - * in code. + * Reset a traffic mirroring rule on an Ethernet device. + * + * @param port_id + * The port identifier of the Ethernet device. + * @param rule_id + * The index of traffic mirroring rule, we support four separated rules. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support this feature. + * - (-ENODEV) if *port_id* invalid. + * - (-EINVAL) if bad parameter. */ -#define RTE_LIBRTE_82576_PMD 1 -#endif +int rte_eth_mirror_rule_reset(uint8_t port_id, + uint8_t rule_id); /** - * @deprecated rte_82576_pmd_init() is deprecated and will be removed from - * future versions of Intel(R) DPDK. It has been replaced by rte_igb_pmd_init(). + * Initialize bypass logic. This function needs to be called before + * executing any other bypass API. * + * @param port + * The port identifier of the Ethernet device. * @return - * 0 on success + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. */ -static inline int __attribute__((deprecated)) -rte_82576_pmd_init(void) { - RTE_LOG(WARNING, PMD, "rte_82576_pmd_init() is deprecated and will be " - "removed from future version of Intel(R) DPDK. It has " - "been replaced by rte_igb_pmd_init()"); - return rte_igb_pmd_init(); -} +int rte_eth_dev_bypass_init(uint8_t port); +/** + * Return bypass state. + * + * @param port + * The port identifier of the Ethernet device. + * @param state + * The return bypass state. + * - (1) Normal mode + * - (2) Bypass mode + * - (3) Isolate mode + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_bypass_state_show(uint8_t port, uint32_t *state); -#ifdef RTE_LIBRTE_82599_PMD -#pragma message "\nWARNING: CONFIG_RTE_LIBRTE_82599_PMD is deprecated. " \ -"CONFIG_RTE_LIBRTE_IXGBE_PMD must be set in the config file to use Intel(R) " \ -"DPDK supported 10 Gigabit Ethernet Controllers." -#endif +/** + * Set bypass state + * + * @param port + * The port identifier of the Ethernet device. + * @param state + * The current bypass state. + * - (1) Normal mode + * - (2) Bypass mode + * - (3) Isolate mode + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_bypass_state_set(uint8_t port, uint32_t *new_state); -#ifdef RTE_LIBRTE_IXGBE_PMD /** - * @deprecated The config file option CONFIG_RTE_LIBRTE_82599_PMD and resulting - * preprocessor define RTE_LIBRTE_82599_PMD are deprecated. - * CONFIG_RTE_LIBRTE_IXGBE_PMD must be set in the config file to use Intel(R) - * DPDK supported Gigabit Ethernet Controllers, and RTE_LIBRTE_IXGBE_PMD should - * be used in code. + * Return bypass state when given event occurs. + * + * @param port + * The port identifier of the Ethernet device. + * @param event + * The bypass event + * - (1) Main power on (power button is pushed) + * - (2) Auxiliary power on (power supply is being plugged) + * - (3) Main power off (system shutdown and power supply is left plugged in) + * - (4) Auxiliary power off (power supply is being unplugged) + * - (5) Display or set the watchdog timer + * @param state + * The bypass state when given event occurred. + * - (1) Normal mode + * - (2) Bypass mode + * - (3) Isolate mode + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. */ -#define RTE_LIBRTE_82599_PMD 1 -#endif +int rte_eth_dev_bypass_event_show(uint8_t port, uint32_t event, uint32_t *state); /** - * @deprecated rte_82599_pmd_init() is deprecated and will be removed from - * future versions of Intel(R) DPDK. It has been replaced by - * rte_ixgbe_pmd_init(). + * Set bypass state when given event occurs. * + * @param port + * The port identifier of the Ethernet device. + * @param event + * The bypass event + * - (1) Main power on (power button is pushed) + * - (2) Auxiliary power on (power supply is being plugged) + * - (3) Main power off (system shutdown and power supply is left plugged in) + * - (4) Auxiliary power off (power supply is being unplugged) + * - (5) Display or set the watchdog timer + * @param state + * The assigned state when given event occurs. + * - (1) Normal mode + * - (2) Bypass mode + * - (3) Isolate mode * @return - * 0 on success + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. */ -static inline int __attribute__((deprecated)) -rte_82599_pmd_init(void) { - RTE_LOG(WARNING, PMD, "rte_82599_pmd_init() is deprecated and will be " - "removed from future version of Intel(R) DPDK. It has " - "been replaced by rte_ixgbe_pmd_init()"); - return rte_ixgbe_pmd_init(); -} +int rte_eth_dev_bypass_event_store(uint8_t port, uint32_t event, uint32_t state); + +/** + * Set bypass watchdog timeout count. + * + * @param port + * The port identifier of the Ethernet device. + * @param state + * The timeout to be set. + * - (0) 0 seconds (timer is off) + * - (1) 1.5 seconds + * - (2) 2 seconds + * - (3) 3 seconds + * - (4) 4 seconds + * - (5) 8 seconds + * - (6) 16 seconds + * - (7) 32 seconds + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_wd_timeout_store(uint8_t port, uint32_t timeout); + +/** + * Get bypass firmware version. + * + * @param port + * The port identifier of the Ethernet device. + * @param ver + * The firmware version + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_bypass_ver_show(uint8_t port, uint32_t *ver); + +/** + * Return bypass watchdog timeout in seconds + * + * @param port + * The port identifier of the Ethernet device. + * @param wd_timeout + * The return watchdog timeout. "0" represents timer expired + * - (0) 0 seconds (timer is off) + * - (1) 1.5 seconds + * - (2) 2 seconds + * - (3) 3 seconds + * - (4) 4 seconds + * - (5) 8 seconds + * - (6) 16 seconds + * - (7) 32 seconds + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_bypass_wd_timeout_show(uint8_t port, uint32_t *wd_timeout); + +/** + * Reset bypass watchdog timer + * + * @param port + * The port identifier of the Ethernet device. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-EINVAL) if bad parameter. + */ +int rte_eth_dev_bypass_wd_reset(uint8_t port); #ifdef __cplusplus }