blob: 591673abc76ea42c69b4b995bf508e5f87e18f34 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/* Copyright (C) 2015 Freescale Semiconductor, Inc.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "compat.h"
#include <fsl_qbman_debug.h>
#include "qbman_portal.h"
/* QBMan portal management command code */
#define QBMAN_BP_QUERY 0x32
#define QBMAN_FQ_QUERY 0x44
#define QBMAN_FQ_QUERY_NP 0x45
#define QBMAN_WQ_QUERY 0x47
#define QBMAN_CGR_QUERY 0x51
#define QBMAN_WRED_QUERY 0x54
#define QBMAN_CGR_STAT_QUERY 0x55
#define QBMAN_CGR_STAT_QUERY_CLR 0x56
struct qbman_fq_query_desc {
uint8_t verb;
uint8_t reserved[3];
uint32_t fqid;
uint8_t reserved2[57];
};
int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
struct qbman_fq_query_np_rslt *r)
{
struct qbman_fq_query_desc *p;
p = (struct qbman_fq_query_desc *)qbman_swp_mc_start(s);
if (!p)
return -EBUSY;
p->fqid = fqid;
*r = *(struct qbman_fq_query_np_rslt *)qbman_swp_mc_complete(s, p,
QBMAN_FQ_QUERY_NP);
if (!r) {
pr_err("qbman: Query FQID %d NP fields failed, no response\n",
fqid);
return -EIO;
}
/* Decode the outcome */
QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_FQ_QUERY_NP);
/* Determine success or failure */
if (r->rslt != QBMAN_MC_RSLT_OK) {
pr_err("Query NP fields of FQID 0x%x failed, code=0x%02x\n",
fqid, r->rslt);
return -EIO;
}
return 0;
}
uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r)
{
return (r->frm_cnt & 0x00FFFFFF);
}
uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r)
{
return r->byte_cnt;
}
|