LCOV - code coverage report
Current view: top level - drivers/bus/dpaa/base/fman - netcfg_layer.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 42 0.0 %
Date: 2024-01-22 16:26:08 Functions: 0 2 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 20 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
       2                 :            :  *
       3                 :            :  * Copyright 2010-2016 Freescale Semiconductor Inc.
       4                 :            :  * Copyright 2017-2019 NXP
       5                 :            :  *
       6                 :            :  */
       7                 :            : #include <inttypes.h>
       8                 :            : #include <dpaa_of.h>
       9                 :            : #include <net/if.h>
      10                 :            : #include <sys/ioctl.h>
      11                 :            : #include <err.h>
      12                 :            : #include <net/if_arp.h>
      13                 :            : #include <assert.h>
      14                 :            : #include <unistd.h>
      15                 :            : 
      16                 :            : #include <rte_malloc.h>
      17                 :            : 
      18                 :            : #include <rte_dpaa_logs.h>
      19                 :            : #include <netcfg.h>
      20                 :            : 
      21                 :            : /* This data structure contaings all configurations information
      22                 :            :  * related to usages of DPA devices.
      23                 :            :  */
      24                 :            : static struct netcfg_info *netcfg;
      25                 :            : /* fd to open a socket for making ioctl request to disable/enable shared
      26                 :            :  *  interfaces.
      27                 :            :  */
      28                 :            : static int skfd = -1;
      29                 :            : 
      30                 :            : #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
      31                 :            : void
      32                 :            : dump_netcfg(struct netcfg_info *cfg_ptr)
      33                 :            : {
      34                 :            :         int i;
      35                 :            : 
      36                 :            :         printf("..........  DPAA Configuration  ..........\n\n");
      37                 :            : 
      38                 :            :         /* Network interfaces */
      39                 :            :         printf("Network interfaces: %d\n", cfg_ptr->num_ethports);
      40                 :            :         for (i = 0; i < cfg_ptr->num_ethports; i++) {
      41                 :            :                 struct fman_if_bpool *bpool;
      42                 :            :                 struct fm_eth_port_cfg *p_cfg = &cfg_ptr->port_cfg[i];
      43                 :            :                 struct fman_if *__if = p_cfg->fman_if;
      44                 :            : 
      45                 :            :                 printf("\n+ Fman %d, MAC %d (%s);\n",
      46                 :            :                        __if->fman_idx, __if->mac_idx,
      47                 :            :                        (__if->mac_type == fman_mac_1g) ? "1G" :
      48                 :            :                        (__if->mac_type == fman_mac_2_5g) ? "2.5G" : "10G");
      49                 :            : 
      50                 :            :                 printf("\tmac_addr: " RTE_ETHER_ADDR_PRT_FMT "\n",
      51                 :            :                        RTE_ETHER_ADDR_BYTES(&__if->mac_addr));
      52                 :            : 
      53                 :            :                 printf("\ttx_channel_id: 0x%02x\n",
      54                 :            :                        __if->tx_channel_id);
      55                 :            : 
      56                 :            :                 printf("\tfqid_rx_def: 0x%x\n", p_cfg->rx_def);
      57                 :            :                 printf("\tfqid_rx_err: 0x%x\n", __if->fqid_rx_err);
      58                 :            : 
      59                 :            :                 printf("\tfqid_tx_err: 0x%x\n", __if->fqid_tx_err);
      60                 :            :                 printf("\tfqid_tx_confirm: 0x%x\n", __if->fqid_tx_confirm);
      61                 :            :                 fman_if_for_each_bpool(bpool, __if)
      62                 :            :                         printf("\tbuffer pool: (bpid=%d, count=%"PRId64
      63                 :            :                                " size=%"PRId64", addr=0x%"PRIx64")\n",
      64                 :            :                                bpool->bpid, bpool->count, bpool->size,
      65                 :            :                                bpool->addr);
      66                 :            :         }
      67                 :            : }
      68                 :            : #endif /* RTE_LIBRTE_DPAA_DEBUG_DRIVER */
      69                 :            : 
      70                 :            : struct netcfg_info *
      71                 :          0 : netcfg_acquire(void)
      72                 :            : {
      73                 :            :         struct fman_if *__if;
      74                 :            :         int _errno, idx = 0;
      75                 :            :         uint8_t num_ports = 0;
      76                 :            :         uint8_t num_cfg_ports = 0;
      77                 :            :         size_t size;
      78                 :            : 
      79                 :            :         /* Extract dpa configuration from fman driver and FMC configuration
      80                 :            :          * for command-line interfaces.
      81                 :            :          */
      82                 :            : 
      83                 :            :         /* Open a basic socket to enable/disable shared
      84                 :            :          * interfaces.
      85                 :            :          */
      86                 :          0 :         skfd = socket(AF_PACKET, SOCK_RAW, 0);
      87         [ #  # ]:          0 :         if (unlikely(skfd < 0)) {
      88                 :          0 :                 err(0, "%s(): open(SOCK_RAW)", __func__);
      89                 :            :                 return NULL;
      90                 :            :         }
      91                 :            : 
      92                 :            :         /* Initialise the Fman driver */
      93                 :          0 :         _errno = fman_init();
      94         [ #  # ]:          0 :         if (_errno) {
      95                 :          0 :                 DPAA_BUS_LOG(ERR, "FMAN driver init failed (%d)", errno);
      96                 :          0 :                 close(skfd);
      97                 :          0 :                 skfd = -1;
      98                 :          0 :                 return NULL;
      99                 :            :         }
     100                 :            : 
     101                 :            :         /* Number of MAC ports */
     102         [ #  # ]:          0 :         list_for_each_entry(__if, fman_if_list, node)
     103                 :          0 :                 num_ports++;
     104                 :            : 
     105         [ #  # ]:          0 :         if (!num_ports) {
     106                 :          0 :                 DPAA_BUS_LOG(ERR, "FMAN ports not available");
     107                 :          0 :                 return NULL;
     108                 :            :         }
     109                 :            :         /* Allocate space for all enabled mac ports */
     110                 :          0 :         size = sizeof(*netcfg) +
     111                 :          0 :                 (num_ports * sizeof(struct fm_eth_port_cfg));
     112                 :            : 
     113                 :          0 :         netcfg = rte_calloc(NULL, 1, size, 0);
     114         [ #  # ]:          0 :         if (unlikely(netcfg == NULL)) {
     115                 :          0 :                 DPAA_BUS_LOG(ERR, "Unable to allocat mem for netcfg");
     116                 :          0 :                 goto error;
     117                 :            :         }
     118                 :            : 
     119                 :          0 :         netcfg->num_ethports = num_ports;
     120                 :            : 
     121         [ #  # ]:          0 :         list_for_each_entry(__if, fman_if_list, node) {
     122                 :            :                 struct fm_eth_port_cfg *cfg = &netcfg->port_cfg[idx];
     123                 :            :                 /* Hook in the fman driver interface */
     124                 :          0 :                 cfg->fman_if = __if;
     125                 :          0 :                 cfg->rx_def = __if->fqid_rx_def;
     126                 :          0 :                 num_cfg_ports++;
     127                 :          0 :                 idx++;
     128                 :            :         }
     129                 :            : 
     130         [ #  # ]:          0 :         if (!num_cfg_ports) {
     131                 :          0 :                 DPAA_BUS_LOG(ERR, "No FMAN ports found");
     132                 :          0 :                 goto error;
     133         [ #  # ]:          0 :         } else if (num_ports != num_cfg_ports)
     134                 :          0 :                 netcfg->num_ethports = num_cfg_ports;
     135                 :            : 
     136                 :            :         return netcfg;
     137                 :            : 
     138                 :          0 : error:
     139         [ #  # ]:          0 :         if (netcfg) {
     140                 :          0 :                 rte_free(netcfg);
     141                 :          0 :                 netcfg = NULL;
     142                 :            :         }
     143                 :            : 
     144                 :            :         return NULL;
     145                 :            : }
     146                 :            : 
     147                 :            : void
     148                 :          0 : netcfg_release(struct netcfg_info *cfg_ptr)
     149                 :            : {
     150                 :          0 :         rte_free(cfg_ptr);
     151                 :            :         /* Close socket for shared interfaces */
     152         [ #  # ]:          0 :         if (skfd >= 0) {
     153                 :          0 :                 close(skfd);
     154                 :          0 :                 skfd = -1;
     155                 :            :         }
     156                 :          0 : }

Generated by: LCOV version 1.14