LCOV - code coverage report
Current view: top level - lib/ethdev - ethdev_driver.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 7 0.0 %
Date: 2024-01-22 15:35:40 Functions: 0 1 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2017 Intel Corporation
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef _RTE_ETHDEV_DRIVER_H_
       6                 :            : #define _RTE_ETHDEV_DRIVER_H_
       7                 :            : 
       8                 :            : #ifdef __cplusplus
       9                 :            : extern "C" {
      10                 :            : #endif
      11                 :            : 
      12                 :            : /**
      13                 :            :  * @file
      14                 :            :  *
      15                 :            :  * RTE Ethernet Device PMD API
      16                 :            :  *
      17                 :            :  * These APIs for the use from Ethernet drivers, user applications shouldn't
      18                 :            :  * use them.
      19                 :            :  */
      20                 :            : 
      21                 :            : #include <pthread.h>
      22                 :            : 
      23                 :            : #include <dev_driver.h>
      24                 :            : #include <rte_compat.h>
      25                 :            : #include <rte_ethdev.h>
      26                 :            : 
      27                 :            : /**
      28                 :            :  * @internal
      29                 :            :  * Structure used to hold information about the callbacks to be called for a
      30                 :            :  * queue on Rx and Tx.
      31                 :            :  */
      32                 :            : struct rte_eth_rxtx_callback {
      33                 :            :         RTE_ATOMIC(struct rte_eth_rxtx_callback *) next;
      34                 :            :         union{
      35                 :            :                 rte_rx_callback_fn rx;
      36                 :            :                 rte_tx_callback_fn tx;
      37                 :            :         } fn;
      38                 :            :         void *param;
      39                 :            : };
      40                 :            : 
      41                 :            : /**
      42                 :            :  * @internal
      43                 :            :  * The generic data structure associated with each Ethernet device.
      44                 :            :  *
      45                 :            :  * Pointers to burst-oriented packet receive and transmit functions are
      46                 :            :  * located at the beginning of the structure, along with the pointer to
      47                 :            :  * where all the data elements for the particular device are stored in shared
      48                 :            :  * memory. This split allows the function pointer and driver data to be per-
      49                 :            :  * process, while the actual configuration data for the device is shared.
      50                 :            :  */
      51                 :            : struct rte_eth_dev {
      52                 :            :         eth_rx_burst_t rx_pkt_burst; /**< Pointer to PMD receive function */
      53                 :            :         eth_tx_burst_t tx_pkt_burst; /**< Pointer to PMD transmit function */
      54                 :            : 
      55                 :            :         /** Pointer to PMD transmit prepare function */
      56                 :            :         eth_tx_prep_t tx_pkt_prepare;
      57                 :            :         /** Get the number of used Rx descriptors */
      58                 :            :         eth_rx_queue_count_t rx_queue_count;
      59                 :            :         /** Check the status of a Rx descriptor */
      60                 :            :         eth_rx_descriptor_status_t rx_descriptor_status;
      61                 :            :         /** Check the status of a Tx descriptor */
      62                 :            :         eth_tx_descriptor_status_t tx_descriptor_status;
      63                 :            :         /** Pointer to PMD transmit mbufs reuse function */
      64                 :            :         eth_recycle_tx_mbufs_reuse_t recycle_tx_mbufs_reuse;
      65                 :            :         /** Pointer to PMD receive descriptors refill function */
      66                 :            :         eth_recycle_rx_descriptors_refill_t recycle_rx_descriptors_refill;
      67                 :            : 
      68                 :            :         /**
      69                 :            :          * Device data that is shared between primary and secondary processes
      70                 :            :          */
      71                 :            :         struct rte_eth_dev_data *data;
      72                 :            :         void *process_private; /**< Pointer to per-process device data */
      73                 :            :         const struct eth_dev_ops *dev_ops; /**< Functions exported by PMD */
      74                 :            :         struct rte_device *device; /**< Backing device */
      75                 :            :         struct rte_intr_handle *intr_handle; /**< Device interrupt handle */
      76                 :            : 
      77                 :            :         /** User application callbacks for NIC interrupts */
      78                 :            :         struct rte_eth_dev_cb_list link_intr_cbs;
      79                 :            :         /**
      80                 :            :          * User-supplied functions called from rx_burst to post-process
      81                 :            :          * received packets before passing them to the user
      82                 :            :          */
      83                 :            :         RTE_ATOMIC(struct rte_eth_rxtx_callback *) post_rx_burst_cbs[RTE_MAX_QUEUES_PER_PORT];
      84                 :            :         /**
      85                 :            :          * User-supplied functions called from tx_burst to pre-process
      86                 :            :          * received packets before passing them to the driver for transmission
      87                 :            :          */
      88                 :            :         RTE_ATOMIC(struct rte_eth_rxtx_callback *) pre_tx_burst_cbs[RTE_MAX_QUEUES_PER_PORT];
      89                 :            : 
      90                 :            :         enum rte_eth_dev_state state; /**< Flag indicating the port state */
      91                 :            :         void *security_ctx; /**< Context for security ops */
      92                 :            : } __rte_cache_aligned;
      93                 :            : 
      94                 :            : struct rte_eth_dev_sriov;
      95                 :            : struct rte_eth_dev_owner;
      96                 :            : 
      97                 :            : /**
      98                 :            :  * @internal
      99                 :            :  * The data part, with no function pointers, associated with each Ethernet
     100                 :            :  * device. This structure is safe to place in shared memory to be common
     101                 :            :  * among different processes in a multi-process configuration.
     102                 :            :  */
     103                 :            : struct rte_eth_dev_data {
     104                 :            :         char name[RTE_ETH_NAME_MAX_LEN]; /**< Unique identifier name */
     105                 :            : 
     106                 :            :         void **rx_queues; /**< Array of pointers to Rx queues */
     107                 :            :         void **tx_queues; /**< Array of pointers to Tx queues */
     108                 :            :         uint16_t nb_rx_queues; /**< Number of Rx queues */
     109                 :            :         uint16_t nb_tx_queues; /**< Number of Tx queues */
     110                 :            : 
     111                 :            :         struct rte_eth_dev_sriov sriov;    /**< SRIOV data */
     112                 :            : 
     113                 :            :         /** PMD-specific private data. @see rte_eth_dev_release_port() */
     114                 :            :         void *dev_private;
     115                 :            : 
     116                 :            :         struct rte_eth_link dev_link;   /**< Link-level information & status */
     117                 :            :         struct rte_eth_conf dev_conf;   /**< Configuration applied to device */
     118                 :            :         uint16_t mtu;                   /**< Maximum Transmission Unit */
     119                 :            : 
     120                 :            :         /** Common Rx buffer size handled by all queues */
     121                 :            :         uint32_t min_rx_buf_size;
     122                 :            : 
     123                 :            :         uint64_t rx_mbuf_alloc_failed; /**< Rx ring mbuf allocation failures */
     124                 :            : 
     125                 :            :         /**
     126                 :            :          * Device Ethernet link addresses.
     127                 :            :          * All entries are unique.
     128                 :            :          * The first entry (index zero) is the default address.
     129                 :            :          */
     130                 :            :         struct rte_ether_addr *mac_addrs;
     131                 :            :         /** Bitmap associating MAC addresses to pools */
     132                 :            :         uint64_t mac_pool_sel[RTE_ETH_NUM_RECEIVE_MAC_ADDR];
     133                 :            :         /**
     134                 :            :          * Device Ethernet MAC addresses of hash filtering.
     135                 :            :          * @see rte_eth_dev_release_port()
     136                 :            :          */
     137                 :            :         struct rte_ether_addr *hash_mac_addrs;
     138                 :            : 
     139                 :            :         uint16_t port_id;           /**< Device [external] port identifier */
     140                 :            : 
     141                 :            :         __extension__
     142                 :            :         uint8_t /** Rx promiscuous mode ON(1) / OFF(0) */
     143                 :            :                 promiscuous   : 1,
     144                 :            :                 /** Rx of scattered packets is ON(1) / OFF(0) */
     145                 :            :                 scattered_rx : 1,
     146                 :            :                 /** Rx all multicast mode ON(1) / OFF(0) */
     147                 :            :                 all_multicast : 1,
     148                 :            :                 /** Device state: STARTED(1) / STOPPED(0) */
     149                 :            :                 dev_started : 1,
     150                 :            :                 /** Rx LRO is ON(1) / OFF(0) */
     151                 :            :                 lro         : 1,
     152                 :            :                 /**
     153                 :            :                  * Indicates whether the device is configured:
     154                 :            :                  * CONFIGURED(1) / NOT CONFIGURED(0)
     155                 :            :                  */
     156                 :            :                 dev_configured : 1,
     157                 :            :                 /**
     158                 :            :                  * Indicates whether the flow engine is configured:
     159                 :            :                  * CONFIGURED(1) / NOT CONFIGURED(0)
     160                 :            :                  */
     161                 :            :                 flow_configured : 1;
     162                 :            : 
     163                 :            :         /** Queues state: HAIRPIN(2) / STARTED(1) / STOPPED(0) */
     164                 :            :         uint8_t rx_queue_state[RTE_MAX_QUEUES_PER_PORT];
     165                 :            :         /** Queues state: HAIRPIN(2) / STARTED(1) / STOPPED(0) */
     166                 :            :         uint8_t tx_queue_state[RTE_MAX_QUEUES_PER_PORT];
     167                 :            : 
     168                 :            :         uint32_t dev_flags;             /**< Capabilities */
     169                 :            :         int numa_node;                  /**< NUMA node connection */
     170                 :            : 
     171                 :            :         /** VLAN filter configuration */
     172                 :            :         struct rte_vlan_filter_conf vlan_filter_conf;
     173                 :            : 
     174                 :            :         struct rte_eth_dev_owner owner; /**< The port owner */
     175                 :            : 
     176                 :            :         /**
     177                 :            :          * Switch-specific identifier.
     178                 :            :          * Valid if RTE_ETH_DEV_REPRESENTOR in dev_flags.
     179                 :            :          */
     180                 :            :         uint16_t representor_id;
     181                 :            :         /**
     182                 :            :          * Port ID of the backing device.
     183                 :            :          * This device will be used to query representor info and calculate
     184                 :            :          * representor IDs. Valid if RTE_ETH_DEV_REPRESENTOR in dev_flags.
     185                 :            :          */
     186                 :            :         uint16_t backer_port_id;
     187                 :            : 
     188                 :            :         pthread_mutex_t flow_ops_mutex; /**< rte_flow ops mutex */
     189                 :            : } __rte_cache_aligned;
     190                 :            : 
     191                 :            : /**
     192                 :            :  * @internal
     193                 :            :  * The pool of *rte_eth_dev* structures. The size of the pool
     194                 :            :  * is configured at compile-time in the <rte_ethdev.c> file.
     195                 :            :  */
     196                 :            : extern struct rte_eth_dev rte_eth_devices[];
     197                 :            : 
     198                 :            : /** @internal Declaration of the hairpin peer queue information structure. */
     199                 :            : struct rte_hairpin_peer_info;
     200                 :            : 
     201                 :            : /*
     202                 :            :  * Definitions of all functions exported by an Ethernet driver through the
     203                 :            :  * generic structure of type *eth_dev_ops* supplied in the *rte_eth_dev*
     204                 :            :  * structure associated with an Ethernet device.
     205                 :            :  */
     206                 :            : 
     207                 :            : /** @internal Ethernet device configuration. */
     208                 :            : typedef int  (*eth_dev_configure_t)(struct rte_eth_dev *dev);
     209                 :            : 
     210                 :            : /** @internal Function used to start a configured Ethernet device. */
     211                 :            : typedef int  (*eth_dev_start_t)(struct rte_eth_dev *dev);
     212                 :            : 
     213                 :            : /** @internal Function used to stop a configured Ethernet device. */
     214                 :            : typedef int (*eth_dev_stop_t)(struct rte_eth_dev *dev);
     215                 :            : 
     216                 :            : /** @internal Function used to link up a configured Ethernet device. */
     217                 :            : typedef int  (*eth_dev_set_link_up_t)(struct rte_eth_dev *dev);
     218                 :            : 
     219                 :            : /** @internal Function used to link down a configured Ethernet device. */
     220                 :            : typedef int  (*eth_dev_set_link_down_t)(struct rte_eth_dev *dev);
     221                 :            : 
     222                 :            : /** @internal Function used to close a configured Ethernet device. */
     223                 :            : typedef int (*eth_dev_close_t)(struct rte_eth_dev *dev);
     224                 :            : 
     225                 :            : /** @internal Function used to reset a configured Ethernet device. */
     226                 :            : typedef int (*eth_dev_reset_t)(struct rte_eth_dev *dev);
     227                 :            : 
     228                 :            : /** @internal Function used to detect an Ethernet device removal. */
     229                 :            : typedef int (*eth_is_removed_t)(struct rte_eth_dev *dev);
     230                 :            : 
     231                 :            : /**
     232                 :            :  * @internal
     233                 :            :  * Function used to enable the Rx promiscuous mode of an Ethernet device.
     234                 :            :  *
     235                 :            :  * @param dev
     236                 :            :  *   ethdev handle of port.
     237                 :            :  *
     238                 :            :  * @return
     239                 :            :  *   Negative errno value on error, 0 on success.
     240                 :            :  *
     241                 :            :  * @retval 0
     242                 :            :  *   Success, promiscuous mode is enabled.
     243                 :            :  * @retval -ENOTSUP
     244                 :            :  *   Promiscuous mode is not supported.
     245                 :            :  * @retval -ENODEV
     246                 :            :  *   Device is gone.
     247                 :            :  * @retval -E_RTE_SECONDARY
     248                 :            :  *   Function was called from a secondary process instance and not supported.
     249                 :            :  * @retval -ETIMEDOUT
     250                 :            :  *   Attempt to enable promiscuous mode failed because of timeout.
     251                 :            :  * @retval -EAGAIN
     252                 :            :  *   Failed to enable promiscuous mode.
     253                 :            :  */
     254                 :            : typedef int (*eth_promiscuous_enable_t)(struct rte_eth_dev *dev);
     255                 :            : 
     256                 :            : /**
     257                 :            :  * @internal
     258                 :            :  * Function used to disable the Rx promiscuous mode of an Ethernet device.
     259                 :            :  *
     260                 :            :  * @param dev
     261                 :            :  *   ethdev handle of port.
     262                 :            :  *
     263                 :            :  * @return
     264                 :            :  *   Negative errno value on error, 0 on success.
     265                 :            :  *
     266                 :            :  * @retval 0
     267                 :            :  *   Success, promiscuous mode is disabled.
     268                 :            :  * @retval -ENOTSUP
     269                 :            :  *   Promiscuous mode disabling is not supported.
     270                 :            :  * @retval -ENODEV
     271                 :            :  *   Device is gone.
     272                 :            :  * @retval -E_RTE_SECONDARY
     273                 :            :  *   Function was called from a secondary process instance and not supported.
     274                 :            :  * @retval -ETIMEDOUT
     275                 :            :  *   Attempt to disable promiscuous mode failed because of timeout.
     276                 :            :  * @retval -EAGAIN
     277                 :            :  *   Failed to disable promiscuous mode.
     278                 :            :  */
     279                 :            : typedef int (*eth_promiscuous_disable_t)(struct rte_eth_dev *dev);
     280                 :            : 
     281                 :            : /**
     282                 :            :  * @internal
     283                 :            :  * Enable the receipt of all multicast packets by an Ethernet device.
     284                 :            :  *
     285                 :            :  * @param dev
     286                 :            :  *   ethdev handle of port.
     287                 :            :  *
     288                 :            :  * @return
     289                 :            :  *   Negative errno value on error, 0 on success.
     290                 :            :  *
     291                 :            :  * @retval 0
     292                 :            :  *   Success, all-multicast mode is enabled.
     293                 :            :  * @retval -ENOTSUP
     294                 :            :  *   All-multicast mode is not supported.
     295                 :            :  * @retval -ENODEV
     296                 :            :  *   Device is gone.
     297                 :            :  * @retval -E_RTE_SECONDARY
     298                 :            :  *   Function was called from a secondary process instance and not supported.
     299                 :            :  * @retval -ETIMEDOUT
     300                 :            :  *   Attempt to enable all-multicast mode failed because of timeout.
     301                 :            :  * @retval -EAGAIN
     302                 :            :  *   Failed to enable all-multicast mode.
     303                 :            :  */
     304                 :            : typedef int (*eth_allmulticast_enable_t)(struct rte_eth_dev *dev);
     305                 :            : 
     306                 :            : /**
     307                 :            :  * @internal
     308                 :            :  * Disable the receipt of all multicast packets by an Ethernet device.
     309                 :            :  *
     310                 :            :  * @param dev
     311                 :            :  *   ethdev handle of port.
     312                 :            :  *
     313                 :            :  * @return
     314                 :            :  *   Negative errno value on error, 0 on success.
     315                 :            :  *
     316                 :            :  * @retval 0
     317                 :            :  *   Success, all-multicast mode is disabled.
     318                 :            :  * @retval -ENOTSUP
     319                 :            :  *   All-multicast mode disabling is not supported.
     320                 :            :  * @retval -ENODEV
     321                 :            :  *   Device is gone.
     322                 :            :  * @retval -E_RTE_SECONDARY
     323                 :            :  *   Function was called from a secondary process instance and not supported.
     324                 :            :  * @retval -ETIMEDOUT
     325                 :            :  *   Attempt to disable all-multicast mode failed because of timeout.
     326                 :            :  * @retval -EAGAIN
     327                 :            :  *   Failed to disable all-multicast mode.
     328                 :            :  */
     329                 :            : typedef int (*eth_allmulticast_disable_t)(struct rte_eth_dev *dev);
     330                 :            : 
     331                 :            : /**
     332                 :            :  * @internal
     333                 :            :  * Get link speed, duplex mode and state (up/down) of an Ethernet device.
     334                 :            :  */
     335                 :            : typedef int (*eth_link_update_t)(struct rte_eth_dev *dev,
     336                 :            :                                 int wait_to_complete);
     337                 :            : 
     338                 :            : /** @internal Get global I/O statistics of an Ethernet device. */
     339                 :            : typedef int (*eth_stats_get_t)(struct rte_eth_dev *dev,
     340                 :            :                                 struct rte_eth_stats *igb_stats);
     341                 :            : 
     342                 :            : /**
     343                 :            :  * @internal
     344                 :            :  * Reset global I/O statistics of an Ethernet device to 0.
     345                 :            :  *
     346                 :            :  * @param dev
     347                 :            :  *   ethdev handle of port.
     348                 :            :  *
     349                 :            :  * @return
     350                 :            :  *   Negative errno value on error, 0 on success.
     351                 :            :  *
     352                 :            :  * @retval 0
     353                 :            :  *   Success, statistics has been reset.
     354                 :            :  * @retval -ENOTSUP
     355                 :            :  *   Resetting statistics is not supported.
     356                 :            :  * @retval -EINVAL
     357                 :            :  *   Resetting statistics is not valid.
     358                 :            :  * @retval -ENOMEM
     359                 :            :  *   Not enough memory to get the stats.
     360                 :            :  */
     361                 :            : typedef int (*eth_stats_reset_t)(struct rte_eth_dev *dev);
     362                 :            : 
     363                 :            : /** @internal Get extended stats of an Ethernet device. */
     364                 :            : typedef int (*eth_xstats_get_t)(struct rte_eth_dev *dev,
     365                 :            :         struct rte_eth_xstat *stats, unsigned int n);
     366                 :            : 
     367                 :            : /**
     368                 :            :  * @internal
     369                 :            :  * Get extended stats of an Ethernet device.
     370                 :            :  *
     371                 :            :  * @param dev
     372                 :            :  *   ethdev handle of port.
     373                 :            :  * @param ids
     374                 :            :  *   IDs array to retrieve specific statistics. Must not be NULL.
     375                 :            :  * @param values
     376                 :            :  *   A pointer to a table to be filled with device statistics values.
     377                 :            :  *   Must not be NULL.
     378                 :            :  * @param n
     379                 :            :  *   Element count in @p ids and @p values.
     380                 :            :  *
     381                 :            :  * @return
     382                 :            :  *   - A number of filled in stats.
     383                 :            :  *   - A negative value on error.
     384                 :            :  */
     385                 :            : typedef int (*eth_xstats_get_by_id_t)(struct rte_eth_dev *dev,
     386                 :            :                                       const uint64_t *ids,
     387                 :            :                                       uint64_t *values,
     388                 :            :                                       unsigned int n);
     389                 :            : 
     390                 :            : /**
     391                 :            :  * @internal
     392                 :            :  * Reset extended stats of an Ethernet device.
     393                 :            :  *
     394                 :            :  * @param dev
     395                 :            :  *   ethdev handle of port.
     396                 :            :  *
     397                 :            :  * @return
     398                 :            :  *   Negative errno value on error, 0 on success.
     399                 :            :  *
     400                 :            :  * @retval 0
     401                 :            :  *   Success, statistics has been reset.
     402                 :            :  * @retval -ENOTSUP
     403                 :            :  *   Resetting statistics is not supported.
     404                 :            :  * @retval -EINVAL
     405                 :            :  *   Resetting statistics is not valid.
     406                 :            :  * @retval -ENOMEM
     407                 :            :  *   Not enough memory to get the stats.
     408                 :            :  */
     409                 :            : typedef int (*eth_xstats_reset_t)(struct rte_eth_dev *dev);
     410                 :            : 
     411                 :            : /** @internal Get names of extended stats of an Ethernet device. */
     412                 :            : typedef int (*eth_xstats_get_names_t)(struct rte_eth_dev *dev,
     413                 :            :         struct rte_eth_xstat_name *xstats_names, unsigned int size);
     414                 :            : 
     415                 :            : /**
     416                 :            :  * @internal
     417                 :            :  * Get names of extended stats of an Ethernet device.
     418                 :            :  *
     419                 :            :  * @param dev
     420                 :            :  *   ethdev handle of port.
     421                 :            :  * @param ids
     422                 :            :  *   IDs array to retrieve specific statistics. Must not be NULL.
     423                 :            :  * @param xstats_names
     424                 :            :  *   An rte_eth_xstat_name array of at least @p size elements to be filled.
     425                 :            :  *   Must not be NULL.
     426                 :            :  * @param size
     427                 :            :  *   Element count in @p ids and @p xstats_names.
     428                 :            :  *
     429                 :            :  * @return
     430                 :            :  *   - A number of filled in stats.
     431                 :            :  *   - A negative value on error.
     432                 :            :  */
     433                 :            : typedef int (*eth_xstats_get_names_by_id_t)(struct rte_eth_dev *dev,
     434                 :            :         const uint64_t *ids, struct rte_eth_xstat_name *xstats_names,
     435                 :            :         unsigned int size);
     436                 :            : 
     437                 :            : /**
     438                 :            :  * @internal
     439                 :            :  * Set a queue statistics mapping for a Tx/Rx queue of an Ethernet device.
     440                 :            :  */
     441                 :            : typedef int (*eth_queue_stats_mapping_set_t)(struct rte_eth_dev *dev,
     442                 :            :                                              uint16_t queue_id,
     443                 :            :                                              uint8_t stat_idx,
     444                 :            :                                              uint8_t is_rx);
     445                 :            : 
     446                 :            : /** @internal Get specific information of an Ethernet device. */
     447                 :            : typedef int (*eth_dev_infos_get_t)(struct rte_eth_dev *dev,
     448                 :            :                                    struct rte_eth_dev_info *dev_info);
     449                 :            : 
     450                 :            : /** @internal Get supported ptypes of an Ethernet device. */
     451                 :            : typedef const uint32_t *(*eth_dev_supported_ptypes_get_t)(struct rte_eth_dev *dev);
     452                 :            : 
     453                 :            : /**
     454                 :            :  * @internal
     455                 :            :  * Inform Ethernet device about reduced range of packet types to handle.
     456                 :            :  *
     457                 :            :  * @param dev
     458                 :            :  *   The Ethernet device identifier.
     459                 :            :  * @param ptype_mask
     460                 :            :  *   The ptype family that application is interested in should be bitwise OR of
     461                 :            :  *   RTE_PTYPE_*_MASK or 0.
     462                 :            :  * @return
     463                 :            :  *   - (0) if Success.
     464                 :            :  */
     465                 :            : typedef int (*eth_dev_ptypes_set_t)(struct rte_eth_dev *dev,
     466                 :            :                                      uint32_t ptype_mask);
     467                 :            : 
     468                 :            : /** @internal Start Rx and Tx of a queue of an Ethernet device. */
     469                 :            : typedef int (*eth_queue_start_t)(struct rte_eth_dev *dev,
     470                 :            :                                     uint16_t queue_id);
     471                 :            : 
     472                 :            : /** @internal Stop Rx and Tx of a queue of an Ethernet device. */
     473                 :            : typedef int (*eth_queue_stop_t)(struct rte_eth_dev *dev,
     474                 :            :                                     uint16_t queue_id);
     475                 :            : 
     476                 :            : /** @internal Set up a receive queue of an Ethernet device. */
     477                 :            : typedef int (*eth_rx_queue_setup_t)(struct rte_eth_dev *dev,
     478                 :            :                                     uint16_t rx_queue_id,
     479                 :            :                                     uint16_t nb_rx_desc,
     480                 :            :                                     unsigned int socket_id,
     481                 :            :                                     const struct rte_eth_rxconf *rx_conf,
     482                 :            :                                     struct rte_mempool *mb_pool);
     483                 :            : 
     484                 :            : /** @internal Setup a transmit queue of an Ethernet device. */
     485                 :            : typedef int (*eth_tx_queue_setup_t)(struct rte_eth_dev *dev,
     486                 :            :                                     uint16_t tx_queue_id,
     487                 :            :                                     uint16_t nb_tx_desc,
     488                 :            :                                     unsigned int socket_id,
     489                 :            :                                     const struct rte_eth_txconf *tx_conf);
     490                 :            : 
     491                 :            : /** @internal Enable interrupt of a receive queue of an Ethernet device. */
     492                 :            : typedef int (*eth_rx_enable_intr_t)(struct rte_eth_dev *dev,
     493                 :            :                                     uint16_t rx_queue_id);
     494                 :            : 
     495                 :            : /** @internal Disable interrupt of a receive queue of an Ethernet device. */
     496                 :            : typedef int (*eth_rx_disable_intr_t)(struct rte_eth_dev *dev,
     497                 :            :                                     uint16_t rx_queue_id);
     498                 :            : 
     499                 :            : /** @internal Release memory resources allocated by given Rx/Tx queue. */
     500                 :            : typedef void (*eth_queue_release_t)(struct rte_eth_dev *dev,
     501                 :            :                                     uint16_t queue_id);
     502                 :            : 
     503                 :            : /** @internal Get firmware information of an Ethernet device. */
     504                 :            : typedef int (*eth_fw_version_get_t)(struct rte_eth_dev *dev,
     505                 :            :                                      char *fw_version, size_t fw_size);
     506                 :            : 
     507                 :            : /** @internal Force mbufs to be from Tx ring. */
     508                 :            : typedef int (*eth_tx_done_cleanup_t)(void *txq, uint32_t free_cnt);
     509                 :            : 
     510                 :            : typedef void (*eth_rxq_info_get_t)(struct rte_eth_dev *dev,
     511                 :            :         uint16_t rx_queue_id, struct rte_eth_rxq_info *qinfo);
     512                 :            : 
     513                 :            : typedef void (*eth_txq_info_get_t)(struct rte_eth_dev *dev,
     514                 :            :         uint16_t tx_queue_id, struct rte_eth_txq_info *qinfo);
     515                 :            : 
     516                 :            : typedef void (*eth_recycle_rxq_info_get_t)(struct rte_eth_dev *dev,
     517                 :            :         uint16_t rx_queue_id,
     518                 :            :         struct rte_eth_recycle_rxq_info *recycle_rxq_info);
     519                 :            : 
     520                 :            : typedef int (*eth_burst_mode_get_t)(struct rte_eth_dev *dev,
     521                 :            :         uint16_t queue_id, struct rte_eth_burst_mode *mode);
     522                 :            : 
     523                 :            : /** @internal Set MTU. */
     524                 :            : typedef int (*mtu_set_t)(struct rte_eth_dev *dev, uint16_t mtu);
     525                 :            : 
     526                 :            : /** @internal Filtering of a VLAN Tag Identifier by an Ethernet device. */
     527                 :            : typedef int (*vlan_filter_set_t)(struct rte_eth_dev *dev,
     528                 :            :                                   uint16_t vlan_id,
     529                 :            :                                   int on);
     530                 :            : 
     531                 :            : /** @internal Set the outer/inner VLAN-TPID by an Ethernet device. */
     532                 :            : typedef int (*vlan_tpid_set_t)(struct rte_eth_dev *dev,
     533                 :            :                                enum rte_vlan_type type, uint16_t tpid);
     534                 :            : 
     535                 :            : /** @internal Set VLAN offload function by an Ethernet device. */
     536                 :            : typedef int (*vlan_offload_set_t)(struct rte_eth_dev *dev, int mask);
     537                 :            : 
     538                 :            : /** @internal Set port based Tx VLAN insertion by an Ethernet device. */
     539                 :            : typedef int (*vlan_pvid_set_t)(struct rte_eth_dev *dev,
     540                 :            :                                uint16_t vlan_id,
     541                 :            :                                int on);
     542                 :            : 
     543                 :            : /** @internal VLAN stripping enable/disable by an queue of Ethernet device. */
     544                 :            : typedef void (*vlan_strip_queue_set_t)(struct rte_eth_dev *dev,
     545                 :            :                                   uint16_t rx_queue_id,
     546                 :            :                                   int on);
     547                 :            : 
     548                 :            : /** @internal Get current flow control parameter on an Ethernet device. */
     549                 :            : typedef int (*flow_ctrl_get_t)(struct rte_eth_dev *dev,
     550                 :            :                                struct rte_eth_fc_conf *fc_conf);
     551                 :            : 
     552                 :            : /** @internal Setup flow control parameter on an Ethernet device. */
     553                 :            : typedef int (*flow_ctrl_set_t)(struct rte_eth_dev *dev,
     554                 :            :                                struct rte_eth_fc_conf *fc_conf);
     555                 :            : 
     556                 :            : /** @internal Setup priority flow control parameter on an Ethernet device. */
     557                 :            : typedef int (*priority_flow_ctrl_set_t)(struct rte_eth_dev *dev,
     558                 :            :                                 struct rte_eth_pfc_conf *pfc_conf);
     559                 :            : 
     560                 :            : /** @internal Get info for queue based PFC on an Ethernet device. */
     561                 :            : typedef int (*priority_flow_ctrl_queue_info_get_t)(struct rte_eth_dev *dev,
     562                 :            :                         struct rte_eth_pfc_queue_info *pfc_queue_info);
     563                 :            : /** @internal Configure queue based PFC parameter on an Ethernet device. */
     564                 :            : typedef int (*priority_flow_ctrl_queue_config_t)(struct rte_eth_dev *dev,
     565                 :            :                         struct rte_eth_pfc_queue_conf *pfc_queue_conf);
     566                 :            : 
     567                 :            : /** @internal Update RSS redirection table on an Ethernet device. */
     568                 :            : typedef int (*reta_update_t)(struct rte_eth_dev *dev,
     569                 :            :                              struct rte_eth_rss_reta_entry64 *reta_conf,
     570                 :            :                              uint16_t reta_size);
     571                 :            : 
     572                 :            : /** @internal Query RSS redirection table on an Ethernet device. */
     573                 :            : typedef int (*reta_query_t)(struct rte_eth_dev *dev,
     574                 :            :                             struct rte_eth_rss_reta_entry64 *reta_conf,
     575                 :            :                             uint16_t reta_size);
     576                 :            : 
     577                 :            : /** @internal Update RSS hash configuration of an Ethernet device. */
     578                 :            : typedef int (*rss_hash_update_t)(struct rte_eth_dev *dev,
     579                 :            :                                  struct rte_eth_rss_conf *rss_conf);
     580                 :            : 
     581                 :            : /** @internal Get current RSS hash configuration of an Ethernet device. */
     582                 :            : typedef int (*rss_hash_conf_get_t)(struct rte_eth_dev *dev,
     583                 :            :                                    struct rte_eth_rss_conf *rss_conf);
     584                 :            : 
     585                 :            : /** @internal Turn on SW controllable LED on an Ethernet device. */
     586                 :            : typedef int (*eth_dev_led_on_t)(struct rte_eth_dev *dev);
     587                 :            : 
     588                 :            : /** @internal Turn off SW controllable LED on an Ethernet device. */
     589                 :            : typedef int (*eth_dev_led_off_t)(struct rte_eth_dev *dev);
     590                 :            : 
     591                 :            : /** @internal Remove MAC address from receive address register. */
     592                 :            : typedef void (*eth_mac_addr_remove_t)(struct rte_eth_dev *dev, uint32_t index);
     593                 :            : 
     594                 :            : /** @internal Set a MAC address into Receive Address Register. */
     595                 :            : typedef int (*eth_mac_addr_add_t)(struct rte_eth_dev *dev,
     596                 :            :                                   struct rte_ether_addr *mac_addr,
     597                 :            :                                   uint32_t index,
     598                 :            :                                   uint32_t vmdq);
     599                 :            : 
     600                 :            : /** @internal Set a MAC address into Receive Address Register. */
     601                 :            : typedef int (*eth_mac_addr_set_t)(struct rte_eth_dev *dev,
     602                 :            :                                   struct rte_ether_addr *mac_addr);
     603                 :            : 
     604                 :            : /** @internal Set a Unicast Hash bitmap. */
     605                 :            : typedef int (*eth_uc_hash_table_set_t)(struct rte_eth_dev *dev,
     606                 :            :                                   struct rte_ether_addr *mac_addr,
     607                 :            :                                   uint8_t on);
     608                 :            : 
     609                 :            : /** @internal Set all Unicast Hash bitmap. */
     610                 :            : typedef int (*eth_uc_all_hash_table_set_t)(struct rte_eth_dev *dev,
     611                 :            :                                   uint8_t on);
     612                 :            : 
     613                 :            : /** @internal Set queue Tx rate. */
     614                 :            : typedef int (*eth_set_queue_rate_limit_t)(struct rte_eth_dev *dev,
     615                 :            :                                 uint16_t queue_idx,
     616                 :            :                                 uint32_t tx_rate);
     617                 :            : 
     618                 :            : /** @internal Add tunneling UDP port. */
     619                 :            : typedef int (*eth_udp_tunnel_port_add_t)(struct rte_eth_dev *dev,
     620                 :            :                                          struct rte_eth_udp_tunnel *tunnel_udp);
     621                 :            : 
     622                 :            : /** @internal Delete tunneling UDP port. */
     623                 :            : typedef int (*eth_udp_tunnel_port_del_t)(struct rte_eth_dev *dev,
     624                 :            :                                          struct rte_eth_udp_tunnel *tunnel_udp);
     625                 :            : 
     626                 :            : /** @internal set the list of multicast addresses on an Ethernet device. */
     627                 :            : typedef int (*eth_set_mc_addr_list_t)(struct rte_eth_dev *dev,
     628                 :            :                                       struct rte_ether_addr *mc_addr_set,
     629                 :            :                                       uint32_t nb_mc_addr);
     630                 :            : 
     631                 :            : /** @internal Function used to enable IEEE1588/802.1AS timestamping. */
     632                 :            : typedef int (*eth_timesync_enable_t)(struct rte_eth_dev *dev);
     633                 :            : 
     634                 :            : /** @internal Function used to disable IEEE1588/802.1AS timestamping. */
     635                 :            : typedef int (*eth_timesync_disable_t)(struct rte_eth_dev *dev);
     636                 :            : 
     637                 :            : /** @internal Function used to read an Rx IEEE1588/802.1AS timestamp. */
     638                 :            : typedef int (*eth_timesync_read_rx_timestamp_t)(struct rte_eth_dev *dev,
     639                 :            :                                                 struct timespec *timestamp,
     640                 :            :                                                 uint32_t flags);
     641                 :            : 
     642                 :            : /** @internal Function used to read a Tx IEEE1588/802.1AS timestamp. */
     643                 :            : typedef int (*eth_timesync_read_tx_timestamp_t)(struct rte_eth_dev *dev,
     644                 :            :                                                 struct timespec *timestamp);
     645                 :            : 
     646                 :            : /** @internal Function used to adjust the device clock. */
     647                 :            : typedef int (*eth_timesync_adjust_time)(struct rte_eth_dev *dev, int64_t);
     648                 :            : 
     649                 :            : /** @internal Function used to get time from the device clock. */
     650                 :            : typedef int (*eth_timesync_read_time)(struct rte_eth_dev *dev,
     651                 :            :                                       struct timespec *timestamp);
     652                 :            : 
     653                 :            : /** @internal Function used to get time from the device clock. */
     654                 :            : typedef int (*eth_timesync_write_time)(struct rte_eth_dev *dev,
     655                 :            :                                        const struct timespec *timestamp);
     656                 :            : 
     657                 :            : /** @internal Function used to get the current value of the device clock. */
     658                 :            : typedef int (*eth_read_clock)(struct rte_eth_dev *dev,
     659                 :            :                                       uint64_t *timestamp);
     660                 :            : 
     661                 :            : /** @internal Retrieve registers. */
     662                 :            : typedef int (*eth_get_reg_t)(struct rte_eth_dev *dev,
     663                 :            :                                 struct rte_dev_reg_info *info);
     664                 :            : 
     665                 :            : /** @internal Retrieve EEPROM size. */
     666                 :            : typedef int (*eth_get_eeprom_length_t)(struct rte_eth_dev *dev);
     667                 :            : 
     668                 :            : /** @internal Retrieve EEPROM data. */
     669                 :            : typedef int (*eth_get_eeprom_t)(struct rte_eth_dev *dev,
     670                 :            :                                 struct rte_dev_eeprom_info *info);
     671                 :            : 
     672                 :            : /** @internal Program EEPROM data. */
     673                 :            : typedef int (*eth_set_eeprom_t)(struct rte_eth_dev *dev,
     674                 :            :                                 struct rte_dev_eeprom_info *info);
     675                 :            : 
     676                 :            : /** @internal Retrieve type and size of plugin module EEPROM. */
     677                 :            : typedef int (*eth_get_module_info_t)(struct rte_eth_dev *dev,
     678                 :            :                                      struct rte_eth_dev_module_info *modinfo);
     679                 :            : 
     680                 :            : /** @internal Retrieve plugin module EEPROM data. */
     681                 :            : typedef int (*eth_get_module_eeprom_t)(struct rte_eth_dev *dev,
     682                 :            :                                        struct rte_dev_eeprom_info *info);
     683                 :            : 
     684                 :            : struct rte_flow_ops;
     685                 :            : /**
     686                 :            :  * @internal
     687                 :            :  * Get flow operations.
     688                 :            :  *
     689                 :            :  * If the flow API is not supported for the specified device,
     690                 :            :  * the driver can return NULL.
     691                 :            :  */
     692                 :            : typedef int (*eth_flow_ops_get_t)(struct rte_eth_dev *dev,
     693                 :            :                                   const struct rte_flow_ops **ops);
     694                 :            : 
     695                 :            : /** @internal Get Traffic Management (TM) operations on an Ethernet device. */
     696                 :            : typedef int (*eth_tm_ops_get_t)(struct rte_eth_dev *dev, void *ops);
     697                 :            : 
     698                 :            : /** @internal Get Traffic Metering and Policing (MTR) operations. */
     699                 :            : typedef int (*eth_mtr_ops_get_t)(struct rte_eth_dev *dev, void *ops);
     700                 :            : 
     701                 :            : /** @internal Get DCB information on an Ethernet device. */
     702                 :            : typedef int (*eth_get_dcb_info)(struct rte_eth_dev *dev,
     703                 :            :                                  struct rte_eth_dcb_info *dcb_info);
     704                 :            : 
     705                 :            : /** @internal Test if a port supports specific mempool ops. */
     706                 :            : typedef int (*eth_pool_ops_supported_t)(struct rte_eth_dev *dev,
     707                 :            :                                                 const char *pool);
     708                 :            : 
     709                 :            : /**
     710                 :            :  * @internal
     711                 :            :  * Get the hairpin capabilities.
     712                 :            :  *
     713                 :            :  * @param dev
     714                 :            :  *   ethdev handle of port.
     715                 :            :  * @param cap
     716                 :            :  *   returns the hairpin capabilities from the device.
     717                 :            :  *
     718                 :            :  * @return
     719                 :            :  *   Negative errno value on error, 0 on success.
     720                 :            :  *
     721                 :            :  * @retval 0
     722                 :            :  *   Success, hairpin is supported.
     723                 :            :  * @retval -ENOTSUP
     724                 :            :  *   Hairpin is not supported.
     725                 :            :  */
     726                 :            : typedef int (*eth_hairpin_cap_get_t)(struct rte_eth_dev *dev,
     727                 :            :                                      struct rte_eth_hairpin_cap *cap);
     728                 :            : 
     729                 :            : /**
     730                 :            :  * @internal
     731                 :            :  * Setup Rx hairpin queue.
     732                 :            :  *
     733                 :            :  * @param dev
     734                 :            :  *   ethdev handle of port.
     735                 :            :  * @param rx_queue_id
     736                 :            :  *   the selected Rx queue index.
     737                 :            :  * @param nb_rx_desc
     738                 :            :  *   the requested number of descriptors for this queue. 0 - use PMD default.
     739                 :            :  * @param conf
     740                 :            :  *   the Rx hairpin configuration structure.
     741                 :            :  *
     742                 :            :  * @return
     743                 :            :  *   Negative errno value on error, 0 on success.
     744                 :            :  *
     745                 :            :  * @retval 0
     746                 :            :  *   Success, hairpin is supported.
     747                 :            :  * @retval -ENOTSUP
     748                 :            :  *   Hairpin is not supported.
     749                 :            :  * @retval -EINVAL
     750                 :            :  *   One of the parameters is invalid.
     751                 :            :  * @retval -ENOMEM
     752                 :            :  *   Unable to allocate resources.
     753                 :            :  */
     754                 :            : typedef int (*eth_rx_hairpin_queue_setup_t)
     755                 :            :         (struct rte_eth_dev *dev, uint16_t rx_queue_id,
     756                 :            :          uint16_t nb_rx_desc,
     757                 :            :          const struct rte_eth_hairpin_conf *conf);
     758                 :            : 
     759                 :            : /**
     760                 :            :  * @internal
     761                 :            :  * Setup Tx hairpin queue.
     762                 :            :  *
     763                 :            :  * @param dev
     764                 :            :  *   ethdev handle of port.
     765                 :            :  * @param tx_queue_id
     766                 :            :  *   the selected Tx queue index.
     767                 :            :  * @param nb_tx_desc
     768                 :            :  *   the requested number of descriptors for this queue. 0 - use PMD default.
     769                 :            :  * @param conf
     770                 :            :  *   the Tx hairpin configuration structure.
     771                 :            :  *
     772                 :            :  * @return
     773                 :            :  *   Negative errno value on error, 0 on success.
     774                 :            :  *
     775                 :            :  * @retval 0
     776                 :            :  *   Success, hairpin is supported.
     777                 :            :  * @retval -ENOTSUP
     778                 :            :  *   Hairpin is not supported.
     779                 :            :  * @retval -EINVAL
     780                 :            :  *   One of the parameters is invalid.
     781                 :            :  * @retval -ENOMEM
     782                 :            :  *   Unable to allocate resources.
     783                 :            :  */
     784                 :            : typedef int (*eth_tx_hairpin_queue_setup_t)
     785                 :            :         (struct rte_eth_dev *dev, uint16_t tx_queue_id,
     786                 :            :          uint16_t nb_tx_desc,
     787                 :            :          const struct rte_eth_hairpin_conf *hairpin_conf);
     788                 :            : 
     789                 :            : /**
     790                 :            :  * @internal
     791                 :            :  * Get Forward Error Correction(FEC) capability.
     792                 :            :  *
     793                 :            :  * @param dev
     794                 :            :  *   ethdev handle of port.
     795                 :            :  * @param speed_fec_capa
     796                 :            :  *   speed_fec_capa is out only with per-speed capabilities.
     797                 :            :  * @param num
     798                 :            :  *   a number of elements in an speed_fec_capa array.
     799                 :            :  *
     800                 :            :  * @return
     801                 :            :  *   Negative errno value on error, positive value on success.
     802                 :            :  *
     803                 :            :  * @retval positive value
     804                 :            :  *   A non-negative value lower or equal to num: success. The return value
     805                 :            :  *   is the number of entries filled in the fec capa array.
     806                 :            :  *   A non-negative value higher than num: error, the given fec capa array
     807                 :            :  *   is too small. The return value corresponds to the num that should
     808                 :            :  *   be given to succeed. The entries in the fec capa array are not valid
     809                 :            :  *   and shall not be used by the caller.
     810                 :            :  * @retval -ENOTSUP
     811                 :            :  *   Operation is not supported.
     812                 :            :  * @retval -EIO
     813                 :            :  *   Device is removed.
     814                 :            :  * @retval -EINVAL
     815                 :            :  *   *num* or *speed_fec_capa* invalid.
     816                 :            :  */
     817                 :            : typedef int (*eth_fec_get_capability_t)(struct rte_eth_dev *dev,
     818                 :            :                 struct rte_eth_fec_capa *speed_fec_capa, unsigned int num);
     819                 :            : 
     820                 :            : /**
     821                 :            :  * @internal
     822                 :            :  * Get Forward Error Correction(FEC) mode.
     823                 :            :  *
     824                 :            :  * @param dev
     825                 :            :  *   ethdev handle of port.
     826                 :            :  * @param fec_capa
     827                 :            :  *   a bitmask of enabled FEC modes. If AUTO bit is set, other
     828                 :            :  *   bits specify FEC modes which may be negotiated. If AUTO
     829                 :            :  *   bit is clear, specify FEC modes to be used (only one valid
     830                 :            :  *   mode per speed may be set).
     831                 :            :  *
     832                 :            :  * @return
     833                 :            :  *   Negative errno value on error, 0 on success.
     834                 :            :  *
     835                 :            :  * @retval 0
     836                 :            :  *   Success, get FEC success.
     837                 :            :  * @retval -ENOTSUP
     838                 :            :  *   Operation is not supported.
     839                 :            :  * @retval -EIO
     840                 :            :  *   Device is removed.
     841                 :            :  */
     842                 :            : typedef int (*eth_fec_get_t)(struct rte_eth_dev *dev,
     843                 :            :                              uint32_t *fec_capa);
     844                 :            : 
     845                 :            : /**
     846                 :            :  * @internal
     847                 :            :  * Set Forward Error Correction(FEC) mode.
     848                 :            :  *
     849                 :            :  * @param dev
     850                 :            :  *   ethdev handle of port.
     851                 :            :  * @param fec_capa
     852                 :            :  *   bitmask of allowed FEC modes. It must be only one
     853                 :            :  *   if AUTO is disabled. If AUTO is enabled, other
     854                 :            :  *   bits specify FEC modes which may be negotiated.
     855                 :            :  *
     856                 :            :  * @return
     857                 :            :  *   Negative errno value on error, 0 on success.
     858                 :            :  *
     859                 :            :  * @retval 0
     860                 :            :  *   Success, set FEC success.
     861                 :            :  * @retval -ENOTSUP
     862                 :            :  *   Operation is not supported.
     863                 :            :  * @retval -EINVAL
     864                 :            :  *   Unsupported FEC mode requested.
     865                 :            :  * @retval -EIO
     866                 :            :  *   Device is removed.
     867                 :            :  */
     868                 :            : typedef int (*eth_fec_set_t)(struct rte_eth_dev *dev, uint32_t fec_capa);
     869                 :            : 
     870                 :            : /**
     871                 :            :  * @internal
     872                 :            :  * Get all hairpin Tx/Rx peer ports of the current device, if any.
     873                 :            :  *
     874                 :            :  * @param dev
     875                 :            :  *   ethdev handle of port.
     876                 :            :  * @param peer_ports
     877                 :            :  *   array to save the ports list.
     878                 :            :  * @param len
     879                 :            :  *   array length.
     880                 :            :  * @param direction
     881                 :            :  *   value to decide the current to peer direction
     882                 :            :  *   positive - used as Tx to get all peer Rx ports.
     883                 :            :  *   zero - used as Rx to get all peer Tx ports.
     884                 :            :  *
     885                 :            :  * @return
     886                 :            :  *   Negative errno value on error, 0 or positive on success.
     887                 :            :  *
     888                 :            :  * @retval 0
     889                 :            :  *   Success, no peer ports.
     890                 :            :  * @retval >0
     891                 :            :  *   Actual number of the peer ports.
     892                 :            :  * @retval -ENOTSUP
     893                 :            :  *   Get peer ports API is not supported.
     894                 :            :  * @retval -EINVAL
     895                 :            :  *   One of the parameters is invalid.
     896                 :            :  */
     897                 :            : typedef int (*hairpin_get_peer_ports_t)(struct rte_eth_dev *dev,
     898                 :            :                                         uint16_t *peer_ports, size_t len,
     899                 :            :                                         uint32_t direction);
     900                 :            : 
     901                 :            : /**
     902                 :            :  * @internal
     903                 :            :  * Bind all hairpin Tx queues of one port to the Rx queues of the peer port.
     904                 :            :  *
     905                 :            :  * @param dev
     906                 :            :  *   ethdev handle of port.
     907                 :            :  * @param rx_port
     908                 :            :  *   the peer Rx port.
     909                 :            :  *
     910                 :            :  * @return
     911                 :            :  *   Negative errno value on error, 0 on success.
     912                 :            :  *
     913                 :            :  * @retval 0
     914                 :            :  *   Success, bind successfully.
     915                 :            :  * @retval -ENOTSUP
     916                 :            :  *   Bind API is not supported.
     917                 :            :  * @retval -EINVAL
     918                 :            :  *   One of the parameters is invalid.
     919                 :            :  * @retval -EBUSY
     920                 :            :  *   Device is not started.
     921                 :            :  */
     922                 :            : typedef int (*eth_hairpin_bind_t)(struct rte_eth_dev *dev,
     923                 :            :                                 uint16_t rx_port);
     924                 :            : 
     925                 :            : /**
     926                 :            :  * @internal
     927                 :            :  * Unbind all hairpin Tx queues of one port from the Rx queues of the peer port.
     928                 :            :  *
     929                 :            :  * @param dev
     930                 :            :  *   ethdev handle of port.
     931                 :            :  * @param rx_port
     932                 :            :  *   the peer Rx port.
     933                 :            :  *
     934                 :            :  * @return
     935                 :            :  *   Negative errno value on error, 0 on success.
     936                 :            :  *
     937                 :            :  * @retval 0
     938                 :            :  *   Success, unbind successfully.
     939                 :            :  * @retval -ENOTSUP
     940                 :            :  *   Bind API is not supported.
     941                 :            :  * @retval -EINVAL
     942                 :            :  *   One of the parameters is invalid.
     943                 :            :  * @retval -EBUSY
     944                 :            :  *   Device is already stopped.
     945                 :            :  */
     946                 :            : typedef int (*eth_hairpin_unbind_t)(struct rte_eth_dev *dev,
     947                 :            :                                   uint16_t rx_port);
     948                 :            : 
     949                 :            : /** @internal Update and fetch peer queue information. */
     950                 :            : typedef int (*eth_hairpin_queue_peer_update_t)
     951                 :            :         (struct rte_eth_dev *dev, uint16_t peer_queue,
     952                 :            :          struct rte_hairpin_peer_info *current_info,
     953                 :            :          struct rte_hairpin_peer_info *peer_info, uint32_t direction);
     954                 :            : 
     955                 :            : /** @internal Bind peer queue to the current queue with fetched information. */
     956                 :            : typedef int (*eth_hairpin_queue_peer_bind_t)
     957                 :            :         (struct rte_eth_dev *dev, uint16_t cur_queue,
     958                 :            :          struct rte_hairpin_peer_info *peer_info, uint32_t direction);
     959                 :            : 
     960                 :            : /** @internal Unbind peer queue from the current queue. */
     961                 :            : typedef int (*eth_hairpin_queue_peer_unbind_t)
     962                 :            :         (struct rte_eth_dev *dev, uint16_t cur_queue, uint32_t direction);
     963                 :            : 
     964                 :            : /**
     965                 :            :  * @internal
     966                 :            :  * Get address of memory location whose contents will change whenever there is
     967                 :            :  * new data to be received on an Rx queue.
     968                 :            :  *
     969                 :            :  * @param rxq
     970                 :            :  *   Ethdev queue pointer.
     971                 :            :  * @param pmc
     972                 :            :  *   The pointer to power-optimized monitoring condition structure.
     973                 :            :  * @return
     974                 :            :  *   Negative errno value on error, 0 on success.
     975                 :            :  *
     976                 :            :  * @retval 0
     977                 :            :  *   Success
     978                 :            :  * @retval -EINVAL
     979                 :            :  *   Invalid parameters
     980                 :            :  */
     981                 :            : typedef int (*eth_get_monitor_addr_t)(void *rxq,
     982                 :            :                 struct rte_power_monitor_cond *pmc);
     983                 :            : 
     984                 :            : /**
     985                 :            :  * @internal
     986                 :            :  * Get representor info to be able to calculate the unique representor ID.
     987                 :            :  *
     988                 :            :  * Caller should pass NULL as pointer of info to get number of entries,
     989                 :            :  * allocate info buffer according to returned entry number, then call
     990                 :            :  * again with buffer to get real info.
     991                 :            :  *
     992                 :            :  * To calculate the representor ID, caller should iterate each entry,
     993                 :            :  * match controller index, pf index, vf or sf start index and range,
     994                 :            :  * then calculate representor ID from offset to vf/sf start index.
     995                 :            :  * @see rte_eth_representor_id_get.
     996                 :            :  *
     997                 :            :  * @param dev
     998                 :            :  *   Ethdev handle of port.
     999                 :            :  * @param [out] info
    1000                 :            :  *   Pointer to memory to save device representor info.
    1001                 :            :  * @return
    1002                 :            :  *   Negative errno value on error, number of info entries otherwise.
    1003                 :            :  */
    1004                 :            : 
    1005                 :            : typedef int (*eth_representor_info_get_t)(struct rte_eth_dev *dev,
    1006                 :            :         struct rte_eth_representor_info *info);
    1007                 :            : 
    1008                 :            : /**
    1009                 :            :  * @internal
    1010                 :            :  * Negotiate the NIC's ability to deliver specific kinds of metadata to the PMD.
    1011                 :            :  *
    1012                 :            :  * @param dev
    1013                 :            :  *   Port (ethdev) handle
    1014                 :            :  *
    1015                 :            :  * @param[inout] features
    1016                 :            :  *   Feature selection buffer
    1017                 :            :  *
    1018                 :            :  * @return
    1019                 :            :  *   Negative errno value on error, zero otherwise
    1020                 :            :  */
    1021                 :            : typedef int (*eth_rx_metadata_negotiate_t)(struct rte_eth_dev *dev,
    1022                 :            :                                        uint64_t *features);
    1023                 :            : 
    1024                 :            : /**
    1025                 :            :  * @internal
    1026                 :            :  * Get IP reassembly offload capability of a PMD.
    1027                 :            :  *
    1028                 :            :  * @param dev
    1029                 :            :  *   Port (ethdev) handle
    1030                 :            :  *
    1031                 :            :  * @param[out] conf
    1032                 :            :  *   IP reassembly capability supported by the PMD
    1033                 :            :  *
    1034                 :            :  * @return
    1035                 :            :  *   Negative errno value on error, zero otherwise
    1036                 :            :  */
    1037                 :            : typedef int (*eth_ip_reassembly_capability_get_t)(struct rte_eth_dev *dev,
    1038                 :            :                 struct rte_eth_ip_reassembly_params *capa);
    1039                 :            : 
    1040                 :            : /**
    1041                 :            :  * @internal
    1042                 :            :  * Get IP reassembly offload configuration parameters set in PMD.
    1043                 :            :  *
    1044                 :            :  * @param dev
    1045                 :            :  *   Port (ethdev) handle
    1046                 :            :  *
    1047                 :            :  * @param[out] conf
    1048                 :            :  *   Configuration parameters for IP reassembly.
    1049                 :            :  *
    1050                 :            :  * @return
    1051                 :            :  *   Negative errno value on error, zero otherwise
    1052                 :            :  */
    1053                 :            : typedef int (*eth_ip_reassembly_conf_get_t)(struct rte_eth_dev *dev,
    1054                 :            :                 struct rte_eth_ip_reassembly_params *conf);
    1055                 :            : 
    1056                 :            : /**
    1057                 :            :  * @internal
    1058                 :            :  * Set configuration parameters for enabling IP reassembly offload in hardware.
    1059                 :            :  *
    1060                 :            :  * @param dev
    1061                 :            :  *   Port (ethdev) handle
    1062                 :            :  *
    1063                 :            :  * @param[in] conf
    1064                 :            :  *   Configuration parameters for IP reassembly.
    1065                 :            :  *
    1066                 :            :  * @return
    1067                 :            :  *   Negative errno value on error, zero otherwise
    1068                 :            :  */
    1069                 :            : typedef int (*eth_ip_reassembly_conf_set_t)(struct rte_eth_dev *dev,
    1070                 :            :                 const struct rte_eth_ip_reassembly_params *conf);
    1071                 :            : 
    1072                 :            : /**
    1073                 :            :  * @internal
    1074                 :            :  * Get supported header protocols of a PMD to split.
    1075                 :            :  *
    1076                 :            :  * @param dev
    1077                 :            :  *   Ethdev handle of port.
    1078                 :            :  *
    1079                 :            :  * @return
    1080                 :            :  *   An array pointer to store supported protocol headers.
    1081                 :            :  */
    1082                 :            : typedef const uint32_t *(*eth_buffer_split_supported_hdr_ptypes_get_t)(struct rte_eth_dev *dev);
    1083                 :            : 
    1084                 :            : /**
    1085                 :            :  * @internal
    1086                 :            :  * Dump private info from device to a file.
    1087                 :            :  *
    1088                 :            :  * @param dev
    1089                 :            :  *   Port (ethdev) handle.
    1090                 :            :  * @param file
    1091                 :            :  *   A pointer to a file for output.
    1092                 :            :  *
    1093                 :            :  * @return
    1094                 :            :  *   Negative value on error, 0 on success.
    1095                 :            :  *
    1096                 :            :  * @retval 0
    1097                 :            :  *   Success
    1098                 :            :  * @retval -EINVAL
    1099                 :            :  *   Invalid file
    1100                 :            :  */
    1101                 :            : typedef int (*eth_dev_priv_dump_t)(struct rte_eth_dev *dev, FILE *file);
    1102                 :            : 
    1103                 :            : /**
    1104                 :            :  * @internal Set Rx queue available descriptors threshold.
    1105                 :            :  * @see rte_eth_rx_avail_thresh_set()
    1106                 :            :  *
    1107                 :            :  * Driver should round down number of descriptors on conversion from
    1108                 :            :  * percentage.
    1109                 :            :  */
    1110                 :            : typedef int (*eth_rx_queue_avail_thresh_set_t)(struct rte_eth_dev *dev,
    1111                 :            :                                       uint16_t rx_queue_id,
    1112                 :            :                                       uint8_t avail_thresh);
    1113                 :            : 
    1114                 :            : /**
    1115                 :            :  * @internal Query Rx queue available descriptors threshold event.
    1116                 :            :  * @see rte_eth_rx_avail_thresh_query()
    1117                 :            :  */
    1118                 :            : 
    1119                 :            : typedef int (*eth_rx_queue_avail_thresh_query_t)(struct rte_eth_dev *dev,
    1120                 :            :                                         uint16_t *rx_queue_id,
    1121                 :            :                                         uint8_t *avail_thresh);
    1122                 :            : 
    1123                 :            : /** @internal Get congestion management information. */
    1124                 :            : typedef int (*eth_cman_info_get_t)(struct rte_eth_dev *dev,
    1125                 :            :                                 struct rte_eth_cman_info *info);
    1126                 :            : 
    1127                 :            : /** @internal Init congestion management structure with default values. */
    1128                 :            : typedef int (*eth_cman_config_init_t)(struct rte_eth_dev *dev,
    1129                 :            :                                 struct rte_eth_cman_config *config);
    1130                 :            : 
    1131                 :            : /** @internal Configure congestion management on a port. */
    1132                 :            : typedef int (*eth_cman_config_set_t)(struct rte_eth_dev *dev,
    1133                 :            :                                 const struct rte_eth_cman_config *config);
    1134                 :            : 
    1135                 :            : /** @internal Retrieve congestion management configuration of a port. */
    1136                 :            : typedef int (*eth_cman_config_get_t)(struct rte_eth_dev *dev,
    1137                 :            :                                 struct rte_eth_cman_config *config);
    1138                 :            : 
    1139                 :            : /**
    1140                 :            :  * @internal
    1141                 :            :  * Dump Rx descriptor info to a file.
    1142                 :            :  *
    1143                 :            :  * It is used for debugging, not a dataplane API.
    1144                 :            :  *
    1145                 :            :  * @param dev
    1146                 :            :  *   Port (ethdev) handle.
    1147                 :            :  * @param queue_id
    1148                 :            :  *   A Rx queue identifier on this port.
    1149                 :            :  * @param offset
    1150                 :            :  *   The offset of the descriptor starting from tail. (0 is the next
    1151                 :            :  *   packet to be received by the driver).
    1152                 :            :  * @param num
    1153                 :            :  *   The number of the descriptors to dump.
    1154                 :            :  * @param file
    1155                 :            :  *   A pointer to a file for output.
    1156                 :            :  * @return
    1157                 :            :  *   Negative errno value on error, zero on success.
    1158                 :            :  */
    1159                 :            : typedef int (*eth_rx_descriptor_dump_t)(const struct rte_eth_dev *dev,
    1160                 :            :                                         uint16_t queue_id, uint16_t offset,
    1161                 :            :                                         uint16_t num, FILE *file);
    1162                 :            : 
    1163                 :            : /**
    1164                 :            :  * @internal
    1165                 :            :  * Dump Tx descriptor info to a file.
    1166                 :            :  *
    1167                 :            :  * This API is used for debugging, not a dataplane API.
    1168                 :            :  *
    1169                 :            :  * @param dev
    1170                 :            :  *   Port (ethdev) handle.
    1171                 :            :  * @param queue_id
    1172                 :            :  *   A Tx queue identifier on this port.
    1173                 :            :  * @param offset
    1174                 :            :  *   The offset of the descriptor starting from tail. (0 is the place where
    1175                 :            :  *   the next packet will be send).
    1176                 :            :  * @param num
    1177                 :            :  *   The number of the descriptors to dump.
    1178                 :            :  * @param file
    1179                 :            :  *   A pointer to a file for output.
    1180                 :            :  * @return
    1181                 :            :  *   Negative errno value on error, zero on success.
    1182                 :            :  */
    1183                 :            : typedef int (*eth_tx_descriptor_dump_t)(const struct rte_eth_dev *dev,
    1184                 :            :                                         uint16_t queue_id, uint16_t offset,
    1185                 :            :                                         uint16_t num, FILE *file);
    1186                 :            : 
    1187                 :            : /**
    1188                 :            :  * @internal
    1189                 :            :  * Get the number of aggregated ports.
    1190                 :            :  *
    1191                 :            :  * @param dev
    1192                 :            :  *   Port (ethdev) handle.
    1193                 :            :  *
    1194                 :            :  * @return
    1195                 :            :  *   Negative errno value on error, 0 or positive on success.
    1196                 :            :  *
    1197                 :            :  * @retval >=0
    1198                 :            :  *   The number of aggregated port if success.
    1199                 :            :  */
    1200                 :            : typedef int (*eth_count_aggr_ports_t)(struct rte_eth_dev *dev);
    1201                 :            : 
    1202                 :            : /**
    1203                 :            :  * @internal
    1204                 :            :  * Map a Tx queue with an aggregated port of the DPDK port.
    1205                 :            :  *
    1206                 :            :  * @param dev
    1207                 :            :  *   Port (ethdev) handle.
    1208                 :            :  * @param tx_queue_id
    1209                 :            :  *   The index of the transmit queue used in rte_eth_tx_burst().
    1210                 :            :  * @param affinity
    1211                 :            :  *   The number of the aggregated port.
    1212                 :            :  *
    1213                 :            :  * @return
    1214                 :            :  *   Negative on error, 0 on success.
    1215                 :            :  */
    1216                 :            : typedef int (*eth_map_aggr_tx_affinity_t)(struct rte_eth_dev *dev, uint16_t tx_queue_id,
    1217                 :            :                                           uint8_t affinity);
    1218                 :            : 
    1219                 :            : /**
    1220                 :            :  * @internal A structure containing the functions exported by an Ethernet driver.
    1221                 :            :  */
    1222                 :            : struct eth_dev_ops {
    1223                 :            :         eth_dev_configure_t        dev_configure; /**< Configure device */
    1224                 :            :         eth_dev_start_t            dev_start;     /**< Start device */
    1225                 :            :         eth_dev_stop_t             dev_stop;      /**< Stop device */
    1226                 :            :         eth_dev_set_link_up_t      dev_set_link_up;   /**< Device link up */
    1227                 :            :         eth_dev_set_link_down_t    dev_set_link_down; /**< Device link down */
    1228                 :            :         eth_dev_close_t            dev_close;     /**< Close device */
    1229                 :            :         eth_dev_reset_t            dev_reset;     /**< Reset device */
    1230                 :            :         eth_link_update_t          link_update;   /**< Get device link state */
    1231                 :            :         /** Check if the device was physically removed */
    1232                 :            :         eth_is_removed_t           is_removed;
    1233                 :            : 
    1234                 :            :         eth_promiscuous_enable_t   promiscuous_enable; /**< Promiscuous ON */
    1235                 :            :         eth_promiscuous_disable_t  promiscuous_disable;/**< Promiscuous OFF */
    1236                 :            :         eth_allmulticast_enable_t  allmulticast_enable;/**< Rx multicast ON */
    1237                 :            :         eth_allmulticast_disable_t allmulticast_disable;/**< Rx multicast OFF */
    1238                 :            :         eth_mac_addr_remove_t      mac_addr_remove; /**< Remove MAC address */
    1239                 :            :         eth_mac_addr_add_t         mac_addr_add;  /**< Add a MAC address */
    1240                 :            :         eth_mac_addr_set_t         mac_addr_set;  /**< Set a MAC address */
    1241                 :            :         /** Set list of multicast addresses */
    1242                 :            :         eth_set_mc_addr_list_t     set_mc_addr_list;
    1243                 :            :         mtu_set_t                  mtu_set;       /**< Set MTU */
    1244                 :            : 
    1245                 :            :         /** Get generic device statistics */
    1246                 :            :         eth_stats_get_t            stats_get;
    1247                 :            :         /** Reset generic device statistics */
    1248                 :            :         eth_stats_reset_t          stats_reset;
    1249                 :            :         /** Get extended device statistics */
    1250                 :            :         eth_xstats_get_t           xstats_get;
    1251                 :            :         /** Reset extended device statistics */
    1252                 :            :         eth_xstats_reset_t         xstats_reset;
    1253                 :            :         /** Get names of extended statistics */
    1254                 :            :         eth_xstats_get_names_t     xstats_get_names;
    1255                 :            :         /** Configure per queue stat counter mapping */
    1256                 :            :         eth_queue_stats_mapping_set_t queue_stats_mapping_set;
    1257                 :            : 
    1258                 :            :         eth_dev_infos_get_t        dev_infos_get; /**< Get device info */
    1259                 :            :         /** Retrieve Rx queue information */
    1260                 :            :         eth_rxq_info_get_t         rxq_info_get;
    1261                 :            :         /** Retrieve Tx queue information */
    1262                 :            :         eth_txq_info_get_t         txq_info_get;
    1263                 :            :         /** Retrieve mbufs recycle Rx queue information */
    1264                 :            :         eth_recycle_rxq_info_get_t recycle_rxq_info_get;
    1265                 :            :         eth_burst_mode_get_t       rx_burst_mode_get; /**< Get Rx burst mode */
    1266                 :            :         eth_burst_mode_get_t       tx_burst_mode_get; /**< Get Tx burst mode */
    1267                 :            :         eth_fw_version_get_t       fw_version_get; /**< Get firmware version */
    1268                 :            : 
    1269                 :            :         /** Get packet types supported and identified by device */
    1270                 :            :         eth_dev_supported_ptypes_get_t dev_supported_ptypes_get;
    1271                 :            :         /**
    1272                 :            :          * Inform Ethernet device about reduced range of packet types to
    1273                 :            :          * handle
    1274                 :            :          */
    1275                 :            :         eth_dev_ptypes_set_t dev_ptypes_set;
    1276                 :            : 
    1277                 :            :         /** Filter VLAN Setup */
    1278                 :            :         vlan_filter_set_t          vlan_filter_set;
    1279                 :            :         /** Outer/Inner VLAN TPID Setup */
    1280                 :            :         vlan_tpid_set_t            vlan_tpid_set;
    1281                 :            :         /** VLAN Stripping on queue */
    1282                 :            :         vlan_strip_queue_set_t     vlan_strip_queue_set;
    1283                 :            :         /** Set VLAN Offload */
    1284                 :            :         vlan_offload_set_t         vlan_offload_set;
    1285                 :            :         /** Set port based Tx VLAN insertion */
    1286                 :            :         vlan_pvid_set_t            vlan_pvid_set;
    1287                 :            : 
    1288                 :            :         eth_queue_start_t          rx_queue_start;/**< Start Rx for a queue */
    1289                 :            :         eth_queue_stop_t           rx_queue_stop; /**< Stop Rx for a queue */
    1290                 :            :         eth_queue_start_t          tx_queue_start;/**< Start Tx for a queue */
    1291                 :            :         eth_queue_stop_t           tx_queue_stop; /**< Stop Tx for a queue */
    1292                 :            :         eth_rx_queue_setup_t       rx_queue_setup;/**< Set up device Rx queue */
    1293                 :            :         eth_queue_release_t        rx_queue_release; /**< Release Rx queue */
    1294                 :            : 
    1295                 :            :         /** Enable Rx queue interrupt */
    1296                 :            :         eth_rx_enable_intr_t       rx_queue_intr_enable;
    1297                 :            :         /** Disable Rx queue interrupt */
    1298                 :            :         eth_rx_disable_intr_t      rx_queue_intr_disable;
    1299                 :            : 
    1300                 :            :         eth_tx_queue_setup_t       tx_queue_setup;/**< Set up device Tx queue */
    1301                 :            :         eth_queue_release_t        tx_queue_release; /**< Release Tx queue */
    1302                 :            :         eth_tx_done_cleanup_t      tx_done_cleanup;/**< Free Tx ring mbufs */
    1303                 :            : 
    1304                 :            :         eth_dev_led_on_t           dev_led_on;    /**< Turn on LED */
    1305                 :            :         eth_dev_led_off_t          dev_led_off;   /**< Turn off LED */
    1306                 :            : 
    1307                 :            :         flow_ctrl_get_t            flow_ctrl_get; /**< Get flow control */
    1308                 :            :         flow_ctrl_set_t            flow_ctrl_set; /**< Setup flow control */
    1309                 :            :         /** Setup priority flow control */
    1310                 :            :         priority_flow_ctrl_set_t   priority_flow_ctrl_set;
    1311                 :            :         /** Priority flow control queue info get */
    1312                 :            :         priority_flow_ctrl_queue_info_get_t priority_flow_ctrl_queue_info_get;
    1313                 :            :         /** Priority flow control queue configure */
    1314                 :            :         priority_flow_ctrl_queue_config_t priority_flow_ctrl_queue_config;
    1315                 :            : 
    1316                 :            :         /** Set Unicast Table Array */
    1317                 :            :         eth_uc_hash_table_set_t    uc_hash_table_set;
    1318                 :            :         /** Set Unicast hash bitmap */
    1319                 :            :         eth_uc_all_hash_table_set_t uc_all_hash_table_set;
    1320                 :            : 
    1321                 :            :         /** Add UDP tunnel port */
    1322                 :            :         eth_udp_tunnel_port_add_t  udp_tunnel_port_add;
    1323                 :            :         /** Delete UDP tunnel port */
    1324                 :            :         eth_udp_tunnel_port_del_t  udp_tunnel_port_del;
    1325                 :            : 
    1326                 :            :         /** Set queue rate limit */
    1327                 :            :         eth_set_queue_rate_limit_t set_queue_rate_limit;
    1328                 :            : 
    1329                 :            :         /** Configure RSS hash protocols and hashing key */
    1330                 :            :         rss_hash_update_t          rss_hash_update;
    1331                 :            :         /** Get current RSS hash configuration */
    1332                 :            :         rss_hash_conf_get_t        rss_hash_conf_get;
    1333                 :            :         /** Update redirection table */
    1334                 :            :         reta_update_t              reta_update;
    1335                 :            :         /** Query redirection table */
    1336                 :            :         reta_query_t               reta_query;
    1337                 :            : 
    1338                 :            :         eth_get_reg_t              get_reg;           /**< Get registers */
    1339                 :            :         eth_get_eeprom_length_t    get_eeprom_length; /**< Get EEPROM length */
    1340                 :            :         eth_get_eeprom_t           get_eeprom;        /**< Get EEPROM data */
    1341                 :            :         eth_set_eeprom_t           set_eeprom;        /**< Set EEPROM */
    1342                 :            : 
    1343                 :            :         /** Get plugin module EEPROM attribute */
    1344                 :            :         eth_get_module_info_t      get_module_info;
    1345                 :            :         /** Get plugin module EEPROM data */
    1346                 :            :         eth_get_module_eeprom_t    get_module_eeprom;
    1347                 :            : 
    1348                 :            :         eth_flow_ops_get_t         flow_ops_get; /**< Get flow operations */
    1349                 :            : 
    1350                 :            :         eth_get_dcb_info           get_dcb_info; /**< Get DCB information */
    1351                 :            : 
    1352                 :            :         /** Turn IEEE1588/802.1AS timestamping on */
    1353                 :            :         eth_timesync_enable_t      timesync_enable;
    1354                 :            :         /** Turn IEEE1588/802.1AS timestamping off */
    1355                 :            :         eth_timesync_disable_t     timesync_disable;
    1356                 :            :         /** Read the IEEE1588/802.1AS Rx timestamp */
    1357                 :            :         eth_timesync_read_rx_timestamp_t timesync_read_rx_timestamp;
    1358                 :            :         /** Read the IEEE1588/802.1AS Tx timestamp */
    1359                 :            :         eth_timesync_read_tx_timestamp_t timesync_read_tx_timestamp;
    1360                 :            :         /** Adjust the device clock */
    1361                 :            :         eth_timesync_adjust_time   timesync_adjust_time;
    1362                 :            :         /** Get the device clock time */
    1363                 :            :         eth_timesync_read_time     timesync_read_time;
    1364                 :            :         /** Set the device clock time */
    1365                 :            :         eth_timesync_write_time    timesync_write_time;
    1366                 :            : 
    1367                 :            :         eth_read_clock             read_clock;
    1368                 :            : 
    1369                 :            :         /** Get extended device statistic values by ID */
    1370                 :            :         eth_xstats_get_by_id_t     xstats_get_by_id;
    1371                 :            :         /** Get name of extended device statistics by ID */
    1372                 :            :         eth_xstats_get_names_by_id_t xstats_get_names_by_id;
    1373                 :            : 
    1374                 :            :         /** Get Traffic Management (TM) operations */
    1375                 :            :         eth_tm_ops_get_t tm_ops_get;
    1376                 :            : 
    1377                 :            :         /** Get Traffic Metering and Policing (MTR) operations */
    1378                 :            :         eth_mtr_ops_get_t mtr_ops_get;
    1379                 :            : 
    1380                 :            :         /** Test if a port supports specific mempool ops */
    1381                 :            :         eth_pool_ops_supported_t pool_ops_supported;
    1382                 :            : 
    1383                 :            :         /** Returns the hairpin capabilities */
    1384                 :            :         eth_hairpin_cap_get_t hairpin_cap_get;
    1385                 :            :         /** Set up device Rx hairpin queue */
    1386                 :            :         eth_rx_hairpin_queue_setup_t rx_hairpin_queue_setup;
    1387                 :            :         /** Set up device Tx hairpin queue */
    1388                 :            :         eth_tx_hairpin_queue_setup_t tx_hairpin_queue_setup;
    1389                 :            : 
    1390                 :            :         /** Get Forward Error Correction(FEC) capability */
    1391                 :            :         eth_fec_get_capability_t fec_get_capability;
    1392                 :            :         /** Get Forward Error Correction(FEC) mode */
    1393                 :            :         eth_fec_get_t fec_get;
    1394                 :            :         /** Set Forward Error Correction(FEC) mode */
    1395                 :            :         eth_fec_set_t fec_set;
    1396                 :            : 
    1397                 :            :         /** Get hairpin peer ports list */
    1398                 :            :         hairpin_get_peer_ports_t hairpin_get_peer_ports;
    1399                 :            :         /** Bind all hairpin Tx queues of device to the peer port Rx queues */
    1400                 :            :         eth_hairpin_bind_t hairpin_bind;
    1401                 :            :         /** Unbind all hairpin Tx queues from the peer port Rx queues */
    1402                 :            :         eth_hairpin_unbind_t hairpin_unbind;
    1403                 :            :         /** Pass the current queue info and get the peer queue info */
    1404                 :            :         eth_hairpin_queue_peer_update_t hairpin_queue_peer_update;
    1405                 :            :         /** Set up the connection between the pair of hairpin queues */
    1406                 :            :         eth_hairpin_queue_peer_bind_t hairpin_queue_peer_bind;
    1407                 :            :         /** Disconnect the hairpin queues of a pair from each other */
    1408                 :            :         eth_hairpin_queue_peer_unbind_t hairpin_queue_peer_unbind;
    1409                 :            : 
    1410                 :            :         /** Get power monitoring condition for Rx queue */
    1411                 :            :         eth_get_monitor_addr_t get_monitor_addr;
    1412                 :            : 
    1413                 :            :         /** Get representor info */
    1414                 :            :         eth_representor_info_get_t representor_info_get;
    1415                 :            : 
    1416                 :            :         /**
    1417                 :            :          * Negotiate the NIC's ability to deliver specific
    1418                 :            :          * kinds of metadata to the PMD
    1419                 :            :          */
    1420                 :            :         eth_rx_metadata_negotiate_t rx_metadata_negotiate;
    1421                 :            : 
    1422                 :            :         /** Get IP reassembly capability */
    1423                 :            :         eth_ip_reassembly_capability_get_t ip_reassembly_capability_get;
    1424                 :            :         /** Get IP reassembly configuration */
    1425                 :            :         eth_ip_reassembly_conf_get_t ip_reassembly_conf_get;
    1426                 :            :         /** Set IP reassembly configuration */
    1427                 :            :         eth_ip_reassembly_conf_set_t ip_reassembly_conf_set;
    1428                 :            : 
    1429                 :            :         /** Get supported header ptypes to split */
    1430                 :            :         eth_buffer_split_supported_hdr_ptypes_get_t buffer_split_supported_hdr_ptypes_get;
    1431                 :            : 
    1432                 :            :         /** Dump private info from device */
    1433                 :            :         eth_dev_priv_dump_t eth_dev_priv_dump;
    1434                 :            : 
    1435                 :            :         /** Set Rx queue available descriptors threshold */
    1436                 :            :         eth_rx_queue_avail_thresh_set_t rx_queue_avail_thresh_set;
    1437                 :            :         /** Query Rx queue available descriptors threshold event */
    1438                 :            :         eth_rx_queue_avail_thresh_query_t rx_queue_avail_thresh_query;
    1439                 :            : 
    1440                 :            :         /** Dump Rx descriptor info */
    1441                 :            :         eth_rx_descriptor_dump_t eth_rx_descriptor_dump;
    1442                 :            :         /** Dump Tx descriptor info */
    1443                 :            :         eth_tx_descriptor_dump_t eth_tx_descriptor_dump;
    1444                 :            : 
    1445                 :            :         /** Get congestion management information */
    1446                 :            :         eth_cman_info_get_t cman_info_get;
    1447                 :            :         /** Initialize congestion management structure with default values */
    1448                 :            :         eth_cman_config_init_t cman_config_init;
    1449                 :            :         /** Configure congestion management */
    1450                 :            :         eth_cman_config_set_t cman_config_set;
    1451                 :            :         /** Retrieve congestion management configuration */
    1452                 :            :         eth_cman_config_get_t cman_config_get;
    1453                 :            : 
    1454                 :            :         /** Get the number of aggregated ports */
    1455                 :            :         eth_count_aggr_ports_t count_aggr_ports;
    1456                 :            :         /** Map a Tx queue with an aggregated port of the DPDK port */
    1457                 :            :         eth_map_aggr_tx_affinity_t map_aggr_tx_affinity;
    1458                 :            : };
    1459                 :            : 
    1460                 :            : /**
    1461                 :            :  * @internal
    1462                 :            :  * Check if the selected Rx queue is hairpin queue.
    1463                 :            :  *
    1464                 :            :  * @param dev
    1465                 :            :  *  Pointer to the selected device.
    1466                 :            :  * @param queue_id
    1467                 :            :  *  The selected queue.
    1468                 :            :  *
    1469                 :            :  * @return
    1470                 :            :  *   - (1) if the queue is hairpin queue, 0 otherwise.
    1471                 :            :  */
    1472                 :            : __rte_internal
    1473                 :            : int rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id);
    1474                 :            : 
    1475                 :            : /**
    1476                 :            :  * @internal
    1477                 :            :  * Check if the selected Tx queue is hairpin queue.
    1478                 :            :  *
    1479                 :            :  * @param dev
    1480                 :            :  *  Pointer to the selected device.
    1481                 :            :  * @param queue_id
    1482                 :            :  *  The selected queue.
    1483                 :            :  *
    1484                 :            :  * @return
    1485                 :            :  *   - (1) if the queue is hairpin queue, 0 otherwise.
    1486                 :            :  */
    1487                 :            : __rte_internal
    1488                 :            : int rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id);
    1489                 :            : 
    1490                 :            : /**
    1491                 :            :  * @internal
    1492                 :            :  * Returns a ethdev slot specified by the unique identifier name.
    1493                 :            :  *
    1494                 :            :  * @param       name
    1495                 :            :  *  The pointer to the Unique identifier name for each Ethernet device
    1496                 :            :  * @return
    1497                 :            :  *   - The pointer to the ethdev slot, on success. NULL on error
    1498                 :            :  */
    1499                 :            : __rte_internal
    1500                 :            : struct rte_eth_dev *rte_eth_dev_allocated(const char *name);
    1501                 :            : 
    1502                 :            : /**
    1503                 :            :  * @internal
    1504                 :            :  * Allocates a new ethdev slot for an Ethernet device and returns the pointer
    1505                 :            :  * to that slot for the driver to use.
    1506                 :            :  *
    1507                 :            :  * @param       name    Unique identifier name for each Ethernet device
    1508                 :            :  * @return
    1509                 :            :  *   - Slot in the rte_dev_devices array for a new device;
    1510                 :            :  */
    1511                 :            : __rte_internal
    1512                 :            : struct rte_eth_dev *rte_eth_dev_allocate(const char *name);
    1513                 :            : 
    1514                 :            : /**
    1515                 :            :  * @internal
    1516                 :            :  * Attach to the ethdev already initialized by the primary
    1517                 :            :  * process.
    1518                 :            :  *
    1519                 :            :  * @param       name    Ethernet device's name.
    1520                 :            :  * @return
    1521                 :            :  *   - Success: Slot in the rte_dev_devices array for attached
    1522                 :            :  *        device.
    1523                 :            :  *   - Error: Null pointer.
    1524                 :            :  */
    1525                 :            : __rte_internal
    1526                 :            : struct rte_eth_dev *rte_eth_dev_attach_secondary(const char *name);
    1527                 :            : 
    1528                 :            : /**
    1529                 :            :  * @internal
    1530                 :            :  * Notify RTE_ETH_EVENT_DESTROY and release the specified ethdev port.
    1531                 :            :  *
    1532                 :            :  * The following PMD-managed data fields will be freed:
    1533                 :            :  *   - dev_private
    1534                 :            :  *   - mac_addrs
    1535                 :            :  *   - hash_mac_addrs
    1536                 :            :  * If one of these fields should not be freed,
    1537                 :            :  * it must be reset to NULL by the PMD, typically in dev_close method.
    1538                 :            :  *
    1539                 :            :  * @param eth_dev
    1540                 :            :  * Device to be detached.
    1541                 :            :  * @return
    1542                 :            :  *   - 0 on success, negative on error
    1543                 :            :  */
    1544                 :            : __rte_internal
    1545                 :            : int rte_eth_dev_release_port(struct rte_eth_dev *eth_dev);
    1546                 :            : 
    1547                 :            : /**
    1548                 :            :  * @internal
    1549                 :            :  * Release device queues and clear its configuration to force the user
    1550                 :            :  * application to reconfigure it. It is for internal use only.
    1551                 :            :  *
    1552                 :            :  * @param dev
    1553                 :            :  *  Pointer to struct rte_eth_dev.
    1554                 :            :  *
    1555                 :            :  * @return
    1556                 :            :  *  void
    1557                 :            :  */
    1558                 :            : __rte_internal
    1559                 :            : void rte_eth_dev_internal_reset(struct rte_eth_dev *dev);
    1560                 :            : 
    1561                 :            : /**
    1562                 :            :  * @internal Executes all the user application registered callbacks for
    1563                 :            :  * the specific device. It is for DPDK internal user only. User
    1564                 :            :  * application should not call it directly.
    1565                 :            :  *
    1566                 :            :  * @param dev
    1567                 :            :  *  Pointer to struct rte_eth_dev.
    1568                 :            :  * @param event
    1569                 :            :  *  Eth device interrupt event type.
    1570                 :            :  * @param ret_param
    1571                 :            :  *  To pass data back to user application.
    1572                 :            :  *  This allows the user application to decide if a particular function
    1573                 :            :  *  is permitted or not.
    1574                 :            :  *
    1575                 :            :  * @return
    1576                 :            :  *  int
    1577                 :            :  */
    1578                 :            : __rte_internal
    1579                 :            : int rte_eth_dev_callback_process(struct rte_eth_dev *dev,
    1580                 :            :                 enum rte_eth_event_type event, void *ret_param);
    1581                 :            : 
    1582                 :            : /**
    1583                 :            :  * @internal
    1584                 :            :  * This is the last step of device probing.
    1585                 :            :  * It must be called after a port is allocated and initialized successfully.
    1586                 :            :  *
    1587                 :            :  * The notification RTE_ETH_EVENT_NEW is sent to other entities
    1588                 :            :  * (libraries and applications).
    1589                 :            :  * The state is set as RTE_ETH_DEV_ATTACHED.
    1590                 :            :  *
    1591                 :            :  * @param dev
    1592                 :            :  *  New ethdev port.
    1593                 :            :  */
    1594                 :            : __rte_internal
    1595                 :            : void rte_eth_dev_probing_finish(struct rte_eth_dev *dev);
    1596                 :            : 
    1597                 :            : /**
    1598                 :            :  * Create memzone for HW rings.
    1599                 :            :  * malloc can't be used as the physical address is needed.
    1600                 :            :  * If the memzone is already created, then this function returns a ptr
    1601                 :            :  * to the old one.
    1602                 :            :  *
    1603                 :            :  * @param eth_dev
    1604                 :            :  *   The *eth_dev* pointer is the address of the *rte_eth_dev* structure
    1605                 :            :  * @param name
    1606                 :            :  *   The name of the memory zone
    1607                 :            :  * @param queue_id
    1608                 :            :  *   The index of the queue to add to name
    1609                 :            :  * @param size
    1610                 :            :  *   The sizeof of the memory area
    1611                 :            :  * @param align
    1612                 :            :  *   Alignment for resulting memzone. Must be a power of 2.
    1613                 :            :  * @param socket_id
    1614                 :            :  *   The *socket_id* argument is the socket identifier in case of NUMA.
    1615                 :            :  */
    1616                 :            : __rte_internal
    1617                 :            : const struct rte_memzone *
    1618                 :            : rte_eth_dma_zone_reserve(const struct rte_eth_dev *eth_dev, const char *name,
    1619                 :            :                          uint16_t queue_id, size_t size,
    1620                 :            :                          unsigned align, int socket_id);
    1621                 :            : 
    1622                 :            : /**
    1623                 :            :  * Free previously allocated memzone for HW rings.
    1624                 :            :  *
    1625                 :            :  * @param eth_dev
    1626                 :            :  *   The *eth_dev* pointer is the address of the *rte_eth_dev* structure
    1627                 :            :  * @param name
    1628                 :            :  *   The name of the memory zone
    1629                 :            :  * @param queue_id
    1630                 :            :  *   The index of the queue to add to name
    1631                 :            :  * @return
    1632                 :            :  *   Negative errno value on error, 0 on success.
    1633                 :            :  */
    1634                 :            : __rte_internal
    1635                 :            : int
    1636                 :            : rte_eth_dma_zone_free(const struct rte_eth_dev *eth_dev, const char *name,
    1637                 :            :                  uint16_t queue_id);
    1638                 :            : 
    1639                 :            : /**
    1640                 :            :  * @internal
    1641                 :            :  * Atomically set the link status for the specific device.
    1642                 :            :  * It is for use by DPDK device driver use only.
    1643                 :            :  * User applications should not call it
    1644                 :            :  *
    1645                 :            :  * @param dev
    1646                 :            :  *  Pointer to struct rte_eth_dev.
    1647                 :            :  * @param link
    1648                 :            :  *  New link status value.
    1649                 :            :  * @return
    1650                 :            :  *  Same convention as eth_link_update operation.
    1651                 :            :  *  0   if link up status has changed
    1652                 :            :  *  -1  if link up status was unchanged
    1653                 :            :  */
    1654                 :            : static inline int
    1655                 :          0 : rte_eth_linkstatus_set(struct rte_eth_dev *dev,
    1656                 :            :                        const struct rte_eth_link *new_link)
    1657                 :            : {
    1658                 :          0 :         RTE_ATOMIC(uint64_t) *dev_link = (uint64_t __rte_atomic *)&(dev->data->dev_link);
    1659                 :            :         union {
    1660                 :            :                 uint64_t val64;
    1661                 :            :                 struct rte_eth_link link;
    1662                 :            :         } orig;
    1663                 :            : 
    1664                 :            :         RTE_BUILD_BUG_ON(sizeof(*new_link) != sizeof(uint64_t));
    1665                 :            : 
    1666                 :          0 :         orig.val64 = rte_atomic_exchange_explicit(dev_link, *(const uint64_t *)new_link,
    1667                 :            :                                         rte_memory_order_seq_cst);
    1668                 :            : 
    1669   [ #  #  #  #  :          0 :         return (orig.link.link_status == new_link->link_status) ? -1 : 0;
          #  #  #  #  #  
                #  #  # ]
    1670                 :            : }
    1671                 :            : 
    1672                 :            : /**
    1673                 :            :  * @internal
    1674                 :            :  * Atomically get the link speed and status.
    1675                 :            :  *
    1676                 :            :  * @param dev
    1677                 :            :  *  Pointer to struct rte_eth_dev.
    1678                 :            :  * @param link
    1679                 :            :  *  link status value.
    1680                 :            :  */
    1681                 :            : static inline void
    1682                 :            : rte_eth_linkstatus_get(const struct rte_eth_dev *dev,
    1683                 :            :                        struct rte_eth_link *link)
    1684                 :            : {
    1685                 :          0 :         RTE_ATOMIC(uint64_t) *src = (uint64_t __rte_atomic *)&(dev->data->dev_link);
    1686                 :            :         uint64_t *dst = (uint64_t *)link;
    1687                 :            : 
    1688                 :            :         RTE_BUILD_BUG_ON(sizeof(*link) != sizeof(uint64_t));
    1689                 :            : 
    1690   [ #  #  #  #  :          0 :         *dst = rte_atomic_load_explicit(src, rte_memory_order_seq_cst);
          #  #  #  #  #  
                #  #  # ]
    1691                 :          0 : }
    1692                 :            : 
    1693                 :            : /**
    1694                 :            :  * @internal
    1695                 :            :  * Dummy DPDK callback for Rx/Tx packet burst.
    1696                 :            :  *
    1697                 :            :  * @param queue
    1698                 :            :  *  Pointer to Rx/Tx queue
    1699                 :            :  * @param pkts
    1700                 :            :  *  Packet array
    1701                 :            :  * @param nb_pkts
    1702                 :            :  *  Number of packets in packet array
    1703                 :            :  */
    1704                 :            : __rte_internal
    1705                 :            : uint16_t
    1706                 :            : rte_eth_pkt_burst_dummy(void *queue __rte_unused,
    1707                 :            :                 struct rte_mbuf **pkts __rte_unused,
    1708                 :            :                 uint16_t nb_pkts __rte_unused);
    1709                 :            : 
    1710                 :            : /**
    1711                 :            :  * Allocate an unique switch domain identifier.
    1712                 :            :  *
    1713                 :            :  * A pool of switch domain identifiers which can be allocated on request. This
    1714                 :            :  * will enabled devices which support the concept of switch domains to request
    1715                 :            :  * a switch domain ID which is guaranteed to be unique from other devices
    1716                 :            :  * running in the same process.
    1717                 :            :  *
    1718                 :            :  * @param domain_id
    1719                 :            :  *  switch domain identifier parameter to pass back to application
    1720                 :            :  *
    1721                 :            :  * @return
    1722                 :            :  *   Negative errno value on error, 0 on success.
    1723                 :            :  */
    1724                 :            : __rte_internal
    1725                 :            : int
    1726                 :            : rte_eth_switch_domain_alloc(uint16_t *domain_id);
    1727                 :            : 
    1728                 :            : /**
    1729                 :            :  * Free switch domain.
    1730                 :            :  *
    1731                 :            :  * Return a switch domain identifier to the pool of free identifiers after it is
    1732                 :            :  * no longer in use by device.
    1733                 :            :  *
    1734                 :            :  * @param domain_id
    1735                 :            :  *  switch domain identifier to free
    1736                 :            :  *
    1737                 :            :  * @return
    1738                 :            :  *   Negative errno value on error, 0 on success.
    1739                 :            :  */
    1740                 :            : __rte_internal
    1741                 :            : int
    1742                 :            : rte_eth_switch_domain_free(uint16_t domain_id);
    1743                 :            : 
    1744                 :            : /**
    1745                 :            :  * Generic Ethernet device arguments
    1746                 :            :  *
    1747                 :            :  * One type of representor each structure.
    1748                 :            :  */
    1749                 :            : struct rte_eth_devargs {
    1750                 :            :         uint16_t mh_controllers[RTE_MAX_MULTI_HOST_CTRLS];
    1751                 :            :         /** controller/s number in case of multi-host */
    1752                 :            :         uint16_t nb_mh_controllers;
    1753                 :            :         /** number of controllers in multi-host controllers field */
    1754                 :            :         uint16_t ports[RTE_MAX_ETHPORTS];
    1755                 :            :         /** port/s number to enable on a multi-port single function */
    1756                 :            :         uint16_t nb_ports;
    1757                 :            :         /** number of ports in ports field */
    1758                 :            :         uint16_t representor_ports[RTE_MAX_ETHPORTS];
    1759                 :            :         /** representor port/s identifier to enable on device */
    1760                 :            :         uint16_t nb_representor_ports;
    1761                 :            :         /** number of ports in representor port field */
    1762                 :            :         enum rte_eth_representor_type type; /* type of representor */
    1763                 :            : };
    1764                 :            : 
    1765                 :            : /**
    1766                 :            :  * PMD helper function to get representor ID from location detail.
    1767                 :            :  *
    1768                 :            :  * Get representor ID from controller, pf and (sf or vf).
    1769                 :            :  * The mapping is retrieved from rte_eth_representor_info_get().
    1770                 :            :  *
    1771                 :            :  * For backward compatibility, if no representor info, direct
    1772                 :            :  * map legacy VF (no controller and pf).
    1773                 :            :  *
    1774                 :            :  * @param port_id
    1775                 :            :  *  Port ID of the backing device.
    1776                 :            :  * @param type
    1777                 :            :  *  Representor type.
    1778                 :            :  * @param controller
    1779                 :            :  *  Controller ID, -1 if unspecified.
    1780                 :            :  * @param pf
    1781                 :            :  *  PF port ID, -1 if unspecified.
    1782                 :            :  * @param representor_port
    1783                 :            :  *  VF or SF representor port number, -1 if unspecified.
    1784                 :            :  * @param repr_id
    1785                 :            :  *  Pointer to output representor ID.
    1786                 :            :  *
    1787                 :            :  * @return
    1788                 :            :  *  Negative errno value on error, 0 on success.
    1789                 :            :  */
    1790                 :            : __rte_internal
    1791                 :            : int
    1792                 :            : rte_eth_representor_id_get(uint16_t port_id,
    1793                 :            :                            enum rte_eth_representor_type type,
    1794                 :            :                            int controller, int pf, int representor_port,
    1795                 :            :                            uint16_t *repr_id);
    1796                 :            : 
    1797                 :            : /**
    1798                 :            :  * PMD helper function to parse ethdev arguments
    1799                 :            :  *
    1800                 :            :  * @param devargs
    1801                 :            :  *  device arguments
    1802                 :            :  * @param eth_devargs
    1803                 :            :  *  parsed ethdev specific arguments.
    1804                 :            :  *
    1805                 :            :  * @return
    1806                 :            :  *   Negative errno value on error, 0 on success.
    1807                 :            :  */
    1808                 :            : __rte_internal
    1809                 :            : int
    1810                 :            : rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs);
    1811                 :            : 
    1812                 :            : 
    1813                 :            : typedef int (*ethdev_init_t)(struct rte_eth_dev *ethdev, void *init_params);
    1814                 :            : typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev,
    1815                 :            :         void *bus_specific_init_params);
    1816                 :            : 
    1817                 :            : /**
    1818                 :            :  * PMD helper function for the creation of a new ethdev ports.
    1819                 :            :  *
    1820                 :            :  * @param device
    1821                 :            :  *  rte_device handle.
    1822                 :            :  * @param name
    1823                 :            :  *  port name.
    1824                 :            :  * @param priv_data_size
    1825                 :            :  *  size of private data required for port.
    1826                 :            :  * @param bus_specific_init
    1827                 :            :  *  port bus specific initialisation callback function
    1828                 :            :  * @param bus_init_params
    1829                 :            :  *  port bus specific initialisation parameters
    1830                 :            :  * @param ethdev_init
    1831                 :            :  *  device specific port initialization callback function
    1832                 :            :  * @param init_params
    1833                 :            :  *  port initialisation parameters
    1834                 :            :  *
    1835                 :            :  * @return
    1836                 :            :  *   Negative errno value on error, 0 on success.
    1837                 :            :  */
    1838                 :            : __rte_internal
    1839                 :            : int
    1840                 :            : rte_eth_dev_create(struct rte_device *device, const char *name,
    1841                 :            :         size_t priv_data_size,
    1842                 :            :         ethdev_bus_specific_init bus_specific_init, void *bus_init_params,
    1843                 :            :         ethdev_init_t ethdev_init, void *init_params);
    1844                 :            : 
    1845                 :            : 
    1846                 :            : typedef int (*ethdev_uninit_t)(struct rte_eth_dev *ethdev);
    1847                 :            : 
    1848                 :            : /**
    1849                 :            :  * PMD helper function for cleaning up the resources of a ethdev port on it's
    1850                 :            :  * destruction.
    1851                 :            :  *
    1852                 :            :  * @param ethdev
    1853                 :            :  *   ethdev handle of port.
    1854                 :            :  * @param ethdev_uninit
    1855                 :            :  *   device specific port un-initialise callback function
    1856                 :            :  *
    1857                 :            :  * @return
    1858                 :            :  *   Negative errno value on error, 0 on success.
    1859                 :            :  */
    1860                 :            : __rte_internal
    1861                 :            : int
    1862                 :            : rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit);
    1863                 :            : 
    1864                 :            : /**
    1865                 :            :  * @internal
    1866                 :            :  * Pass the current hairpin queue HW and/or SW information to the peer queue
    1867                 :            :  * and fetch back the information of the peer queue.
    1868                 :            :  *
    1869                 :            :  * @param peer_port
    1870                 :            :  *  Peer port identifier of the Ethernet device.
    1871                 :            :  * @param peer_queue
    1872                 :            :  *  Peer queue index of the port.
    1873                 :            :  * @param cur_info
    1874                 :            :  *  Pointer to the current information structure.
    1875                 :            :  * @param peer_info
    1876                 :            :  *  Pointer to the peer information, output.
    1877                 :            :  * @param direction
    1878                 :            :  *  Direction to pass the information.
    1879                 :            :  *  positive - pass Tx queue information and get peer Rx queue information
    1880                 :            :  *  zero - pass Rx queue information and get peer Tx queue information
    1881                 :            :  *
    1882                 :            :  * @return
    1883                 :            :  *  Negative errno value on error, 0 on success.
    1884                 :            :  */
    1885                 :            : __rte_internal
    1886                 :            : int
    1887                 :            : rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue,
    1888                 :            :                                   struct rte_hairpin_peer_info *cur_info,
    1889                 :            :                                   struct rte_hairpin_peer_info *peer_info,
    1890                 :            :                                   uint32_t direction);
    1891                 :            : 
    1892                 :            : /**
    1893                 :            :  * @internal
    1894                 :            :  * Configure current hairpin queue with the peer information fetched to create
    1895                 :            :  * the connection (bind) with peer queue in the specified direction.
    1896                 :            :  * This function might need to be called twice to fully create the connections.
    1897                 :            :  *
    1898                 :            :  * @param cur_port
    1899                 :            :  *  Current port identifier of the Ethernet device.
    1900                 :            :  * @param cur_queue
    1901                 :            :  *  Current queue index of the port.
    1902                 :            :  * @param peer_info
    1903                 :            :  *  Pointer to the peer information, input.
    1904                 :            :  * @param direction
    1905                 :            :  *  Direction to create the connection.
    1906                 :            :  *  positive - bind current Tx queue to peer Rx queue
    1907                 :            :  *  zero - bind current Rx queue to peer Tx queue
    1908                 :            :  *
    1909                 :            :  * @return
    1910                 :            :  *  Negative errno value on error, 0 on success.
    1911                 :            :  */
    1912                 :            : __rte_internal
    1913                 :            : int
    1914                 :            : rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue,
    1915                 :            :                                 struct rte_hairpin_peer_info *peer_info,
    1916                 :            :                                 uint32_t direction);
    1917                 :            : 
    1918                 :            : /**
    1919                 :            :  * @internal
    1920                 :            :  * Get rte_eth_dev from device name. The device name should be specified
    1921                 :            :  * as below:
    1922                 :            :  * - PCIe address (Domain:Bus:Device.Function), for example 0000:2:00.0
    1923                 :            :  * - SoC device name, for example fsl-gmac0
    1924                 :            :  * - vdev dpdk name, for example net_[pcap0|null0|tap0]
    1925                 :            :  *
    1926                 :            :  * @param name
    1927                 :            :  *   PCI address or name of the device
    1928                 :            :  * @return
    1929                 :            :  *   - rte_eth_dev if successful
    1930                 :            :  *   - NULL on failure
    1931                 :            :  */
    1932                 :            : __rte_internal
    1933                 :            : struct rte_eth_dev*
    1934                 :            : rte_eth_dev_get_by_name(const char *name);
    1935                 :            : 
    1936                 :            : /**
    1937                 :            :  * @internal
    1938                 :            :  * Reset the current queue state and configuration to disconnect (unbind) it
    1939                 :            :  * from the peer queue.
    1940                 :            :  * This function might need to be called twice to disconnect each other.
    1941                 :            :  *
    1942                 :            :  * @param cur_port
    1943                 :            :  *  Current port identifier of the Ethernet device.
    1944                 :            :  * @param cur_queue
    1945                 :            :  *  Current queue index of the port.
    1946                 :            :  * @param direction
    1947                 :            :  *  Direction to destroy the connection.
    1948                 :            :  *  positive - unbind current Tx queue from peer Rx queue
    1949                 :            :  *  zero - unbind current Rx queue from peer Tx queue
    1950                 :            :  *
    1951                 :            :  * @return
    1952                 :            :  *  Negative errno value on error, 0 on success.
    1953                 :            :  */
    1954                 :            : __rte_internal
    1955                 :            : int
    1956                 :            : rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,
    1957                 :            :                                   uint32_t direction);
    1958                 :            : 
    1959                 :            : /**
    1960                 :            :  * @internal
    1961                 :            :  * Register mbuf dynamic field and flag for IP reassembly incomplete case.
    1962                 :            :  */
    1963                 :            : __rte_internal
    1964                 :            : int
    1965                 :            : rte_eth_ip_reassembly_dynfield_register(int *field_offset, int *flag);
    1966                 :            : 
    1967                 :            : 
    1968                 :            : /*
    1969                 :            :  * Legacy ethdev API used internally by drivers.
    1970                 :            :  */
    1971                 :            : 
    1972                 :            : enum rte_filter_type {
    1973                 :            :         RTE_ETH_FILTER_NONE = 0,
    1974                 :            :         RTE_ETH_FILTER_ETHERTYPE,
    1975                 :            :         RTE_ETH_FILTER_FLEXIBLE,
    1976                 :            :         RTE_ETH_FILTER_SYN,
    1977                 :            :         RTE_ETH_FILTER_NTUPLE,
    1978                 :            :         RTE_ETH_FILTER_TUNNEL,
    1979                 :            :         RTE_ETH_FILTER_FDIR,
    1980                 :            :         RTE_ETH_FILTER_HASH,
    1981                 :            :         RTE_ETH_FILTER_L2_TUNNEL,
    1982                 :            : };
    1983                 :            : 
    1984                 :            : /**
    1985                 :            :  * Define all structures for Ethertype Filter type.
    1986                 :            :  */
    1987                 :            : 
    1988                 :            : #define RTE_ETHTYPE_FLAGS_MAC    0x0001 /**< If set, compare mac */
    1989                 :            : #define RTE_ETHTYPE_FLAGS_DROP   0x0002 /**< If set, drop packet when match */
    1990                 :            : 
    1991                 :            : /**
    1992                 :            :  * A structure used to define the ethertype filter entry
    1993                 :            :  * to support RTE_ETH_FILTER_ETHERTYPE data representation.
    1994                 :            :  */
    1995                 :            : struct rte_eth_ethertype_filter {
    1996                 :            :         struct rte_ether_addr mac_addr;   /**< Mac address to match */
    1997                 :            :         uint16_t ether_type;          /**< Ether type to match */
    1998                 :            :         uint16_t flags;               /**< Flags from RTE_ETHTYPE_FLAGS_* */
    1999                 :            :         uint16_t queue;               /**< Queue assigned to when match */
    2000                 :            : };
    2001                 :            : 
    2002                 :            : /**
    2003                 :            :  * A structure used to define the TCP syn filter entry
    2004                 :            :  * to support RTE_ETH_FILTER_SYN data representation.
    2005                 :            :  */
    2006                 :            : struct rte_eth_syn_filter {
    2007                 :            :         /** 1 - higher priority than other filters, 0 - lower priority */
    2008                 :            :         uint8_t hig_pri;
    2009                 :            :         uint16_t queue;      /**< Queue assigned to when match */
    2010                 :            : };
    2011                 :            : 
    2012                 :            : /**
    2013                 :            :  * filter type of tunneling packet
    2014                 :            :  */
    2015                 :            : #define RTE_ETH_TUNNEL_FILTER_OMAC  0x01 /**< filter by outer MAC addr */
    2016                 :            : #define RTE_ETH_TUNNEL_FILTER_OIP   0x02 /**< filter by outer IP Addr */
    2017                 :            : #define RTE_ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */
    2018                 :            : #define RTE_ETH_TUNNEL_FILTER_IMAC  0x08 /**< filter by inner MAC addr */
    2019                 :            : #define RTE_ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */
    2020                 :            : #define RTE_ETH_TUNNEL_FILTER_IIP   0x20 /**< filter by inner IP addr */
    2021                 :            : 
    2022                 :            : #define RTE_ETH_TUNNEL_FILTER_IMAC_IVLAN (RTE_ETH_TUNNEL_FILTER_IMAC | \
    2023                 :            :                                           RTE_ETH_TUNNEL_FILTER_IVLAN)
    2024                 :            : #define RTE_ETH_TUNNEL_FILTER_IMAC_IVLAN_TENID (RTE_ETH_TUNNEL_FILTER_IMAC | \
    2025                 :            :                                                 RTE_ETH_TUNNEL_FILTER_IVLAN | \
    2026                 :            :                                                 RTE_ETH_TUNNEL_FILTER_TENID)
    2027                 :            : #define RTE_ETH_TUNNEL_FILTER_IMAC_TENID (RTE_ETH_TUNNEL_FILTER_IMAC | \
    2028                 :            :                                           RTE_ETH_TUNNEL_FILTER_TENID)
    2029                 :            : #define RTE_ETH_TUNNEL_FILTER_OMAC_TENID_IMAC (RTE_ETH_TUNNEL_FILTER_OMAC | \
    2030                 :            :                                                RTE_ETH_TUNNEL_FILTER_TENID | \
    2031                 :            :                                                RTE_ETH_TUNNEL_FILTER_IMAC)
    2032                 :            : 
    2033                 :            : /**
    2034                 :            :  *  Select IPv4 or IPv6 for tunnel filters.
    2035                 :            :  */
    2036                 :            : enum rte_tunnel_iptype {
    2037                 :            :         RTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4 */
    2038                 :            :         RTE_TUNNEL_IPTYPE_IPV6,     /**< IPv6 */
    2039                 :            : };
    2040                 :            : 
    2041                 :            : /**
    2042                 :            :  * Tunneling Packet filter configuration.
    2043                 :            :  */
    2044                 :            : struct rte_eth_tunnel_filter_conf {
    2045                 :            :         struct rte_ether_addr outer_mac;    /**< Outer MAC address to match */
    2046                 :            :         struct rte_ether_addr inner_mac;    /**< Inner MAC address to match */
    2047                 :            :         uint16_t inner_vlan;                /**< Inner VLAN to match */
    2048                 :            :         enum rte_tunnel_iptype ip_type;     /**< IP address type */
    2049                 :            :         /**
    2050                 :            :          * Outer destination IP address to match if ETH_TUNNEL_FILTER_OIP
    2051                 :            :          * is set in filter_type, or inner destination IP address to match
    2052                 :            :          * if ETH_TUNNEL_FILTER_IIP is set in filter_type.
    2053                 :            :          */
    2054                 :            :         union {
    2055                 :            :                 uint32_t ipv4_addr;         /**< IPv4 address in big endian */
    2056                 :            :                 uint32_t ipv6_addr[4];      /**< IPv6 address in big endian */
    2057                 :            :         } ip_addr;
    2058                 :            :         /** Flags from ETH_TUNNEL_FILTER_XX - see above */
    2059                 :            :         uint16_t filter_type;
    2060                 :            :         enum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type */
    2061                 :            :         uint32_t tenant_id;     /**< Tenant ID to match: VNI, GRE key... */
    2062                 :            :         uint16_t queue_id;      /**< Queue assigned to if match */
    2063                 :            : };
    2064                 :            : 
    2065                 :            : /**
    2066                 :            :  *  Memory space that can be configured to store Flow Director filters
    2067                 :            :  *  in the board memory.
    2068                 :            :  */
    2069                 :            : enum rte_eth_fdir_pballoc_type {
    2070                 :            :         RTE_ETH_FDIR_PBALLOC_64K = 0,  /**< 64k. */
    2071                 :            :         RTE_ETH_FDIR_PBALLOC_128K,     /**< 128k. */
    2072                 :            :         RTE_ETH_FDIR_PBALLOC_256K,     /**< 256k. */
    2073                 :            : };
    2074                 :            : 
    2075                 :            : /**
    2076                 :            :  *  Select report mode of FDIR hash information in Rx descriptors.
    2077                 :            :  */
    2078                 :            : enum rte_fdir_status_mode {
    2079                 :            :         RTE_FDIR_NO_REPORT_STATUS = 0, /**< Never report FDIR hash. */
    2080                 :            :         RTE_FDIR_REPORT_STATUS, /**< Only report FDIR hash for matching pkts. */
    2081                 :            :         RTE_FDIR_REPORT_STATUS_ALWAYS, /**< Always report FDIR hash. */
    2082                 :            : };
    2083                 :            : 
    2084                 :            : /**
    2085                 :            :  * A structure used to configure the Flow Director (FDIR) feature
    2086                 :            :  * of an Ethernet port.
    2087                 :            :  *
    2088                 :            :  * If mode is RTE_FDIR_MODE_NONE, the pballoc value is ignored.
    2089                 :            :  */
    2090                 :            : struct rte_eth_fdir_conf {
    2091                 :            :         enum rte_fdir_mode mode; /**< Flow Director mode. */
    2092                 :            :         enum rte_eth_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */
    2093                 :            :         enum rte_fdir_status_mode status;  /**< How to report FDIR hash. */
    2094                 :            :         /** Rx queue of packets matching a "drop" filter in perfect mode. */
    2095                 :            :         uint8_t drop_queue;
    2096                 :            :         struct rte_eth_fdir_masks mask;
    2097                 :            :         /** Flex payload configuration. */
    2098                 :            :         struct rte_eth_fdir_flex_conf flex_conf;
    2099                 :            : };
    2100                 :            : 
    2101                 :            : #ifdef __cplusplus
    2102                 :            : }
    2103                 :            : #endif
    2104                 :            : 
    2105                 :            : #endif /* _RTE_ETHDEV_DRIVER_H_ */

Generated by: LCOV version 1.14