Commit 70765afa authored by Adam Wujek's avatar Adam Wujek

Merge wr-switch-sw-v6.0.2 into master

Signed-off-by: 's avatarAdam Wujek <dev_public@wujek.eu>
parents dc14c5b5 43f319b5
This diff is collapsed.
This diff is collapsed.
......@@ -3,14 +3,17 @@
#
# We are now Kconfig-based
-include $(CURDIR)/.config
WRPCSW_ROOT?=.
# Root of the main software, for now used only by WRPC. For other make it a
# current directory (".")
MAINSW_ROOT=$(WRPCSW_ROOT)
-include $(CURDIR)/$(MAINSW_ROOT)/.config
# We still accept command-line choices like we used to do.
# Also, we must remove the quotes from these Kconfig values
PROTO_EXTS ?= $(patsubst "%",%,$(CONFIG_EXTENSIONS))
ARCH ?= $(patsubst "%",%,$(CONFIG_ARCH))
CROSS_COMPILE ?= $(patsubst "%",%,$(CONFIG_CROSS_COMPILE))
WRPCSW_ROOT ?= $(patsubst "%",%,$(CONFIG_WRPCSW_ROOT))
# For "make config" to work, we need a valid ARCH
ifeq ($(ARCH),)
......@@ -53,6 +56,8 @@ export CFLAGS_OPTIMIZATION:= ${shell echo $(CONFIG_OPTIMIZATION)}
CFLAGS += $(CFLAGS_OPTIMIZATION)
CFLAGS += -I$(MAINSW_ROOT)
CFLAGS += -I$(MAINSW_ROOT)/include
CFLAGS += -Iinclude -fno-common
CFLAGS += -DPPSI_VERSION=\"$(VERSION)\"
......@@ -103,10 +108,14 @@ export CFLAGS
# libraries: see proto-standard/Makefile as an example.
$(TARGET).o: $(OBJ-y)
$(LD) --gc-sections --entry=main -Map $(TARGET).map1 -r -o $@ $(PPSI_O_LDFLAGS) \
$(LD) --gc-sections -Map $(TARGET).map1 -r -o $@ $(PPSI_O_LDFLAGS) \
--start-group $(OBJ-y) --end-group
$(OBJ-y): .config $(wildcard include/ppsi/*.h)
$(TARGET).a: $(OBJ-y)
$(AR) rc $@ $(OBJ-y)
$(OBJ-y): $(MAINSW_ROOT)/.config $(wildcard include/ppsi/*.h)
# Finally, "make clean" is expected to work
clean::
......@@ -118,8 +127,8 @@ distclean: clean
# Explicit rule for $(CURDIR)/.config
# needed since -include XXX triggers build for XXX
$(CURDIR)/.config:
@# Keep this dummy comment
$(CURDIR)/$(MAINSW_ROOT)/.config:
@#Keep this dummy comment
# following targets from Makefile.kconfig
silentoldconfig:
......@@ -136,4 +145,5 @@ defconfig:
@echo "Using unix_defconfig"
@$(MAKE) -f Makefile.kconfig unix_defconfig
.config: silentoldconfig
# "$(MAINSW_ROOT)/.config", when MAINSW_ROOT is "."
./.config .config: silentoldconfig
......@@ -68,7 +68,7 @@ int main(int argc, char **argv)
ppi = INST(ppg, i);
ppi->proto = PP_DEFAULT_PROTO;
ppi->role = PP_DEFAULT_ROLE;
ppi->delayMechanism = E2E;
ppi->delayMechanism = MECH_E2E;
}
/* Set offset here, so config parsing can override it */
......
CFLAGS += -ffreestanding -Os \
-ffunction-sections -fdata-sections \
-mmultiply-enabled -mbarrel-shift-enabled \
-Itools -Iproto-standard
CFLAGS-CPU-LM32 = -mmultiply-enabled -mbarrel-shift-enabled
CFLAGS-CPU-RISCV = -march=rv32im -mabi=ilp32
# use lm32 if not defined
CPU_ARCH ?= LM32
# Root of wrpc-sw project
WRPCSW_ROOT ?= $(CONFIG_WRPCSW_ROOT)
CFLAGS += -ffreestanding \
-ffunction-sections -fdata-sections \
-Itools -Iproto-standard \
$(CFLAGS-CPU-$(CPU_ARCH))
# WRPCSW_ROOT shall be defined in the env by WRPC's Makefile
CFLAGS += -I$(WRPCSW_ROOT)/include -I$(WRPCSW_ROOT)/include/std -I$(WRPCSW_ROOT)/softpll
PPSI_O_LDFLAGS = -u wrc_ptp_init
# TODOA: remove --no-gc-sections
PPSI_O_LDFLAGS = --no-gc-sections -u wrc_ptp_init
# Let's use the pp_printf we already have in wrpc-sw
CONFIG_NO_PRINTF = y
......@@ -26,7 +31,6 @@ OBJ-y += \
lib/drop.o \
lib/div64.o \
lib/time-arith.o \
lib/iicomm.o
OBJ-$(CONFIG_WRPC_FAULTS) += $A/faults.o
......
......@@ -20,9 +20,9 @@ static int cmd_fault(const char *args[])
if (args[0] && !strcmp(args[0], "drop")) {
if (args[1])
fromdec(args[1], &ppg->rxdrop);
ppg->rxdrop = atoi(args[1]);
if (args[2])
fromdec(args[2], &ppg->txdrop);
ppg->txdrop = atoi(args[2]);
ppsi_drop_init(ppg, timer_get_tics());
pp_printf("dropping %i/1000 rx, %i/1000 tx\n",
ppg->rxdrop, ppg->txdrop);
......@@ -30,7 +30,7 @@ static int cmd_fault(const char *args[])
}
if (args[0] && !strcmp(args[0], "delay")) {
if (args[1])
fromdec(args[1], &frame_rx_delay_us);
frame_rx_delay_us = atoi(args[1]);
pp_printf("delaying %i us on rx frame\n", frame_rx_delay_us);
return 0;
}
......
This diff is collapsed.
/*
* Copyright (C) 2012 CERN (www.cern.ch)
* Author: Aurelio Colosimo
* Copyright (C) 2012-2020 CERN (www.cern.ch)
* Author: Aurelio Colosimo, Adam Wujek
*
* Released to the public domain
*/
#include <endpoint.h>
#include <dev/endpoint.h>
#include <ppsi/ppsi.h>
#include <softpll_ng.h>
#include <hal_exports.h>
#include "wrpc.h"
#include "../proto-ext-whiterabbit/wr-constants.h"
extern int32_t sfp_alpha;
int wrpc_read_calibration_data(struct pp_instance *ppi,
uint32_t *deltaTx, uint32_t *deltaRx, int32_t *fix_alpha,
int32_t *clock_period)
#include "board.h"
int wrpc_read_calibration_data(
struct pp_instance *ppi,
int32_t *clock_period,
TimeInterval *scaledBitSlide,
RelativeDifference *scaledDelayCoefficient,
TimeInterval *scaledSfpDeltaTx,
TimeInterval *scaledSfpDeltaRx)
{
struct hal_port_state state;
struct wrc_port_state state;
wrpc_get_port_state(&state, ppi->iface_name);
if (wrpc_get_port_state(&state, ppi->iface_name))
return WRH_HW_CALIB_NOT_FOUND;
/* check if the data is available */
if (fix_alpha)
/* take local alpha instead of HAL */
*fix_alpha = sfp_alpha;
if (scaledDelayCoefficient)
*scaledDelayCoefficient = (RelativeDifference) state.calib.alpha;
if (scaledBitSlide)
*scaledBitSlide = picos_to_interval((int64_t)state.calib.bitslide_ps);
if (clock_period)
*clock_period = state.clock_period;
/* check if tx is calibrated,
* if so read data */
if (state.calib.tx_calibrated) {
if (deltaTx)
*deltaTx = state.calib.delta_tx_phy
+ state.calib.sfp.delta_tx_ps
+ state.calib.delta_tx_board;
} else
return WR_HW_CALIB_NOT_FOUND;
if (scaledSfpDeltaTx) {
*scaledSfpDeltaTx = picos_to_interval(state.calib.delta_tx_ps);
}
/* check if rx is calibrated,
* if so read data */
if (state.calib.rx_calibrated) {
if (deltaRx)
*deltaRx = state.calib.delta_rx_phy
+ state.calib.sfp.delta_rx_ps
+ state.calib.delta_rx_board;
} else
return WR_HW_CALIB_NOT_FOUND;
return WR_HW_CALIB_OK;
}
/* Begin of exported functions */
int wrpc_calibrating_disable(struct pp_instance *ppi, int txrx)
{
return WR_HW_CALIB_OK;
}
int wrpc_calibrating_enable(struct pp_instance *ppi, int txrx)
{
return WR_HW_CALIB_OK;
}
int wrpc_calibrating_poll(struct pp_instance *ppi, int txrx, uint32_t *delta)
{
uint32_t delta_rx = 0, delta_tx = 0;
if (scaledSfpDeltaRx) {
*scaledSfpDeltaRx = picos_to_interval(state.calib.delta_rx_ps);
}
/* FIXME: why delta was 64bit whereas ep_get_deltas accepts 32bit? */
wrpc_read_calibration_data(ppi, &delta_tx, &delta_rx, NULL, NULL);
if (txrx == WRH_HW_CALIB_TX)
*delta = delta_tx;
else
*delta = delta_rx;
return WR_HW_CALIB_READY;
}
int wrpc_calibration_pattern_enable(struct pp_instance *ppi,
unsigned int calibrationPeriod,
unsigned int calibrationPattern,
unsigned int calibrationPatternLen)
{
ep_cal_pattern_enable();
return WR_HW_CALIB_OK;
}
int wrpc_calibration_pattern_disable(struct pp_instance *ppi)
{
ep_cal_pattern_disable();
return WR_HW_CALIB_OK;
return WRH_HW_CALIB_OK;
}
......@@ -6,9 +6,9 @@
*/
#include <ppsi/ppsi.h>
#include "wrpc.h"
#include "uart.h" /* wrpc-sw */
#include "dev/console.h" /* wrpc-sw */
void pp_puts(const char *s)
{
uart_write_string(s);
puts(s);
}
......@@ -6,11 +6,12 @@
*/
#include <stdint.h>
#include <errno.h>
#include <ppsi/ppsi.h>
#include <pps_gen.h>
#include <dev/pps_gen.h>
#include <softpll_ng.h>
#include "../proto-ext-whiterabbit/wr-constants.h"
#include <rxts_calibrator.h>
#include <dev/rxts_calibrator.h>
#include "../include/hw-specific/wrh.h"
#include "wrpc.h"
......@@ -19,22 +20,24 @@ extern uint32_t cal_phase_transition;
int wrpc_spll_locking_enable(struct pp_instance *ppi)
{
spll_init(SPLL_MODE_SLAVE, 0, 1);
if (wrc_ptp_get_mode() == WRC_MODE_GM) {
/* If in grand master don't change pll mode */
return WRH_SPLL_OK;
}
spll_init(SPLL_MODE_SLAVE, 0, SPLL_FLAG_ALIGN_PPS);
WRPC_ARCH_I(ppi)->timingMode = WRH_TM_BOUNDARY_CLOCK;
spll_enable_ptracker(0, 1);
rxts_calibration_start();
return WRH_SPLL_OK;
}
int wrpc_spll_locking_poll(struct pp_instance *ppi, int grandmaster)
int wrpc_spll_locking_poll(struct pp_instance *ppi)
{
int locked;
static int t24p_calibrated = 0;
locked = spll_check_lock(0); /* both slave and gm mode */
if (grandmaster)
return locked ? WRH_SPLL_READY : WRH_SPLL_ERROR;
/* Else, slave: ensure calibration is done */
if(!locked) {
t24p_calibrated = 0;
......@@ -42,16 +45,43 @@ int wrpc_spll_locking_poll(struct pp_instance *ppi, int grandmaster)
else if(locked && !t24p_calibrated) {
/*run t24p calibration if needed*/
if (calib_t24p(WRC_MODE_SLAVE, &cal_phase_transition) < 0)
return WRH_SPLL_CALIB_NOT_READY;
return WRH_SPLL_UNLOCKED;
t24p_calibrated = 1;
}
return locked ? WRH_SPLL_READY : WRH_SPLL_ERROR;
return locked ? WRH_SPLL_LOCKED : WRH_SPLL_ERROR;
}
int wrpc_spll_check_lock_with_timeout(int lock_timeout)
{
uint32_t start_tics;
start_tics = timer_get_tics();
pp_printf("Locking PLL");
while (!spll_check_lock(0) && lock_timeout) {
spll_update();
timer_delay(TICS_PER_SECOND);
if (timer_get_tics() - start_tics > lock_timeout) {
pp_printf("\nLock timeout.");
return -ETIMEDOUT;
}
pp_printf(".");
}
pp_printf("\n");
return 0;
}
int wrpc_spll_locking_reset(struct pp_instance *ppi)
{
//TODO?
/* if configured as master, but due to BMCA changed into BC */
if (wrc_ptp_get_mode() == WRC_MODE_MASTER && WRPC_ARCH_I(ppi)->timingMode == WRH_TM_BOUNDARY_CLOCK) {
spll_init(SPLL_MODE_FREE_RUNNING_MASTER, 0, SPLL_FLAG_ALIGN_PPS);
WRPC_ARCH_I(ppi)->timingMode = WRH_TM_FREE_MASTER;
/* wait for spll to lock */
wrpc_spll_check_lock_with_timeout(LOCK_TIMEOUT_FM);
}
return WRH_SPLL_OK;
}
......@@ -68,13 +98,14 @@ int wrpc_spll_enable_ptracker(struct pp_instance *ppi)
return WRH_SPLL_OK;
}
int wrpc_enable_timing_output(struct pp_instance *ppi, int enable)
int wrpc_enable_timing_output(struct pp_globals *ppg, int enable)
{
if (enable == WR_DSPOR(ppi)->ppsOutputOn)
return WR_SPLL_OK;
WR_DSPOR(ppi)->ppsOutputOn = enable;
static int pps_enable;
shw_pps_gen_enable_output(enable);
if (enable != 2) {
pps_enable = enable;
}
shw_pps_gen_enable_output(pps_enable | GOPTS(ppg)->forcePpsGen);
return WRH_SPLL_OK;
}
......@@ -98,3 +129,13 @@ int wrpc_adjust_phase(int32_t phase_ps)
return WRH_SPLL_OK;
}
int wrpc_get_GM_lock_state(struct pp_globals *ppg, pp_timing_mode_state_t *state)
{
if (spll_check_lock(0))
*state = PP_TIMING_MODE_STATE_LOCKED;
else
*state = PP_TIMING_MODE_STATE_UNLOCKED;
/* Holdover not implemented (PP_TIMING_MODE_STATE_HOLDOVER) */
return 0;
}
......@@ -10,9 +10,11 @@
#define __WRPC_H
#include <ppsi/ppsi.h>
#include <hw/memlayout.h>
#include <libwr/hal_shmem.h>
#define LOCK_TIMEOUT_FM (4 * TICS_PER_SECOND)
#define LOCK_TIMEOUT_GM (60 * TICS_PER_SECOND)
/* This part is exactly wrpc-sw::wrc_ptp.h */
#define WRC_MODE_UNKNOWN 0
#define WRC_MODE_GM 1
......@@ -24,6 +26,13 @@ extern int ptp_mode;
int wrc_ptp_init(void);
int wrc_ptp_set_mode(int mode);
int wrc_ptp_get_mode(void);
int wrc_ptp_set_prio1(int prio1);
int wrc_ptp_set_prio2(int prio2);
int wrc_ptp_set_domain_number(int domain);
int wrc_ptp_set_clock_class(int clock_class);
int wrc_ptp_set_clock_accuracy(int clock_accuracy);
int wrc_ptp_set_clock_allan_variance(int clock_allan_variance);
int wrc_ptp_set_time_source(int time_source);
int wrc_ptp_sync_mech(int e2e_p2p_qry);
int wrc_ptp_start(void);
int wrc_ptp_stop(void);
......@@ -42,29 +51,70 @@ struct wrpc_ethhdr {
uint16_t h_proto;
} __attribute__((packed));
typedef struct wrpc_arch_data_t {
wrh_timing_mode_t timingMode; /* Timing mode: Grand master, Free running,...*/
/* Keep a copy of configured mode for dump */
int wrpcModeCfg; /* Mode: Grand master, master, slave, abscal */
} wrpc_arch_data_t;
/* values mapped to pp_globals->pp_runtime_opts->forcePpsGen */
typedef enum {
pps_force_off,
pps_force_on,
pps_force_check
} wrpc_pps_force_t;
extern struct pp_globals *ppg;
/* wrpc-spll.c (some should move to time-wrpc/) */
int wrpc_spll_locking_enable(struct pp_instance *ppi);
int wrpc_spll_locking_poll(struct pp_instance *ppi, int grandmaster);
int wrpc_spll_locking_poll(struct pp_instance *ppi);
int wrpc_spll_locking_disable(struct pp_instance *ppi);
int wrpc_spll_locking_reset(struct pp_instance *ppi);
int wrpc_spll_enable_ptracker(struct pp_instance *ppi);
int wrpc_adjust_in_progress(void);
int wrpc_adjust_counters(int64_t adjust_sec, int32_t adjust_nsec);
int wrpc_adjust_phase(int32_t phase_ps);
int wrpc_enable_timing_output(struct pp_instance *ppi, int *ppsOutputOn, int enable);
int wrpc_enable_timing_output(struct pp_globals *ppg, int enable);
int wrpc_spll_check_lock_with_timeout(int lock_timeout);
int wrc_ptp_bmc_update(void);
int wrc_ptp_link_down(void);
int wrc_pps_force(wrpc_pps_force_t action);
int wrpc_get_GM_lock_state(struct pp_globals *ppg, pp_timing_mode_state_t *state);
/* wrpc-calibration.c */
int wrpc_read_calibration_data(struct pp_instance *ppi,
uint32_t *deltaTx, uint32_t *deltaRx,
int32_t *fix_alpha, int32_t *clock_period);
int wrpc_calibrating_disable(struct pp_instance *ppi, int txrx);
int wrpc_calibrating_enable(struct pp_instance *ppi, int txrx);
int wrpc_calibrating_poll(struct pp_instance *ppi, int txrx, uint32_t *delta);
int wrpc_calibration_pattern_enable(struct pp_instance *ppi,
unsigned int calibrationPeriod,
unsigned int calibrationPattern,
unsigned int calibrationPatternLen);
int wrpc_calibration_pattern_disable(struct pp_instance *ppi);
int wrpc_get_port_state(struct hal_port_state *port, const char *port_name);
int wrpc_read_calibration_data(
struct pp_instance *ppi,
int32_t *clock_period,
TimeInterval *scaledBitSlide,
RelativeDifference *scaledDelayCoefficient,
TimeInterval *scaledSfpDeltaTx,
TimeInterval *scaledSfpDeltaRx);
int wrpc_get_port_state(struct wrc_port_state *port, const char *port_name);
static inline wrpc_arch_data_t *WRPC_ARCH_I(struct pp_instance *ppi)
{
return (wrpc_arch_data_t *) GLBS(ppi)->arch_data;
}
static inline wrpc_arch_data_t *WRPC_ARCH_G(struct pp_globals *ppg)
{
return (wrpc_arch_data_t *) ppg->arch_data;
}
static inline void wrc_ptp_get_leapsec(int *ptp, int *system)
{
int tmp;
*ptp = ppg->timePropertiesDS->currentUtcOffset;
TOPS(INST(ppg, 0))->get_utc_offset(NULL, system, &tmp, &tmp);
return;
}
static inline void wrc_ptp_set_leapsec(int leapsec)
{
TOPS(INST(ppg, 0))->set_utc_offset(NULL, leapsec, 0, 0);
}
#endif /* __WRPC_H */
......@@ -5,6 +5,10 @@ A := arch-$(ARCH)
SIZE = $(CROSS_COMPILE)size
CFLAGS += -Itools
# needed for --gc-sections option of ld
PPSI_O_LDFLAGS = --entry=main
# Prevent a warning for a missing prototype in pp_printf, bug since ever
ARCH_PP_PRINTF_CFLAGS += -include ../$A/include/strnlen.h
......
......@@ -144,10 +144,10 @@ static unsigned int run_all_state_machines(struct pp_globals *ppg)
ppi->iface_name, ppi->link_up ? "up":"down");
if (ppi->link_up) {
TimeInterval scaledBitSlide;
RelativeDifference scaledDelayCoefficient;
TimeInterval scaledSfpDeltaTx;
TimeInterval scaledSfpDeltaRx;
TimeInterval scaledBitSlide = 0;
RelativeDifference scaledDelayCoefficient = 0;
TimeInterval scaledSfpDeltaTx = 0;
TimeInterval scaledSfpDeltaRx = 0;
ppi->state = PPS_INITIALIZING;
if ( wrs_read_calibration_data(ppi,NULL,
......@@ -155,20 +155,19 @@ static unsigned int run_all_state_machines(struct pp_globals *ppg)
&scaledDelayCoefficient,
&scaledSfpDeltaTx,
&scaledSfpDeltaRx)!= WRH_HW_CALIB_OK ) {
pp_diag(ppi, fsm, 1, "Cannot read bit_slide value values\n");
scaledBitSlide=0;
pp_diag(ppi, fsm, 1, "Cannot get calibration values (bitslide, alpha, TX/Rx delays\n");
}
ppi->timestampCorrectionPortDS.semistaticLatency= scaledBitSlide;
if (scaledDelayCoefficient>=PP_MIN_DELAY_COEFFICIENT_AS_RELDIFF &&
scaledDelayCoefficient<=PP_MAX_DELAY_COEFFICIENT_AS_RELDIFF ) {
/* Scaled delay coefficient is valid then delta tx and rx also */
if ( ppi->asymmetryCorrectionPortDS.enable ) {
ppi->cfg.scaledDelayCoefficient=scaledDelayCoefficient;
enable_asymmetryCorrection(ppi,TRUE);
}
ppi->timestampCorrectionPortDS.egressLatency=picos_to_interval(ppi->cfg.egressLatency_ps)+scaledSfpDeltaTx;
ppi->timestampCorrectionPortDS.ingressLatency=picos_to_interval(ppi->cfg.ingressLatency_ps)+scaledSfpDeltaRx;
}
if (scaledDelayCoefficient>=PP_MIN_DELAY_COEFFICIENT_AS_RELDIFF
&& scaledDelayCoefficient<=PP_MAX_DELAY_COEFFICIENT_AS_RELDIFF ) {
/* Scaled delay coefficient is valid then delta tx and rx also */
if ( ppi->asymmetryCorrectionPortDS.enable ) {
ppi->cfg.scaledDelayCoefficient=scaledDelayCoefficient;
enable_asymmetryCorrection(ppi,TRUE);
}
ppi->timestampCorrectionPortDS.egressLatency=picos_to_interval(ppi->cfg.egressLatency_ps)+scaledSfpDeltaTx;
ppi->timestampCorrectionPortDS.ingressLatency=picos_to_interval(ppi->cfg.ingressLatency_ps)+scaledSfpDeltaRx;
}
}
else {
ppi->next_state = PPS_DISABLED;
......
......@@ -133,3 +133,27 @@ void *create_map(unsigned long address, unsigned long size)
return NULL;
return mapaddr + fragment;
}
char *format_hex(char *s, const unsigned char *mac, int cnt)
{
int i;
*s = '\0';
for (i = 0; i < cnt; i++) {
pp_sprintf(s, "%s%02x:", s, mac[i]);
}
/* remove last colon */
s[cnt * 3 - 1] = '\0'; /* cnt * strlen("FF:") - 1 */
return s;
}
char *format_hex8(char *s, const unsigned char *mac)
{
return format_hex(s, mac, 8);
}
char *format_mac(char *s, const unsigned char *mac)
{
format_hex(s, mac, 6);
return s;
}
......@@ -159,6 +159,9 @@ int main(int argc, char **argv)
}
}
/* it will be opened later for write */
wrs_shm_put(ppsi_head);
/* try connecting to HAL multiple times in case it's still not ready */
hal_retries = WRSW_HAL_RETRIES;
while (hal_retries) { /* may be never, if built without WR extension */
......
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
# CONFIG_E2E is not set
CONFIG_P2P=y
CONFIG_HAS_P2P=1
CONFIG_PTP_OVERWRITE_BASIC_ATTRIBUTES=y
CONFIG_PTP_OPT_DOMAIN_NUMBER=1
CONFIG_PTP_OPT_PRIORITY1=129
CONFIG_PTP_OPT_PRIORITY2=129
CONFIG_PTP_OPT_OVERWRITE_ATTRIBUTES=y
CONFIG_PTP_OPT_CLOCK_ACCURACY=248
CONFIG_PTP_OPT_CLOCK_ALLAN_VARIANCE=123
CONFIG_PTP_OPT_TIME_SOURCE=161
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_PPSI_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
CONFIG_PPSI_ASSERT=y
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_NO_PTPDUMP=y
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=1
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
# CONFIG_E2E is not set
CONFIG_P2P=y
CONFIG_HAS_P2P=1
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# Automatically generated file; DO NOT EDIT.
# WR PTP Core software configuration
#
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_PPSI_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
# CONFIG_E2E is not set
CONFIG_P2P=y
CONFIG_HAS_P2P=1
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_PPSI_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_PPSI_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
......@@ -19,9 +19,9 @@ CONFIG_EXTENSION=""
CONFIG_CROSS_COMPILE=""
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
CONFIG_HAS_VLAN=y
CONFIG_HAS_MULTIPLE_VLAN=y
CONFIG_VLAN=y
CONFIG_SUPPORT_VLAN=y
CONFIG_SUPORRT_MULTIPLE_VLAN=y
CONFIG_PPSI_VLAN=y
CONFIG_MAX_VLANS_PER_PORT=32
CONFIG_VLAN_ARRAY_SIZE=32
CONFIG_DISABLE_OPTIMIZATION=y
......
......@@ -19,8 +19,8 @@ CONFIG_EXTENSION=""
CONFIG_CROSS_COMPILE=""
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
CONFIG_HAS_VLAN=y
CONFIG_HAS_MULTIPLE_VLAN=y
CONFIG_VLAN=y
CONFIG_SUPPORT_VLAN=y
CONFIG_SUPPORT_MULTIPLE_VLAN=y
CONFIG_PPSI_VLAN=y
CONFIG_MAX_VLANS_PER_PORT=32
CONFIG_VLAN_ARRAY_SIZE=32
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_PPSI_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
......@@ -9,6 +9,14 @@ CONFIG_ARCH_WRPC=y
# CONFIG_ARCH_WRS is not set
# CONFIG_ARCH_SIMULATOR is not set
CONFIG_ARCH="wrpc"
CONFIG_CROSS_COMPILE="/opt/gcc-lm32/bin/lm32-elf-"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
CONFIG_WRPCSW_ROOT="../wrpc-sw"
#
# Options
#
#
# PTP Protocol Options
......@@ -17,15 +25,62 @@ CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_EXT_WR=y
# CONFIG_EXT_NONE is not set
CONFIG_EXTENSION="whiterabbit"
CONFIG_CROSS_COMPILE="/opt/gcc-lm32/bin/lm32-elf-"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
CONFIG_WRPCSW_ROOT="../wrpc-sw"
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
#
# VLAN
#
CONFIG_HAS_VLAN=y
CONFIG_VLAN=y
CONFIG_VLAN_ARRAY_SIZE=1
# CONFIG_DISABLE_OPTIMIZATION is not set
CONFIG_OPTIMIZATION=2
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
# CONFIG_CODEOPT_EPC_ENABLED is not set
# CONFIG_CODEOPT_SO_ENABLED is not set
# CONFIG_OPTIMIZATION_SPEED is not set
CONFIG_OPTIMIZATION_SIZE_SPEED=y
# CONFIG_OPTIMIZATION_DEBUGGING is not set
# CONFIG_OPTIMIZATION_NONE_DEBUGGING is not set
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
#
# PPSI config
#
CONFIG_ARCH="wrpc"
CONFIG_ARCH_CFLAGS=""
CONFIG_ARCH_LDFLAGS=""
#
# Options
#
#
# PTP Protocol Options
#
CONFIG_E2E=y
# CONFIG_P2P is not set
CONFIG_E2E_ONLY=y
CONFIG_HAS_P2P=0
CONFIG_LEAP_SECONDS_VAL=37
#
# Enabled profiles
#
CONFIG_PROFILE_WR=y
# CONFIG_PROFILE_HA is not set
# CONFIG_PROFILE_CUSTOM is not set
CONFIG_PROFILE_PTP=y
CONFIG_HAS_EXT_WR=1
CONFIG_HAS_EXT_L1SYNC=0
CONFIG_HAS_EXT_NONE=0
CONFIG_HAS_PROFILE_PTP=1
CONFIG_HAS_PROFILE_HA=0
CONFIG_HAS_PROFILE_WR=1
CONFIG_HAS_PROFILE_CUSTOM=0
CONFIG_VLAN_ARRAY_SIZE=0
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=1
CONFIG_SINGLE_FMASTER=y
CONFIG_NR_PORTS=1
CONFIG_NR_INSTANCES_PER_PORT=1
#
# Code optimization
#
CONFIG_CODEOPT_ENABLED=y
CONFIG_SINGLE_INSTANCE_PER_PORT=y
CONFIG_SINGLE_INSTANCE=y
CONFIG_SINGLE_PORT=y
# CONFIG_CODEOPT_SINGLE_PORT is not set
# CONFIG_CODEOPT_SINGLE_FMASTER is not set
# CONFIG_CODEOPT_SINGLE_INSTANCE_PER_PORT is not set
CONFIG_CODEOPT_WRPC_SIZE=y
CONFIG_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=y
CONFIG_CODEOPT_SO_FORCE_DISABLED=y
CONFIG_CODEOPT_MO_FORCE_DISABLED=y
CONFIG_CODEOPT_EPC_SO_DISABLED=y
CONFIG_OPTIMIZATION="-Os -ggdb"
# CONFIG_FAULT_INJECTION_MECHANISM is not set
CONFIG_HAS_FAULT_INJECTION_MECHANISM=0
CONFIG_HAS_WRPC_FAULTS=0
CONFIG_HAS_CODEOPT_SINGLE_FMASTER=0
CONFIG_HAS_CODEOPT_SINGLE_PORT=0
CONFIG_HAS_CODEOPT_SINGLE_INSTANCE_PER_PORT=0
CONFIG_HAS_CODEOPT_CODEOPT_WRPC_SIZE=1
CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED=1
CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=0
CONFIG_ARCH_IS_WRPC=1
CONFIG_HAS_PPSI_ASSERT=0
......@@ -43,12 +43,12 @@ CONFIG_HAS_PROFILE_CUSTOM=0
#
# VLAN
#
CONFIG_HAS_VLAN=y
CONFIG_HAS_MULTIPLE_VLAN=y
CONFIG_VLAN=y
CONFIG_SUPPORT_VLAN=y
CONFIG_SUPPORT_MULTIPLE_VLAN=y
CONFIG_PPSI_VLAN=y
CONFIG_MAX_VLANS_PER_PORT=32
CONFIG_VLAN_ARRAY_SIZE=32
# CONFIG_ASSERT is not set
# CONFIG_PPSI_ASSERT is not set
CONFIG_NR_FOREIGN_RECORDS=5
# CONFIG_SINGLE_FMASTER is not set
CONFIG_NR_PORTS=18
......@@ -79,4 +79,4 @@ CONFIG_HAS_CODEOPT_EPC_ENABLED=0
CONFIG_HAS_CODEOPT_SO_ENABLED=0
CONFIG_ARCH_IS_WRS=1
CONFIG_ARCH_IS_WRPC=0
CONFIG_HAS_ASSERT=0
CONFIG_HAS_PPSI_ASSERT=0
......@@ -58,7 +58,7 @@
@top Introduction
PPSi (@sc{ptp} Ported to Silicon) is an application which, in
its basic operation, implements @sc{ieee} 1588-2020 specification in a way
its basic operation, implements @sc{ieee} 1588-2019 specification in a way
that is portable to several architectures, including OS-less ones.
This manual is mainly aimed at developers: people who are working with
......@@ -79,7 +79,7 @@ thousands of I/O devices distributed in a network several kilometers
wide; its software protocol is an extension of @sc{ptp}. A WR network is
made up of two devices: the @i{WR Switch} and the @i{WR Node}. White
Rabbit is developed at ohwr.org:
@url{http://www.ohwr.org/project/white-rabbit}.
@url{https://www.ohwr.org/project/white-rabbit}.
The WR switch is an 18-ports Gigabit Ethernet switch that runs
@sc{wr-ptp} as a Linux process, synchronizing each Ethernet link as
......@@ -104,8 +104,8 @@ We thank Danilo Sabato for fixing the @i{bare} architectures
The home page of the PPSi project and the source repository are:
@indentedblock
@itemize @bullet
@item @url{http://www.ohwr.org/project/ppsi}
@item ssh://git@@ohwr.org:7999/project/ppsi.git;
@item @url{https://www.ohwr.org/project/ppsi}
@item ssh://git@@ohwr.org:7999/project/ppsi.git
@end itemize
@end indentedblock
......@@ -376,7 +376,7 @@ As of 2013-05 the project suffers from these known bugs:
@itemize
@item All frames must be sent according to a pseudo-random distribution;
this is mostly in place but mut be audited project-wide.
this is mostly in place but must be audited project-wide.
@item We removed @i{peer-delay} support. We plan to add it back, and
actually move White Rabbit to use @i{peer-delay} @sc{ptp} instead of
@i{end-to-end} @sc{ptp}.
......@@ -445,7 +445,7 @@ following 'port-specific' keywords will be associated to this port until
a new keyword 'port' or 'link' appears.
@anchor{arg-types}
An option is a key/value(s) pair separated by at least a space character '@t{key value(s)}'. The '@t{value{s}}' entry
An option is a key/value(s) pair separated by at least a space character '@t{key value(s)}'. The '@t{value(s)}' entry
depends on the option type. Few types are supported by PPSi:
......@@ -508,25 +508,25 @@ Some old keywords will be marked '@i{(deprecated)}', and will be removed in the
other as defined by the PTP protocol. A domain defines the scope of
PTP message communication, state, operations, data sets, and
timescale. PTP devices may participate in multiple domains.
For more details please refer to the IEEE 1588-2020 standard.
For more details please refer to the IEEE 1588-2019 standard.
@item @b{priority1} @i{[Int32]}
A user configurable designation that a clock belongs to an ordered
set of PTP devices from which a PTP Master is selected.
For more details please refer to the IEEE 1588-2020 standard.
For more details please refer to the IEEE 1588-2019 standard.
@item @b{priority2} @i{[Int32]}
A user configurable designation that provides finer grained ordering
among otherwise equivalent PTP devices.
For more details please refer to the IEEE 1588-2020 standard.
For more details please refer to the IEEE 1588-2019 standard.
@item @b{forcePpsGen} @i{[Boolean]}
Configuration of the PPS output. By default, the PPS is generated
only when the clock class is set to 6(Grand master) or to 193(Free Running master.
When this option is set, the PPS is always generated.
Configuration of the PPS output. By default, the PPS is generated all the time
only when the clock class is set to 6 (Grand master) or to 193 (Free Running master).
When this option is set, the PPS is generated all the time for all clock class.
@item @b{ptpFallbackPpsGen} @i{[Boolean]}
if activated, enables the PPS generation if a slave instance
if activated, enables the PPS generation if a slave instance
programmed to use an extension protocol (WR, L1Sync, ...) is falling back
to PTP communication only.
......@@ -548,14 +548,14 @@ Some old keywords will be marked '@i{(deprecated)}', and will be removed in the
This option is used to force the state of all port instances. The BMCA is then disabled
in PPSi.
When enabled, the port-specific option @t{desiredState} must be defined for each port instance
For more details please refer to the IEEE 1588-2020 (clause 17.6.2)
For more details please refer to the IEEE 1588-2019 (clause 17.6.2)
@item @b{slaveOnly} @i{[Boolean]}
A @t{slaveOnly} Ordinary Clock utilizes the slaveOnly state machine
which does not enable transition to MASTER state.
This option must not be used when @i{externalPortConfigurationEnabled} is
enabled.
For more details please refer to the IEEE 1588-2020 (clause 9.2.2.1)
For more details please refer to the IEEE 1588-2019 (clause 9.2.2.1)
@end table
......@@ -595,7 +595,7 @@ Some old keywords will be marked '@i{(deprecated)}', and will be removed in the
@item @b{masterOnly} @i{[Boolean]}
If enabled , activates the optional '@i{masterOnly}' feature
(refer to the IEEE 1588-2020 - clause 9.2.2.2).
(refer to the IEEE 1588-2019 - clause 9.2.2.2).
This option cannot be used if the global option '@i{externalPortConfiguration}' is
enabled.
If this option is not set, then the standard BMCA algorithm will be used.
......@@ -819,7 +819,7 @@ code, in the following way.
@itemize @bullet
@item Each architecture states, in @t{Kconfig}, whether it supports
vlans (@t{HAS_VLAN}) and multiple vlans (@t{HAS_MULTIPLE_VLAN}).
vlans (@t{SUPPORT_VLAN}) and multiple vlans (@t{SUPPORT_MULTIPLE_VLAN}).
@item The configuration parser (@t{lib/conf.c}) accepts a @t{vlan}
keyword, specifying one or more vlans. If several, they are
......
......@@ -9,13 +9,14 @@
#ifndef __WRH_H__
#define __WRH_H__
/* Please increment WRS_PPSI_SHMEM_VERSION if you change any exported data structure */
#define WRS_PPSI_SHMEM_VERSION 35
/* Don't include the Following when this file is included in assembler. */
#ifndef __ASSEMBLY__
#include <stdint.h>
#include <hal_exports.h>
#include <ppsi/lib.h>
/* Please increment WRS_PPSI_SHMEM_VERSION if you change any exported data structure */
#define WRS_PPSI_SHMEM_VERSION 33
/* White Rabbit softpll status values */
#define WRH_SPLL_ERROR -1
#define WRH_SPLL_OK 0
......@@ -146,11 +147,12 @@ static inline wrh_servo_t *WRH_SRV(struct pp_instance *ppi)
extern void wrh_servo_enable_tracking(int enable);
extern int wrh_servo_init(struct pp_instance *ppi);
extern void wrh_servo_reset(struct pp_instance *ppi);
extern void wrh_servo_enable_tracking(int enable);
extern int wrh_servo_got_sync(struct pp_instance *ppi);
extern int wrh_servo_got_resp(struct pp_instance *ppi);
extern int wrh_servo_got_presp(struct pp_instance *ppi);
extern int wrh_update_correction_values(struct pp_instance *ppi);
#endif /* __ASSEMBLY__ */
#endif /* __WRH_H__ */
......@@ -12,11 +12,11 @@ extern void panic(const char *fmt, ...)
__attribute__((format(printf,1,2)));
#define assert(cond, fmt, ...) \
if (CONFIG_HAS_ASSERT && !(cond)) \
if (CONFIG_HAS_PPSI_ASSERT && !(cond)) \
__assert(__func__, __LINE__, 1 /* forever */, fmt, ## __VA_ARGS__)
#define assert_warn(cond, fmt, ...) \
if (CONFIG_HAS_ASSERT && !(cond)) \
if (CONFIG_HAS_PPSI_ASSERT && !(cond)) \
__assert(__func__, __LINE__, 0 /* once */, fmt, ## __VA_ARGS__)
......
......@@ -9,6 +9,19 @@
#ifndef __PPSI_CONSTANTS_H__
#define __PPSI_CONSTANTS_H__
#ifndef CONFIG_PTP_OVERWRITE_BASIC_ATTRIBUTES
#define CONFIG_PTP_OPT_DOMAIN_NUMBER 0
#define CONFIG_PTP_OPT_PRIORITY1 128
#define CONFIG_PTP_OPT_PRIORITY2 128
#endif
#ifndef CONFIG_PTP_OPT_OVERWRITE_ATTRIBUTES
/* not defined */
#define CONFIG_PTP_OPT_CLOCK_ACCURACY -1
#define CONFIG_PTP_OPT_CLOCK_ALLAN_VARIANCE -1
#define CONFIG_PTP_OPT_TIME_SOURCE -1
#endif
/* general purpose constants */
#define PP_NSEC_PER_SEC (1000*1000*1000)
#define PP_PSEC_PER_SEC ((int64_t)1000*(int64_t)PP_NSEC_PER_SEC)
......@@ -26,7 +39,7 @@
#define PP_MIN_DOMAIN_NUMBER 0
#define PP_MAX_DOMAIN_NUMBER 127
#define PP_DEFAULT_DOMAIN_NUMBER 0
#define PP_DEFAULT_DOMAIN_NUMBER CONFIG_PTP_OPT_DOMAIN_NUMBER
#define PP_DEFAULT_ANNOUNCE_INTERVAL 1 /* 0 in 802.1AS */
#define PP_MIN_ANNOUNCE_INTERVAL 0
......@@ -56,11 +69,11 @@
#define PP_DEFAULT_UTC_OFFSET 37
#define PP_MIN_PRIORITY1 0
#define PP_MAX_PRIORITY1 255
#define PP_DEFAULT_PRIORITY1 128
#define PP_DEFAULT_PRIORITY1 CONFIG_PTP_OPT_PRIORITY1
#define PP_MIN_PRIORITY2 0
#define PP_MAX_PRIORITY2 255
#define PP_DEFAULT_PRIORITY2 128
#define PP_DEFAULT_PRIORITY2 CONFIG_PTP_OPT_PRIORITY2
#define PP_DEFAULT_EXT_PORT_CONFIG_ENABLE 0
......@@ -126,7 +139,7 @@
/* Free running master */
#define PP_FRUNNING_CLOCK_CLASS PP_ARB_CLASS_GM_UNLOCKED_B
#define PP_FRUNNING_CLOCK_VARIANCE PP_ARB_VARIANCE_GM_UNLOCKED
#define PP_FRUNNING_CLOCK_ACCURACY PP_ARB_ACCURACY_GM_UNLOCKED
#define PP_FRUNNING_CLOCK_ACCURACY PP_ARB_ACCURACY_GM_UNLOCKED_B
#define PP_NR_FOREIGN_RECORDS CONFIG_NR_FOREIGN_RECORDS /* Clause 9.3.2.4.5 */
#define PP_FOREIGN_MASTER_TIME_WINDOW 4
......@@ -170,9 +183,6 @@
#define PP_MCAST_MACADDRESS "\x01\x1B\x19\x00\x00\x00"
#define PP_PDELAY_MACADDRESS "\x01\x80\xC2\x00\x00\x0E"
#define PP_E2E_MECH 0
#define PP_P2P_MECH 1
#include <arch/constants.h> /* architectures may override the defaults */
#endif /* __PPSI_CONSTANTS_H__ */
......@@ -72,7 +72,7 @@ typedef struct Timestamp { /* page 13 (33) -- no typedef expected */
UInteger32 nanosecondsField;
} Timestamp;
/** ******************* IEEE1588-2018 **************************************/
/** ******************* IEEE1588-2019 **************************************/
#define REL_DIFF_FRACBITS 62
#define REL_DIFF_FRACBITS_AS_FLOAT 62.0
#define REL_DIFF_TWO_POW_FRACBITS ((double)4.611686018427388E18) /* double value returned by pow(2.0,62.0) */
......@@ -86,7 +86,7 @@ typedef struct Timestamp { /* page 13 (33) -- no typedef expected */
/*draft P1588_v_29: page 17*/
/* The scaledRelativeDifference member is the relative difference expressed
* as a dimensionless fraction and multiplied by 2+^62, with any remaining
* as a dimensionless fraction and multiplied by 2^+62, with any remaining
* fractional part truncated. */
typedef Integer64 RelativeDifference;
......@@ -229,7 +229,7 @@ typedef struct { /* page 65 */
UInteger8 priority2;
UInteger8 domainNumber;
Boolean slaveOnly;
/** Optional (IEEE1588-2018) */
/** Optional (IEEE1588-2019) */
Timestamp currentTime; /*draft P1588_v_29: page 85*/
Boolean instanceEnable; /*draft P1588_v_29: page 86*/
Boolean externalPortConfigurationEnabled; /*draft P1588_v_29: page 86*/
......@@ -280,7 +280,7 @@ typedef struct { /* page 72 */
UInteger4 versionNumber;
void *ext_dsport;
/** (IEEE1588-2018) */
/** (IEEE1588-2019) */
Integer8 logMinPdelayReqInterval; /*draft P1588_v_29: page 124 */
UInteger4 minorVersionNumber; /*draft P1588_v_29: page 124 */
TimeInterval delayAsymmetry; /*draft P1588_v_29: page 124 */
......@@ -305,7 +305,7 @@ typedef struct { /* page 70 */
Enumeration8 timeSource;
} timePropertiesDS_t;
/** ******************* IEEE1588-2018 **************************************
/** ******************* IEEE1588-2019 **************************************
* Adding new optional data sets (DS) defined in clause, only these relevant
* for HA
*/
......@@ -424,11 +424,12 @@ enum ENTimeSource {
/* Enumeration Delay mechanism (table 21, page 126) */
enum ENDelayMechanism {
E2E = 1,
P2P = 2,
COMMON_P2P = 3,
SPECIAL = 4,
NO_MECHANISM = 0xFE
MECH_E2E = 1,
MECH_P2P = 2,
MECH_MAX_SUPPORTED = 2,
MECH_COMMON_P2P = 3,
MECH_SPECIAL = 4,
MECH_NO_MECHANISM = 0xFE
};
/* clockAccuracy enumeration (table 5) */
......
......@@ -15,4 +15,7 @@ extern int atoi(const char *s);
extern uint32_t __div64_32(uint64_t *n, uint32_t base);
extern char *format_hex8(char *s, const unsigned char *mac);
extern char *format_mac(char *s, const unsigned char *mac);
#endif /* __PPSI_LIB_H__ */
......@@ -20,7 +20,7 @@ struct pp_runtime_opts {
int clock_quality_clockAccuracy; // ClockQuality.clockAccuracy
int clock_quality_offsetScaledLogVariance; // ClockQuality.offsetScaledLogVariance
int timeSource; // timePropertiesDS_t.timeSource
Boolean ptpTimeScale; // timePropertiesDS_t.timeSource
Boolean ptpTimeScale; // timePropertiesDS_t.timeScale
Boolean frequencyTraceable; // timePropertiesDS_t.frequencyTraceable
Boolean timeTraceable; // timePropertiesDS_t.timeTraceable
Integer32 ttl;
......@@ -95,6 +95,7 @@ struct pp_frgn_master {
unsigned long lastAnnounceMsgMs; // Last time in ms when the announce message was received
/* used by extension */
UInteger16 ext_specific[4]; /* Extension specific. Must be UInteger16 to align it in the structure*/
unsigned char peer_mac[6];
};
/*
......@@ -243,7 +244,7 @@ struct pp_instance {
/* The net_path used to be allocated separately, but there's no need */
struct pp_channel ch[__NR_PP_NP]; /* general and event ch */
Integer32 mcast_addr[2]; /* only ipv4/udp */
Integer32 mcast_addr[MECH_MAX_SUPPORTED + 1]; /* only ipv4/udp */
int tx_offset, rx_offset; /* ptp payload vs send/recv */
unsigned char peer[6]; /* Our peer's MAC address from last received msg*/
unsigned char activePeer[6]; /* Our peer's MAC address we talk with */
......
......@@ -59,7 +59,7 @@ struct pp_msgtype_info {
pp_std_messages msg_type;
uint16_t msglen;
unsigned char chtype;
unsigned char is_pdelay;
unsigned char delay_mechanism;
unsigned char controlField; /* Table 23 */
unsigned char logMessageInterval; /* Table 24, see defines */
......@@ -170,21 +170,32 @@ static inline struct pp_servo *SRV(struct pp_instance *ppi)
}
static inline int is_externalPortConfigurationEnabled (defaultDS_t *def) {
return CONFIG_HAS_CODEOPT_EPC_ENABLED || def->externalPortConfigurationEnabled;
return CONFIG_HAS_CODEOPT_EXT_PORT_CONF_FORCE_DISABLED == 0
&& (CONFIG_HAS_CODEOPT_EPC_ENABLED
|| def->externalPortConfigurationEnabled);
}
static inline int is_delayMechanismP2P(struct pp_instance *ppi) {
return CONFIG_HAS_P2P && ppi->delayMechanism == P2P;
return CONFIG_HAS_P2P && ppi->delayMechanism == MECH_P2P;
}
static inline int is_delayMechanismE2E(struct pp_instance *ppi) {
return CONFIG_HAS_P2P==0 || ppi->delayMechanism == E2E;
return CONFIG_HAS_P2P==0 || ppi->delayMechanism == MECH_E2E;
}
static inline int is_slaveOnly(defaultDS_t *def) {
return CONFIG_HAS_CODEOPT_EPC_ENABLED==0 && def->slaveOnly;
return CONFIG_HAS_CODEOPT_SO_FORCE_DISABLED == 0 && CONFIG_HAS_CODEOPT_EPC_ENABLED==0 && def->slaveOnly;
}
static inline int is_masterOnly(portDS_t *portDS) {
#if CONFIG_HAS_CODEOPT_MO_FORCE_DISABLED
return 0;
#else
return portDS->masterOnly;
#endif
}
static inline int get_numberPorts(defaultDS_t *def) {
return CONFIG_HAS_CODEOPT_SINGLE_PORT ? 1 : def->numberPorts;
}
......@@ -407,7 +418,7 @@ extern int64_t interval_to_picos(TimeInterval interval);
extern int is_timestamps_incorrect(struct pp_instance *ppsi, int *err_count, int ts_mask);
extern char *time_to_string(struct pp_time *t);
extern char *interval_to_string(TimeInterval time);
extern char *relative_interval_to_string(TimeInterval time);
extern char *relative_interval_to_string(RelativeDifference time);
/*
* The state machine itself is an array of these structures.
......
......@@ -43,7 +43,7 @@ static struct pp_instance ppi_static = {
.port_name = "eth0",
.vlans_array_len = CONFIG_VLAN_ARRAY_SIZE,
.proto = PP_DEFAULT_PROTO,
.delayMechanism = CONFIG_HAS_P2P ? P2P : E2E,
.delayMechanism = CONFIG_HAS_P2P ? MECH_P2P : MECH_E2E,
.__tx_buffer = __tx_buffer,
.__rx_buffer = __rx_buffer,
};
......
......@@ -310,9 +310,9 @@ static struct pp_argname arg_profile[] = {
{},
};
static struct pp_argname arg_delayMechanism[] = {
{"request-response delay e2e", E2E},
{"request-response delay e2e", MECH_E2E},
#if CONFIG_HAS_P2P
{"peer-delay pdelay p2p", P2P},
{"peer-delay pdelay p2p", MECH_P2P},
#endif
{},
};
......
......@@ -115,8 +115,8 @@ int64_t pp_time_to_picos(struct pp_time *t)
void fixedDelta_to_pp_time(struct FixedDelta fd, struct pp_time *t) {
/* FixedDelta is expressed in ps*2^16 */
uint64_t *v=(uint64_t*)&fd;
t->scaled_nsecs=*v/1000L; /* We can do it because scaled_nsecs is also multiply by 2^16 */
uint64_t v = ((uint64_t)fd.scaledPicoseconds.msb)<<32 | (uint64_t)fd.scaledPicoseconds.lsb;
t->scaled_nsecs=v/1000L; /* We can do it because scaled_nsecs is also multiply by 2^16 */
t->secs=0;
normalize_pp_time(t);
}
......@@ -124,16 +124,17 @@ void fixedDelta_to_pp_time(struct FixedDelta fd, struct pp_time *t) {
void picos_to_pp_time(int64_t picos, struct pp_time *ts)
{
uint64_t sec, nsec;
uint64_t picos_u;
int sign = (picos < 0 ? -1 : 1);
picos *= sign;
sec=picos/PP_PSEC_PER_SEC;
picos-=sec*PP_PSEC_PER_SEC;
nsec = picos/1000;
picos%=1000;
picos_u = picos * sign;
sec = picos_u / PP_PSEC_PER_SEC;
picos_u -= sec * PP_PSEC_PER_SEC;
nsec = picos_u / 1000;
picos_u %= 1000;
ts->scaled_nsecs = nsec << TIME_FRACBITS;
ts->scaled_nsecs += ((picos << TIME_FRACBITS)+TIME_ROUNDING_VALUE) / 1000;
ts->scaled_nsecs += ((picos_u << TIME_FRACBITS) + TIME_ROUNDING_VALUE)/ 1000;
ts->scaled_nsecs *= sign;
ts->secs = sec * sign;
}
......@@ -143,9 +144,9 @@ void picos_to_pp_time(int64_t picos, struct pp_time *ts)
void pp_time_hardwarize(struct pp_time *time, int clock_period_ps,
int32_t *ticks, int32_t *picos)
{
int64_t ps, adj_ps;
uint64_t ps, adj_ps;
int32_t sign=(time->scaled_nsecs<0) ? -1 : 1;
int64_t scaled_nsecs=time->scaled_nsecs*sign;
uint64_t scaled_nsecs = time->scaled_nsecs * sign;
if ( clock_period_ps <= 0 ) {
pp_error("%s : Invalid clock period %d\n",__func__, clock_period_ps);
......@@ -178,11 +179,12 @@ TimeInterval picos_to_interval(int64_t picos)
} else {
int64_t scaled_ns;
uint64_t picos_u;
int sign = (picos < 0 ? -1 : 1);
picos *= sign;
scaled_ns=(picos/1000) << TIME_INTERVAL_FRACBITS; /* Calculate nanos */
scaled_ns+=((picos%1000) << TIME_INTERVAL_FRACBITS)/1000; /* Add picos */
picos_u = picos * sign;
scaled_ns = (picos_u / 1000) << TIME_INTERVAL_FRACBITS; /* Calculate nanos */
scaled_ns += ((picos_u % 1000) << TIME_INTERVAL_FRACBITS) / 1000; /* Add picos */
return scaled_ns*sign;
}
......@@ -271,35 +273,43 @@ char *time_to_string(struct pp_time *t)
/* Convert TimeInterval to string */
char *interval_to_string(TimeInterval time)
{
int64_t sign,nanos,picos;
int64_t nanos;
uint32_t picos;
char sign = ' ';
if ( time<0 && time !=INT64_MIN) {
sign=-1;
sign='-';
time=-time;
} else {
sign=1;
}
nanos = time >> TIME_INTERVAL_FRACBITS;
picos = (((time & TIME_INTERVAL_FRACMASK) * 1000) + TIME_INTERVAL_ROUNDING_VALUE ) >> TIME_INTERVAL_FRACBITS;
sprintf(time_as_string,"%" PRId64 ".%03" PRId64, sign*nanos,picos);
pp_sprintf(time_as_string,"%c%" PRId64 ".%03d", sign, nanos, picos);
return time_as_string;
}
/* Convert RelativeInterval to string */
char *relative_interval_to_string(TimeInterval time) {
int32_t nsecs=time >> REL_DIFF_FRACBITS;
uint64_t sub_yocto=0;
int64_t fraction;
uint64_t bitWeight=500000000000000000;
char *relative_interval_to_string(RelativeDifference time)
{
char sign;
int32_t nsecs;
uint64_t sub_yocto = 0;
int64_t fraction;
uint64_t bitWeight = 500000000000000000;
uint64_t mask;
if (time < 0) {
time =- time;
sign = '-';
} else {
sign = '+';
}
fraction=time & REL_DIFF_FRACMASK;
for (mask=(uint64_t) 1<< (REL_DIFF_FRACBITS-1);mask!=0; mask>>=1 ) {
if ( mask & fraction )
sub_yocto+=bitWeight;
bitWeight/=2;
nsecs = time >> REL_DIFF_FRACBITS;
fraction=time & REL_DIFF_FRACMASK;
for (mask = (uint64_t) 1 << (REL_DIFF_FRACBITS - 1); mask != 0; mask >>= 1) {
if (mask & fraction)
sub_yocto += bitWeight;
bitWeight /= 2;
}
sprintf(time_as_string,"%"PRId32".%018"PRIu64, nsecs, sub_yocto);
pp_sprintf(time_as_string,"%c%"PRId32".%018Ld", sign, nsecs, sub_yocto);
return time_as_string;
}
......@@ -2,43 +2,43 @@
/*
* PP_NP_GEN/EVT is the event or general message. It selects the socket etc
* PP_P2P_MECH is used to select a destination address for pdelay frames.
* P2P is used to select a destination address for pdelay frames.
* the numeric 0..5 is the "controlField" (magic ptpV1 numbers in byte 32).
* PP_LOG is the kind of logInterval to put in byte 33.
*/
struct pp_msgtype_info pp_msgtype_info[] = {
[PPM_SYNC_FMT] = {
PPM_SYNC, PP_SYNC_LENGTH,
PP_NP_EVT, PP_E2E_MECH, 0, PP_LOG_SYNC },
PP_NP_EVT, MECH_E2E, 0, PP_LOG_SYNC },
[PPM_DELAY_REQ_FMT] = {
PPM_DELAY_REQ, PP_DELAY_REQ_LENGTH,
PP_NP_EVT, PP_E2E_MECH, 1, 0x7f },
PP_NP_EVT, MECH_E2E, 1, 0x7f },
[PPM_PDELAY_REQ_FMT] = {
PPM_PDELAY_REQ,PP_PDELAY_REQ_LENGTH,
PP_NP_EVT, PP_P2P_MECH, 5, 0x7f },
PP_NP_EVT, MECH_P2P, 5, 0x7f },
[PPM_PDELAY_RESP_FMT] = {
PPM_PDELAY_RESP, PP_PDELAY_RESP_LENGTH,
PP_NP_EVT, PP_P2P_MECH, 5, 0x7f },
PP_NP_EVT, MECH_P2P, 5, 0x7f },
[PPM_FOLLOW_UP_FMT] = {
PPM_FOLLOW_UP, PP_FOLLOW_UP_LENGTH,
PP_NP_GEN, PP_E2E_MECH, 2, PP_LOG_SYNC },
PP_NP_GEN, MECH_E2E, 2, PP_LOG_SYNC },
[PPM_DELAY_RESP_FMT] = {
PPM_DELAY_RESP, PP_DELAY_RESP_LENGTH,
PP_NP_GEN, PP_E2E_MECH, 3, PP_LOG_REQUEST },
PP_NP_GEN, MECH_E2E, 3, PP_LOG_REQUEST },
[PPM_PDELAY_R_FUP_FMT] = {
PPM_PDELAY_R_FUP, PP_PDELAY_RESP_FOLLOW_UP_LENGTH,
PP_NP_GEN, PP_P2P_MECH, 5, 0x7f },
PP_NP_GEN, MECH_P2P, 5, 0x7f },
[PPM_ANNOUNCE_FMT] = {
PPM_ANNOUNCE, PP_ANNOUNCE_LENGTH,
PP_NP_GEN, PP_E2E_MECH, 5, PP_LOG_ANNOUNCE},
PP_NP_GEN, MECH_E2E, 5, PP_LOG_ANNOUNCE},
[PPM_SIGNALING_FMT] = {
PPM_SIGNALING, -1,
PP_NP_GEN, PP_E2E_MECH, 5, 0x7f},
PP_NP_GEN, MECH_E2E, 5, 0x7f},
[PPM_SIGNALING_NO_FWD_FMT] = {
PPM_SIGNALING, -1,
PP_NP_GEN, PP_P2P_MECH, 5, 0x7f},
PP_NP_GEN, MECH_P2P, 5, 0x7f},
/* We don't use management, or not in the table-driven code */
[PPM_MANAGEMENT_FMT] = { PPM_MANAGEMENT, -1, PP_NP_GEN, PP_E2E_MECH, 4, 0x7f},
[PPM_MANAGEMENT_FMT] = { PPM_MANAGEMENT, -1, PP_NP_GEN, MECH_E2E, 4, 0x7f},
};
char *pp_msgtype_name[] = {
......
......@@ -365,7 +365,7 @@ static int __wrh_servo_update(struct pp_instance *ppi)
}
gs->servo_locked=gs->state==WRH_TRACK_PHASE;
gs->servo_locked = (gs->state==WRH_TRACK_PHASE);
/* Increase number of servo updates with state different than
* WRH_TRACK_PHASE. (Used by SNMP) */
......
......@@ -79,7 +79,7 @@ typedef struct { /*draft P1588_v_29: page 100 and 333-335 */
Boolean peerIsTxCoherent;
Boolean peerIsRxCoherent;
Boolean peerIsCongruent;
/* None compliant members with IEEE1558-2018 */
/* None compliant members with IEEE1558-2019 */
Enumeration8 next_state;
} L1SyncBasicPortDS_t;
......
......@@ -57,7 +57,7 @@ static int wr_open(struct pp_instance *ppi, struct pp_runtime_opts *rt_opts)
){
WR_DSPOR(ppi)->wrConfig = WR_S_ONLY;
} else {
WR_DSPOR(ppi)->wrConfig = ( ppi->portDS->masterOnly ||
WR_DSPOR(ppi)->wrConfig = (is_masterOnly(ppi->portDS) ||
( is_externalPortConfigurationEnabled(DSDEF(ppi)) &&
ppi->externalPortConfigurationPortDS.desiredState==PPS_MASTER)) ?
WR_M_ONLY :
......@@ -333,6 +333,23 @@ static int wr_extension_state_changed( struct pp_instance * ppi) {
return 0;
}
static int wr_new_slave (struct pp_instance *ppi, void *buf, int len) {
if ( ppi->extState==PP_EXSTATE_ACTIVE ) {
struct wr_dsport *wrp = WR_DSPOR(ppi);
wr_servo_init(ppi);
/* To avoid comparison of sequenceId with parentAnnSequenceId
* and portIndentity with parentAnnPortIdentity set
* doRestart as TRUE*/
if (ppi->ext_data)
WRH_SRV(ppi)->doRestart = TRUE;
}
return 0;
}
struct pp_ext_hooks wr_ext_hooks = {
.init = wr_init,
.open = wr_open,
......@@ -342,6 +359,7 @@ struct pp_ext_hooks wr_ext_hooks = {
.handle_followup = wr_handle_followup,
.ready_for_slave = wr_ready_for_slave,
.run_ext_state_machine = wr_run_state_machine,
.new_slave = wr_new_slave,
#if CONFIG_HAS_P2P
.handle_presp = wr_handle_presp,
#endif
......
......@@ -27,7 +27,6 @@ static int next_pps_ms(struct pp_instance *ppi, struct pp_time *t)
int wr_abscal(struct pp_instance *ppi, void *buf, int plen, int new_state)
{
struct pp_time t;
struct wr_dsport *wrp = WR_DSPOR(ppi);
int len, i;
if (new_state) {
......@@ -40,7 +39,7 @@ int wr_abscal(struct pp_instance *ppi, void *buf, int plen, int new_state)
if (pp_timeout(ppi, wrTmoIdx)) {
uint64_t secs = t.secs;
TOPS()->enable_timing_output(GLBS(ppi), 1);
TOPS(ppi)->enable_timing_output(GLBS(ppi), 1);
/* Wait for the second to tick */
while( TOPS(ppi)->get(ppi, &t), t.secs == secs)
......@@ -49,7 +48,7 @@ int wr_abscal(struct pp_instance *ppi, void *buf, int plen, int new_state)
/* Send sync, no f-up -- actually we could send any frame */
TOPS(ppi)->get(ppi, &t);
len = msg_pack_sync(ppi, &t);
__send_and_log(ppi, len, PP_NP_EVT);
__send_and_log(ppi, len, PP_NP_EVT, PPM_SYNC_FMT);
/* And again next second */
pp_timeout_set(ppi, wrTmoIdx, next_pps_ms(ppi, &t) - 10);
......
......@@ -40,8 +40,7 @@ int wr_calibrated(struct pp_instance *ppi, void *buf, int len, int new_state)
(wrp->wrMode == WR_SLAVE)) {
wrp->next_state = WRS_WR_LINK_ON;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. CALIBRATE/WR_MODE_ON was expected\n",wrMsgId);
wr_handshake_fail(ppi);
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. %s was expected\n", wrMsgId, "CALIBRATE/WR_MODE_ON");
}
return 0;
......@@ -52,7 +51,7 @@ int wr_calibrated(struct pp_instance *ppi, void *buf, int len, int new_state)
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if ( !rms ) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
......
......@@ -19,24 +19,29 @@ int wr_calibration(struct pp_instance *ppi, void *buf, int len, int new_state)
{
struct wr_dsport *wrp = WR_DSPOR(ppi);
wr_servo_ext_t *se =WRE_SRV(ppi);
UInteger64 *delta;
FixedDelta *delta;
TimeInterval ti;
/* Calculate deltaTx and update servo*/
delta=(UInteger64 *)&wrp->deltaTx;
*delta= (UInteger64)(ppi->timestampCorrectionPortDS.egressLatency*1000);
pp_diag(ppi, ext, 1, "deltaTx: msb=0x%x lsb=0x%x\n",
delta = &wrp->deltaTx;
ti = ppi->timestampCorrectionPortDS.egressLatency*1000;
delta->scaledPicoseconds.msb = ti >> 32;
delta->scaledPicoseconds.lsb = ti & 0xFFFFFFFF;
pp_diag(ppi, ext, 1, "%s: msb=0x%x lsb=0x%x\n", "deltaTx",
wrp->deltaTx.scaledPicoseconds.msb,
wrp->deltaTx.scaledPicoseconds.lsb);
fixedDelta_to_pp_time(*(struct FixedDelta *)delta,&se->delta_txs);/* Update servo specific data */
fixedDelta_to_pp_time(*delta, &se->delta_txs);/* Update servo specific data */
/* Calculate deltaRx and update servo*/
delta=(UInteger64 *)&wrp->deltaRx;
*delta=(UInteger64)((ppi->timestampCorrectionPortDS.ingressLatency +
delta = &wrp->deltaRx;
ti= ((ppi->timestampCorrectionPortDS.ingressLatency +
ppi->timestampCorrectionPortDS.semistaticLatency) * 1000);
pp_diag(ppi, ext, 1, "deltaRx: msb=0x%x lsb=0x%x\n",
delta->scaledPicoseconds.msb = ti >> 32;
delta->scaledPicoseconds.lsb = ti & 0xFFFFFFFF;
pp_diag(ppi, ext, 1, "%s: msb=0x%x lsb=0x%x\n", "deltaRx",
wrp->deltaRx.scaledPicoseconds.msb,
wrp->deltaRx.scaledPicoseconds.lsb);
fixedDelta_to_pp_time(*(struct FixedDelta *)delta, &se->delta_rxs);/* Update servo specific data */
fixedDelta_to_pp_time(*delta, &se->delta_rxs);/* Update servo specific data */
/* Go to the next state */
wrp->next_state = WRS_CALIBRATED;
......
......@@ -27,14 +27,14 @@ int wr_link_on(struct pp_instance *ppi, void *buf, int len, int new_state)
wrp->next_state=WRS_IDLE;
#ifdef CONFIG_ABSCAL
#include "wrc_ptp.h"
/*
* absolute calibration only exists in arch-wrpc, so far, but
* we can't include wrpc headers, not available in wrs builds
*/
extern int ptp_mode;
extern int ep_get_bitslide(void);
if (ptp_mode == 4 /* WRC_MODE_ABSCAL */) {
if (wrc_ptp_is_abscal() /* WRC_MODE_ABSCAL */) {
wrp->next_state = WRS_ABSCAL;
/* print header for the serial port stream of stamps */
pp_printf("### t4.phase is already corrected for bitslide\n");
......
......@@ -34,8 +34,7 @@ int wr_locked(struct pp_instance *ppi, void *buf, int len, int new_state)
if ( wrMsgId == CALIBRATE ) {
wrp->next_state= WRS_RESP_CALIB_REQ;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. CALIBRATE was expected\n",wrMsgId);
wr_handshake_fail(ppi);
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. %s was expected\n",wrMsgId, "CALIBRATE");
}
return 0;
}
......@@ -45,7 +44,7 @@ int wr_locked(struct pp_instance *ppi, void *buf, int len, int new_state)
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if ( !rms ) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
......
......@@ -34,8 +34,7 @@ int wr_m_lock(struct pp_instance *ppi, void *buf, int len, int new_state)
if (wrMsgId == LOCKED) {
wrp->next_state = WRS_CALIBRATION;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. LOCKED was expected\n",wrMsgId);
wr_handshake_fail(ppi);
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. %s was expected\n",wrMsgId, "LOCKED");
}
return 0;
}
......@@ -45,7 +44,7 @@ int wr_m_lock(struct pp_instance *ppi, void *buf, int len, int new_state)
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if ( !rms ) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
......
......@@ -36,8 +36,7 @@ int wr_present(struct pp_instance *ppi, void *buf, int len, int new_state)
if ( wrMsgId == LOCK ) {
wrp->next_state = WRS_S_LOCK;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. LOCK was expected\n",wrMsgId);
wr_handshake_fail(ppi);
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. %s was expected\n",wrMsgId, "LOCK");
}
return 0;
}
......@@ -47,7 +46,7 @@ int wr_present(struct pp_instance *ppi, void *buf, int len, int new_state)
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if (rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if (!rms) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
......
......@@ -18,41 +18,39 @@ int wr_resp_calib_req(struct pp_instance *ppi, void *buf, int len, int new_state
if (new_state) {
wrp->wrStateRetry = WR_STATE_RETRY;
pp_timeout_set_rename(ppi, wrTmoIdx,WR_TMO_MS*(WR_STATE_RETRY+1),WR_TMO_NAME);
} else {
if (ppi->received_ptp_header.messageType == PPM_SIGNALING) {
Enumeration16 wrMsgId;
MsgSignaling wrsig_msg;
if ( msg_unpack_wrsig(ppi, buf, &wrsig_msg, &wrMsgId) ) {
if ( wrMsgId == CALIBRATED) {
/* Update servo */
wr_servo_ext_t *se =WRE_SRV(ppi);
fixedDelta_to_pp_time(wrp->otherNodeDeltaTx,&se->delta_txm);
fixedDelta_to_pp_time(wrp->otherNodeDeltaRx,&se->delta_rxm);
wrp->next_state = (wrp->wrMode == WR_MASTER) ?
WRS_WR_LINK_ON :
WRS_CALIBRATION;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. CALIBRATED was expected\n",wrMsgId);
wr_handshake_fail(ppi);
}
return 0;
}
/* Check whether a message is received, otherwise it may downgrade a link to ptp for wrs v5.0.x */
if (ppi->received_ptp_header.messageType == PPM_SIGNALING) {
Enumeration16 wrMsgId;
MsgSignaling wrsig_msg;
if ( msg_unpack_wrsig(ppi, buf, &wrsig_msg, &wrMsgId) ) {
if ( wrMsgId == CALIBRATED) {
/* Update servo */
wr_servo_ext_t *se =WRE_SRV(ppi);
fixedDelta_to_pp_time(wrp->otherNodeDeltaTx,&se->delta_txm);
fixedDelta_to_pp_time(wrp->otherNodeDeltaRx,&se->delta_rxm);
wrp->next_state = (wrp->wrMode == WR_MASTER) ?
WRS_WR_LINK_ON :
WRS_CALIBRATION;
} else {
pp_diag(ppi, ext, 1, "WR: Invalid msgId(x%04x) received. %s was expected\n",wrMsgId, "CALIBRATED");
}
return 0;
}
}
{ /* Check remaining time */
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if ( !rms ) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
wr_handshake_retry(ppi);
{ /* Check remaining time */
int rms=pp_next_delay_1(ppi, wrTmoIdx);
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
if ( !rms ) {
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
wr_handshake_retry(ppi);
}
}
......
......@@ -33,7 +33,7 @@ int wr_s_lock(struct pp_instance *ppi, void *buf, int len, int new_state)
if ( rms<=(wrp->wrStateRetry*WR_TMO_MS)) {
WRH_OPER()->locking_disable(ppi);
if ( rms==0 ) {
pp_diag(ppi, time, 1, "timeout expired: "WR_TMO_NAME"\n");
pp_diag(ppi, time, 1, "timeout expired: %s\n", WR_TMO_NAME);
wr_handshake_fail(ppi);
return 0; /* non-wr already */
}
......@@ -47,5 +47,5 @@ int wr_s_lock(struct pp_instance *ppi, void *buf, int len, int new_state)
WRH_OPER()->locking_enable(ppi);
}
return 100 ;/* 100ms : We check every 100ms if the PLL is locked */
return 0; /* 0ms : If needed we yeld in locking_poll during waiting for the PLL to lock */
}
......@@ -115,7 +115,6 @@ void wr_reset_process(struct pp_instance *ppi, wr_role_t role);
/* wr_servo interface */
int wr_servo_init(struct pp_instance *ppi);
void wr_servo_enable_tracking(int enable);
typedef struct wr_servo_ext {
struct pp_time delta_txm;
......
......@@ -208,26 +208,30 @@ int msg_unpack_wrsig(struct pp_instance *ppi, void *buf,
tlv_versionNumber = 0xFF & ntohs(*(UInteger16 *)(buf + 52));
if (tlv_type != TLV_TYPE_ORG_EXTENSION) {
pp_diag(ppi, frames, 1, "handle Signaling msg, failed, This is not "
"organization extension TLV = 0x%x\n", tlv_type);
/* "handle Signaling msg, failed, not organization extension TLV = 0x%x\n" */
pp_diag(ppi, frames, 1, "%sorganization extension TLV = 0x%x\n",
"handle Signaling msg, failed, not ", tlv_type);
return 0;
}
if (tlv_organizationID != WR_TLV_ORGANIZATION_ID) {
pp_diag(ppi, frames, 1, "handle Signaling msg, failed, not CERN's "
"OUI = 0x%x\n", tlv_organizationID);
/* "handle Signaling msg, failed, not CERN's OUI = 0x%x\n" */
pp_diag(ppi, frames, 1, "%sCERN's OUI = 0x%x\n",
"handle Signaling msg, failed, not ", tlv_organizationID);
return 0;
}
if (tlv_magicNumber != WR_TLV_MAGIC_NUMBER) {
pp_diag(ppi, frames, 1, "handle Signaling msg, failed, "
"not White Rabbit magic number = 0x%x\n", tlv_magicNumber);
/* "handle Signaling msg, failed, not White Rabbit magic number = 0x%x\n" */
pp_diag(ppi, frames, 1, "%sWhite Rabbit magic number = 0x%x\n",
"handle Signaling msg, failed, not ", tlv_magicNumber);
return 0;
}
if (tlv_versionNumber != WR_TLV_WR_VERSION_NUMBER ) {
pp_diag(ppi, frames, 1, "handle Signaling msg, failed, not supported "
"version number = 0x%x\n", tlv_versionNumber);
/* "handle Signaling msg, failed, not supported version number = 0x%x\n" */
pp_diag(ppi, frames, 1, "%ssupported version number = 0x%x\n",
"handle Signaling msg, failed, not ", tlv_versionNumber);
return 0;
}
......
......@@ -3,14 +3,6 @@
#include <libwr/shmem.h>
#include "../proto-standard/common-fun.h"
/* Enable tracking by default. Disabling the tracking is used for demos. */
static int wr_tracking_enabled = 1;
void wr_servo_enable_tracking(int enable)
{
wr_tracking_enabled = enable;
}
static inline void _calculate_raw_delayMM(struct pp_instance *ppi,
struct pp_time *ta,struct pp_time *tb,
struct pp_time *tc,struct pp_time *td ) {
......
......@@ -27,7 +27,7 @@ static wr_state_machine_t wr_state_actions[] ={
.action=wr_present,
},
[WRS_M_LOCK]{
.name="wr_m_lock",
.name="wr-m-lock",
.action=wr_m_lock,
},
[WRS_S_LOCK]{
......
This diff is collapsed.
......@@ -60,6 +60,7 @@ clockDegradation_t clockDegradation[]= {
.msg="unlocked",
},
},
#ifndef CONFIG_CODEOPT_WRPC_SIZE
// PP_ARB_CLASS_GM_LOCKED
{
.clockClass=PP_ARB_CLASS_GM_LOCKED,
......@@ -122,6 +123,7 @@ clockDegradation_t clockDegradation[]= {
.msg="unlocked",
}
},
#endif
// PP_ARB_CLASS_GM_UNLOCKED_B
{
.clockClass=PP_ARB_CLASS_GM_UNLOCKED_B,
......@@ -190,6 +192,7 @@ defaultDeviceAttributes_t defaultDeviceAttributes[] = {
.frequencyTraceable=TRUE,
.timeTraceable=TRUE,
},
#ifndef CONFIG_CODEOPT_WRPC_SIZE
{ .clockClass = PP_PTP_CLASS_GM_UNLOCKED_A,
.clock_quality_clockAccuracy = PP_PTP_ACCURACY_GM_UNLOCKED_A,
.clock_quality_offsetScaledLogVariance = PP_PTP_VARIANCE_GM_UNLOCKED_A,
......@@ -198,6 +201,7 @@ defaultDeviceAttributes_t defaultDeviceAttributes[] = {
.frequencyTraceable=FALSE,
.timeTraceable=FALSE,
},
#endif
{ .clockClass = PP_PTP_CLASS_GM_UNLOCKED_B,
.clock_quality_clockAccuracy = PP_PTP_ACCURACY_GM_UNLOCKED_B,
.clock_quality_offsetScaledLogVariance = PP_PTP_VARIANCE_GM_UNLOCKED_B,
......@@ -206,6 +210,7 @@ defaultDeviceAttributes_t defaultDeviceAttributes[] = {
.frequencyTraceable=FALSE,
.timeTraceable=FALSE,
},
#ifndef CONFIG_CODEOPT_WRPC_SIZE
{ .clockClass = PP_ARB_CLASS_GM_LOCKED,
.clock_quality_clockAccuracy = PP_ARB_ACCURACY_GM_LOCKED,
.clock_quality_offsetScaledLogVariance = PP_ARB_VARIANCE_GM_LOCKED,
......@@ -230,6 +235,7 @@ defaultDeviceAttributes_t defaultDeviceAttributes[] = {
.frequencyTraceable=FALSE,
.timeTraceable=FALSE,
},
#endif
{ .clockClass = PP_ARB_CLASS_GM_UNLOCKED_B,
.clock_quality_clockAccuracy = PP_ARB_ACCURACY_GM_UNLOCKED_B,
.clock_quality_offsetScaledLogVariance = PP_ARB_VARIANCE_GM_UNLOCKED_B,
......@@ -317,8 +323,8 @@ void bmc_update_clock_quality(struct pp_globals *ppg)
"Timing mode changed : %s, "
"clock class: %d"
", clock accuracy: %d"
", clock variance: x%04x"
", timeSource: x%02x"
", clock variance: 0x%04x"
", timeSource: 0x%02x"
", ptpTimeScale: %d"
", frequencyTraceable: %d"
", timeTraceable: %d"
......@@ -342,6 +348,8 @@ void bmc_set_default_device_attributes (struct pp_globals *ppg) {
while ( pDef->clockClass!=clockClass && pDef->clockClass!=-1)
pDef++;
/* if (pDef->clockClass == -1)
pp_printf("%s clockClass %d not found\n", __func__, pDef->clockClass);*/
if ( rt_opts->clock_quality_clockAccuracy==-1 )
rt_opts->clock_quality_clockAccuracy=(unsigned)pDef->clock_quality_clockAccuracy;
if ( rt_opts->clock_quality_offsetScaledLogVariance==-1 )
......@@ -373,5 +381,9 @@ void bmc_apply_configured_device_attributes(struct pp_globals *ppg) {
tpDS->frequencyTraceable=rt_opts->frequencyTraceable;
tpDS->timeTraceable=rt_opts->timeTraceable;
defDS->priority1 = rt_opts->priority1;
defDS->priority2 = rt_opts->priority2;
defDS->domainNumber = rt_opts->domainNumber;
}
......@@ -43,7 +43,7 @@ int st_com_peer_handle_pres(struct pp_instance *ppi, void *buf,
int e = 0;
/* if not in P2P mode, just return */
if (ppi->delayMechanism != P2P)
if (ppi->delayMechanism != MECH_P2P)
return 0;
msg_unpack_pdelay_resp(buf, &resp);
......@@ -120,7 +120,7 @@ int st_com_peer_handle_pres_followup(struct pp_instance *ppi,
int e = 0;
/* if not in P2P mode, just return */
if (ppi->delayMechanism != P2P)
if (ppi->delayMechanism != MECH_P2P)
return 0;
msg_unpack_pdelay_resp_follow_up(buf, &respFllw);
......@@ -166,7 +166,7 @@ int st_com_peer_handle_preq(struct pp_instance *ppi, void *buf,
int e = 0;
/* if not in P2P mode, just return */
if (ppi->delayMechanism != P2P)
if (ppi->delayMechanism != MECH_P2P)
return 0;
if (is_ext_hook_available(ppi,handle_preq))
......@@ -185,7 +185,7 @@ int st_com_peer_handle_preq(struct pp_instance *ppi, void *buf,
*/
void update_meanDelay(struct pp_instance *ppi, TimeInterval meanDelay) {
/* clause 11.4.2.d.f : the <meanLinkDelay> shall be stored ... for the P2P port in the PTP SLAVE state in currentDS.meanDelay.*/
if ( ppi->delayMechanism==P2P ) {
if (ppi->delayMechanism == MECH_P2P) {
DSPOR(ppi)->meanLinkDelay=meanDelay;
if ( ppi->state != PPS_SLAVE )
return;
......
......@@ -96,8 +96,9 @@ int pp_lib_may_issue_announce(struct pp_instance *ppi)
if (prop->ptpTimescale) {
ret = TOPS(ppi)->get_utc_time(ppi, &hours, &minutes, &seconds);
if (ret) {
/* "Could not get UTC time from system, taking received flags\n" */
pp_diag(ppi, frames, 1,
"Could not get UTC time from system, taking received flags\n");
"Could not get UTC %s from system, taking received flags\n", "time");
} else {
/* for 2 announce intervals after midnight, get the offset from the system */
if ((hours == 00) && (minutes == 00) &&
......
......@@ -7,15 +7,13 @@
#ifndef __MSG_H
#define __MSG_H
#define htonll(x) ((*(char *)&endianess == 1) ? \
htobe64(x) /* Little endian */ \
: \
(x)) /* Big endian */
#define ntohll(x) ((*(char *)&endianess == 1) ? \
be64toh(x) /* Little endian */ \
: \
(x)) /* Big endian */
#if __BYTE_ORDER == __BIG_ENDIAN
# define htonll(x) (x)
# define ntohll(x) (x)
#else
# define htonll(x) htobe64(x)
# define ntohll(x) be64toh(x)
#endif
extern const int endianess; /* use to check endianess */
......
......@@ -13,9 +13,9 @@
*/
struct pp_runtime_opts __pp_default_rt_opts = {
.clock_quality_clockClass = PP_CLASS_DEFAULT,
.clock_quality_clockAccuracy = -1, // Not defined
.clock_quality_offsetScaledLogVariance = -1, // Not defined
.timeSource = -1, // Not defined
.clock_quality_clockAccuracy = CONFIG_PTP_OPT_CLOCK_ACCURACY, // Not defined
.clock_quality_offsetScaledLogVariance = CONFIG_PTP_OPT_CLOCK_ALLAN_VARIANCE, // Not defined
.timeSource = CONFIG_PTP_OPT_TIME_SOURCE, // Not defined
.ptpTimeScale=-1, // Not defined
.frequencyTraceable=-1, // Not defined
.timeTraceable=-1, // Not defined
......@@ -40,7 +40,7 @@ struct pp_runtime_opts __pp_default_rt_opts = {
/* These parameters can be then overwritten with the config file ppsi.conf */
struct pp_instance_cfg __pp_default_instance_cfg = {
.profile=PPSI_PROFILE_PTP,
.delayMechanism=E2E,
.delayMechanism = MECH_E2E,
.announce_interval=PP_DEFAULT_ANNOUNCE_INTERVAL,
.announce_receipt_timeout=PP_DEFAULT_ANNOUNCE_RECEIPT_TIMEOUT,
.sync_interval=PP_DEFAULT_SYNC_INTERVAL,
......@@ -103,7 +103,7 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
def->externalPortConfigurationEnabled=pp_rt_opts->externalPortConfigurationEnabled;
def->slaveOnly=rt_opts->slaveOnly;
if ( is_externalPortConfigurationEnabled(def) ) {
if ( def->slaveOnly ) {
if (is_slaveOnly(def)) {
pp_printf("ppsi: Incompatible configuration: SlaveOnly and externalPortConfigurationEnabled\n");
def->slaveOnly=FALSE;
}
......@@ -139,10 +139,6 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
}
def->priority1 = rt_opts->priority1;
def->priority2 = rt_opts->priority2;
def->domainNumber = rt_opts->domainNumber;
for (i = 0; i < get_numberPorts(def); i++) {
struct pp_instance *ppi = INST(ppg, i);
......@@ -162,7 +158,7 @@ int pp_init_globals(struct pp_globals *ppg, struct pp_runtime_opts *pp_rt_opts)
Enumeration8 desiradedState=ppi->cfg.desiredState;
/* Clause 17.6.5.3 : - Clause 9.2.2 shall not be in effect */
if ( ppi->portDS->masterOnly ) {
if (is_masterOnly(ppi->portDS)) {
/* priority given to externalPortConfigurationEnabled */
ppi->portDS->masterOnly=FALSE;
pp_printf("ppsi: Wrong configuration: externalPortConfigurationEnabled=materOnly=TRUE. materOnly set to FALSE\n");
......
......@@ -288,8 +288,8 @@ int pp_servo_calculate_delays(struct pp_instance *ppi) {
if (__PP_DIAG_ALLOW(ppi, pp_dt_servo, 2)) {
pp_diag(ppi, servo, 2,"delayMM : %s s\n", time_to_string(&servo->delayMM));
pp_diag(ppi, servo, 2,"delayMS : %s s\n", time_to_string(&servo->delayMS));
pp_diag(ppi, servo, 2,"delayAsym : %s ns\n", relative_interval_to_string(ppi->portDS->delayAsymCoeff));
pp_diag(ppi, servo, 2,"delayAsymCoeff : %s ns\n", interval_to_string(ppi->portDS->delayAsymmetry));
pp_diag(ppi, servo, 2,"delayAsym : %s ns\n", interval_to_string(ppi->portDS->delayAsymmetry));
pp_diag(ppi, servo, 2,"delayAsymCoeff : %s ns\n", relative_interval_to_string(ppi->portDS->delayAsymCoeff));
pp_diag(ppi, servo, 2,"meanDelay : %s s\n", time_to_string(&servo->meanDelay));
pp_diag(ppi, servo, 2,"offsetFromMaster: %s s\n", time_to_string(&servo->offsetFromMaster));
}
......
......@@ -37,7 +37,7 @@ static int listening_handle_announce(struct pp_instance *ppi, void *buf, int len
* Announce messages received on a masterOnly PTP Port shall not be considered
* in the operation of the best master clock algorithm or in the update of data sets.
*/
if ( ! DSPOR(ppi)->masterOnly) {
if (!is_masterOnly(DSPOR(ppi))) {
struct pp_frgn_master frgn_master;
bmc_store_frgn_master(ppi, &frgn_master, buf, len);
......
......@@ -40,7 +40,7 @@ static int master_handle_announce(struct pp_instance *ppi, void *buf, int len)
* Announce messages received on a masterOnly PTP Port shall not be considered
* in the operation of the best master clock algorithm or in the update of data sets.
*/
if ( ! DSPOR(ppi)->masterOnly) {
if (!is_masterOnly(DSPOR(ppi))) {
struct pp_frgn_master frgn_master;
bmc_store_frgn_master(ppi, &frgn_master, buf, len);
......@@ -52,7 +52,7 @@ static int master_handle_announce(struct pp_instance *ppi, void *buf, int len)
static int master_handle_delay_request(struct pp_instance *ppi,
void *buf, int len)
{
/* if not in E2E mode, just return */
/* if not in MECH_E2E mode, just return */
if ( is_delayMechanismE2E(ppi) ) {
if (ppi->state == PPS_MASTER) { /* not pre-master */
if ( !msg_issue_delay_resp(ppi, &ppi->last_rcv_time) ) {
......
......@@ -39,7 +39,7 @@ static int passive_handle_announce(struct pp_instance *ppi, void *buf, int len)
* Announce messages received on a masterOnly PTP Port shall not be considered
* in the operation of the best master clock algorithm or in the update of data sets.
*/
if ( ! DSPOR(ppi)->masterOnly) {
if (!is_masterOnly(DSPOR(ppi))) {
struct pp_frgn_master frgn_master;
bmc_store_frgn_master(ppi, &frgn_master, buf, len);
......
......@@ -215,7 +215,7 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len)
* Announce messages received on a masterOnly PTP Port shall not be considered
* in the operation of the best master clock algorithm or in the update of data sets.
*/
if ( ! DSPOR(ppi)->masterOnly) {
if (!is_masterOnly(DSPOR(ppi))) {
bmc_add_frgn_master(ppi, &frgn_master);
}
......@@ -260,6 +260,7 @@ int pp_slave(struct pp_instance *ppi, void *buf, int len)
/* Check if the foreign master has changed */
if ( DSPAR(ppi)->newGrandmaster ) {
char gm_str[26];
// New grandmaster detected
DSPAR(ppi)->newGrandmaster=FALSE; // Clear it
......@@ -268,8 +269,7 @@ int pp_slave(struct pp_instance *ppi, void *buf, int len)
ppi->next_state = PPS_UNCALIBRATED;
Octet *id=DSPAR(ppi)->parentPortIdentity.clockIdentity.id;
pp_info("New grandmaster detected: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
id[0],id[1],id[2],id[3],id[4],id[5],id[6],id[7]);
pp_info("New grandmaster detected: %s\n", format_hex8(gm_str, id));
}
}
......
......@@ -29,16 +29,16 @@ static int bare_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg
struct pp_msgtype_info *mf = pp_msgtype_info + msg_fmt;
struct bare_ethhdr *hdr = pkt;
struct pp_time *t = &ppi->last_snt_time;
static const uint8_t macaddr[2][ETH_ALEN] = {
[PP_E2E_MECH] = PP_MCAST_MACADDRESS,
[PP_P2P_MECH] = PP_PDELAY_MACADDRESS,
static const uint8_t macaddr[MECH_MAX_SUPPORTED + 1][ETH_ALEN] = {
[MECH_E2E] = PP_MCAST_MACADDRESS,
[MECH_P2P] = PP_PDELAY_MACADDRESS,
};
int is_pdelay = mf->is_pdelay;
int delay_mechanism = mf->delay_mechanism;
int ret;
hdr->h_proto = htons(ETH_P_1588);
memcpy(hdr->h_dest, macaddr[is_pdelay], ETH_ALEN);
memcpy(hdr->h_dest, macaddr[delay_mechanism], ETH_ALEN);
/* raw socket implementation always uses gen socket */
memcpy(hdr->h_source, ppi->ch[PP_NP_GEN].addr, 6);
......
......@@ -185,14 +185,14 @@ static int unix_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg
struct pp_vlanhdr *vhdr = pkt;
struct pp_channel *ch = ppi->ch + chtype;
struct pp_time *t = &ppi->last_snt_time;
int is_pdelay = mf->is_pdelay;
int delay_mechanism = mf->delay_mechanism;
static const uint16_t udpport[] = {
[PP_NP_GEN] = PP_GEN_PORT,
[PP_NP_EVT] = PP_EVT_PORT,
};
static const uint8_t macaddr[2][ETH_ALEN] = {
[PP_E2E_MECH] = PP_MCAST_MACADDRESS,
[PP_P2P_MECH] = PP_PDELAY_MACADDRESS,
static const uint8_t macaddr[MECH_MAX_SUPPORTED + 1][ETH_ALEN] = {
[MECH_E2E] = PP_MCAST_MACADDRESS,
[MECH_P2P] = PP_PDELAY_MACADDRESS,
};
int ret;
......@@ -209,7 +209,7 @@ static int unix_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg
ch = ppi->ch + PP_NP_GEN;
hdr->h_proto = htons(ETH_P_1588);
memcpy(hdr->h_dest, macaddr[is_pdelay], ETH_ALEN);
memcpy(hdr->h_dest, macaddr[delay_mechanism], ETH_ALEN);
memcpy(hdr->h_source, ch->addr, ETH_ALEN);
TOPS(ppi)->get(ppi, t);
......@@ -234,7 +234,7 @@ static int unix_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg
vhdr->h_tci = htons(ppi->peer_vid); /* prio is 0 */
vhdr->h_tpid = htons(0x8100);
memcpy(hdr->h_dest, macaddr[is_pdelay], ETH_ALEN);
memcpy(hdr->h_dest, macaddr[delay_mechanism], ETH_ALEN);
memcpy(vhdr->h_source, ch->addr, ETH_ALEN);
TOPS(ppi)->get(ppi, t);
......@@ -254,7 +254,7 @@ static int unix_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg
case PPSI_PROTO_UDP:
addr.sin_family = AF_INET;
addr.sin_port = htons(udpport[chtype]);
addr.sin_addr.s_addr = ppi->mcast_addr[is_pdelay];
addr.sin_addr.s_addr = ppi->mcast_addr[delay_mechanism];
TOPS(ppi)->get(ppi, t);
......@@ -422,7 +422,7 @@ static int unix_open_ch_udp(struct pp_instance *ppi, char *ifname, int chtype)
context = addr_str; errno = EINVAL;
if (!inet_aton(addr_str, &net_addr))
goto err_out;
ppi->mcast_addr[PP_E2E_MECH] = net_addr.s_addr;
ppi->mcast_addr[MECH_E2E] = net_addr.s_addr;
/* multicast sends only on specified interface */
imr.imr_multiaddr.s_addr = net_addr.s_addr;
......@@ -446,7 +446,7 @@ static int unix_open_ch_udp(struct pp_instance *ppi, char *ifname, int chtype)
errno = EINVAL;
if (!inet_aton(addr_str, &net_addr))
goto err_out;
ppi->mcast_addr[PP_P2P_MECH] = net_addr.s_addr;
ppi->mcast_addr[MECH_P2P] = net_addr.s_addr;
imr.imr_multiaddr.s_addr = net_addr.s_addr;
/* join multicast group (for receiving) on specified interface */
......@@ -564,17 +564,17 @@ static int unix_net_exit(struct pp_instance *ppi)
/* Close General Multicast */
imr.imr_interface.s_addr = htonl(INADDR_ANY);
imr.imr_multiaddr.s_addr = ppi->mcast_addr[0];
imr.imr_multiaddr.s_addr = ppi->mcast_addr[MECH_E2E];
setsockopt(fd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
&imr, sizeof(struct ip_mreq));
imr.imr_multiaddr.s_addr = ppi->mcast_addr[1];
imr.imr_multiaddr.s_addr = ppi->mcast_addr[MECH_P2P];
setsockopt(fd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
&imr, sizeof(struct ip_mreq));
close(fd);
ppi->ch[i].fd = -1;
}
ppi->mcast_addr[0] = ppi->mcast_addr[1] = 0;
ppi->mcast_addr[MECH_E2E] = ppi->mcast_addr[MECH_P2P] = 0;
return 0;
default:
......@@ -601,10 +601,6 @@ static int unix_net_check_packet(struct pp_globals *ppg, int delay_ms)
arch_data->tv.tv_usec = (delay_ms % 1000) * 1000;
}
/* Detect general timeout with no needs for select stuff */
if ((arch_data->tv.tv_sec == 0) && (arch_data->tv.tv_usec == 0))
return 0;
FD_ZERO(&set);
for (j = 0; j < ppg->nlinks; j++) {
......
......@@ -8,9 +8,10 @@
#include "ptpdump.h"
#include "../arch-wrpc/wrpc.h"
#include <syscon.h> /* wrpc-sw */
#include <endpoint.h> /* wrpc-sw */
#include <dev/syscon.h> /* wrpc-sw */
#include <dev/endpoint.h> /* wrpc-sw */
#include <ptpd_netif.h> /* wrpc-sw */
#include "board.h"
#ifdef CONFIG_ABSCAL
#define HAS_ABSCAL 1
......@@ -77,7 +78,9 @@ static int wrpc_net_recv(struct pp_instance *ppi, void *pkt, int len,
&& (!HAS_ABSCAL || ptp_mode != WRC_MODE_ABSCAL))
mark_incorrect(t);
}
/* copy MAC and vlan of a peer to ppi */
memcpy(ppi->peer, &addr.mac, ETH_ALEN);
ppi->peer_vid = addr.vlan;
/* wrpc-sw may pass this in USER_CFLAGS, to remove footprint */
#ifndef CONFIG_NO_PTPDUMP
/* The header is separate, so dump payload only */
......@@ -90,7 +93,7 @@ static int wrpc_net_recv(struct pp_instance *ppi, void *pkt, int len,
/* WR counts bitslide later, in fixed-delta, so subtract it */
t4 = *t;
bitslide = ep_get_bitslide();
bitslide = ep_get_bitslide(&wrc_endpoint_dev);
t_bts.secs = 0;
t_bts.scaled_nsecs = (bitslide << 16) / 1000;
pp_time_sub(&t4, &t_bts);
......@@ -121,10 +124,10 @@ static int wrpc_net_send(struct pp_instance *ppi, void *pkt, int len, enum pp_ms
struct wr_timestamp wr_ts;
struct wr_sockaddr addr;
struct pp_time *t = &ppi->last_snt_time;
int is_pdelay = mf->is_pdelay;
static const uint8_t macaddr[2][ETH_ALEN] = {
[PP_E2E_MECH] = PP_MCAST_MACADDRESS,
[PP_P2P_MECH] = PP_PDELAY_MACADDRESS,
int delay_mechanism = mf->delay_mechanism;
static const uint8_t macaddr[MECH_MAX_SUPPORTED + 1][ETH_ALEN] = {
[MECH_E2E] = PP_MCAST_MACADDRESS,
[MECH_P2P] = PP_PDELAY_MACADDRESS,
};
/*
......@@ -138,7 +141,7 @@ static int wrpc_net_send(struct pp_instance *ppi, void *pkt, int len, enum pp_ms
sock = ppi->ch[PP_NP_EVT].custom;
addr.ethertype = htons(ETH_P_1588);
memcpy(&addr.mac, macaddr[is_pdelay], sizeof(mac_addr_t));
memcpy(&addr.mac, macaddr[delay_mechanism], sizeof(mac_addr_t));
if (CONFIG_HAS_WRPC_FAULTS && drop) {
addr.ethertype = 1;
addr.mac[0] = 0x22; /* pfilter uses mac; drop for nodes too */
......
This diff is collapsed.
......@@ -492,14 +492,14 @@ static int wrs_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg_
struct pp_vlanhdr *vhdr = pkt;
struct pp_channel *ch = ppi->ch + chtype;
struct pp_time *t = &ppi->last_snt_time;
int is_pdelay = mf->is_pdelay;
int delay_mechanism = mf->delay_mechanism;
static uint16_t udpport[] = {
[PP_NP_GEN] = PP_GEN_PORT,
[PP_NP_EVT] = PP_EVT_PORT,
};
static const uint8_t macaddr[2][ETH_ALEN] = {
[PP_E2E_MECH] = PP_MCAST_MACADDRESS,
[PP_P2P_MECH] = PP_PDELAY_MACADDRESS,
static const uint8_t macaddr[MECH_MAX_SUPPORTED + 1][ETH_ALEN] = {
[MECH_E2E] = PP_MCAST_MACADDRESS,
[MECH_P2P] = PP_PDELAY_MACADDRESS,
};
struct wrs_socket *s;
int ret, fd, drop;
......@@ -524,7 +524,7 @@ static int wrs_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg_
if (drop)
hdr->h_proto++;
memcpy(hdr->h_dest, macaddr[is_pdelay], ETH_ALEN);
memcpy(hdr->h_dest, macaddr[delay_mechanism], ETH_ALEN);
memcpy(hdr->h_source, ch->addr, ETH_ALEN);
if (t)
......@@ -555,7 +555,7 @@ static int wrs_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg_
if (drop)
hdr->h_proto++;
memcpy(hdr->h_dest, macaddr[is_pdelay], ETH_ALEN);
memcpy(hdr->h_dest, macaddr[delay_mechanism], ETH_ALEN);
memcpy(vhdr->h_source, ch->addr, ETH_ALEN);
if (t)
......@@ -583,7 +583,7 @@ static int wrs_net_send(struct pp_instance *ppi, void *pkt, int len,enum pp_msg_
fd = ppi->ch[chtype].fd;
addr.sin_family = AF_INET;
addr.sin_port = htons(udpport[chtype]);
addr.sin_addr.s_addr = ppi->mcast_addr[is_pdelay];
addr.sin_addr.s_addr = ppi->mcast_addr[delay_mechanism];
if (drop)
addr.sin_port = 3200;
ret = sendto(fd, pkt, len, 0, (struct sockaddr *)&addr,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
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