David Marchand cfe3aeb170 remove experimental tags from all symbol definitions
We had some inconsistencies between functions prototypes and actual
definitions.
Let's avoid this by only adding the experimental tag to the prototypes.
Tests with gcc and clang show it is enough.

git grep -l __rte_experimental |grep \.c$ |while read file; do
	sed -i -e '/^__rte_experimental$/d' $file;
	sed -i -e 's/  *__rte_experimental//' $file;
	sed -i -e 's/__rte_experimental  *//' $file;
done

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
2019-06-29 19:04:43 +02:00

163 lines
3.5 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2014 Intel Corporation
*/
#include <inttypes.h>
#include <stdio.h>
#include <math.h>
#include <rte_common.h>
#include <rte_log.h>
#include <rte_cycles.h>
#include "rte_meter.h"
#ifndef RTE_METER_TB_PERIOD_MIN
#define RTE_METER_TB_PERIOD_MIN 100
#endif
static void
rte_meter_get_tb_params(uint64_t hz, uint64_t rate, uint64_t *tb_period, uint64_t *tb_bytes_per_period)
{
double period;
if (rate == 0) {
*tb_bytes_per_period = 0;
*tb_period = RTE_METER_TB_PERIOD_MIN;
return;
}
period = ((double) hz) / ((double) rate);
if (period >= RTE_METER_TB_PERIOD_MIN) {
*tb_bytes_per_period = 1;
*tb_period = (uint64_t) period;
} else {
*tb_bytes_per_period = (uint64_t) ceil(RTE_METER_TB_PERIOD_MIN / period);
*tb_period = (hz * (*tb_bytes_per_period)) / rate;
}
}
int
rte_meter_srtcm_profile_config(struct rte_meter_srtcm_profile *p,
struct rte_meter_srtcm_params *params)
{
uint64_t hz = rte_get_tsc_hz();
/* Check input parameters */
if ((p == NULL) ||
(params == NULL) ||
(params->cir == 0) ||
((params->cbs == 0) && (params->ebs == 0)))
return -EINVAL;
/* Initialize srTCM run-time structure */
p->cbs = params->cbs;
p->ebs = params->ebs;
rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
&p->cir_bytes_per_period);
return 0;
}
int
rte_meter_srtcm_config(struct rte_meter_srtcm *m,
struct rte_meter_srtcm_profile *p)
{
/* Check input parameters */
if ((m == NULL) || (p == NULL))
return -EINVAL;
/* Initialize srTCM run-time structure */
m->time = rte_get_tsc_cycles();
m->tc = p->cbs;
m->te = p->ebs;
return 0;
}
int
rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p,
struct rte_meter_trtcm_params *params)
{
uint64_t hz = rte_get_tsc_hz();
/* Check input parameters */
if ((p == NULL) ||
(params == NULL) ||
(params->cir == 0) ||
(params->pir == 0) ||
(params->pir < params->cir) ||
(params->cbs == 0) ||
(params->pbs == 0))
return -EINVAL;
/* Initialize trTCM run-time structure */
p->cbs = params->cbs;
p->pbs = params->pbs;
rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
&p->cir_bytes_per_period);
rte_meter_get_tb_params(hz, params->pir, &p->pir_period,
&p->pir_bytes_per_period);
return 0;
}
int
rte_meter_trtcm_config(struct rte_meter_trtcm *m,
struct rte_meter_trtcm_profile *p)
{
/* Check input parameters */
if ((m == NULL) || (p == NULL))
return -EINVAL;
/* Initialize trTCM run-time structure */
m->time_tc = m->time_tp = rte_get_tsc_cycles();
m->tc = p->cbs;
m->tp = p->pbs;
return 0;
}
int
rte_meter_trtcm_rfc4115_profile_config(
struct rte_meter_trtcm_rfc4115_profile *p,
struct rte_meter_trtcm_rfc4115_params *params)
{
uint64_t hz = rte_get_tsc_hz();
/* Check input parameters */
if ((p == NULL) ||
(params == NULL) ||
(params->cir != 0 && params->cbs == 0) ||
(params->eir != 0 && params->ebs == 0))
return -EINVAL;
/* Initialize trTCM run-time structure */
p->cbs = params->cbs;
p->ebs = params->ebs;
rte_meter_get_tb_params(hz, params->cir, &p->cir_period,
&p->cir_bytes_per_period);
rte_meter_get_tb_params(hz, params->eir, &p->eir_period,
&p->eir_bytes_per_period);
return 0;
}
int
rte_meter_trtcm_rfc4115_config(
struct rte_meter_trtcm_rfc4115 *m,
struct rte_meter_trtcm_rfc4115_profile *p)
{
/* Check input parameters */
if ((m == NULL) || (p == NULL))
return -EINVAL;
/* Initialize trTCM run-time structure */
m->time_tc = m->time_te = rte_get_tsc_cycles();
m->tc = p->cbs;
m->te = p->ebs;
return 0;
}