LCOV - code coverage report
Current view: top level - drivers/net/txgbe - txgbe_ethdev.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 22 0.0 %
Date: 2025-03-01 20:23:48 Functions: 0 1 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 14 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2015-2020 Beijing WangXun Technology Co., Ltd.
       3                 :            :  * Copyright(c) 2010-2017 Intel Corporation
       4                 :            :  */
       5                 :            : 
       6                 :            : #ifndef _TXGBE_ETHDEV_H_
       7                 :            : #define _TXGBE_ETHDEV_H_
       8                 :            : 
       9                 :            : #include <stdint.h>
      10                 :            : 
      11                 :            : #include "base/txgbe.h"
      12                 :            : #include "txgbe_ptypes.h"
      13                 :            : #ifdef RTE_LIB_SECURITY
      14                 :            : #include "txgbe_ipsec.h"
      15                 :            : #endif
      16                 :            : #include <rte_flow.h>
      17                 :            : #include <rte_flow_driver.h>
      18                 :            : #include <rte_time.h>
      19                 :            : #include <rte_ethdev.h>
      20                 :            : #include <rte_ethdev_core.h>
      21                 :            : #include <rte_hash.h>
      22                 :            : #include <rte_hash_crc.h>
      23                 :            : #include <bus_pci_driver.h>
      24                 :            : #include <rte_tm_driver.h>
      25                 :            : 
      26                 :            : /* need update link, bit flag */
      27                 :            : #define TXGBE_FLAG_NEED_LINK_UPDATE (uint32_t)(1 << 0)
      28                 :            : #define TXGBE_FLAG_MAILBOX          (uint32_t)(1 << 1)
      29                 :            : #define TXGBE_FLAG_PHY_INTERRUPT    (uint32_t)(1 << 2)
      30                 :            : #define TXGBE_FLAG_MACSEC           (uint32_t)(1 << 3)
      31                 :            : #define TXGBE_FLAG_NEED_LINK_CONFIG (uint32_t)(1 << 4)
      32                 :            : #define TXGBE_FLAG_NEED_AN_CONFIG   (uint32_t)(1 << 5)
      33                 :            : #define TXGBE_FLAG_OVERHEAT         (uint32_t)(1 << 6)
      34                 :            : #define TXGBE_FLAG_TX_DESC_ERR      (uint32_t)(1 << 7)
      35                 :            : 
      36                 :            : /*
      37                 :            :  * Defines that were not part of txgbe_type.h as they are not used by the
      38                 :            :  * FreeBSD driver.
      39                 :            :  */
      40                 :            : #define TXGBE_VFTA_SIZE 128
      41                 :            : #define TXGBE_HKEY_MAX_INDEX 10
      42                 :            : /*Default value of Max Rx Queue*/
      43                 :            : #define TXGBE_MAX_RX_QUEUE_NUM  128
      44                 :            : #define TXGBE_VMDQ_DCB_NB_QUEUES     TXGBE_MAX_RX_QUEUE_NUM
      45                 :            : #define TXGBE_NONE_MODE_TX_NB_QUEUES 64
      46                 :            : 
      47                 :            : #ifndef NBBY
      48                 :            : #define NBBY    8       /* number of bits in a byte */
      49                 :            : #endif
      50                 :            : #define TXGBE_HWSTRIP_BITMAP_SIZE \
      51                 :            :         (TXGBE_MAX_RX_QUEUE_NUM / (sizeof(uint32_t) * NBBY))
      52                 :            : 
      53                 :            : #define TXGBE_QUEUE_ITR_INTERVAL_DEFAULT        500 /* 500us */
      54                 :            : 
      55                 :            : #define TXGBE_MAX_QUEUE_NUM_PER_VF  8
      56                 :            : 
      57                 :            : #define TXGBE_5TUPLE_MAX_PRI            7
      58                 :            : #define TXGBE_5TUPLE_MIN_PRI            1
      59                 :            : 
      60                 :            : #define TXGBE_MAX_MTU                   9414
      61                 :            : /* The overhead from MTU to max frame size. */
      62                 :            : #define TXGBE_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN)
      63                 :            : 
      64                 :            : #define TXGBE_RSS_OFFLOAD_ALL ( \
      65                 :            :         RTE_ETH_RSS_IPV4 | \
      66                 :            :         RTE_ETH_RSS_NONFRAG_IPV4_TCP | \
      67                 :            :         RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
      68                 :            :         RTE_ETH_RSS_IPV6 | \
      69                 :            :         RTE_ETH_RSS_NONFRAG_IPV6_TCP | \
      70                 :            :         RTE_ETH_RSS_NONFRAG_IPV6_UDP | \
      71                 :            :         RTE_ETH_RSS_IPV6_EX | \
      72                 :            :         RTE_ETH_RSS_IPV6_TCP_EX | \
      73                 :            :         RTE_ETH_RSS_IPV6_UDP_EX)
      74                 :            : 
      75                 :            : #define TXGBE_MISC_VEC_ID               RTE_INTR_VEC_ZERO_OFFSET
      76                 :            : #define TXGBE_RX_VEC_START              RTE_INTR_VEC_RXTX_OFFSET
      77                 :            : 
      78                 :            : #define TXGBE_MAX_FDIR_FILTER_NUM       (1024 * 32)
      79                 :            : #define TXGBE_MAX_L2_TN_FILTER_NUM      128
      80                 :            : 
      81                 :            : /*
      82                 :            :  * Information about the fdir mode.
      83                 :            :  */
      84                 :            : struct txgbe_hw_fdir_mask {
      85                 :            :         uint16_t vlan_tci_mask;
      86                 :            :         uint32_t src_ipv4_mask;
      87                 :            :         uint32_t dst_ipv4_mask;
      88                 :            :         uint16_t src_ipv6_mask;
      89                 :            :         uint16_t dst_ipv6_mask;
      90                 :            :         uint16_t src_port_mask;
      91                 :            :         uint16_t dst_port_mask;
      92                 :            :         uint16_t flex_bytes_mask;
      93                 :            :         uint8_t  mac_addr_byte_mask;
      94                 :            :         uint32_t tunnel_id_mask;
      95                 :            :         uint8_t  tunnel_type_mask;
      96                 :            : };
      97                 :            : 
      98                 :            : struct txgbe_fdir_filter {
      99                 :            :         TAILQ_ENTRY(txgbe_fdir_filter) entries;
     100                 :            :         struct txgbe_atr_input input; /* key of fdir filter*/
     101                 :            :         uint32_t fdirflags; /* drop or forward */
     102                 :            :         uint32_t fdirhash; /* hash value for fdir */
     103                 :            :         uint8_t queue; /* assigned rx queue */
     104                 :            : };
     105                 :            : 
     106                 :            : /* list of fdir filters */
     107                 :            : TAILQ_HEAD(txgbe_fdir_filter_list, txgbe_fdir_filter);
     108                 :            : 
     109                 :            : struct txgbe_fdir_rule {
     110                 :            :         struct txgbe_hw_fdir_mask mask;
     111                 :            :         struct txgbe_atr_input input; /* key of fdir filter */
     112                 :            :         bool b_spec; /* If TRUE, input, fdirflags, queue have meaning. */
     113                 :            :         bool b_mask; /* If TRUE, mask has meaning. */
     114                 :            :         enum rte_fdir_mode mode; /* IP, MAC VLAN, Tunnel */
     115                 :            :         uint32_t fdirflags; /* drop or forward */
     116                 :            :         uint32_t soft_id; /* an unique value for this rule */
     117                 :            :         uint8_t queue; /* assigned rx queue */
     118                 :            :         uint8_t flex_bytes_offset;
     119                 :            : };
     120                 :            : 
     121                 :            : struct txgbe_hw_fdir_info {
     122                 :            :         struct txgbe_hw_fdir_mask mask;
     123                 :            :         uint8_t     flex_bytes_offset;
     124                 :            :         uint16_t    collision;
     125                 :            :         uint16_t    free;
     126                 :            :         uint16_t    maxhash;
     127                 :            :         uint8_t     maxlen;
     128                 :            :         uint64_t    add;
     129                 :            :         uint64_t    remove;
     130                 :            :         uint64_t    f_add;
     131                 :            :         uint64_t    f_remove;
     132                 :            :         struct txgbe_fdir_filter_list fdir_list; /* filter list*/
     133                 :            :         /* store the pointers of the filters, index is the hash value. */
     134                 :            :         struct txgbe_fdir_filter **hash_map;
     135                 :            :         struct rte_hash *hash_handle; /* cuckoo hash handler */
     136                 :            :         bool mask_added; /* If already got mask from consistent filter */
     137                 :            : };
     138                 :            : 
     139                 :            : struct txgbe_rte_flow_rss_conf {
     140                 :            :         struct rte_flow_action_rss conf; /**< RSS parameters. */
     141                 :            :         uint8_t key[TXGBE_HKEY_MAX_INDEX * sizeof(uint32_t)]; /* Hash key. */
     142                 :            :         uint16_t queue[TXGBE_MAX_RX_QUEUE_NUM]; /**< Queues indices to use. */
     143                 :            : };
     144                 :            : 
     145                 :            : /* structure for interrupt relative data */
     146                 :            : struct txgbe_interrupt {
     147                 :            :         uint32_t flags;
     148                 :            :         uint32_t mask_misc;
     149                 :            :         uint32_t mask_misc_orig; /* save mask during delayed handler */
     150                 :            :         uint64_t mask;
     151                 :            :         uint64_t mask_orig; /* save mask during delayed handler */
     152                 :            : };
     153                 :            : 
     154                 :            : #define TXGBE_NB_STAT_MAPPING  32
     155                 :            : #define QSM_REG_NB_BITS_PER_QMAP_FIELD 8
     156                 :            : #define NB_QMAP_FIELDS_PER_QSM_REG 4
     157                 :            : #define QMAP_FIELD_RESERVED_BITS_MASK 0x0f
     158                 :            : struct txgbe_stat_mappings {
     159                 :            :         uint32_t tqsm[TXGBE_NB_STAT_MAPPING];
     160                 :            :         uint32_t rqsm[TXGBE_NB_STAT_MAPPING];
     161                 :            : };
     162                 :            : 
     163                 :            : struct txgbe_vfta {
     164                 :            :         uint32_t vfta[TXGBE_VFTA_SIZE];
     165                 :            : };
     166                 :            : 
     167                 :            : struct txgbe_hwstrip {
     168                 :            :         uint32_t bitmap[TXGBE_HWSTRIP_BITMAP_SIZE];
     169                 :            : };
     170                 :            : 
     171                 :            : /*
     172                 :            :  * VF data which used by PF host only
     173                 :            :  */
     174                 :            : #define TXGBE_MAX_VF_MC_ENTRIES      30
     175                 :            : 
     176                 :            : struct txgbe_uta_info {
     177                 :            :         uint8_t  uc_filter_type;
     178                 :            :         uint16_t uta_in_use;
     179                 :            :         uint32_t uta_shadow[TXGBE_MAX_UTA];
     180                 :            : };
     181                 :            : 
     182                 :            : struct txgbe_vf_info {
     183                 :            :         uint8_t vf_mac_addresses[RTE_ETHER_ADDR_LEN];
     184                 :            :         uint16_t vf_mc_hashes[TXGBE_MAX_VF_MC_ENTRIES];
     185                 :            :         uint16_t num_vf_mc_hashes;
     186                 :            :         bool clear_to_send;
     187                 :            :         uint16_t tx_rate[TXGBE_MAX_QUEUE_NUM_PER_VF];
     188                 :            :         uint16_t vlan_count;
     189                 :            :         uint8_t api_version;
     190                 :            :         uint16_t switch_domain_id;
     191                 :            :         uint16_t xcast_mode;
     192                 :            :         uint16_t mac_count;
     193                 :            : };
     194                 :            : 
     195                 :            : TAILQ_HEAD(txgbe_5tuple_filter_list, txgbe_5tuple_filter);
     196                 :            : 
     197                 :            : struct txgbe_5tuple_filter_info {
     198                 :            :         uint32_t dst_ip;
     199                 :            :         uint32_t src_ip;
     200                 :            :         uint16_t dst_port;
     201                 :            :         uint16_t src_port;
     202                 :            :         enum txgbe_5tuple_protocol proto;        /* l4 protocol. */
     203                 :            :         uint8_t priority;        /* seven levels (001b-111b), 111b is highest,
     204                 :            :                                   * used when more than one filter matches.
     205                 :            :                                   */
     206                 :            :         uint8_t dst_ip_mask:1,   /* if mask is 1b, do not compare dst ip. */
     207                 :            :                 src_ip_mask:1,   /* if mask is 1b, do not compare src ip. */
     208                 :            :                 dst_port_mask:1, /* if mask is 1b, do not compare dst port. */
     209                 :            :                 src_port_mask:1, /* if mask is 1b, do not compare src port. */
     210                 :            :                 proto_mask:1;    /* if mask is 1b, do not compare protocol. */
     211                 :            : };
     212                 :            : 
     213                 :            : /* 5tuple filter structure */
     214                 :            : struct txgbe_5tuple_filter {
     215                 :            :         TAILQ_ENTRY(txgbe_5tuple_filter) entries;
     216                 :            :         uint16_t index;       /* the index of 5tuple filter */
     217                 :            :         struct txgbe_5tuple_filter_info filter_info;
     218                 :            :         uint16_t queue;       /* rx queue assigned to */
     219                 :            : };
     220                 :            : 
     221                 :            : #define TXGBE_5TUPLE_ARRAY_SIZE \
     222                 :            :         (RTE_ALIGN(TXGBE_MAX_FTQF_FILTERS, (sizeof(uint32_t) * NBBY)) / \
     223                 :            :          (sizeof(uint32_t) * NBBY))
     224                 :            : 
     225                 :            : struct txgbe_ethertype_filter {
     226                 :            :         uint16_t ethertype;
     227                 :            :         uint32_t etqf;
     228                 :            :         uint32_t etqs;
     229                 :            :         /**
     230                 :            :          * If this filter is added by configuration,
     231                 :            :          * it should not be removed.
     232                 :            :          */
     233                 :            :         bool     conf;
     234                 :            : };
     235                 :            : 
     236                 :            : /*
     237                 :            :  * Structure to store filters' info.
     238                 :            :  */
     239                 :            : struct txgbe_filter_info {
     240                 :            :         uint8_t ethertype_mask;  /* Bit mask for every used ethertype filter */
     241                 :            :         /* store used ethertype filters*/
     242                 :            :         struct txgbe_ethertype_filter ethertype_filters[TXGBE_ETF_ID_MAX];
     243                 :            :         /* Bit mask for every used 5tuple filter */
     244                 :            :         uint32_t fivetuple_mask[TXGBE_5TUPLE_ARRAY_SIZE];
     245                 :            :         struct txgbe_5tuple_filter_list fivetuple_list;
     246                 :            :         /* store the SYN filter info */
     247                 :            :         uint32_t syn_info;
     248                 :            :         /* store the rss filter info */
     249                 :            :         struct txgbe_rte_flow_rss_conf rss_info;
     250                 :            : };
     251                 :            : 
     252                 :            : struct txgbe_l2_tn_key {
     253                 :            :         enum rte_eth_tunnel_type          l2_tn_type;
     254                 :            :         uint32_t                          tn_id;
     255                 :            : };
     256                 :            : 
     257                 :            : struct txgbe_l2_tn_filter {
     258                 :            :         TAILQ_ENTRY(txgbe_l2_tn_filter)    entries;
     259                 :            :         struct txgbe_l2_tn_key             key;
     260                 :            :         uint32_t                           pool;
     261                 :            : };
     262                 :            : 
     263                 :            : TAILQ_HEAD(txgbe_l2_tn_filter_list, txgbe_l2_tn_filter);
     264                 :            : 
     265                 :            : struct txgbe_l2_tn_info {
     266                 :            :         struct txgbe_l2_tn_filter_list      l2_tn_list;
     267                 :            :         struct txgbe_l2_tn_filter         **hash_map;
     268                 :            :         struct rte_hash                    *hash_handle;
     269                 :            :         bool e_tag_en; /* e-tag enabled */
     270                 :            :         bool e_tag_fwd_en; /* e-tag based forwarding enabled */
     271                 :            :         uint16_t e_tag_ether_type; /* ether type for e-tag */
     272                 :            : };
     273                 :            : 
     274                 :            : struct rte_flow {
     275                 :            :         enum rte_filter_type filter_type;
     276                 :            :         void *rule;
     277                 :            : };
     278                 :            : 
     279                 :            : /* The configuration of bandwidth */
     280                 :            : struct txgbe_bw_conf {
     281                 :            :         uint8_t tc_num; /* Number of TCs. */
     282                 :            : };
     283                 :            : 
     284                 :            : /* Struct to store Traffic Manager shaper profile. */
     285                 :            : struct txgbe_tm_shaper_profile {
     286                 :            :         TAILQ_ENTRY(txgbe_tm_shaper_profile) node;
     287                 :            :         uint32_t shaper_profile_id;
     288                 :            :         uint32_t reference_count;
     289                 :            :         struct rte_tm_shaper_params profile;
     290                 :            : };
     291                 :            : 
     292                 :            : TAILQ_HEAD(txgbe_shaper_profile_list, txgbe_tm_shaper_profile);
     293                 :            : 
     294                 :            : /* node type of Traffic Manager */
     295                 :            : enum txgbe_tm_node_type {
     296                 :            :         TXGBE_TM_NODE_TYPE_PORT,
     297                 :            :         TXGBE_TM_NODE_TYPE_TC,
     298                 :            :         TXGBE_TM_NODE_TYPE_QUEUE,
     299                 :            :         TXGBE_TM_NODE_TYPE_MAX,
     300                 :            : };
     301                 :            : 
     302                 :            : /* Struct to store Traffic Manager node configuration. */
     303                 :            : struct txgbe_tm_node {
     304                 :            :         TAILQ_ENTRY(txgbe_tm_node) node;
     305                 :            :         uint32_t id;
     306                 :            :         uint32_t priority;
     307                 :            :         uint32_t weight;
     308                 :            :         uint32_t reference_count;
     309                 :            :         uint16_t no;
     310                 :            :         struct txgbe_tm_node *parent;
     311                 :            :         struct txgbe_tm_shaper_profile *shaper_profile;
     312                 :            :         struct rte_tm_node_params params;
     313                 :            : };
     314                 :            : 
     315                 :            : TAILQ_HEAD(txgbe_tm_node_list, txgbe_tm_node);
     316                 :            : 
     317                 :            : /* The configuration of Traffic Manager */
     318                 :            : struct txgbe_tm_conf {
     319                 :            :         struct txgbe_shaper_profile_list shaper_profile_list;
     320                 :            :         struct txgbe_tm_node *root; /* root node - port */
     321                 :            :         struct txgbe_tm_node_list tc_list; /* node list for all the TCs */
     322                 :            :         struct txgbe_tm_node_list queue_list; /* node list for all the queues */
     323                 :            :         /**
     324                 :            :          * The number of added TC nodes.
     325                 :            :          * It should be no more than the TC number of this port.
     326                 :            :          */
     327                 :            :         uint32_t nb_tc_node;
     328                 :            :         /**
     329                 :            :          * The number of added queue nodes.
     330                 :            :          * It should be no more than the queue number of this port.
     331                 :            :          */
     332                 :            :         uint32_t nb_queue_node;
     333                 :            :         /**
     334                 :            :          * This flag is used to check if APP can change the TM node
     335                 :            :          * configuration.
     336                 :            :          * When it's true, means the configuration is applied to HW,
     337                 :            :          * APP should not change the configuration.
     338                 :            :          * As we don't support on-the-fly configuration, when starting
     339                 :            :          * the port, APP should call the hierarchy_commit API to set this
     340                 :            :          * flag to true. When stopping the port, this flag should be set
     341                 :            :          * to false.
     342                 :            :          */
     343                 :            :         bool committed;
     344                 :            : };
     345                 :            : 
     346                 :            : /*
     347                 :            :  * Structure to store private data for each driver instance (for each port).
     348                 :            :  */
     349                 :            : struct txgbe_adapter {
     350                 :            :         struct txgbe_hw             hw;
     351                 :            :         struct txgbe_hw_stats       stats;
     352                 :            :         struct rte_eth_fdir_conf    fdir_conf;
     353                 :            :         struct txgbe_hw_fdir_info   fdir;
     354                 :            :         struct txgbe_interrupt      intr;
     355                 :            :         struct txgbe_stat_mappings  stat_mappings;
     356                 :            :         struct txgbe_vfta           shadow_vfta;
     357                 :            :         struct txgbe_hwstrip        hwstrip;
     358                 :            :         struct txgbe_dcb_config     dcb_config;
     359                 :            :         struct txgbe_vf_info        *vfdata;
     360                 :            :         struct txgbe_uta_info       uta_info;
     361                 :            :         struct txgbe_filter_info    filter;
     362                 :            :         struct txgbe_l2_tn_info     l2_tn;
     363                 :            :         struct txgbe_bw_conf        bw_conf;
     364                 :            : #ifdef RTE_LIB_SECURITY
     365                 :            :         struct txgbe_ipsec          ipsec;
     366                 :            : #endif
     367                 :            :         bool rx_bulk_alloc_allowed;
     368                 :            :         bool rx_vec_allowed;
     369                 :            :         struct rte_timecounter      systime_tc;
     370                 :            :         struct rte_timecounter      rx_tstamp_tc;
     371                 :            :         struct rte_timecounter      tx_tstamp_tc;
     372                 :            :         struct txgbe_tm_conf        tm_conf;
     373                 :            : 
     374                 :            :         /* For RSS reta table update */
     375                 :            :         uint8_t rss_reta_updated;
     376                 :            : 
     377                 :            :         RTE_ATOMIC(uint32_t) link_thread_running;
     378                 :            :         rte_thread_t link_thread_tid;
     379                 :            : };
     380                 :            : 
     381                 :            : #define TXGBE_DEV_ADAPTER(dev) \
     382                 :            :         ((struct txgbe_adapter *)(dev)->data->dev_private)
     383                 :            : 
     384                 :            : #define TXGBE_DEV_FDIR_CONF(dev)        (&TXGBE_DEV_ADAPTER(dev)->fdir_conf)
     385                 :            : 
     386                 :            : #define TXGBE_DEV_HW(dev) \
     387                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->hw)
     388                 :            : 
     389                 :            : #define TXGBE_DEV_STATS(dev) \
     390                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->stats)
     391                 :            : 
     392                 :            : #define TXGBE_DEV_INTR(dev) \
     393                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->intr)
     394                 :            : 
     395                 :            : #define TXGBE_DEV_FDIR(dev) \
     396                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->fdir)
     397                 :            : 
     398                 :            : #define TXGBE_DEV_STAT_MAPPINGS(dev) \
     399                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->stat_mappings)
     400                 :            : 
     401                 :            : #define TXGBE_DEV_VFTA(dev) \
     402                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->shadow_vfta)
     403                 :            : 
     404                 :            : #define TXGBE_DEV_HWSTRIP(dev) \
     405                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->hwstrip)
     406                 :            : 
     407                 :            : #define TXGBE_DEV_DCB_CONFIG(dev) \
     408                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->dcb_config)
     409                 :            : 
     410                 :            : #define TXGBE_DEV_VFDATA(dev) \
     411                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->vfdata)
     412                 :            : 
     413                 :            : #define TXGBE_DEV_MR_INFO(dev) \
     414                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->mr_data)
     415                 :            : 
     416                 :            : #define TXGBE_DEV_UTA_INFO(dev) \
     417                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->uta_info)
     418                 :            : 
     419                 :            : #define TXGBE_DEV_FILTER(dev) \
     420                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->filter)
     421                 :            : 
     422                 :            : #define TXGBE_DEV_L2_TN(dev) \
     423                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->l2_tn)
     424                 :            : 
     425                 :            : #define TXGBE_DEV_BW_CONF(dev) \
     426                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->bw_conf)
     427                 :            : 
     428                 :            : #define TXGBE_DEV_TM_CONF(dev) \
     429                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->tm_conf)
     430                 :            : 
     431                 :            : #define TXGBE_DEV_IPSEC(dev) \
     432                 :            :         (&((struct txgbe_adapter *)(dev)->data->dev_private)->ipsec)
     433                 :            : 
     434                 :            : /*
     435                 :            :  * RX/TX function prototypes
     436                 :            :  */
     437                 :            : void txgbe_dev_clear_queues(struct rte_eth_dev *dev);
     438                 :            : 
     439                 :            : void txgbe_dev_free_queues(struct rte_eth_dev *dev);
     440                 :            : 
     441                 :            : void txgbe_dev_rx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
     442                 :            : 
     443                 :            : void txgbe_dev_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
     444                 :            : 
     445                 :            : int  txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
     446                 :            :                 uint16_t nb_rx_desc, unsigned int socket_id,
     447                 :            :                 const struct rte_eth_rxconf *rx_conf,
     448                 :            :                 struct rte_mempool *mb_pool);
     449                 :            : 
     450                 :            : int  txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
     451                 :            :                 uint16_t nb_tx_desc, unsigned int socket_id,
     452                 :            :                 const struct rte_eth_txconf *tx_conf);
     453                 :            : 
     454                 :            : uint32_t txgbe_dev_rx_queue_count(void *rx_queue);
     455                 :            : 
     456                 :            : int txgbe_dev_rx_descriptor_status(void *rx_queue, uint16_t offset);
     457                 :            : int txgbe_dev_tx_descriptor_status(void *tx_queue, uint16_t offset);
     458                 :            : 
     459                 :            : int txgbe_dev_rx_init(struct rte_eth_dev *dev);
     460                 :            : 
     461                 :            : void txgbe_dev_tx_init(struct rte_eth_dev *dev);
     462                 :            : 
     463                 :            : int txgbe_dev_rxtx_start(struct rte_eth_dev *dev);
     464                 :            : 
     465                 :            : void txgbe_dev_save_rx_queue(struct txgbe_hw *hw, uint16_t rx_queue_id);
     466                 :            : void txgbe_dev_store_rx_queue(struct txgbe_hw *hw, uint16_t rx_queue_id);
     467                 :            : void txgbe_dev_save_tx_queue(struct txgbe_hw *hw, uint16_t tx_queue_id);
     468                 :            : void txgbe_dev_store_tx_queue(struct txgbe_hw *hw, uint16_t tx_queue_id);
     469                 :            : 
     470                 :            : int txgbe_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id);
     471                 :            : 
     472                 :            : int txgbe_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id);
     473                 :            : 
     474                 :            : int txgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id);
     475                 :            : 
     476                 :            : int txgbe_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id);
     477                 :            : 
     478                 :            : void txgbe_tx_queue_clear_error(void *param);
     479                 :            : 
     480                 :            : void txgbe_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
     481                 :            :         struct rte_eth_rxq_info *qinfo);
     482                 :            : 
     483                 :            : void txgbe_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
     484                 :            :         struct rte_eth_txq_info *qinfo);
     485                 :            : 
     486                 :            : int txgbevf_dev_rx_init(struct rte_eth_dev *dev);
     487                 :            : 
     488                 :            : void txgbevf_dev_tx_init(struct rte_eth_dev *dev);
     489                 :            : 
     490                 :            : void txgbevf_dev_rxtx_start(struct rte_eth_dev *dev);
     491                 :            : 
     492                 :            : uint16_t txgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
     493                 :            :                 uint16_t nb_pkts);
     494                 :            : 
     495                 :            : uint16_t txgbe_recv_pkts_bulk_alloc(void *rx_queue, struct rte_mbuf **rx_pkts,
     496                 :            :                                     uint16_t nb_pkts);
     497                 :            : 
     498                 :            : uint16_t txgbe_recv_pkts_lro_single_alloc(void *rx_queue,
     499                 :            :                 struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
     500                 :            : uint16_t txgbe_recv_pkts_lro_bulk_alloc(void *rx_queue,
     501                 :            :                 struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
     502                 :            : 
     503                 :            : uint16_t txgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
     504                 :            :                 uint16_t nb_pkts);
     505                 :            : 
     506                 :            : uint16_t txgbe_xmit_pkts_simple(void *tx_queue, struct rte_mbuf **tx_pkts,
     507                 :            :                 uint16_t nb_pkts);
     508                 :            : 
     509                 :            : uint16_t txgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
     510                 :            :                 uint16_t nb_pkts);
     511                 :            : 
     512                 :            : int txgbe_dev_rss_hash_update(struct rte_eth_dev *dev,
     513                 :            :                               struct rte_eth_rss_conf *rss_conf);
     514                 :            : 
     515                 :            : int txgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
     516                 :            :                                 struct rte_eth_rss_conf *rss_conf);
     517                 :            : 
     518                 :            : bool txgbe_rss_update_sp(enum txgbe_mac_type mac_type);
     519                 :            : 
     520                 :            : int txgbe_add_del_ntuple_filter(struct rte_eth_dev *dev,
     521                 :            :                         struct rte_eth_ntuple_filter *filter,
     522                 :            :                         bool add);
     523                 :            : int txgbe_add_del_ethertype_filter(struct rte_eth_dev *dev,
     524                 :            :                         struct rte_eth_ethertype_filter *filter,
     525                 :            :                         bool add);
     526                 :            : int txgbe_syn_filter_set(struct rte_eth_dev *dev,
     527                 :            :                         struct rte_eth_syn_filter *filter,
     528                 :            :                         bool add);
     529                 :            : 
     530                 :            : /**
     531                 :            :  * l2 tunnel configuration.
     532                 :            :  */
     533                 :            : struct txgbe_l2_tunnel_conf {
     534                 :            :         enum rte_eth_tunnel_type l2_tunnel_type;
     535                 :            :         uint16_t ether_type; /* ether type in l2 header */
     536                 :            :         uint32_t tunnel_id; /* port tag id for e-tag */
     537                 :            :         uint16_t vf_id; /* VF id for tag insertion */
     538                 :            :         uint32_t pool; /* destination pool for tag based forwarding */
     539                 :            : };
     540                 :            : 
     541                 :            : int
     542                 :            : txgbe_dev_l2_tunnel_filter_add(struct rte_eth_dev *dev,
     543                 :            :                                struct txgbe_l2_tunnel_conf *l2_tunnel,
     544                 :            :                                bool restore);
     545                 :            : int
     546                 :            : txgbe_dev_l2_tunnel_filter_del(struct rte_eth_dev *dev,
     547                 :            :                                struct txgbe_l2_tunnel_conf *l2_tunnel);
     548                 :            : void txgbe_filterlist_init(void);
     549                 :            : void txgbe_filterlist_flush(void);
     550                 :            : 
     551                 :            : void txgbe_set_ivar_map(struct txgbe_hw *hw, int8_t direction,
     552                 :            :                                uint8_t queue, uint8_t msix_vector);
     553                 :            : 
     554                 :            : /*
     555                 :            :  * Flow director function prototypes
     556                 :            :  */
     557                 :            : int txgbe_fdir_configure(struct rte_eth_dev *dev);
     558                 :            : int txgbe_fdir_set_input_mask(struct rte_eth_dev *dev);
     559                 :            : int txgbe_fdir_set_flexbytes_offset(struct rte_eth_dev *dev,
     560                 :            :                                     uint16_t offset);
     561                 :            : int txgbe_fdir_filter_program(struct rte_eth_dev *dev,
     562                 :            :                               struct txgbe_fdir_rule *rule,
     563                 :            :                               bool del, bool update);
     564                 :            : 
     565                 :            : void txgbe_configure_pb(struct rte_eth_dev *dev);
     566                 :            : void txgbe_configure_port(struct rte_eth_dev *dev);
     567                 :            : void txgbe_configure_dcb(struct rte_eth_dev *dev);
     568                 :            : 
     569                 :            : int
     570                 :            : txgbe_dev_link_update_share(struct rte_eth_dev *dev,
     571                 :            :                 int wait_to_complete);
     572                 :            : int
     573                 :            : txgbe_dev_wait_setup_link_complete(struct rte_eth_dev *dev,
     574                 :            :                 uint32_t timeout_ms);
     575                 :            : int txgbe_pf_host_init(struct rte_eth_dev *eth_dev);
     576                 :            : 
     577                 :            : void txgbe_pf_host_uninit(struct rte_eth_dev *eth_dev);
     578                 :            : 
     579                 :            : void txgbe_pf_mbx_process(struct rte_eth_dev *eth_dev);
     580                 :            : 
     581                 :            : int txgbe_pf_host_configure(struct rte_eth_dev *eth_dev);
     582                 :            : 
     583                 :            : uint32_t txgbe_convert_vm_rx_mask_to_val(uint16_t rx_mask, uint32_t orig_val);
     584                 :            : 
     585                 :            : void txgbe_fdir_filter_restore(struct rte_eth_dev *dev);
     586                 :            : int txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev);
     587                 :            : 
     588                 :            : extern const struct rte_flow_ops txgbe_flow_ops;
     589                 :            : 
     590                 :            : void txgbe_clear_all_ethertype_filter(struct rte_eth_dev *dev);
     591                 :            : void txgbe_clear_all_ntuple_filter(struct rte_eth_dev *dev);
     592                 :            : void txgbe_clear_syn_filter(struct rte_eth_dev *dev);
     593                 :            : int txgbe_clear_all_l2_tn_filter(struct rte_eth_dev *dev);
     594                 :            : 
     595                 :            : int txgbe_set_vf_rate_limit(struct rte_eth_dev *dev, uint16_t vf,
     596                 :            :                             uint16_t tx_rate, uint64_t q_msk);
     597                 :            : int txgbe_tm_ops_get(struct rte_eth_dev *dev, void *ops);
     598                 :            : void txgbe_tm_conf_init(struct rte_eth_dev *dev);
     599                 :            : void txgbe_tm_conf_uninit(struct rte_eth_dev *dev);
     600                 :            : int txgbe_set_queue_rate_limit(struct rte_eth_dev *dev, uint16_t queue_idx,
     601                 :            :                                uint32_t tx_rate);
     602                 :            : int txgbe_rss_conf_init(struct txgbe_rte_flow_rss_conf *out,
     603                 :            :                         const struct rte_flow_action_rss *in);
     604                 :            : int txgbe_action_rss_same(const struct rte_flow_action_rss *comp,
     605                 :            :                           const struct rte_flow_action_rss *with);
     606                 :            : int txgbe_config_rss_filter(struct rte_eth_dev *dev,
     607                 :            :                 struct txgbe_rte_flow_rss_conf *conf, bool add);
     608                 :            : 
     609                 :            : static inline int
     610                 :            : txgbe_ethertype_filter_lookup(struct txgbe_filter_info *filter_info,
     611                 :            :                               uint16_t ethertype)
     612                 :            : {
     613                 :            :         int i;
     614                 :            : 
     615         [ #  # ]:          0 :         for (i = 0; i < TXGBE_ETF_ID_MAX; i++) {
     616         [ #  # ]:          0 :                 if (filter_info->ethertype_filters[i].ethertype == ethertype &&
     617         [ #  # ]:          0 :                     (filter_info->ethertype_mask & (1 << i)))
     618                 :            :                         return i;
     619                 :            :         }
     620                 :            :         return -1;
     621                 :            : }
     622                 :            : 
     623                 :            : static inline int
     624                 :          0 : txgbe_ethertype_filter_insert(struct txgbe_filter_info *filter_info,
     625                 :            :                               struct txgbe_ethertype_filter *ethertype_filter)
     626                 :            : {
     627                 :            :         int i;
     628                 :            : 
     629         [ #  # ]:          0 :         for (i = 0; i < TXGBE_ETF_ID_MAX; i++) {
     630         [ #  # ]:          0 :                 if (filter_info->ethertype_mask & (1 << i))
     631                 :            :                         continue;
     632                 :            : 
     633                 :          0 :                 filter_info->ethertype_mask |= 1 << i;
     634                 :          0 :                 filter_info->ethertype_filters[i].ethertype =
     635                 :          0 :                                 ethertype_filter->ethertype;
     636                 :          0 :                 filter_info->ethertype_filters[i].etqf =
     637                 :          0 :                                 ethertype_filter->etqf;
     638                 :          0 :                 filter_info->ethertype_filters[i].etqs =
     639                 :          0 :                                 ethertype_filter->etqs;
     640                 :          0 :                 filter_info->ethertype_filters[i].conf =
     641                 :          0 :                                 ethertype_filter->conf;
     642                 :          0 :                 break;
     643                 :            :         }
     644         [ #  # ]:          0 :         return (i < TXGBE_ETF_ID_MAX ? i : -1);
     645                 :            : }
     646                 :            : 
     647                 :            : static inline int
     648                 :            : txgbe_ethertype_filter_remove(struct txgbe_filter_info *filter_info,
     649                 :            :                               uint8_t idx)
     650                 :            : {
     651         [ #  # ]:          0 :         if (idx >= TXGBE_ETF_ID_MAX)
     652                 :            :                 return -1;
     653                 :          0 :         filter_info->ethertype_mask &= ~(1 << idx);
     654                 :          0 :         filter_info->ethertype_filters[idx].ethertype = 0;
     655                 :          0 :         filter_info->ethertype_filters[idx].etqf = 0;
     656                 :          0 :         filter_info->ethertype_filters[idx].etqs = 0;
     657                 :            :         filter_info->ethertype_filters[idx].etqs = FALSE;
     658                 :            :         return idx;
     659                 :            : }
     660                 :            : 
     661                 :            : #ifdef RTE_LIB_SECURITY
     662                 :            : int txgbe_ipsec_ctx_create(struct rte_eth_dev *dev);
     663                 :            : #endif
     664                 :            : 
     665                 :            : /* High threshold controlling when to start sending XOFF frames. */
     666                 :            : #define TXGBE_FC_XOFF_HITH              128 /*KB*/
     667                 :            : /* Low threshold controlling when to start sending XON frames. */
     668                 :            : #define TXGBE_FC_XON_LOTH               64 /*KB*/
     669                 :            : 
     670                 :            : /* Timer value included in XOFF frames. */
     671                 :            : #define TXGBE_FC_PAUSE_TIME 0x680
     672                 :            : 
     673                 :            : #define TXGBE_LINK_DOWN_CHECK_TIMEOUT 4000 /* ms */
     674                 :            : #define TXGBE_LINK_UP_CHECK_TIMEOUT   1000 /* ms */
     675                 :            : #define TXGBE_VMDQ_NUM_UC_MAC         4096 /* Maximum nb. of UC MAC addr. */
     676                 :            : 
     677                 :            : /*
     678                 :            :  *  Default values for RX/TX configuration
     679                 :            :  */
     680                 :            : #define TXGBE_DEFAULT_RX_FREE_THRESH  32
     681                 :            : #define TXGBE_DEFAULT_RX_PTHRESH      8
     682                 :            : #define TXGBE_DEFAULT_RX_HTHRESH      8
     683                 :            : #define TXGBE_DEFAULT_RX_WTHRESH      0
     684                 :            : 
     685                 :            : #define TXGBE_DEFAULT_TX_FREE_THRESH  32
     686                 :            : #define TXGBE_DEFAULT_TX_PTHRESH      32
     687                 :            : #define TXGBE_DEFAULT_TX_HTHRESH      0
     688                 :            : #define TXGBE_DEFAULT_TX_WTHRESH      0
     689                 :            : 
     690                 :            : /* Additional timesync values. */
     691                 :            : #define NSEC_PER_SEC             1000000000L
     692                 :            : #define TXGBE_INCVAL_10GB        0xCCCCCC
     693                 :            : #define TXGBE_INCVAL_1GB         0x800000
     694                 :            : #define TXGBE_INCVAL_100         0xA00000
     695                 :            : #define TXGBE_INCVAL_10          0xC7F380
     696                 :            : #define TXGBE_INCVAL_FPGA        0x800000
     697                 :            : #define TXGBE_INCVAL_SHIFT_10GB  20
     698                 :            : #define TXGBE_INCVAL_SHIFT_1GB   18
     699                 :            : #define TXGBE_INCVAL_SHIFT_100   15
     700                 :            : #define TXGBE_INCVAL_SHIFT_10    12
     701                 :            : #define TXGBE_INCVAL_SHIFT_FPGA  17
     702                 :            : 
     703                 :            : #define TXGBE_CYCLECOUNTER_MASK   0xffffffffffffffffULL
     704                 :            : 
     705                 :            : /* store statistics names and its offset in stats structure */
     706                 :            : struct rte_txgbe_xstats_name_off {
     707                 :            :         char name[RTE_ETH_XSTATS_NAME_SIZE];
     708                 :            :         unsigned int offset;
     709                 :            : };
     710                 :            : 
     711                 :            : const uint32_t *txgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev,
     712                 :            :                                                size_t *no_of_elements);
     713                 :            : int txgbe_dev_set_mc_addr_list(struct rte_eth_dev *dev,
     714                 :            :                                       struct rte_ether_addr *mc_addr_set,
     715                 :            :                                       uint32_t nb_mc_addr);
     716                 :            : int txgbe_dev_rss_reta_update(struct rte_eth_dev *dev,
     717                 :            :                         struct rte_eth_rss_reta_entry64 *reta_conf,
     718                 :            :                         uint16_t reta_size);
     719                 :            : int txgbe_dev_rss_reta_query(struct rte_eth_dev *dev,
     720                 :            :                         struct rte_eth_rss_reta_entry64 *reta_conf,
     721                 :            :                         uint16_t reta_size);
     722                 :            : void txgbe_dev_setup_link_alarm_handler(void *param);
     723                 :            : void txgbe_read_stats_registers(struct txgbe_hw *hw,
     724                 :            :                            struct txgbe_hw_stats *hw_stats);
     725                 :            : 
     726                 :            : void txgbe_vlan_hw_filter_enable(struct rte_eth_dev *dev);
     727                 :            : void txgbe_vlan_hw_filter_disable(struct rte_eth_dev *dev);
     728                 :            : void txgbe_vlan_hw_strip_config(struct rte_eth_dev *dev);
     729                 :            : void txgbe_vlan_hw_strip_bitmap_set(struct rte_eth_dev *dev,
     730                 :            :                 uint16_t queue, bool on);
     731                 :            : void txgbe_config_vlan_strip_on_all_queues(struct rte_eth_dev *dev,
     732                 :            :                                                   int mask);
     733                 :            : 
     734                 :            : #endif /* _TXGBE_ETHDEV_H_ */

Generated by: LCOV version 1.14