Skip to content
Snippets Groups Projects
Commit 931b1c64 authored by Adam Wujek's avatar Adam Wujek
Browse files

tools/ppsi_conf: add setting delay-req-interval and sync-interval


Signed-off-by: default avatarAdam Wujek <dev_public@wujek.eu>
parent 194eaef4
Branches
Tags
No related merge requests found
......@@ -62,6 +62,12 @@ static inline wrs_arch_data_t *WRS_ARCH_G(struct pp_globals *ppg)
extern void wrs_main_loop(struct pp_globals *ppg);
void set_param_global_prio1(struct pp_globals *ppg, int prio1);
void set_param_global_prio2(struct pp_globals *ppg, int prio2);
void set_param_inst_logMinDelayReqInterval(struct pp_instance *ppi,
int logMinDelayReqInterval);
void set_param_inst_logMinPdelayReqInterval(struct pp_instance *ppi,
int logMinPdelayReqInterval);
void set_param_inst_logSyncInterval(struct pp_instance *ppi,
int logSyncInterval);
extern void wrs_init_ipcserver(struct pp_globals *ppg, struct minipc_ch *ppsi_ch);
......
......@@ -17,6 +17,10 @@
#define PPSIEXP_PARAM_PRIORITY1_CMD 1
#define PPSIEXP_PARAM_PRIORITY2_CMD 2
/* Commands for ppsiexp_update_param_instance_cmd */
#define PPSIEXP_PARAM_INST_DELAY_REQ_INT_CMD 1
#define PPSIEXP_PARAM_INST_SYNC_INT_CMD 2
/* Export structures, shared by server and client for argument matching */
#ifdef PPSI_EXPORT_STRUCTURES
......
......@@ -109,6 +109,49 @@ static int update_param_instance_cmd(const struct minipc_pd *pd,
struct pp_instance *ppi;
switch (param_type) {
case PPSIEXP_PARAM_INST_DELAY_REQ_INT_CMD:
ppi = INST(ppg_local, param_instance);
pp_diag(ppi, config, 2,
"%s: cmd %d (PPSIEXP_PARAM_INST_DELAY_REQ_INT_CMD) "
"instance %d, port %s, value %d\n", __func__,
param_type, param_instance, ppi->iface_name, param_val);
if (!check_range_inst_logMinDelayReqInterval(ppi->cfg.profile,
param_val)) {
pp_diag(ppi, config, 1,
"Param update Error: value of "
"logMinDelayReqInterval (%d) not in range! "
"cmd %d (PPSIEXP_PARAM_INST_DELAY_REQ_INT_CMD) "
"instance %d, port %s\n",
param_val, param_type, param_instance, ppi->iface_name);
rval = PPSIEXP_RET_ERROR_VAL;
break;
}
set_param_inst_logMinDelayReqInterval(ppi, param_val);
break;
case PPSIEXP_PARAM_INST_SYNC_INT_CMD:
ppi = INST(ppg_local, param_instance);
pp_diag(ppi, config, 2,
"%s: cmd %d (PPSIEXP_PARAM_INST_SYNC_INT_CMD) "
"instance %d, port %s, value %d\n", __func__,
param_type, param_instance, ppi->iface_name, param_val);
if (!check_range_inst_logSyncInterval(ppi->cfg.profile,
param_val)) {
pp_diag(ppi, config, 1,
"Param update Error: value of "
"logSyncInterval (%d) not in range! "
"cmd %d (PPSIEXP_PARAM_INST_SYNC_INT_CMD) "
"instance %d, port %s\n",
param_val, param_type, param_instance, ppi->iface_name);
rval = PPSIEXP_RET_ERROR_VAL;
break;
}
set_param_inst_logSyncInterval(ppi, param_val);
break;
default:
ppi = INST(ppg_local, param_instance);
......
......@@ -114,6 +114,47 @@ void set_param_global_prio2(struct pp_globals *ppg, int prio2)
bmc_apply_configured_device_attributes(ppg);
}
/* Functions to set parameters specific to instance */
void set_param_inst_logMinDelayReqInterval(struct pp_instance *ppi,
int logMinDelayReqInterval)
{
int millisec;
DSPOR(ppi)->logMinDelayReqInterval = logMinDelayReqInterval;
ppi->cfg.min_delay_req_interval = logMinDelayReqInterval;
millisec = pp_timeout_log_to_ms(logMinDelayReqInterval);
if (is_delayMechanismE2E(ppi))
pp_timeout_set_rename(ppi, PP_TO_REQUEST, millisec);
}
void set_param_inst_logMinPdelayReqInterval(struct pp_instance *ppi,
int logMinPdelayReqInterval)
{
int millisec;
DSPOR(ppi)->logMinPdelayReqInterval = logMinPdelayReqInterval;
ppi->cfg.min_pdelay_req_interval = logMinPdelayReqInterval;
millisec = pp_timeout_log_to_ms(logMinPdelayReqInterval);
if (is_delayMechanismP2P(ppi))
pp_timeout_set_rename(ppi, PP_TO_REQUEST, millisec);
}
void set_param_inst_logSyncInterval(struct pp_instance *ppi,
int logSyncInterval)
{
int millisec;
DSPOR(ppi)->logSyncInterval = logSyncInterval;
ppi->cfg.sync_interval = logSyncInterval;
millisec = pp_timeout_log_to_ms(logSyncInterval);
pp_timeout_set_rename(ppi, PP_TO_SYNC_SEND, millisec);
}
static char *strCodeOpt="CODEOPT=("
#if CONFIG_HAS_CODEOPT_EPC_ENABLED
" EPC"
......
......@@ -195,3 +195,8 @@ extern int f_simple_int(struct pp_argline *l, int lineno,
struct pp_globals *ppg, union pp_cfg_arg *arg);
int in_range(int val, int min, int max);
int check_range_inst_logMinDelayReqInterval(int profile,
int logMinDelayReqInterval);
int check_range_inst_logMinPdelayReqInterval(int profile,
int logMinPdelayReqInterval);
int check_range_inst_logSyncInterval(int profile, int logSyncInterval);
......@@ -51,14 +51,26 @@
#define PP_MIN_MIN_DELAY_REQ_INTERVAL 0
#define PP_MAX_MIN_DELAY_REQ_INTERVAL 5
#define PP_DEFAULT_MIN_DELAY_REQ_INTERVAL_CUSTOM PP_DEFAULT_MIN_DELAY_REQ_INTERVAL
#define PP_MIN_MIN_DELAY_REQ_INTERVAL_CUSTOM -6
#define PP_MAX_MIN_DELAY_REQ_INTERVAL_CUSTOM PP_MAX_MIN_DELAY_REQ_INTERVAL
#define PP_DEFAULT_MIN_PDELAY_REQ_INTERVAL 0
#define PP_MIN_MIN_PDELAY_REQ_INTERVAL 0
#define PP_MAX_MIN_PDELAY_REQ_INTERVAL 5
#define PP_DEFAULT_MIN_PDELAY_REQ_INTERVAL_CUSTOM PP_DEFAULT_MIN_PDELAY_REQ_INTERVAL
#define PP_MIN_MIN_PDELAY_REQ_INTERVAL_CUSTOM -6
#define PP_MAX_MIN_PDELAY_REQ_INTERVAL_CUSTOM PP_MAX_MIN_PDELAY_REQ_INTERVAL
#define PP_DEFAULT_SYNC_INTERVAL 0 /* -7 in 802.1AS */
#define PP_MIN_SYNC_INTERVAL -1
#define PP_MAX_SYNC_INTERVAL 1
#define PP_DEFAULT_SYNC_INTERVAL_CUSTOM PP_DEFAULT_SYNC_INTERVAL
#define PP_MIN_SYNC_INTERVAL_CUSTOM -6
#define PP_MAX_SYNC_INTERVAL_CUSTOM PP_MAX_SYNC_INTERVAL
/* Min/max values for delay coefficient */
#define PP_MIN_DELAY_COEFFICIENT_AS_RELDIFF (((int64_t)-1)<<REL_DIFF_FRACBITS)
#define PP_MAX_DELAY_COEFFICIENT_AS_RELDIFF (((int64_t) 1)<<REL_DIFF_FRACBITS)
......
......@@ -756,3 +756,43 @@ int in_range(int val, int min, int max)
return 0;
return 1;
}
/* Functions to check ranges of parameters specific to instance */
int check_range_inst_logMinDelayReqInterval(int profile,
int logMinDelayReqInterval)
{
if (profile == PPSI_PROFILE_CUSTOM)
return in_range(logMinDelayReqInterval,
PP_MIN_MIN_DELAY_REQ_INTERVAL_CUSTOM,
PP_MAX_MIN_DELAY_REQ_INTERVAL_CUSTOM);
return in_range(logMinDelayReqInterval,
PP_MIN_MIN_DELAY_REQ_INTERVAL,
PP_MAX_MIN_DELAY_REQ_INTERVAL);
}
int check_range_inst_logMinPdelayReqInterval(int profile,
int logMinPdelayReqInterval)
{
if (profile == PPSI_PROFILE_CUSTOM)
return in_range(logMinPdelayReqInterval,
PP_MIN_MIN_PDELAY_REQ_INTERVAL_CUSTOM,
PP_MAX_MIN_PDELAY_REQ_INTERVAL_CUSTOM);
return in_range(logMinPdelayReqInterval,
PP_MIN_MIN_PDELAY_REQ_INTERVAL,
PP_MAX_MIN_PDELAY_REQ_INTERVAL);
}
int check_range_inst_logSyncInterval(int profile, int logSyncInterval)
{
if (profile == PPSI_PROFILE_CUSTOM)
return in_range(logSyncInterval,
PP_MIN_SYNC_INTERVAL_CUSTOM,
PP_MAX_SYNC_INTERVAL_CUSTOM);
return in_range(logSyncInterval,
PP_MIN_SYNC_INTERVAL,
PP_MAX_SYNC_INTERVAL);
}
......@@ -26,21 +26,25 @@ static struct minipc_ch *ptp_ch;
enum input_arg {
arg_help = 'Z' + 1, /* avoid conflicts with short options */
arg_delay_req_interval,
arg_instance,
arg_prio1,
arg_prio2,
arg_sync_interval,
arg_tracking,
arg_verbose,
};
static struct option long_opts[] = {
{"help", no_argument, NULL, arg_help},
{"delay-req-interval", required_argument, NULL, arg_delay_req_interval},
{"instance", required_argument, NULL, arg_instance},
{"ppi", required_argument, NULL, arg_instance},
{"prio1", required_argument, NULL, arg_prio1},
{"priority1", required_argument, NULL, arg_prio1},
{"prio2", required_argument, NULL, arg_prio2},
{"priority2", required_argument, NULL, arg_prio2},
{"sync-interval", required_argument, NULL, arg_sync_interval},
{"tracking", required_argument, NULL, arg_tracking},
{"verbose", optional_argument, NULL, arg_verbose},
{NULL, 0, NULL, 0}
......@@ -65,6 +69,12 @@ void help(char *prgname)
"Parameters specific for PPSi instance:\n"
" --instance=<num>\n"
" --ppi=<num> - Select PPSi instance\n"
" --delay-req-interval=<num>\n"
" - sets logarithm to the base 2 of the mean interval of delay"
" request message transmission; used when a port is in Slave state\n"
" --sync-interval=<num>\n"
" - sets logarithm to the base 2 of the mean interval of sync"
" message transmission; used when a port is in Master state\n"
);
exit(1);
}
......@@ -168,6 +178,26 @@ int main(int argc, char *argv[])
while ((opt = getopt_long(argc, argv, "vh", long_opts, NULL)) != -1) {
switch (opt) {
case arg_delay_req_interval:
/* Check if an instance is set. If not exit. */
check_instance(ppsi_instance);
tmp = atoi(optarg);
if (verbose)
printf("Setting delay request interval for "
"instance %d to %d\n",
ppsi_instance, tmp);
ret = ppsi_set_param_instance(
PPSIEXP_PARAM_INST_DELAY_REQ_INT_CMD,
ppsi_instance,
tmp);
if (ret) {
fprintf(stderr, "Error setting delay request "
"interval for instance %d to %d\n",
ppsi_instance, tmp);
exit (1);
}
break;
case arg_instance:
ppsi_instance = atoi(optarg);
if (verbose)
......@@ -197,6 +227,26 @@ int main(int argc, char *argv[])
}
break;
case arg_sync_interval:
/* Check if an instance is set. If not exit. */
check_instance(ppsi_instance);
tmp = atoi(optarg);
if (verbose)
printf("Setting sync interval for instance %d "
"to %d\n",
ppsi_instance, tmp);
ret = ppsi_set_param_instance(
PPSIEXP_PARAM_INST_SYNC_INT_CMD,
ppsi_instance,
tmp);
if (ret) {
fprintf(stderr, "Error setting sync interval "
"for instance %d to %d\n",
ppsi_instance, tmp);
exit (1);
}
break;
case arg_tracking:
{
int tracking;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment