1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2015 Freescale Semiconductor, Inc. 3 * Copyright 2018-2023 NXP 4 */ 5 #ifndef _FSL_QBMAN_DEBUG_H 6 #define _FSL_QBMAN_DEBUG_H 7 8 #include <rte_compat.h> 9 10 struct qbman_swp; 11 /* Buffer pool query commands */ 12 struct qbman_bp_query_rslt { 13 uint8_t verb; 14 uint8_t rslt; 15 uint8_t reserved[4]; 16 uint8_t bdi; 17 uint8_t state; 18 uint32_t fill; 19 uint32_t hdptr; 20 uint16_t swdet; 21 uint16_t swdxt; 22 uint16_t hwdet; 23 uint16_t hwdxt; 24 uint16_t swset; 25 uint16_t swsxt; 26 uint16_t vbpid; 27 uint16_t icid; 28 uint64_t bpscn_addr; 29 uint64_t bpscn_ctx; 30 uint16_t hw_targ; 31 uint8_t dbe; 32 uint8_t reserved2; 33 uint8_t sdcnt; 34 uint8_t hdcnt; 35 uint8_t sscnt; 36 uint8_t reserved3[9]; 37 }; 38 39 int qbman_bp_query(struct qbman_swp *s, uint32_t bpid, 40 struct qbman_bp_query_rslt *r); 41 int qbman_bp_get_bdi(struct qbman_bp_query_rslt *r); 42 int qbman_bp_get_va(struct qbman_bp_query_rslt *r); 43 int qbman_bp_get_wae(struct qbman_bp_query_rslt *r); 44 uint16_t qbman_bp_get_swdet(struct qbman_bp_query_rslt *r); 45 uint16_t qbman_bp_get_swdxt(struct qbman_bp_query_rslt *r); 46 uint16_t qbman_bp_get_hwdet(struct qbman_bp_query_rslt *r); 47 uint16_t qbman_bp_get_hwdxt(struct qbman_bp_query_rslt *r); 48 uint16_t qbman_bp_get_swset(struct qbman_bp_query_rslt *r); 49 uint16_t qbman_bp_get_swsxt(struct qbman_bp_query_rslt *r); 50 uint16_t qbman_bp_get_vbpid(struct qbman_bp_query_rslt *r); 51 uint16_t qbman_bp_get_icid(struct qbman_bp_query_rslt *r); 52 int qbman_bp_get_pl(struct qbman_bp_query_rslt *r); 53 uint64_t qbman_bp_get_bpscn_addr(struct qbman_bp_query_rslt *r); 54 uint64_t qbman_bp_get_bpscn_ctx(struct qbman_bp_query_rslt *r); 55 uint16_t qbman_bp_get_hw_targ(struct qbman_bp_query_rslt *r); 56 int qbman_bp_has_free_bufs(struct qbman_bp_query_rslt *r); 57 uint32_t qbman_bp_num_free_bufs(struct qbman_bp_query_rslt *r); 58 int qbman_bp_is_depleted(struct qbman_bp_query_rslt *r); 59 int qbman_bp_is_surplus(struct qbman_bp_query_rslt *r); 60 uint32_t qbman_bp_get_hdptr(struct qbman_bp_query_rslt *r); 61 uint32_t qbman_bp_get_sdcnt(struct qbman_bp_query_rslt *r); 62 uint32_t qbman_bp_get_hdcnt(struct qbman_bp_query_rslt *r); 63 uint32_t qbman_bp_get_sscnt(struct qbman_bp_query_rslt *r); 64 65 /* FQ query function for programmable fields */ 66 struct qbman_fq_query_rslt { 67 uint8_t verb; 68 uint8_t rslt; 69 uint8_t reserved[8]; 70 uint16_t cgid; 71 uint16_t dest_wq; 72 uint8_t reserved2; 73 uint8_t fq_ctrl; 74 uint16_t ics_cred; 75 uint16_t td_thresh; 76 uint16_t oal_oac; 77 uint8_t reserved3; 78 uint8_t mctl; 79 uint64_t fqd_ctx; 80 uint16_t icid; 81 uint16_t reserved4; 82 uint32_t vfqid; 83 uint32_t fqid_er; 84 uint16_t opridsz; 85 uint8_t reserved5[18]; 86 }; 87 88 int qbman_fq_query(struct qbman_swp *s, uint32_t fqid, 89 struct qbman_fq_query_rslt *r); 90 uint8_t qbman_fq_attr_get_fqctrl(struct qbman_fq_query_rslt *r); 91 uint16_t qbman_fq_attr_get_cgrid(struct qbman_fq_query_rslt *r); 92 uint16_t qbman_fq_attr_get_destwq(struct qbman_fq_query_rslt *r); 93 uint16_t qbman_fq_attr_get_tdthresh(struct qbman_fq_query_rslt *r); 94 int qbman_fq_attr_get_oa_ics(struct qbman_fq_query_rslt *r); 95 int qbman_fq_attr_get_oa_cgr(struct qbman_fq_query_rslt *r); 96 uint16_t qbman_fq_attr_get_oal(struct qbman_fq_query_rslt *r); 97 int qbman_fq_attr_get_bdi(struct qbman_fq_query_rslt *r); 98 int qbman_fq_attr_get_ff(struct qbman_fq_query_rslt *r); 99 int qbman_fq_attr_get_va(struct qbman_fq_query_rslt *r); 100 int qbman_fq_attr_get_ps(struct qbman_fq_query_rslt *r); 101 int qbman_fq_attr_get_pps(struct qbman_fq_query_rslt *r); 102 uint16_t qbman_fq_attr_get_icid(struct qbman_fq_query_rslt *r); 103 int qbman_fq_attr_get_pl(struct qbman_fq_query_rslt *r); 104 uint32_t qbman_fq_attr_get_vfqid(struct qbman_fq_query_rslt *r); 105 uint32_t qbman_fq_attr_get_erfqid(struct qbman_fq_query_rslt *r); 106 uint16_t qbman_fq_attr_get_opridsz(struct qbman_fq_query_rslt *r); 107 108 struct qbman_fq_query_np_rslt { 109 uint8_t verb; 110 uint8_t rslt; 111 uint8_t st1; 112 uint8_t st2; 113 uint8_t reserved[2]; 114 uint16_t od1_sfdr; 115 uint16_t od2_sfdr; 116 uint16_t od3_sfdr; 117 uint16_t ra1_sfdr; 118 uint16_t ra2_sfdr; 119 uint32_t pfdr_hptr; 120 uint32_t pfdr_tptr; 121 uint32_t frm_cnt; 122 uint32_t byte_cnt; 123 uint16_t ics_surp; 124 uint8_t is; 125 uint8_t reserved2[29]; 126 }; 127 128 __rte_internal 129 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid, 130 struct qbman_fq_query_np_rslt *r); 131 uint8_t qbman_fq_state_schedstate(const struct qbman_fq_query_np_rslt *r); 132 int qbman_fq_state_force_eligible(const struct qbman_fq_query_np_rslt *r); 133 int qbman_fq_state_xoff(const struct qbman_fq_query_np_rslt *r); 134 int qbman_fq_state_retirement_pending(const struct qbman_fq_query_np_rslt *r); 135 int qbman_fq_state_overflow_error(const struct qbman_fq_query_np_rslt *r); 136 __rte_internal 137 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r); 138 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r); 139 140 /* CGR query */ 141 struct qbman_cgr_query_rslt { 142 uint8_t verb; 143 uint8_t rslt; 144 uint8_t reserved[6]; 145 uint8_t ctl1; 146 uint8_t reserved1; 147 uint16_t oal; 148 uint16_t reserved2; 149 uint8_t mode; 150 uint8_t ctl2; 151 uint8_t iwc; 152 uint8_t tdc; 153 uint16_t cs_thres; 154 uint16_t cs_thres_x; 155 uint16_t td_thres; 156 uint16_t cscn_tdcp; 157 uint16_t cscn_wqid; 158 uint16_t cscn_vcgid; 159 uint16_t cg_icid; 160 uint64_t cg_wr_addr; 161 uint64_t cscn_ctx; 162 uint64_t i_cnt; 163 uint64_t a_cnt; 164 }; 165 166 int qbman_cgr_query(struct qbman_swp *s, uint32_t cgid, 167 struct qbman_cgr_query_rslt *r); 168 int qbman_cgr_get_cscn_wq_en_enter(struct qbman_cgr_query_rslt *r); 169 int qbman_cgr_get_cscn_wq_en_exit(struct qbman_cgr_query_rslt *r); 170 int qbman_cgr_get_cscn_wq_icd(struct qbman_cgr_query_rslt *r); 171 uint8_t qbman_cgr_get_mode(struct qbman_cgr_query_rslt *r); 172 int qbman_cgr_get_rej_cnt_mode(struct qbman_cgr_query_rslt *r); 173 int qbman_cgr_get_cscn_bdi(struct qbman_cgr_query_rslt *r); 174 uint16_t qbman_cgr_attr_get_cs_thres(struct qbman_cgr_query_rslt *r); 175 uint16_t qbman_cgr_attr_get_cs_thres_x(struct qbman_cgr_query_rslt *r); 176 uint16_t qbman_cgr_attr_get_td_thres(struct qbman_cgr_query_rslt *r); 177 178 /* WRED query */ 179 struct qbman_wred_query_rslt { 180 uint8_t verb; 181 uint8_t rslt; 182 uint8_t reserved[6]; 183 uint8_t edp[7]; 184 uint8_t reserved1; 185 uint32_t wred_parm_dp[7]; 186 uint8_t reserved2[20]; 187 }; 188 189 int qbman_cgr_wred_query(struct qbman_swp *s, uint32_t cgid, 190 struct qbman_wred_query_rslt *r); 191 int qbman_cgr_attr_wred_get_edp(struct qbman_wred_query_rslt *r, uint32_t idx); 192 void qbman_cgr_attr_wred_dp_decompose(uint32_t dp, uint64_t *minth, 193 uint64_t *maxth, uint8_t *maxp); 194 uint32_t qbman_cgr_attr_wred_get_parm_dp(struct qbman_wred_query_rslt *r, 195 uint32_t idx); 196 197 /* CGR/CCGR/CQ statistics query */ 198 int qbman_cgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 199 uint64_t *frame_cnt, uint64_t *byte_cnt); 200 int qbman_ccgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 201 uint64_t *frame_cnt, uint64_t *byte_cnt); 202 int qbman_cq_dequeue_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 203 uint64_t *frame_cnt, uint64_t *byte_cnt); 204 205 /* Query Work Queue Channel */ 206 struct qbman_wqchan_query_rslt { 207 uint8_t verb; 208 uint8_t rslt; 209 uint16_t chid; 210 uint8_t reserved; 211 uint8_t ctrl; 212 uint16_t cdan_wqid; 213 uint64_t cdan_ctx; 214 uint32_t reserved2[4]; 215 uint32_t wq_len[8]; 216 }; 217 218 int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid, 219 struct qbman_wqchan_query_rslt *r); 220 uint32_t qbman_wqchan_attr_get_wqlen(struct qbman_wqchan_query_rslt *r, int wq); 221 uint64_t qbman_wqchan_attr_get_cdan_ctx(struct qbman_wqchan_query_rslt *r); 222 uint16_t qbman_wqchan_attr_get_cdan_wqid(struct qbman_wqchan_query_rslt *r); 223 uint8_t qbman_wqchan_attr_get_ctrl(struct qbman_wqchan_query_rslt *r); 224 uint16_t qbman_wqchan_attr_get_chanid(struct qbman_wqchan_query_rslt *r); 225 #endif /* !_FSL_QBMAN_DEBUG_H */ 226