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

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2015 Intel Corporation
       3                 :            :  */
       4                 :            : #ifndef _IGB_REGS_H_
       5                 :            : #define _IGB_REGS_H_
       6                 :            : 
       7                 :            : #include "e1000_ethdev.h"
       8                 :            : 
       9                 :            : struct reg_info {
      10                 :            :         uint32_t base_addr;
      11                 :            :         uint32_t count;
      12                 :            :         uint32_t stride;
      13                 :            :         const char *name;
      14                 :            : };
      15                 :            : 
      16                 :            : static const struct reg_info igb_regs_general[] = {
      17                 :            :         {E1000_CTRL, 1, 1, "E1000_CTRL"},
      18                 :            :         {E1000_STATUS, 1, 1, "E1000_STATUS"},
      19                 :            :         {E1000_CTRL_EXT, 1, 1, "E1000_CTRL_EXT"},
      20                 :            :         {E1000_MDIC, 1, 1, "E1000_MDIC"},
      21                 :            :         {E1000_SCTL, 1, 1, "E1000_SCTL"},
      22                 :            :         {E1000_CONNSW, 1, 1, "E1000_CONNSW"},
      23                 :            :         {E1000_VET, 1, 1, "E1000_VET"},
      24                 :            :         {E1000_LEDCTL, 1, 1, "E1000_LEDCTL"},
      25                 :            :         {E1000_PBA, 1, 1, "E1000_PBA"},
      26                 :            :         {E1000_PBS, 1, 1, "E1000_PBS"},
      27                 :            :         {E1000_FRTIMER, 1, 1, "E1000_FRTIMER"},
      28                 :            :         {E1000_TCPTIMER, 1, 1, "E1000_TCPTIMER"},
      29                 :            :         {0, 0, 0, ""}
      30                 :            : };
      31                 :            : 
      32                 :            : static const struct reg_info igb_regs_nvm[] = {
      33                 :            :         {E1000_EECD, 1, 1, "E1000_EECD"},
      34                 :            :         {0, 0, 0, ""}
      35                 :            : };
      36                 :            : 
      37                 :            : static const struct reg_info igb_regs_interrupt[] = {
      38                 :            :         {E1000_EICS, 1, 1, "E1000_EICS"},
      39                 :            :         {E1000_EIMS, 1, 1, "E1000_EIMS"},
      40                 :            :         {E1000_EIMC, 1, 1, "E1000_EIMC"},
      41                 :            :         {E1000_EIAC, 1, 1, "E1000_EIAC"},
      42                 :            :         {E1000_EIAM, 1, 1, "E1000_EIAM"},
      43                 :            :         {E1000_ICS, 1, 1, "E1000_ICS"},
      44                 :            :         {E1000_IMS, 1, 1, "E1000_IMS"},
      45                 :            :         {E1000_IMC, 1, 1, "E1000_IMC"},
      46                 :            :         {E1000_IAC, 1, 1, "E1000_IAC"},
      47                 :            :         {E1000_IAM,  1, 1, "E1000_IAM"},
      48                 :            :         {E1000_IMIRVP, 1, 1, "E1000_IMIRVP"},
      49                 :            :         {E1000_EITR(0), 10, 4, "E1000_EITR"},
      50                 :            :         {E1000_IMIR(0), 8, 4, "E1000_IMIR"},
      51                 :            :         {E1000_IMIREXT(0), 8, 4, "E1000_IMIREXT"},
      52                 :            :         {0, 0, 0, ""}
      53                 :            : };
      54                 :            : 
      55                 :            : static const struct reg_info igb_regs_fctl[] = {
      56                 :            :         {E1000_FCAL, 1, 1, "E1000_FCAL"},
      57                 :            :         {E1000_FCAH, 1, 1, "E1000_FCAH"},
      58                 :            :         {E1000_FCTTV, 1, 1, "E1000_FCTTV"},
      59                 :            :         {E1000_FCRTL, 1, 1, "E1000_FCRTL"},
      60                 :            :         {E1000_FCRTH, 1, 1, "E1000_FCRTH"},
      61                 :            :         {E1000_FCRTV, 1, 1, "E1000_FCRTV"},
      62                 :            :         {0, 0, 0, ""}
      63                 :            : };
      64                 :            : 
      65                 :            : static const struct reg_info igb_regs_rxdma[] = {
      66                 :            :         {E1000_RDBAL(0), 4, 0x100, "E1000_RDBAL"},
      67                 :            :         {E1000_RDBAH(0), 4, 0x100, "E1000_RDBAH"},
      68                 :            :         {E1000_RDLEN(0), 4, 0x100, "E1000_RDLEN"},
      69                 :            :         {E1000_RDH(0), 4, 0x100, "E1000_RDH"},
      70                 :            :         {E1000_RDT(0), 4, 0x100, "E1000_RDT"},
      71                 :            :         {E1000_RXCTL(0), 4, 0x100, "E1000_RXCTL"},
      72                 :            :         {E1000_SRRCTL(0), 4, 0x100, "E1000_SRRCTL"},
      73                 :            :         {E1000_DCA_RXCTRL(0), 4, 0x100, "E1000_DCA_RXCTRL"},
      74                 :            :         {0, 0, 0, ""}
      75                 :            : };
      76                 :            : 
      77                 :            : static const struct reg_info igb_regs_rx[] = {
      78                 :            :         {E1000_RCTL, 1, 1, "E1000_RCTL"},
      79                 :            :         {E1000_RXCSUM, 1, 1, "E1000_RXCSUM"},
      80                 :            :         {E1000_RLPML, 1, 1, "E1000_RLPML"},
      81                 :            :         {E1000_RFCTL, 1, 1, "E1000_RFCTL"},
      82                 :            :         {E1000_MRQC, 1, 1, "E1000_MRQC"},
      83                 :            :         {E1000_VT_CTL, 1, 1, "E1000_VT_CTL"},
      84                 :            :         {E1000_RAL(0), 16, 8, "E1000_RAL"},
      85                 :            :         {E1000_RAH(0), 16, 8, "E1000_RAH"},
      86                 :            :         {0, 0, 0, ""}
      87                 :            : };
      88                 :            : 
      89                 :            : static const struct reg_info igb_regs_tx[] = {
      90                 :            :         {E1000_TCTL, 1, 1, "E1000_TCTL"},
      91                 :            :         {E1000_TCTL_EXT, 1, 1, "E1000_TCTL_EXT"},
      92                 :            :         {E1000_TIPG, 1, 1, "E1000_TIPG"},
      93                 :            :         {E1000_DTXCTL, 1, 1, "E1000_DTXCTL"},
      94                 :            :         {E1000_TDBAL(0), 4, 0x100, "E1000_TDBAL"},
      95                 :            :         {E1000_TDBAH(0), 4, 0x100, "E1000_TDBAH"},
      96                 :            :         {E1000_TDLEN(0), 4, 0x100, "E1000_TDLEN"},
      97                 :            :         {E1000_TDH(0), 4, 0x100, "E1000_TDLEN"},
      98                 :            :         {E1000_TDT(0), 4, 0x100, "E1000_TDT"},
      99                 :            :         {E1000_TXDCTL(0), 4, 0x100, "E1000_TXDCTL"},
     100                 :            :         {E1000_TDWBAL(0), 4, 0x100, "E1000_TDWBAL"},
     101                 :            :         {E1000_TDWBAH(0), 4, 0x100, "E1000_TDWBAH"},
     102                 :            :         {E1000_DCA_TXCTRL(0), 4, 0x100, "E1000_DCA_TXCTRL"},
     103                 :            :         {E1000_TDFH, 1, 1, "E1000_TDFH"},
     104                 :            :         {E1000_TDFT, 1, 1, "E1000_TDFT"},
     105                 :            :         {E1000_TDFHS, 1, 1, "E1000_TDFHS"},
     106                 :            :         {E1000_TDFPC, 1, 1, "E1000_TDFPC"},
     107                 :            :         {0, 0, 0, ""}
     108                 :            : };
     109                 :            : 
     110                 :            : static const struct reg_info igb_regs_wakeup[] = {
     111                 :            :         {E1000_WUC, 1, 1, "E1000_WUC"},
     112                 :            :         {E1000_WUFC, 1, 1, "E1000_WUFC"},
     113                 :            :         {E1000_WUS, 1, 1, "E1000_WUS"},
     114                 :            :         {E1000_IPAV, 1, 1, "E1000_IPAV"},
     115                 :            :         {E1000_WUPL, 1, 1, "E1000_WUPL"},
     116                 :            :         {E1000_IP4AT_REG(0), 4, 8, "E1000_IP4AT_REG"},
     117                 :            :         {E1000_IP6AT_REG(0), 4, 4, "E1000_IP6AT_REG"},
     118                 :            :         {E1000_WUPM_REG(0), 4, 4, "E1000_WUPM_REG"},
     119                 :            :         {E1000_FFMT_REG(0), 4, 8, "E1000_FFMT_REG"},
     120                 :            :         {E1000_FFVT_REG(0), 4, 8, "E1000_FFVT_REG"},
     121                 :            :         {E1000_FFLT_REG(0), 4, 8, "E1000_FFLT_REG"},
     122                 :            :         {0, 0, 0, ""}
     123                 :            : };
     124                 :            : 
     125                 :            : static const struct reg_info igb_regs_mac[] = {
     126                 :            :         {E1000_PCS_CFG0, 1, 1, "E1000_PCS_CFG0"},
     127                 :            :         {E1000_PCS_LCTL, 1, 1, "E1000_PCS_LCTL"},
     128                 :            :         {E1000_PCS_LSTAT, 1, 1, "E1000_PCS_LSTAT"},
     129                 :            :         {E1000_PCS_ANADV, 1, 1, "E1000_PCS_ANADV"},
     130                 :            :         {E1000_PCS_LPAB, 1, 1, "E1000_PCS_LPAB"},
     131                 :            :         {E1000_PCS_NPTX, 1, 1, "E1000_PCS_NPTX"},
     132                 :            :         {E1000_PCS_LPABNP, 1, 1, "E1000_PCS_LPABNP"},
     133                 :            :         {0, 0, 0, ""}
     134                 :            : };
     135                 :            : 
     136                 :            : static const struct reg_info *igb_regs[] = {
     137                 :            :                                 igb_regs_general,
     138                 :            :                                 igb_regs_nvm,
     139                 :            :                                 igb_regs_interrupt,
     140                 :            :                                 igb_regs_fctl,
     141                 :            :                                 igb_regs_rxdma,
     142                 :            :                                 igb_regs_rx,
     143                 :            :                                 igb_regs_tx,
     144                 :            :                                 igb_regs_wakeup,
     145                 :            :                                 igb_regs_mac,
     146                 :            :                                 NULL};
     147                 :            : 
     148                 :            : /* FIXME: reading igb_regs_interrupt results side-effect which doesn't
     149                 :            :  * work with VFIO; re-install igb_regs_interrupt once issue is resolved.
     150                 :            :  */
     151                 :            : static const struct reg_info *igbvf_regs[] = {
     152                 :            :                                 igb_regs_general,
     153                 :            :                                 igb_regs_rxdma,
     154                 :            :                                 igb_regs_tx,
     155                 :            :                                 NULL};
     156                 :            : 
     157                 :            : static inline int
     158                 :            : igb_read_regs(struct e1000_hw *hw, const struct reg_info *reg,
     159                 :            :         uint32_t *reg_buf)
     160                 :            : {
     161                 :            :         unsigned int i;
     162                 :            : 
     163         [ #  # ]:          0 :         for (i = 0; i < reg->count; i++) {
     164                 :          0 :                 reg_buf[i] = E1000_READ_REG(hw,
     165                 :            :                                 reg->base_addr + i * reg->stride);
     166                 :            :         }
     167                 :          0 :         return reg->count;
     168                 :            : };
     169                 :            : 
     170                 :            : static inline int
     171                 :            : igb_reg_group_count(const struct reg_info *regs)
     172                 :            : {
     173                 :            :         int count = 0;
     174                 :            :         int i = 0;
     175                 :            : 
     176   [ #  #  #  #  :          0 :         while (regs[i].count)
             #  #  #  # ]
     177                 :          0 :                 count += regs[i++].count;
     178                 :            :         return count;
     179                 :            : };
     180                 :            : 
     181                 :            : static inline int
     182                 :          0 : igb_read_regs_group(struct rte_eth_dev *dev, uint32_t *reg_buf,
     183                 :            :                 const struct reg_info *regs)
     184                 :            : {
     185                 :            :         int count = 0;
     186                 :            :         int i = 0;
     187                 :          0 :         struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
     188                 :            : 
     189         [ #  # ]:          0 :         while (regs[i].count)
     190                 :          0 :                 count += igb_read_regs(hw, &regs[i++], &reg_buf[count]);
     191                 :          0 :         return count;
     192                 :            : };
     193                 :            : 
     194                 :            : #endif /* _IGB_REGS_H_ */

Generated by: LCOV version 1.14