LCOV - code coverage report
Current view: top level - plugins/avf - elog.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 66 0.0 %
Date: 2023-07-05 22:20:52 Functions: 0 5 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: Apache-2.0
       2             :  * Copyright(c) 2021 Cisco Systems, Inc.
       3             :  */
       4             : 
       5             : #include <vlib/vlib.h>
       6             : #include <vlib/unix/unix.h>
       7             : #include <vlib/pci/pci.h>
       8             : #include <vnet/ethernet/ethernet.h>
       9             : 
      10             : #include <avf/avf.h>
      11             : 
      12             : static uword *register_name_by_addr = 0;
      13             : 
      14             : void
      15           0 : avf_elog_aq_enq_req (avf_device_t *ad, avf_aq_desc_t *d)
      16             : {
      17           0 :   if (d->opcode == 0x801) /* send_to_pf */
      18             :     {
      19             :       ELOG_TYPE_DECLARE (el) = {
      20             :         .format = "avf[%d] aq_enq_req: send_to_pf flags 0x%x datalen %d "
      21             :           "v_opcode %s (%d)",
      22             :         .format_args = "i4i2i2t2i2",
      23             :         .n_enum_strings = VIRTCHNL_N_OPS,
      24             :         .enum_strings = {
      25             : #define _(v, n) [v] = #n,
      26             :               foreach_virtchnl_op
      27             : #undef _
      28             :           },
      29             :       };
      30             : 
      31             :       struct
      32             :       {
      33             :         u32 dev_instance;
      34             :         u16 flags;
      35             :         u16 datalen;
      36             :         u16 v_opcode;
      37             :         u16 v_opcode_val;
      38             :       } * ed;
      39             : 
      40           0 :       ed = ELOG_DATA (&vlib_global_main.elog_main, el);
      41           0 :       ed->dev_instance = ad->dev_instance;
      42           0 :       ed->flags = d->flags;
      43           0 :       ed->datalen = d->datalen;
      44           0 :       ed->v_opcode = ed->v_opcode_val = d->v_opcode;
      45             :     }
      46             :   else
      47             :     {
      48             :       ELOG_TYPE_DECLARE (el) = {
      49             :         .format = "avf[%d] aq_enq_req: opcode 0x%x flags 0x%x datalen %d",
      50             :         .format_args = "i4i2i2i2"
      51             :       };
      52             : 
      53             :       struct
      54             :       {
      55             :         u32 dev_instance;
      56             :         u16 opcode;
      57             :         u16 flags;
      58             :         u16 datalen;
      59             :       } * ed;
      60             : 
      61           0 :       ed = ELOG_DATA (&vlib_global_main.elog_main, el);
      62           0 :       ed->dev_instance = ad->dev_instance;
      63           0 :       ed->opcode = d->opcode;
      64           0 :       ed->flags = d->flags;
      65           0 :       ed->datalen = d->datalen;
      66             :     }
      67           0 : }
      68             : 
      69             : void
      70           0 : avf_elog_aq_enq_resp (avf_device_t *ad, avf_aq_desc_t *d)
      71             : {
      72             :   ELOG_TYPE_DECLARE (el) = { .format =
      73             :                                "avf[%d] aq_enq_resp: flags 0x%x retval %d",
      74             :                              .format_args = "i4i2i2" };
      75             : 
      76             :   struct
      77             :   {
      78             :     u32 dev_instance;
      79             :     u16 flags;
      80             :     u16 retval;
      81             :   } * ed;
      82             : 
      83           0 :   ed = ELOG_DATA (&vlib_global_main.elog_main, el);
      84           0 :   ed->dev_instance = ad->dev_instance;
      85           0 :   ed->flags = d->flags;
      86           0 :   ed->retval = d->retval;
      87           0 : }
      88             : 
      89             : void
      90           0 : avf_elog_arq_desc (avf_device_t *ad, avf_aq_desc_t *d)
      91             : {
      92           0 :   if (d->opcode == 0x802)
      93             :     {
      94             :       ELOG_TYPE_DECLARE (el) = {
      95             :         .format = "avf[%d] arq_desc: msg_from_pf flags 0x%x retval %d "
      96             :           "v_opcode %s (%d) v_retval %d",
      97             :         .format_args = "i4i2i2t2i2i2",
      98             :         .n_enum_strings = VIRTCHNL_N_OPS,
      99             :         .enum_strings = {
     100             : #define _(v, n) [v] = #n,
     101             :               foreach_virtchnl_op
     102             : #undef _
     103             :           },
     104             :       };
     105             : 
     106             :       struct
     107             :       {
     108             :         u32 dev_instance;
     109             :         u16 flags;
     110             :         u16 retval;
     111             :         u16 v_opcode;
     112             :         u16 v_opcode_val;
     113             :         u16 v_retval;
     114             :       } * ed;
     115             : 
     116           0 :       ed = ELOG_DATA (&vlib_global_main.elog_main, el);
     117           0 :       ed->dev_instance = ad->dev_instance;
     118           0 :       ed->flags = d->flags;
     119           0 :       ed->retval = d->retval;
     120           0 :       ed->v_opcode = ed->v_opcode_val = d->v_opcode;
     121           0 :       ed->v_retval = d->v_retval;
     122             :     }
     123             :   else
     124             :     {
     125             :       ELOG_TYPE_DECLARE (
     126             :         el) = { .format = "avf[%d] arq_desc: flags 0x%x retval %d opcode 0x%x",
     127             :                 .format_args = "i4i2i2i2" };
     128             : 
     129             :       struct
     130             :       {
     131             :         u32 dev_instance;
     132             :         u16 flags;
     133             :         u16 retval;
     134             :         u16 opcode;
     135             :       } * ed;
     136             : 
     137           0 :       ed = ELOG_DATA (&vlib_global_main.elog_main, el);
     138           0 :       ed->dev_instance = ad->dev_instance;
     139           0 :       ed->flags = d->flags;
     140           0 :       ed->retval = d->retval;
     141           0 :       ed->opcode = d->opcode;
     142             :     }
     143           0 : }
     144             : 
     145             : void
     146           0 : avf_elog_reg (avf_device_t *ad, u32 addr, u32 val, int is_read)
     147             : {
     148             :   uword *p;
     149             :   ELOG_TYPE_DECLARE (el) = {
     150             :     .format = "avf[%d] reg: %s %s [0x%04x] val 0x%08x",
     151             :     .format_args = "i4s4s4i4i4",
     152             :   };
     153             : 
     154             :   struct
     155             :   {
     156             :     u32 dev_instance;
     157             :     char rw[4];
     158             :     char reg_name[24];
     159             :     u32 addr;
     160             :     u32 val;
     161             :   } * ed;
     162             : 
     163           0 :   ed = ELOG_DATA (&vlib_global_main.elog_main, el);
     164           0 :   ed->dev_instance = ad->dev_instance;
     165           0 :   ed->addr = addr;
     166           0 :   ed->val = val;
     167           0 :   ed->rw[0] = is_read ? 'r' : 'w';
     168           0 :   ed->rw[1] = 0;
     169             : 
     170           0 :   p = hash_get (register_name_by_addr, addr);
     171           0 :   strncpy (ed->reg_name, p ? (char *) p[0] : "unknown", 24);
     172           0 :   ed->reg_name[23] = 0;
     173           0 : }
     174             : 
     175             : void
     176           0 : avf_elog_init (void)
     177             : {
     178           0 :   if (register_name_by_addr)
     179           0 :     return;
     180             : 
     181           0 :   register_name_by_addr = hash_create (0, sizeof (uword));
     182             : 
     183           0 :   hash_set (register_name_by_addr, AVFINT_ICR0, "AVFINT_ICR0");
     184           0 :   hash_set (register_name_by_addr, AVFINT_ICR0_ENA1, "INT_ICR0_ENA1");
     185           0 :   hash_set (register_name_by_addr, AVFINT_DYN_CTL0, "INT_DYN_CTL0");
     186           0 :   hash_set (register_name_by_addr, AVF_ARQBAH, "ARQBAH");
     187           0 :   hash_set (register_name_by_addr, AVF_ATQH, "ATQH");
     188           0 :   hash_set (register_name_by_addr, AVF_ATQLEN, "ATQLEN");
     189           0 :   hash_set (register_name_by_addr, AVF_ARQBAL, "ARQBAL");
     190           0 :   hash_set (register_name_by_addr, AVF_ARQT, "ARQT");
     191           0 :   hash_set (register_name_by_addr, AVF_ARQH, "ARQH");
     192           0 :   hash_set (register_name_by_addr, AVF_ATQBAH, "ATQBAH");
     193           0 :   hash_set (register_name_by_addr, AVF_ATQBAL, "ATQBAL");
     194           0 :   hash_set (register_name_by_addr, AVF_ARQLEN, "ARQLEN");
     195           0 :   hash_set (register_name_by_addr, AVF_ATQT, "ATQT");
     196           0 :   hash_set (register_name_by_addr, AVFGEN_RSTAT, "GEN_RSTAT");
     197             : 
     198           0 :   for (int i = 0; i < 16; i++)
     199             :     {
     200           0 :       hash_set (register_name_by_addr, AVFINT_DYN_CTLN (i),
     201             :                 format (0, "INT_DYN_CTLN(%u)%c", i, 0));
     202           0 :       hash_set (register_name_by_addr, AVF_QTX_TAIL (i),
     203             :                 format (0, "QTX_TAIL(%u)%c", i, 0));
     204           0 :       hash_set (register_name_by_addr, AVF_QRX_TAIL (i),
     205             :                 format (0, "QRX_TAIL(%u)%c", i, 0));
     206             :     }
     207             : }

Generated by: LCOV version 1.14