LCOV - code coverage report
Current view: top level - drivers/net/thunderx/base - nicvf_hw.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 9 0.0 %
Date: 2025-01-02 22:41:34 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 58 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2016 Cavium, Inc
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef _THUNDERX_NICVF_HW_H
       6                 :            : #define _THUNDERX_NICVF_HW_H
       7                 :            : 
       8                 :            : #include <stdint.h>
       9                 :            : 
      10                 :            : #include "nicvf_hw_defs.h"
      11                 :            : 
      12                 :            : #define PCI_VENDOR_ID_CAVIUM                            0x177D
      13                 :            : #define PCI_DEVICE_ID_THUNDERX_CN88XX_PASS1_NICVF       0x0011
      14                 :            : #define PCI_DEVICE_ID_THUNDERX_NICVF                    0xA034
      15                 :            : #define PCI_SUB_DEVICE_ID_CN88XX_PASS1_NICVF            0xA11E
      16                 :            : #define PCI_SUB_DEVICE_ID_CN88XX_PASS2_NICVF            0xA134
      17                 :            : #define PCI_SUB_DEVICE_ID_CN81XX_NICVF                  0xA234
      18                 :            : #define PCI_SUB_DEVICE_ID_CN83XX_NICVF                  0xA334
      19                 :            : 
      20                 :            : #define NICVF_ARRAY_SIZE(arr) RTE_DIM(arr)
      21                 :            : 
      22                 :            : #define NICVF_GET_RX_STATS(reg) \
      23                 :            :         nicvf_reg_read(nic, NIC_VNIC_RX_STAT_0_13 | (reg << 3))
      24                 :            : #define NICVF_GET_TX_STATS(reg) \
      25                 :            :         nicvf_reg_read(nic, NIC_VNIC_TX_STAT_0_4 | (reg << 3))
      26                 :            : 
      27                 :            : #define NICVF_CAP_TUNNEL_PARSING        (1ULL << 0)
      28                 :            : /* Additional word in Rx descriptor to hold optional tunneling extension info */
      29                 :            : #define NICVF_CAP_CQE_RX2               (1ULL << 1)
      30                 :            : /* The device capable of setting NIC_CQE_RX_S[APAD] == 0 */
      31                 :            : #define NICVF_CAP_DISABLE_APAD          (1ULL << 2)
      32                 :            : 
      33                 :            : enum nicvf_tns_mode {
      34                 :            :         NIC_TNS_BYPASS_MODE,
      35                 :            :         NIC_TNS_MODE,
      36                 :            : };
      37                 :            : 
      38                 :            : enum nicvf_err_e {
      39                 :            :         NICVF_OK,
      40                 :            :         NICVF_ERR_SET_QS = -8191,/* -8191 */
      41                 :            :         NICVF_ERR_RESET_QS,      /* -8190 */
      42                 :            :         NICVF_ERR_REG_POLL,      /* -8189 */
      43                 :            :         NICVF_ERR_RBDR_RESET,    /* -8188 */
      44                 :            :         NICVF_ERR_RBDR_DISABLE,  /* -8187 */
      45                 :            :         NICVF_ERR_RBDR_PREFETCH, /* -8186 */
      46                 :            :         NICVF_ERR_RBDR_RESET1,   /* -8185 */
      47                 :            :         NICVF_ERR_RBDR_RESET2,   /* -8184 */
      48                 :            :         NICVF_ERR_RQ_CLAIM,      /* -8183 */
      49                 :            :         NICVF_ERR_RQ_PF_CFG,     /* -8182 */
      50                 :            :         NICVF_ERR_RQ_BP_CFG,     /* -8181 */
      51                 :            :         NICVF_ERR_RQ_DROP_CFG,   /* -8180 */
      52                 :            :         NICVF_ERR_CQ_DISABLE,    /* -8179 */
      53                 :            :         NICVF_ERR_CQ_RESET,      /* -8178 */
      54                 :            :         NICVF_ERR_SQ_DISABLE,    /* -8177 */
      55                 :            :         NICVF_ERR_SQ_RESET,      /* -8176 */
      56                 :            :         NICVF_ERR_SQ_PF_CFG,     /* -8175 */
      57                 :            :         NICVF_ERR_LOOPBACK_CFG,  /* -8174 */
      58                 :            :         NICVF_ERR_BASE_INIT,     /* -8173 */
      59                 :            :         NICVF_ERR_RSS_TBL_UPDATE,/* -8172 */
      60                 :            :         NICVF_ERR_RSS_GET_SZ,    /* -8171 */
      61                 :            : };
      62                 :            : 
      63                 :            : typedef nicvf_iova_addr_t (*rbdr_pool_get_handler)(void *dev, void *opaque);
      64                 :            : 
      65                 :            : struct nicvf_hw_rx_qstats {
      66                 :            :         uint64_t q_rx_bytes;
      67                 :            :         uint64_t q_rx_packets;
      68                 :            : };
      69                 :            : 
      70                 :            : struct nicvf_hw_tx_qstats {
      71                 :            :         uint64_t q_tx_bytes;
      72                 :            :         uint64_t q_tx_packets;
      73                 :            : };
      74                 :            : 
      75                 :            : struct nicvf_hw_stats {
      76                 :            :         uint64_t rx_bytes;
      77                 :            :         uint64_t rx_ucast_frames;
      78                 :            :         uint64_t rx_bcast_frames;
      79                 :            :         uint64_t rx_mcast_frames;
      80                 :            :         uint64_t rx_fcs_errors;
      81                 :            :         uint64_t rx_l2_errors;
      82                 :            :         uint64_t rx_drop_red;
      83                 :            :         uint64_t rx_drop_red_bytes;
      84                 :            :         uint64_t rx_drop_overrun;
      85                 :            :         uint64_t rx_drop_overrun_bytes;
      86                 :            :         uint64_t rx_drop_bcast;
      87                 :            :         uint64_t rx_drop_mcast;
      88                 :            :         uint64_t rx_drop_l3_bcast;
      89                 :            :         uint64_t rx_drop_l3_mcast;
      90                 :            : 
      91                 :            :         uint64_t tx_bytes_ok;
      92                 :            :         uint64_t tx_ucast_frames_ok;
      93                 :            :         uint64_t tx_bcast_frames_ok;
      94                 :            :         uint64_t tx_mcast_frames_ok;
      95                 :            :         uint64_t tx_drops;
      96                 :            : };
      97                 :            : 
      98                 :            : struct nicvf_rss_reta_info {
      99                 :            :         uint8_t hash_bits;
     100                 :            :         uint16_t rss_size;
     101                 :            :         uint8_t ind_tbl[NIC_MAX_RSS_IDR_TBL_SIZE];
     102                 :            : };
     103                 :            : 
     104                 :            : /* Common structs used in DPDK and base layer are defined in DPDK layer */
     105                 :            : #include "../nicvf_struct.h"
     106                 :            : 
     107                 :            : NICVF_STATIC_ASSERT(sizeof(struct nicvf_rbdr) <= 128);
     108                 :            : NICVF_STATIC_ASSERT(sizeof(struct nicvf_txq) <= 128);
     109                 :            : NICVF_STATIC_ASSERT(sizeof(struct nicvf_rxq) <= 128);
     110                 :            : 
     111                 :            : static inline void
     112                 :            : nicvf_reg_write(struct nicvf *nic, uint32_t offset, uint64_t val)
     113                 :            : {
     114         [ #  # ]:          0 :         nicvf_addr_write(nic->reg_base + offset, val);
     115                 :          0 : }
     116                 :            : 
     117                 :            : static inline uint64_t
     118                 :            : nicvf_reg_read(struct nicvf *nic, uint32_t offset)
     119                 :            : {
     120   [ #  #  #  #  :          0 :         return nicvf_addr_read(nic->reg_base + offset);
             #  #  #  # ]
     121                 :            : }
     122                 :            : 
     123                 :            : static inline uintptr_t
     124                 :            : nicvf_qset_base(struct nicvf *nic, uint32_t qidx)
     125                 :            : {
     126   [ #  #  #  # ]:          0 :         return nic->reg_base + (qidx << NIC_Q_NUM_SHIFT);
     127                 :            : }
     128                 :            : 
     129                 :            : static inline void
     130                 :            : nicvf_queue_reg_write(struct nicvf *nic, uint32_t offset, uint32_t qidx,
     131                 :            :                       uint64_t val)
     132                 :            : {
     133   [ #  #  #  #  :          0 :         nicvf_addr_write(nicvf_qset_base(nic, qidx) + offset, val);
                   #  # ]
     134                 :          0 : }
     135                 :            : 
     136                 :            : static inline uint64_t
     137                 :            : nicvf_queue_reg_read(struct nicvf *nic, uint32_t offset, uint32_t qidx)
     138                 :            : {
     139   [ #  #  #  #  :          0 :         return  nicvf_addr_read(nicvf_qset_base(nic, qidx) + offset);
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     140                 :            : }
     141                 :            : 
     142                 :            : static inline void
     143                 :            : nicvf_disable_all_interrupts(struct nicvf *nic)
     144                 :            : {
     145                 :            :         nicvf_reg_write(nic, NIC_VF_ENA_W1C, NICVF_INTR_ALL_MASK);
     146                 :            :         nicvf_reg_write(nic, NIC_VF_INT, NICVF_INTR_ALL_MASK);
     147                 :            : }
     148                 :            : 
     149                 :            : static inline uint32_t
     150                 :            : nicvf_hw_version(struct nicvf *nic)
     151                 :            : {
     152         [ #  # ]:          0 :         return nic->subsystem_device_id;
     153                 :            : }
     154                 :            : 
     155                 :            : static inline uint64_t
     156                 :            : nicvf_hw_cap(struct nicvf *nic)
     157                 :            : {
     158   [ #  #  #  #  :          0 :         return nic->hwcap;
          #  #  #  #  #  
                      # ]
     159                 :            : }
     160                 :            : 
     161                 :            : int nicvf_base_init(struct nicvf *nic);
     162                 :            : 
     163                 :            : int nicvf_reg_get_count(void);
     164                 :            : int nicvf_reg_poll_interrupts(struct nicvf *nic);
     165                 :            : int nicvf_reg_dump(struct nicvf *nic, uint64_t *data);
     166                 :            : 
     167                 :            : int nicvf_qset_config(struct nicvf *nic);
     168                 :            : int nicvf_qset_reclaim(struct nicvf *nic);
     169                 :            : 
     170                 :            : int nicvf_qset_rbdr_config(struct nicvf *nic, uint16_t qidx);
     171                 :            : int nicvf_qset_rbdr_reclaim(struct nicvf *nic, uint16_t qidx);
     172                 :            : int nicvf_qset_rbdr_precharge(void *dev, struct nicvf *nic,
     173                 :            :                               uint16_t ridx, rbdr_pool_get_handler handler,
     174                 :            :                               uint32_t max_buffs);
     175                 :            : int nicvf_qset_rbdr_active(struct nicvf *nic, uint16_t qidx);
     176                 :            : 
     177                 :            : int nicvf_qset_rq_config(struct nicvf *nic, uint16_t qidx,
     178                 :            :                          struct nicvf_rxq *rxq);
     179                 :            : int nicvf_qset_rq_reclaim(struct nicvf *nic, uint16_t qidx);
     180                 :            : 
     181                 :            : int nicvf_qset_cq_config(struct nicvf *nic, uint16_t qidx,
     182                 :            :                          struct nicvf_rxq *rxq);
     183                 :            : int nicvf_qset_cq_reclaim(struct nicvf *nic, uint16_t qidx);
     184                 :            : 
     185                 :            : int nicvf_qset_sq_config(struct nicvf *nic, uint16_t qidx,
     186                 :            :                          struct nicvf_txq *txq);
     187                 :            : int nicvf_qset_sq_reclaim(struct nicvf *nic, uint16_t qidx);
     188                 :            : 
     189                 :            : uint32_t nicvf_qsize_rbdr_roundup(uint32_t val);
     190                 :            : uint32_t nicvf_qsize_cq_roundup(uint32_t val);
     191                 :            : uint32_t nicvf_qsize_sq_roundup(uint32_t val);
     192                 :            : 
     193                 :            : void nicvf_vlan_hw_strip(struct nicvf *nic, bool enable);
     194                 :            : 
     195                 :            : void nicvf_apad_config(struct nicvf *nic, bool enable);
     196                 :            : void nicvf_first_skip_config(struct nicvf *nic, uint8_t dwords);
     197                 :            : 
     198                 :            : int nicvf_rss_config(struct nicvf *nic, uint32_t  qcnt, uint64_t cfg);
     199                 :            : int nicvf_rss_term(struct nicvf *nic);
     200                 :            : 
     201                 :            : int nicvf_rss_reta_update(struct nicvf *nic, uint8_t *tbl, uint32_t max_count);
     202                 :            : int nicvf_rss_reta_query(struct nicvf *nic, uint8_t *tbl, uint32_t max_count);
     203                 :            : 
     204                 :            : void nicvf_rss_set_key(struct nicvf *nic, uint8_t *key);
     205                 :            : void nicvf_rss_get_key(struct nicvf *nic, uint8_t *key);
     206                 :            : 
     207                 :            : void nicvf_rss_set_cfg(struct nicvf *nic, uint64_t val);
     208                 :            : uint64_t nicvf_rss_get_cfg(struct nicvf *nic);
     209                 :            : 
     210                 :            : int nicvf_loopback_config(struct nicvf *nic, bool enable);
     211                 :            : 
     212                 :            : void nicvf_hw_get_stats(struct nicvf *nic, struct nicvf_hw_stats *stats);
     213                 :            : void nicvf_hw_get_rx_qstats(struct nicvf *nic,
     214                 :            :                             struct nicvf_hw_rx_qstats *qstats, uint16_t qidx);
     215                 :            : void nicvf_hw_get_tx_qstats(struct nicvf *nic,
     216                 :            :                             struct nicvf_hw_tx_qstats *qstats, uint16_t qidx);
     217                 :            : 
     218                 :            : #endif /* _THUNDERX_NICVF_HW_H */

Generated by: LCOV version 1.14