1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2014 Intel Corporation
9 #include <rte_common.h>
11 #include <rte_cycles.h>
12 #include <rte_function_versioning.h>
14 #include "rte_meter.h"
16 #ifndef RTE_METER_TB_PERIOD_MIN
17 #define RTE_METER_TB_PERIOD_MIN 100
21 rte_meter_get_tb_params(uint64_t hz, uint64_t rate, uint64_t *tb_period, uint64_t *tb_bytes_per_period)
26 *tb_bytes_per_period = 0;
27 *tb_period = RTE_METER_TB_PERIOD_MIN;
31 period = ((double) hz) / ((double) rate);
33 if (period >= RTE_METER_TB_PERIOD_MIN) {
34 *tb_bytes_per_period = 1;
35 *tb_period = (uint64_t) period;
37 *tb_bytes_per_period = (uint64_t) ceil(RTE_METER_TB_PERIOD_MIN / period);
38 *tb_period = (hz * (*tb_bytes_per_period)) / rate;
43 rte_meter_srtcm_profile_config(struct rte_meter_srtcm_profile *p,
44 struct rte_meter_srtcm_params *params)
46 uint64_t hz = rte_get_tsc_hz();
48 /* Check input parameters */
52 ((params->cbs == 0) && (params->ebs == 0)))
55 /* Initialize srTCM run-time structure */
58 rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
59 &p->cir_bytes_per_period);
65 rte_meter_srtcm_config(struct rte_meter_srtcm *m,
66 struct rte_meter_srtcm_profile *p)
68 /* Check input parameters */
69 if ((m == NULL) || (p == NULL))
72 /* Initialize srTCM run-time structure */
73 m->time = rte_get_tsc_cycles();
81 rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p,
82 struct rte_meter_trtcm_params *params)
84 uint64_t hz = rte_get_tsc_hz();
86 /* Check input parameters */
91 (params->pir < params->cir) ||
96 /* Initialize trTCM run-time structure */
99 rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
100 &p->cir_bytes_per_period);
101 rte_meter_get_tb_params(hz, params->pir, &p->pir_period,
102 &p->pir_bytes_per_period);
108 rte_meter_trtcm_config(struct rte_meter_trtcm *m,
109 struct rte_meter_trtcm_profile *p)
111 /* Check input parameters */
112 if ((m == NULL) || (p == NULL))
115 /* Initialize trTCM run-time structure */
116 m->time_tc = m->time_tp = rte_get_tsc_cycles();
124 * ABI aliasing done for 'rte_meter_trtcm_rfc4115_profile_config'
125 * to support both EXPERIMENTAL and DPDK_21 versions
126 * This versioning will be removed on next ABI version (v20.11)
127 * and '__rte_meter_trtcm_rfc4115_profile_config' will be restrored back to
128 * 'rte_meter_trtcm_rfc4115_profile_config' without versioning.
131 __rte_meter_trtcm_rfc4115_profile_config(
132 struct rte_meter_trtcm_rfc4115_profile *p,
133 struct rte_meter_trtcm_rfc4115_params *params)
135 uint64_t hz = rte_get_tsc_hz();
137 /* Check input parameters */
140 (params->cir != 0 && params->cbs == 0) ||
141 (params->eir != 0 && params->ebs == 0))
144 /* Initialize trTCM run-time structure */
145 p->cbs = params->cbs;
146 p->ebs = params->ebs;
147 rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
148 &p->cir_bytes_per_period);
149 rte_meter_get_tb_params(hz, params->eir, &p->eir_period,
150 &p->eir_bytes_per_period);
156 rte_meter_trtcm_rfc4115_profile_config_s(
157 struct rte_meter_trtcm_rfc4115_profile *p,
158 struct rte_meter_trtcm_rfc4115_params *params);
160 rte_meter_trtcm_rfc4115_profile_config_s(
161 struct rte_meter_trtcm_rfc4115_profile *p,
162 struct rte_meter_trtcm_rfc4115_params *params)
164 return __rte_meter_trtcm_rfc4115_profile_config(p, params);
166 BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
167 MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
168 struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
171 rte_meter_trtcm_rfc4115_profile_config_e(
172 struct rte_meter_trtcm_rfc4115_profile *p,
173 struct rte_meter_trtcm_rfc4115_params *params);
175 rte_meter_trtcm_rfc4115_profile_config_e(
176 struct rte_meter_trtcm_rfc4115_profile *p,
177 struct rte_meter_trtcm_rfc4115_params *params)
179 return __rte_meter_trtcm_rfc4115_profile_config(p, params);
181 VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
184 * ABI aliasing done for 'rte_meter_trtcm_rfc4115_config'
185 * to support both EXPERIMENTAL and DPDK_21 versions
186 * This versioning will be removed on next ABI version (v20.11)
187 * and '__rte_meter_trtcm_rfc4115_config' will be restrored back to
188 * 'rte_meter_trtcm_rfc4115_config' without versioning.
191 __rte_meter_trtcm_rfc4115_config(
192 struct rte_meter_trtcm_rfc4115 *m,
193 struct rte_meter_trtcm_rfc4115_profile *p)
195 /* Check input parameters */
196 if ((m == NULL) || (p == NULL))
199 /* Initialize trTCM run-time structure */
200 m->time_tc = m->time_te = rte_get_tsc_cycles();
208 rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
209 struct rte_meter_trtcm_rfc4115_profile *p);
211 rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
212 struct rte_meter_trtcm_rfc4115_profile *p)
214 return __rte_meter_trtcm_rfc4115_config(m, p);
216 BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
217 MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
218 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
221 rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
222 struct rte_meter_trtcm_rfc4115_profile *p);
224 rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
225 struct rte_meter_trtcm_rfc4115_profile *p)
227 return __rte_meter_trtcm_rfc4115_config(m, p);
229 VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);