1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2015 Freescale Semiconductor, Inc. 3 * Copyright 2018-2020 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 /* FQ query command for non-programmable fields*/ 109 enum qbman_fq_schedstate_e { 110 qbman_fq_schedstate_oos = 0, 111 qbman_fq_schedstate_retired, 112 qbman_fq_schedstate_tentatively_scheduled, 113 qbman_fq_schedstate_truly_scheduled, 114 qbman_fq_schedstate_parked, 115 qbman_fq_schedstate_held_active, 116 }; 117 118 struct qbman_fq_query_np_rslt { 119 uint8_t verb; 120 uint8_t rslt; 121 uint8_t st1; 122 uint8_t st2; 123 uint8_t reserved[2]; 124 uint16_t od1_sfdr; 125 uint16_t od2_sfdr; 126 uint16_t od3_sfdr; 127 uint16_t ra1_sfdr; 128 uint16_t ra2_sfdr; 129 uint32_t pfdr_hptr; 130 uint32_t pfdr_tptr; 131 uint32_t frm_cnt; 132 uint32_t byte_cnt; 133 uint16_t ics_surp; 134 uint8_t is; 135 uint8_t reserved2[29]; 136 }; 137 138 __rte_internal 139 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid, 140 struct qbman_fq_query_np_rslt *r); 141 uint8_t qbman_fq_state_schedstate(const struct qbman_fq_query_np_rslt *r); 142 int qbman_fq_state_force_eligible(const struct qbman_fq_query_np_rslt *r); 143 int qbman_fq_state_xoff(const struct qbman_fq_query_np_rslt *r); 144 int qbman_fq_state_retirement_pending(const struct qbman_fq_query_np_rslt *r); 145 int qbman_fq_state_overflow_error(const struct qbman_fq_query_np_rslt *r); 146 __rte_internal 147 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r); 148 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r); 149 150 /* CGR query */ 151 struct qbman_cgr_query_rslt { 152 uint8_t verb; 153 uint8_t rslt; 154 uint8_t reserved[6]; 155 uint8_t ctl1; 156 uint8_t reserved1; 157 uint16_t oal; 158 uint16_t reserved2; 159 uint8_t mode; 160 uint8_t ctl2; 161 uint8_t iwc; 162 uint8_t tdc; 163 uint16_t cs_thres; 164 uint16_t cs_thres_x; 165 uint16_t td_thres; 166 uint16_t cscn_tdcp; 167 uint16_t cscn_wqid; 168 uint16_t cscn_vcgid; 169 uint16_t cg_icid; 170 uint64_t cg_wr_addr; 171 uint64_t cscn_ctx; 172 uint64_t i_cnt; 173 uint64_t a_cnt; 174 }; 175 176 int qbman_cgr_query(struct qbman_swp *s, uint32_t cgid, 177 struct qbman_cgr_query_rslt *r); 178 int qbman_cgr_get_cscn_wq_en_enter(struct qbman_cgr_query_rslt *r); 179 int qbman_cgr_get_cscn_wq_en_exit(struct qbman_cgr_query_rslt *r); 180 int qbman_cgr_get_cscn_wq_icd(struct qbman_cgr_query_rslt *r); 181 uint8_t qbman_cgr_get_mode(struct qbman_cgr_query_rslt *r); 182 int qbman_cgr_get_rej_cnt_mode(struct qbman_cgr_query_rslt *r); 183 int qbman_cgr_get_cscn_bdi(struct qbman_cgr_query_rslt *r); 184 uint16_t qbman_cgr_attr_get_cs_thres(struct qbman_cgr_query_rslt *r); 185 uint16_t qbman_cgr_attr_get_cs_thres_x(struct qbman_cgr_query_rslt *r); 186 uint16_t qbman_cgr_attr_get_td_thres(struct qbman_cgr_query_rslt *r); 187 188 /* WRED query */ 189 struct qbman_wred_query_rslt { 190 uint8_t verb; 191 uint8_t rslt; 192 uint8_t reserved[6]; 193 uint8_t edp[7]; 194 uint8_t reserved1; 195 uint32_t wred_parm_dp[7]; 196 uint8_t reserved2[20]; 197 }; 198 199 int qbman_cgr_wred_query(struct qbman_swp *s, uint32_t cgid, 200 struct qbman_wred_query_rslt *r); 201 int qbman_cgr_attr_wred_get_edp(struct qbman_wred_query_rslt *r, uint32_t idx); 202 void qbman_cgr_attr_wred_dp_decompose(uint32_t dp, uint64_t *minth, 203 uint64_t *maxth, uint8_t *maxp); 204 uint32_t qbman_cgr_attr_wred_get_parm_dp(struct qbman_wred_query_rslt *r, 205 uint32_t idx); 206 207 /* CGR/CCGR/CQ statistics query */ 208 int qbman_cgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 209 uint64_t *frame_cnt, uint64_t *byte_cnt); 210 int qbman_ccgr_reject_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 211 uint64_t *frame_cnt, uint64_t *byte_cnt); 212 int qbman_cq_dequeue_statistics(struct qbman_swp *s, uint32_t cgid, int clear, 213 uint64_t *frame_cnt, uint64_t *byte_cnt); 214 215 /* Query Work Queue Channel */ 216 struct qbman_wqchan_query_rslt { 217 uint8_t verb; 218 uint8_t rslt; 219 uint16_t chid; 220 uint8_t reserved; 221 uint8_t ctrl; 222 uint16_t cdan_wqid; 223 uint64_t cdan_ctx; 224 uint32_t reserved2[4]; 225 uint32_t wq_len[8]; 226 }; 227 228 int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid, 229 struct qbman_wqchan_query_rslt *r); 230 uint32_t qbman_wqchan_attr_get_wqlen(struct qbman_wqchan_query_rslt *r, int wq); 231 uint64_t qbman_wqchan_attr_get_cdan_ctx(struct qbman_wqchan_query_rslt *r); 232 uint16_t qbman_wqchan_attr_get_cdan_wqid(struct qbman_wqchan_query_rslt *r); 233 uint8_t qbman_wqchan_attr_get_ctrl(struct qbman_wqchan_query_rslt *r); 234 uint16_t qbman_wqchan_attr_get_chanid(struct qbman_wqchan_query_rslt *r); 235 #endif /* !_FSL_QBMAN_DEBUG_H */ 236