1 /* SPDX-License-Identifier: Apache-2.0
2 * Copyright(c) 2021 Cisco Systems, Inc.
6 #include <vlib/unix/unix.h>
7 #include <vlib/pci/pci.h>
8 #include <vnet/ethernet/ethernet.h>
12 static uword *register_name_by_addr = 0;
15 avf_elog_aq_enq_req (avf_device_t *ad, avf_aq_desc_t *d)
17 if (d->opcode == 0x801) /* send_to_pf */
19 ELOG_TYPE_DECLARE (el) = {
20 .format = "avf[%d] aq_enq_req: send_to_pf flags 0x%x datalen %d "
22 .format_args = "i4i2i2t2i2",
23 .n_enum_strings = VIRTCHNL_N_OPS,
25 #define _(v, n) [v] = #n,
40 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
41 ed->dev_instance = ad->dev_instance;
43 ed->datalen = d->datalen;
44 ed->v_opcode = ed->v_opcode_val = d->v_opcode;
48 ELOG_TYPE_DECLARE (el) = {
49 .format = "avf[%d] aq_enq_req: opcode 0x%x flags 0x%x datalen %d",
50 .format_args = "i4i2i2i2"
61 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
62 ed->dev_instance = ad->dev_instance;
63 ed->opcode = d->opcode;
65 ed->datalen = d->datalen;
70 avf_elog_aq_enq_resp (avf_device_t *ad, avf_aq_desc_t *d)
72 ELOG_TYPE_DECLARE (el) = { .format =
73 "avf[%d] aq_enq_resp: flags 0x%x retval %d",
74 .format_args = "i4i2i2" };
83 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
84 ed->dev_instance = ad->dev_instance;
86 ed->retval = d->retval;
90 avf_elog_arq_desc (avf_device_t *ad, avf_aq_desc_t *d)
92 if (d->opcode == 0x802)
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,
100 #define _(v, n) [v] = #n,
116 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
117 ed->dev_instance = ad->dev_instance;
118 ed->flags = d->flags;
119 ed->retval = d->retval;
120 ed->v_opcode = ed->v_opcode_val = d->v_opcode;
121 ed->v_retval = d->v_retval;
126 el) = { .format = "avf[%d] arq_desc: flags 0x%x retval %d opcode 0x%x",
127 .format_args = "i4i2i2i2" };
137 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
138 ed->dev_instance = ad->dev_instance;
139 ed->flags = d->flags;
140 ed->retval = d->retval;
141 ed->opcode = d->opcode;
146 avf_elog_reg (avf_device_t *ad, u32 addr, u32 val, int is_read)
149 ELOG_TYPE_DECLARE (el) = {
150 .format = "avf[%d] reg: %s %s [0x%04x] val 0x%08x",
151 .format_args = "i4s4s4i4i4",
163 ed = ELOG_DATA (&vlib_global_main.elog_main, el);
164 ed->dev_instance = ad->dev_instance;
167 ed->rw[0] = is_read ? 'r' : 'w';
170 p = hash_get (register_name_by_addr, addr);
171 strncpy (ed->reg_name, p ? (char *) p[0] : "unknown", 24);
172 ed->reg_name[23] = 0;
178 if (register_name_by_addr)
181 register_name_by_addr = hash_create (0, sizeof (uword));
183 hash_set (register_name_by_addr, AVFINT_ICR0, "AVFINT_ICR0");
184 hash_set (register_name_by_addr, AVFINT_ICR0_ENA1, "INT_ICR0_ENA1");
185 hash_set (register_name_by_addr, AVFINT_DYN_CTL0, "INT_DYN_CTL0");
186 hash_set (register_name_by_addr, AVF_ARQBAH, "ARQBAH");
187 hash_set (register_name_by_addr, AVF_ATQH, "ATQH");
188 hash_set (register_name_by_addr, AVF_ATQLEN, "ATQLEN");
189 hash_set (register_name_by_addr, AVF_ARQBAL, "ARQBAL");
190 hash_set (register_name_by_addr, AVF_ARQT, "ARQT");
191 hash_set (register_name_by_addr, AVF_ARQH, "ARQH");
192 hash_set (register_name_by_addr, AVF_ATQBAH, "ATQBAH");
193 hash_set (register_name_by_addr, AVF_ATQBAL, "ATQBAL");
194 hash_set (register_name_by_addr, AVF_ARQLEN, "ARQLEN");
195 hash_set (register_name_by_addr, AVF_ATQT, "ATQT");
196 hash_set (register_name_by_addr, AVFGEN_RSTAT, "GEN_RSTAT");
198 for (int i = 0; i < 16; i++)
200 hash_set (register_name_by_addr, AVFINT_DYN_CTLN (i),
201 format (0, "INT_DYN_CTLN(%u)%c", i, 0));
202 hash_set (register_name_by_addr, AVF_QTX_TAIL (i),
203 format (0, "QTX_TAIL(%u)%c", i, 0));
204 hash_set (register_name_by_addr, AVF_QRX_TAIL (i),
205 format (0, "QRX_TAIL(%u)%c", i, 0));