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 : : /* 124 : : * If validate frame is enabled in secy configuration, 125 : : * pkt unchecked count is same as pkt ok count. 126 : : */ 127 : 0 : stats->pkt_ok_cnt = rsp->pkt_unchecked_cnt; 128 : : } else { 129 : 0 : stats->pkt_delay_cnt = rsp->pkt_delay_cnt; 130 : 0 : stats->pkt_ok_cnt = rsp->pkt_ok_cnt; 131 : : } 132 : : } else { 133 : 0 : stats->pkt_encrypt_cnt = rsp->pkt_encrypt_cnt; 134 [ # # ]: 0 : stats->pkt_protected_cnt = rsp->pkt_protected_cnt; 135 [ # # ]: 0 : if (roc_model_is_cn10kb_a0()) { 136 : 0 : stats->octet_encrypt_cnt = rsp->octet_encrypt_cnt; 137 : 0 : stats->octet_protected_cnt = rsp->octet_protected_cnt; 138 : : } 139 : : } 140 : : 141 : : return rc; 142 : : } 143 : : 144 : : int 145 [ # # ]: 0 : roc_mcs_port_stats_get(struct roc_mcs *mcs, struct roc_mcs_stats_req *mcs_req, 146 : : struct roc_mcs_port_stats *stats) 147 : : { 148 : : struct mcs_port_stats *rsp; 149 : : struct mcs_stats_req *req; 150 : : int rc; 151 : : 152 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 153 : : 154 : 0 : req = mbox_alloc_msg_mcs_get_port_stats(mcs->mbox); 155 [ # # ]: 0 : if (req == NULL) 156 : : return -ENOSPC; 157 : : 158 : 0 : req->id = mcs_req->id; 159 : 0 : req->mcs_id = mcs->idx; 160 : 0 : req->dir = mcs_req->dir; 161 : : 162 : 0 : rc = mbox_process_msg(mcs->mbox, (void *)&rsp); 163 [ # # ]: 0 : if (rc) 164 : : return rc; 165 : : 166 : 0 : stats->tcam_miss_cnt = rsp->tcam_miss_cnt; 167 [ # # ]: 0 : stats->parser_err_cnt = rsp->parser_err_cnt; 168 [ # # ]: 0 : if (roc_model_is_cnf10kb()) 169 : 0 : stats->preempt_err_cnt = rsp->preempt_err_cnt; 170 : : 171 : 0 : stats->sectag_insert_err_cnt = rsp->sectag_insert_err_cnt; 172 : : 173 : 0 : return rc; 174 : : } 175 : : 176 : : int 177 [ # # ]: 0 : roc_mcs_stats_clear(struct roc_mcs *mcs, struct roc_mcs_clear_stats *mcs_req) 178 : : { 179 : : struct mcs_clear_stats *req; 180 : : struct msg_rsp *rsp; 181 : : 182 [ # # # # ]: 0 : MCS_SUPPORT_CHECK; 183 : : 184 [ # # # # ]: 0 : if (!roc_model_is_cn10kb_a0() && mcs_req->type == MCS_SA_STATS) 185 : : return MCS_ERR_HW_NOTSUP; 186 : : 187 : 0 : req = mbox_alloc_msg_mcs_clear_stats(mcs->mbox); 188 [ # # ]: 0 : if (req == NULL) 189 : : return -ENOSPC; 190 : : 191 : 0 : req->type = mcs_req->type; 192 : 0 : req->id = mcs_req->id; 193 : 0 : req->mcs_id = mcs->idx; 194 : 0 : req->dir = mcs_req->dir; 195 : 0 : req->all = mcs_req->all; 196 : : 197 : 0 : return mbox_process_msg(mcs->mbox, (void *)&rsp); 198 : : }