Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(C) 2021 Marvell.
3 : : */
4 : :
5 : : #include <inttypes.h>
6 : :
7 : : #include "roc_api.h"
8 : : #include "roc_nix_xstats.h"
9 : : #include "roc_priv.h"
10 : :
11 : : #define NIX_RX_STATS(val) plt_read64(nix->base + NIX_LF_RX_STATX(val))
12 : : #define NIX_TX_STATS(val) plt_read64(nix->base + NIX_LF_TX_STATX(val))
13 : : #define INL_NIX_RX_STATS(val) \
14 : : plt_read64(inl_dev->nix_base + NIX_LF_RX_STATX(val))
15 : :
16 : : #define NIX_XSTATS_NAME_PRINT(xstats_names, count, xstats, index) \
17 : : do { \
18 : : if (xstats_names) \
19 : : snprintf(xstats_names[count].name, \
20 : : sizeof(xstats_names[count].name), "%s", \
21 : : xstats[index].name); \
22 : : } while (0)
23 : :
24 : : int
25 : 0 : roc_nix_num_xstats_get(struct roc_nix *roc_nix)
26 : : {
27 : 0 : return roc_nix_xstats_names_get(roc_nix, NULL, 0);
28 : : }
29 : :
30 : : int
31 : 0 : roc_nix_stats_get(struct roc_nix *roc_nix, struct roc_nix_stats *stats)
32 : : {
33 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
34 : :
35 [ # # ]: 0 : if (stats == NULL)
36 : : return NIX_ERR_PARAM;
37 : :
38 : 0 : stats->rx_octs = NIX_RX_STATS(NIX_STAT_LF_RX_RX_OCTS);
39 : 0 : stats->rx_ucast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_UCAST);
40 : 0 : stats->rx_bcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_BCAST);
41 : 0 : stats->rx_mcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_MCAST);
42 : 0 : stats->rx_drop = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DROP);
43 : 0 : stats->rx_drop_octs = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DROP_OCTS);
44 : 0 : stats->rx_fcs = NIX_RX_STATS(NIX_STAT_LF_RX_RX_FCS);
45 : 0 : stats->rx_err = NIX_RX_STATS(NIX_STAT_LF_RX_RX_ERR);
46 : 0 : stats->rx_drop_bcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DRP_BCAST);
47 : 0 : stats->rx_drop_mcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DRP_MCAST);
48 : 0 : stats->rx_drop_l3_bcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DRP_L3BCAST);
49 : 0 : stats->rx_drop_l3_mcast = NIX_RX_STATS(NIX_STAT_LF_RX_RX_DRP_L3MCAST);
50 : :
51 : 0 : stats->tx_ucast = NIX_TX_STATS(NIX_STAT_LF_TX_TX_UCAST);
52 : 0 : stats->tx_bcast = NIX_TX_STATS(NIX_STAT_LF_TX_TX_BCAST);
53 : 0 : stats->tx_mcast = NIX_TX_STATS(NIX_STAT_LF_TX_TX_MCAST);
54 : 0 : stats->tx_drop = NIX_TX_STATS(NIX_STAT_LF_TX_TX_DROP);
55 : 0 : stats->tx_octs = NIX_TX_STATS(NIX_STAT_LF_TX_TX_OCTS);
56 : 0 : return 0;
57 : : }
58 : :
59 : : int
60 : 0 : roc_nix_stats_reset(struct roc_nix *roc_nix)
61 : : {
62 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
63 : 0 : struct mbox *mbox = mbox_get((&nix->dev)->mbox);
64 : : int rc;
65 : :
66 [ # # ]: 0 : if (mbox_alloc_msg_nix_stats_rst(mbox) == NULL) {
67 : : rc = -ENOMEM;
68 : 0 : goto exit;
69 : : }
70 : :
71 : 0 : rc = mbox_process(mbox);
72 : 0 : exit:
73 : : mbox_put(mbox);
74 : 0 : return rc;
75 : : }
76 : :
77 : : static int
78 : : queue_is_valid(struct nix *nix, uint16_t qid, bool is_rx)
79 : : {
80 : : uint16_t nb_queues;
81 : :
82 [ # # ]: 0 : if (is_rx)
83 : 0 : nb_queues = nix->nb_rx_queues;
84 : : else
85 : 0 : nb_queues = nix->nb_tx_queues;
86 : :
87 [ # # # # ]: 0 : if (qid >= nb_queues)
88 : : return NIX_ERR_QUEUE_INVALID_RANGE;
89 : :
90 : : return 0;
91 : : }
92 : :
93 : : static uint64_t
94 : : inl_qstat_read(struct nix_inl_dev *inl_dev, uint16_t qid, uint32_t off)
95 : : {
96 : : uint64_t reg, val;
97 : : int64_t *addr;
98 : :
99 : : addr = (int64_t *)(inl_dev->nix_base + off);
100 : : reg = (((uint64_t)qid) << 32);
101 : : val = roc_atomic64_add_nosync(reg, addr);
102 : : if (val & BIT_ULL(NIX_CQ_OP_STAT_OP_ERR))
103 : : val = 0;
104 : : return val;
105 : : }
106 : :
107 : : static uint64_t
108 : : qstat_read(struct nix *nix, uint16_t qid, uint32_t off)
109 : : {
110 : : uint64_t reg, val;
111 : : int64_t *addr;
112 : :
113 : : addr = (int64_t *)(nix->base + off);
114 : : reg = (((uint64_t)qid) << 32);
115 : : val = roc_atomic64_add_nosync(reg, addr);
116 : : if (val & BIT_ULL(NIX_CQ_OP_STAT_OP_ERR))
117 : : val = 0;
118 : : return val;
119 : : }
120 : :
121 : : static void
122 : : nix_stat_rx_queue_get(struct nix *nix, uint16_t qid,
123 : : struct roc_nix_stats_queue *qstats)
124 : : {
125 : 0 : qstats->rx_pkts = qstat_read(nix, qid, NIX_LF_RQ_OP_PKTS);
126 : 0 : qstats->rx_octs = qstat_read(nix, qid, NIX_LF_RQ_OP_OCTS);
127 : 0 : qstats->rx_drop_pkts = qstat_read(nix, qid, NIX_LF_RQ_OP_DROP_PKTS);
128 : 0 : qstats->rx_drop_octs = qstat_read(nix, qid, NIX_LF_RQ_OP_DROP_OCTS);
129 : 0 : qstats->rx_error_pkts = qstat_read(nix, qid, NIX_LF_RQ_OP_RE_PKTS);
130 : 0 : }
131 : :
132 : : static void
133 : : nix_stat_tx_queue_get(struct nix *nix, uint16_t qid,
134 : : struct roc_nix_stats_queue *qstats)
135 : : {
136 : 0 : qstats->tx_pkts = qstat_read(nix, qid, NIX_LF_SQ_OP_PKTS);
137 : 0 : qstats->tx_octs = qstat_read(nix, qid, NIX_LF_SQ_OP_OCTS);
138 : 0 : qstats->tx_drop_pkts = qstat_read(nix, qid, NIX_LF_SQ_OP_DROP_PKTS);
139 [ # # ]: 0 : qstats->tx_drop_octs = qstat_read(nix, qid, NIX_LF_SQ_OP_DROP_OCTS);
140 [ # # ]: 0 : if (roc_feature_nix_has_age_drop_stats()) {
141 : 0 : qstats->tx_age_drop_pkts = qstat_read(nix, qid, NIX_LF_SQ_OP_AGE_DROP_PKTS);
142 : 0 : qstats->tx_age_drop_octs = qstat_read(nix, qid, NIX_LF_SQ_OP_AGE_DROP_OCTS);
143 : : }
144 : : }
145 : :
146 : : static int
147 : 0 : nix_stat_rx_queue_reset(struct nix *nix, uint16_t qid)
148 : : {
149 : 0 : struct mbox *mbox = mbox_get((&nix->dev)->mbox);
150 : : int rc;
151 : :
152 [ # # ]: 0 : if (roc_model_is_cn9k()) {
153 : : struct nix_aq_enq_req *aq;
154 : :
155 : 0 : aq = mbox_alloc_msg_nix_aq_enq(mbox);
156 [ # # ]: 0 : if (!aq) {
157 : : rc = -ENOSPC;
158 : 0 : goto exit;
159 : : }
160 : :
161 : 0 : aq->qidx = qid;
162 : 0 : aq->ctype = NIX_AQ_CTYPE_RQ;
163 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
164 : :
165 : 0 : aq->rq.octs = 0;
166 : 0 : aq->rq.pkts = 0;
167 : 0 : aq->rq.drop_octs = 0;
168 : 0 : aq->rq.drop_pkts = 0;
169 : 0 : aq->rq.re_pkts = 0;
170 : :
171 : 0 : aq->rq_mask.octs = ~(aq->rq_mask.octs);
172 : 0 : aq->rq_mask.pkts = ~(aq->rq_mask.pkts);
173 : 0 : aq->rq_mask.drop_octs = ~(aq->rq_mask.drop_octs);
174 : 0 : aq->rq_mask.drop_pkts = ~(aq->rq_mask.drop_pkts);
175 : 0 : aq->rq_mask.re_pkts = ~(aq->rq_mask.re_pkts);
176 [ # # ]: 0 : } else if (roc_model_is_cn10k()) {
177 : : struct nix_cn10k_aq_enq_req *aq;
178 : :
179 : 0 : aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
180 [ # # ]: 0 : if (!aq) {
181 : : rc = -ENOSPC;
182 : 0 : goto exit;
183 : : }
184 : :
185 : 0 : aq->qidx = qid;
186 : 0 : aq->ctype = NIX_AQ_CTYPE_RQ;
187 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
188 : :
189 : 0 : aq->rq.octs = 0;
190 : 0 : aq->rq.pkts = 0;
191 : 0 : aq->rq.drop_octs = 0;
192 : 0 : aq->rq.drop_pkts = 0;
193 : 0 : aq->rq.re_pkts = 0;
194 : :
195 : 0 : aq->rq_mask.octs = ~(aq->rq_mask.octs);
196 : 0 : aq->rq_mask.pkts = ~(aq->rq_mask.pkts);
197 : 0 : aq->rq_mask.drop_octs = ~(aq->rq_mask.drop_octs);
198 : 0 : aq->rq_mask.drop_pkts = ~(aq->rq_mask.drop_pkts);
199 : 0 : aq->rq_mask.re_pkts = ~(aq->rq_mask.re_pkts);
200 : : } else {
201 : : struct nix_cn20k_aq_enq_req *aq;
202 : :
203 : 0 : aq = mbox_alloc_msg_nix_cn20k_aq_enq(mbox);
204 [ # # ]: 0 : if (!aq) {
205 : : rc = -ENOSPC;
206 : 0 : goto exit;
207 : : }
208 : :
209 : 0 : aq->qidx = qid;
210 : 0 : aq->ctype = NIX_AQ_CTYPE_RQ;
211 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
212 : :
213 : 0 : aq->rq.octs = 0;
214 : 0 : aq->rq.pkts = 0;
215 : 0 : aq->rq.drop_octs = 0;
216 : 0 : aq->rq.drop_pkts = 0;
217 : 0 : aq->rq.re_pkts = 0;
218 : :
219 : 0 : aq->rq_mask.octs = ~(aq->rq_mask.octs);
220 : 0 : aq->rq_mask.pkts = ~(aq->rq_mask.pkts);
221 : 0 : aq->rq_mask.drop_octs = ~(aq->rq_mask.drop_octs);
222 : 0 : aq->rq_mask.drop_pkts = ~(aq->rq_mask.drop_pkts);
223 : 0 : aq->rq_mask.re_pkts = ~(aq->rq_mask.re_pkts);
224 : : }
225 : :
226 : 0 : rc = mbox_process(mbox);
227 [ # # ]: 0 : rc = rc ? NIX_ERR_AQ_WRITE_FAILED : 0;
228 : 0 : exit:
229 : : mbox_put(mbox);
230 : 0 : return rc;
231 : : }
232 : :
233 : : static int
234 : 0 : nix_stat_tx_queue_reset(struct nix *nix, uint16_t qid)
235 : : {
236 : 0 : struct mbox *mbox = mbox_get((&nix->dev)->mbox);
237 : : int rc;
238 : :
239 [ # # ]: 0 : if (roc_model_is_cn9k()) {
240 : : struct nix_aq_enq_req *aq;
241 : :
242 : 0 : aq = mbox_alloc_msg_nix_aq_enq(mbox);
243 [ # # ]: 0 : if (!aq) {
244 : : rc = -ENOSPC;
245 : 0 : goto exit;
246 : : }
247 : :
248 : 0 : aq->qidx = qid;
249 : 0 : aq->ctype = NIX_AQ_CTYPE_SQ;
250 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
251 : 0 : aq->sq.octs = 0;
252 : 0 : aq->sq.pkts = 0;
253 : 0 : aq->sq.drop_octs = 0;
254 : 0 : aq->sq.drop_pkts = 0;
255 : :
256 : 0 : aq->sq_mask.octs = ~(aq->sq_mask.octs);
257 : 0 : aq->sq_mask.pkts = ~(aq->sq_mask.pkts);
258 : 0 : aq->sq_mask.drop_octs = ~(aq->sq_mask.drop_octs);
259 : 0 : aq->sq_mask.drop_pkts = ~(aq->sq_mask.drop_pkts);
260 [ # # ]: 0 : } else if (roc_model_is_cn10k()) {
261 : : struct nix_cn10k_aq_enq_req *aq;
262 : :
263 : 0 : aq = mbox_alloc_msg_nix_cn10k_aq_enq(mbox);
264 [ # # ]: 0 : if (!aq) {
265 : : rc = -ENOSPC;
266 : 0 : goto exit;
267 : : }
268 : :
269 : 0 : aq->qidx = qid;
270 : 0 : aq->ctype = NIX_AQ_CTYPE_SQ;
271 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
272 : 0 : aq->sq.octs = 0;
273 : 0 : aq->sq.pkts = 0;
274 : 0 : aq->sq.drop_octs = 0;
275 : 0 : aq->sq.drop_pkts = 0;
276 : :
277 : 0 : aq->sq_mask.octs = ~(aq->sq_mask.octs);
278 : 0 : aq->sq_mask.pkts = ~(aq->sq_mask.pkts);
279 : 0 : aq->sq_mask.drop_octs = ~(aq->sq_mask.drop_octs);
280 : 0 : aq->sq_mask.drop_pkts = ~(aq->sq_mask.drop_pkts);
281 : 0 : aq->sq_mask.aged_drop_octs = ~(aq->sq_mask.aged_drop_octs);
282 : 0 : aq->sq_mask.aged_drop_pkts = ~(aq->sq_mask.aged_drop_pkts);
283 : : } else {
284 : : struct nix_cn20k_aq_enq_req *aq;
285 : :
286 : 0 : aq = mbox_alloc_msg_nix_cn20k_aq_enq(mbox);
287 [ # # ]: 0 : if (!aq) {
288 : : rc = -ENOSPC;
289 : 0 : goto exit;
290 : : }
291 : :
292 : 0 : aq->qidx = qid;
293 : 0 : aq->ctype = NIX_AQ_CTYPE_SQ;
294 : 0 : aq->op = NIX_AQ_INSTOP_WRITE;
295 : 0 : aq->sq.octs = 0;
296 : 0 : aq->sq.pkts = 0;
297 : 0 : aq->sq.drop_octs = 0;
298 : 0 : aq->sq.drop_pkts = 0;
299 : :
300 : 0 : aq->sq_mask.octs = ~(aq->sq_mask.octs);
301 : 0 : aq->sq_mask.pkts = ~(aq->sq_mask.pkts);
302 : 0 : aq->sq_mask.drop_octs = ~(aq->sq_mask.drop_octs);
303 : 0 : aq->sq_mask.drop_pkts = ~(aq->sq_mask.drop_pkts);
304 : 0 : aq->sq_mask.aged_drop_octs = ~(aq->sq_mask.aged_drop_octs);
305 : 0 : aq->sq_mask.aged_drop_pkts = ~(aq->sq_mask.aged_drop_pkts);
306 : : }
307 : :
308 : 0 : rc = mbox_process(mbox);
309 [ # # ]: 0 : rc = rc ? NIX_ERR_AQ_WRITE_FAILED : 0;
310 : 0 : exit:
311 : : mbox_put(mbox);
312 : 0 : return rc;
313 : : }
314 : :
315 : : int
316 : 0 : roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid, bool is_rx,
317 : : struct roc_nix_stats_queue *qstats)
318 : : {
319 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
320 : : int rc;
321 : :
322 [ # # ]: 0 : if (qstats == NULL)
323 : : return NIX_ERR_PARAM;
324 : :
325 : : rc = queue_is_valid(nix, qid, is_rx);
326 : : if (rc)
327 : 0 : goto fail;
328 : :
329 [ # # ]: 0 : if (is_rx)
330 : : nix_stat_rx_queue_get(nix, qid, qstats);
331 : : else
332 : : nix_stat_tx_queue_get(nix, qid, qstats);
333 : :
334 : : fail:
335 : : return rc;
336 : : }
337 : :
338 : : int
339 [ # # ]: 0 : roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid, bool is_rx)
340 : : {
341 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
342 : : int rc;
343 : :
344 [ # # ]: 0 : rc = queue_is_valid(nix, qid, is_rx);
345 : : if (rc)
346 : 0 : goto fail;
347 : :
348 [ # # ]: 0 : if (is_rx)
349 : 0 : rc = nix_stat_rx_queue_reset(nix, qid);
350 : : else
351 : 0 : rc = nix_stat_tx_queue_reset(nix, qid);
352 : :
353 : 0 : fail:
354 : 0 : return rc;
355 : : }
356 : :
357 : : int
358 : 0 : roc_nix_xstats_get(struct roc_nix *roc_nix, struct roc_nix_xstat *xstats,
359 : : unsigned int n)
360 : : {
361 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
362 : 0 : struct idev_cfg *idev = idev_get_cfg();
363 : 0 : struct mbox *mbox = (&nix->dev)->mbox;
364 : : struct nix_inl_dev *inl_dev = NULL;
365 : : struct cgx_stats_rsp *cgx_resp;
366 : : struct rpm_stats_rsp *rpm_resp;
367 : : uint64_t i, count = 0;
368 : : struct msg_req *req;
369 : : uint16_t inl_rq_id;
370 : : uint32_t xstat_cnt;
371 : : int rc;
372 : :
373 : 0 : xstat_cnt = roc_nix_xstats_names_get(roc_nix, NULL, 0);
374 [ # # ]: 0 : if (n < xstat_cnt)
375 : : return xstat_cnt;
376 : :
377 [ # # ]: 0 : if (xstats == NULL)
378 : : return -EINVAL;
379 : :
380 : 0 : memset(xstats, 0, (xstat_cnt * sizeof(*xstats)));
381 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS; i++) {
382 : 0 : xstats[count].value = NIX_TX_STATS(nix_tx_xstats[i].offset);
383 : 0 : xstats[count].id = count;
384 : 0 : count++;
385 : : }
386 : :
387 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS; i++) {
388 : 0 : xstats[count].value = NIX_RX_STATS(nix_rx_xstats[i].offset);
389 : 0 : xstats[count].id = count;
390 : 0 : count++;
391 : : }
392 [ # # # # ]: 0 : if (nix->inb_inl_dev && idev) {
393 [ # # ]: 0 : if (idev->nix_inl_dev) {
394 : : inl_dev = idev->nix_inl_dev;
395 [ # # ]: 0 : for (i = 0; i < CNXK_INL_NIX_NUM_RX_XSTATS; i++) {
396 : 0 : xstats[count].value =
397 : 0 : INL_NIX_RX_STATS(inl_nix_rx_xstats[i].offset);
398 : 0 : xstats[count].id = count;
399 : 0 : count++;
400 : : }
401 : : inl_rq_id = inl_dev->nb_rqs > 1 ? roc_nix->port_id : 0;
402 [ # # ]: 0 : for (i = 0; i < CNXK_INL_NIX_RQ_XSTATS; i++) {
403 : 0 : xstats[count].value =
404 : : inl_qstat_read(inl_dev, inl_rq_id,
405 : : inl_nix_rq_xstats[i].offset);
406 : 0 : xstats[count].id = count;
407 : 0 : count++;
408 : : }
409 [ # # ]: 0 : for (i = 0; i < PLT_DIM(inl_sw_xstats); i++) {
410 : : if (!inl_sw_xstats[i].offset)
411 : 0 : xstats[count].value = inl_dev->sso_work_cnt;
412 : 0 : xstats[count].id = count;
413 : 0 : count++;
414 : : }
415 : : }
416 : : }
417 : :
418 : : for (i = 0; i < nix->nb_rx_queues; i++)
419 : : xstats[count].value +=
420 : : qstat_read(nix, i, nix_q_xstats[0].offset);
421 : :
422 : 0 : xstats[count].id = count;
423 [ # # ]: 0 : count++;
424 : :
425 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k()) {
426 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_CN10K_RX_XSTATS; i++) {
427 : 0 : xstats[count].value =
428 : 0 : NIX_RX_STATS(nix_cn10k_rx_xstats[i].offset);
429 : 0 : xstats[count].id = count;
430 : 0 : count++;
431 : : }
432 : : }
433 : :
434 [ # # ]: 0 : if (roc_nix_is_vf_or_sdp(roc_nix))
435 : 0 : return count;
436 : :
437 [ # # ]: 0 : if (roc_model_is_cn9k()) {
438 : 0 : req = mbox_alloc_msg_cgx_stats(mbox_get(mbox));
439 [ # # ]: 0 : if (!req) {
440 : : rc = -ENOSPC;
441 : 0 : goto exit;
442 : : }
443 : :
444 : 0 : req->hdr.pcifunc = roc_nix_get_pf_func(roc_nix);
445 : :
446 : : rc = mbox_process_msg(mbox, (void *)&cgx_resp);
447 [ # # ]: 0 : if (rc)
448 : 0 : goto exit;
449 : :
450 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS_CGX; i++) {
451 : 0 : xstats[count].value =
452 : 0 : cgx_resp->rx_stats[nix_rx_xstats_cgx[i].offset];
453 : 0 : xstats[count].id = count;
454 : 0 : count++;
455 : : }
456 : :
457 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS_CGX; i++) {
458 : 0 : xstats[count].value =
459 : 0 : cgx_resp->tx_stats[nix_tx_xstats_cgx[i].offset];
460 : 0 : xstats[count].id = count;
461 : 0 : count++;
462 : : }
463 : : } else {
464 : 0 : req = mbox_alloc_msg_rpm_stats(mbox_get(mbox));
465 [ # # ]: 0 : if (!req) {
466 : : rc = -ENOSPC;
467 : 0 : goto exit;
468 : : }
469 : :
470 : 0 : req->hdr.pcifunc = roc_nix_get_pf_func(roc_nix);
471 : :
472 : : rc = mbox_process_msg(mbox, (void *)&rpm_resp);
473 [ # # ]: 0 : if (rc)
474 : 0 : goto exit;
475 : :
476 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS_RPM; i++) {
477 : 0 : xstats[count].value =
478 : 0 : rpm_resp->rx_stats[nix_rx_xstats_rpm[i].offset];
479 : 0 : xstats[count].id = count;
480 : 0 : count++;
481 : : }
482 : :
483 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS_RPM; i++) {
484 : 0 : xstats[count].value =
485 : 0 : rpm_resp->tx_stats[nix_tx_xstats_rpm[i].offset];
486 : 0 : xstats[count].id = count;
487 : 0 : count++;
488 : : }
489 : : }
490 : :
491 : 0 : rc = count;
492 : 0 : exit:
493 : : mbox_put(mbox);
494 : 0 : return rc;
495 : : }
496 : :
497 : : int
498 : 0 : roc_nix_xstats_names_get(struct roc_nix *roc_nix,
499 : : struct roc_nix_xstat_name *xstats_names,
500 : : unsigned int limit)
501 : : {
502 : : struct nix *nix = roc_nix_to_nix_priv(roc_nix);
503 : 0 : struct idev_cfg *idev = idev_get_cfg();
504 : : uint64_t i, count = 0;
505 : :
506 : : PLT_SET_USED(limit);
507 : :
508 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS; i++) {
509 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count, nix_tx_xstats, i);
510 : 0 : count++;
511 : : }
512 : :
513 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS; i++) {
514 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count, nix_rx_xstats, i);
515 : 0 : count++;
516 : : }
517 : :
518 [ # # # # ]: 0 : if (nix->inb_inl_dev && idev) {
519 [ # # ]: 0 : if (idev->nix_inl_dev) {
520 [ # # ]: 0 : for (i = 0; i < CNXK_INL_NIX_NUM_RX_XSTATS; i++) {
521 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
522 : : inl_nix_rx_xstats, i);
523 : 0 : count++;
524 : : }
525 [ # # ]: 0 : for (i = 0; i < CNXK_INL_NIX_RQ_XSTATS; i++) {
526 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
527 : : inl_nix_rq_xstats, i);
528 : 0 : count++;
529 : : }
530 [ # # ]: 0 : for (i = 0; i < PLT_DIM(inl_sw_xstats); i++) {
531 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count, inl_sw_xstats, i);
532 : 0 : count++;
533 : : }
534 : : }
535 : : }
536 : :
537 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_QUEUE_XSTATS; i++) {
538 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count, nix_q_xstats, i);
539 : 0 : count++;
540 : : }
541 : :
542 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k()) {
543 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_CN10K_RX_XSTATS; i++) {
544 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
545 : : nix_cn10k_rx_xstats, i);
546 : 0 : count++;
547 : : }
548 : : }
549 : :
550 [ # # ]: 0 : if (roc_nix_is_vf_or_sdp(roc_nix))
551 : 0 : return count;
552 : :
553 [ # # ]: 0 : if (roc_model_is_cn9k()) {
554 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS_CGX; i++) {
555 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
556 : : nix_rx_xstats_cgx, i);
557 : 0 : count++;
558 : : }
559 : :
560 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS_CGX; i++) {
561 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
562 : : nix_tx_xstats_cgx, i);
563 : 0 : count++;
564 : : }
565 : :
566 : : } else {
567 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_RX_XSTATS_RPM; i++) {
568 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
569 : : nix_rx_xstats_rpm, i);
570 : 0 : count++;
571 : : }
572 : :
573 [ # # ]: 0 : for (i = 0; i < CNXK_NIX_NUM_TX_XSTATS_RPM; i++) {
574 [ # # ]: 0 : NIX_XSTATS_NAME_PRINT(xstats_names, count,
575 : : nix_tx_xstats_rpm, i);
576 : 0 : count++;
577 : : }
578 : : }
579 : :
580 : 0 : return count;
581 : : }
|