Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2023 Marvell. 3 : : */ 4 : : 5 : : #include "roc_api.h" 6 : : #include "roc_priv.h" 7 : : 8 : : int 9 [ # # ]: 0 : roc_mcs_flowid_stats_get(struct roc_mcs *mcs, struct roc_mcs_stats_req *mcs_req, 10 : : struct roc_mcs_flowid_stats *stats) 11 : : { 12 : : struct mcs_flowid_stats *rsp; 13 : : struct mcs_stats_req *req; 14 : : int rc; 15 : : 16 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 17 : : 18 : 0 : req = mbox_alloc_msg_mcs_get_flowid_stats(mcs->mbox); 19 [ # # ]: 0 : if (req == NULL) 20 : : return -ENOSPC; 21 : : 22 : 0 : req->id = mcs_req->id; 23 : 0 : req->mcs_id = mcs->idx; 24 : 0 : req->dir = mcs_req->dir; 25 : : 26 : 0 : rc = mbox_process_msg(mcs->mbox, (void *)&rsp); 27 [ # # ]: 0 : if (rc) 28 : : return rc; 29 : : 30 : 0 : stats->tcam_hit_cnt = rsp->tcam_hit_cnt; 31 : : 32 : 0 : return rc; 33 : : } 34 : : 35 : : int 36 [ # # ]: 0 : roc_mcs_secy_stats_get(struct roc_mcs *mcs, struct roc_mcs_stats_req *mcs_req, 37 : : struct roc_mcs_secy_stats *stats) 38 : : { 39 : : struct mcs_secy_stats *rsp; 40 : : struct mcs_stats_req *req; 41 : : int rc; 42 : : 43 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 44 : : 45 : 0 : req = mbox_alloc_msg_mcs_get_secy_stats(mcs->mbox); 46 [ # # ]: 0 : if (req == NULL) 47 : : return -ENOSPC; 48 : : 49 : 0 : req->id = mcs_req->id; 50 : 0 : req->mcs_id = mcs->idx; 51 : 0 : req->dir = mcs_req->dir; 52 : : 53 : 0 : rc = mbox_process_msg(mcs->mbox, (void *)&rsp); 54 [ # # ]: 0 : if (rc) 55 : : return rc; 56 : : 57 : 0 : stats->ctl_pkt_bcast_cnt = rsp->ctl_pkt_bcast_cnt; 58 : 0 : stats->ctl_pkt_mcast_cnt = rsp->ctl_pkt_mcast_cnt; 59 : 0 : stats->ctl_pkt_ucast_cnt = rsp->ctl_pkt_ucast_cnt; 60 : 0 : stats->ctl_octet_cnt = rsp->ctl_octet_cnt; 61 : 0 : stats->unctl_pkt_bcast_cnt = rsp->unctl_pkt_bcast_cnt; 62 : 0 : stats->unctl_pkt_mcast_cnt = rsp->unctl_pkt_mcast_cnt; 63 : 0 : stats->unctl_pkt_ucast_cnt = rsp->unctl_pkt_ucast_cnt; 64 : 0 : stats->unctl_octet_cnt = rsp->unctl_octet_cnt; 65 : : 66 [ # # ]: 0 : if (mcs_req->dir == MCS_RX) { 67 : 0 : stats->octet_decrypted_cnt = rsp->octet_decrypted_cnt; 68 : 0 : stats->octet_validated_cnt = rsp->octet_validated_cnt; 69 : 0 : stats->pkt_port_disabled_cnt = rsp->pkt_port_disabled_cnt; 70 : 0 : stats->pkt_badtag_cnt = rsp->pkt_badtag_cnt; 71 : 0 : stats->pkt_nosa_cnt = rsp->pkt_nosa_cnt; 72 : 0 : stats->pkt_nosaerror_cnt = rsp->pkt_nosaerror_cnt; 73 : 0 : stats->pkt_tagged_ctl_cnt = rsp->pkt_tagged_ctl_cnt; 74 [ # # ]: 0 : stats->pkt_untaged_cnt = rsp->pkt_untaged_cnt; 75 [ # # ]: 0 : if (roc_model_is_cn10kb_a0()) 76 : : /* CN10K-B */ 77 : 0 : stats->pkt_ctl_cnt = rsp->pkt_ctl_cnt; 78 : : else 79 : : /* CNF10K-B */ 80 : 0 : stats->pkt_notag_cnt = rsp->pkt_notag_cnt; 81 : : } else { 82 : 0 : stats->octet_encrypted_cnt = rsp->octet_encrypted_cnt; 83 : 0 : stats->octet_protected_cnt = rsp->octet_protected_cnt; 84 : 0 : stats->pkt_noactivesa_cnt = rsp->pkt_noactivesa_cnt; 85 : 0 : stats->pkt_toolong_cnt = rsp->pkt_toolong_cnt; 86 : 0 : stats->pkt_untagged_cnt = rsp->pkt_untagged_cnt; 87 : : } 88 : : 89 : : return rc; 90 : : } 91 : : 92 : : int 93 [ # # ]: 0 : roc_mcs_sc_stats_get(struct roc_mcs *mcs, struct roc_mcs_stats_req *mcs_req, 94 : : struct roc_mcs_sc_stats *stats) 95 : : { 96 : : struct mcs_stats_req *req; 97 : : struct mcs_sc_stats *rsp; 98 : : int rc; 99 : : 100 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 101 : : 102 : 0 : req = mbox_alloc_msg_mcs_get_sc_stats(mcs->mbox); 103 [ # # ]: 0 : if (req == NULL) 104 : : return -ENOSPC; 105 : : 106 : 0 : req->id = mcs_req->id; 107 : 0 : req->mcs_id = mcs->idx; 108 : 0 : req->dir = mcs_req->dir; 109 : : 110 : 0 : rc = mbox_process_msg(mcs->mbox, (void *)&rsp); 111 [ # # ]: 0 : if (rc) 112 : : return rc; 113 : : 114 [ # # ]: 0 : if (mcs_req->dir == MCS_RX) { 115 : 0 : stats->hit_cnt = rsp->hit_cnt; 116 : 0 : stats->pkt_invalid_cnt = rsp->pkt_invalid_cnt; 117 : 0 : stats->pkt_late_cnt = rsp->pkt_late_cnt; 118 : 0 : stats->pkt_notvalid_cnt = rsp->pkt_notvalid_cnt; 119 [ # # ]: 0 : stats->pkt_unchecked_cnt = rsp->pkt_unchecked_cnt; 120 [ # # ]: 0 : if (roc_model_is_cn10kb_a0()) { 121 : 0 : stats->octet_decrypt_cnt = rsp->octet_decrypt_cnt; 122 : 0 : stats->octet_validate_cnt = rsp->octet_validate_cnt; 123 : : } else { 124 : 0 : stats->pkt_delay_cnt = rsp->pkt_delay_cnt; 125 : 0 : stats->pkt_ok_cnt = rsp->pkt_ok_cnt; 126 : : } 127 : : } else { 128 : 0 : stats->pkt_encrypt_cnt = rsp->pkt_encrypt_cnt; 129 [ # # ]: 0 : stats->pkt_protected_cnt = rsp->pkt_protected_cnt; 130 [ # # ]: 0 : if (roc_model_is_cn10kb_a0()) { 131 : 0 : stats->octet_encrypt_cnt = rsp->octet_encrypt_cnt; 132 : 0 : stats->octet_protected_cnt = rsp->octet_protected_cnt; 133 : : } 134 : : } 135 : : 136 : : return rc; 137 : : } 138 : : 139 : : int 140 [ # # ]: 0 : roc_mcs_port_stats_get(struct roc_mcs *mcs, struct roc_mcs_stats_req *mcs_req, 141 : : struct roc_mcs_port_stats *stats) 142 : : { 143 : : struct mcs_port_stats *rsp; 144 : : struct mcs_stats_req *req; 145 : : int rc; 146 : : 147 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 148 : : 149 : 0 : req = mbox_alloc_msg_mcs_get_port_stats(mcs->mbox); 150 [ # # ]: 0 : if (req == NULL) 151 : : return -ENOSPC; 152 : : 153 : 0 : req->id = mcs_req->id; 154 : 0 : req->mcs_id = mcs->idx; 155 : 0 : req->dir = mcs_req->dir; 156 : : 157 : 0 : rc = mbox_process_msg(mcs->mbox, (void *)&rsp); 158 [ # # ]: 0 : if (rc) 159 : : return rc; 160 : : 161 : 0 : stats->tcam_miss_cnt = rsp->tcam_miss_cnt; 162 [ # # ]: 0 : stats->parser_err_cnt = rsp->parser_err_cnt; 163 [ # # ]: 0 : if (roc_model_is_cnf10kb()) 164 : 0 : stats->preempt_err_cnt = rsp->preempt_err_cnt; 165 : : 166 : 0 : stats->sectag_insert_err_cnt = rsp->sectag_insert_err_cnt; 167 : : 168 : 0 : return rc; 169 : : } 170 : : 171 : : int 172 [ # # ]: 0 : roc_mcs_stats_clear(struct roc_mcs *mcs, struct roc_mcs_clear_stats *mcs_req) 173 : : { 174 : : struct mcs_clear_stats *req; 175 : : struct msg_rsp *rsp; 176 : : 177 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 178 : : 179 [ # # # # ]: 0 : if (!roc_model_is_cn10kb_a0() && mcs_req->type == MCS_SA_STATS) 180 : : return MCS_ERR_HW_NOTSUP; 181 : : 182 : 0 : req = mbox_alloc_msg_mcs_clear_stats(mcs->mbox); 183 [ # # ]: 0 : if (req == NULL) 184 : : return -ENOSPC; 185 : : 186 : 0 : req->type = mcs_req->type; 187 : 0 : req->id = mcs_req->id; 188 : 0 : req->mcs_id = mcs->idx; 189 : 0 : req->dir = mcs_req->dir; 190 : 0 : req->all = mcs_req->all; 191 : : 192 : 0 : return mbox_process_msg(mcs->mbox, (void *)&rsp); 193 : : }