This propagates the use of "struct ts2phc_private" all the way into the master API, in preparation of a new use case that will be supported soon: some PPS masters (to be precise, the "PHC" kind) instantiate a struct clock which could be disciplined by ts2phc. When a PHC A emits a pulse and another PHC B timestamps it, the offset between their precise timestamps can be used to synchronize either one of them. So far in ts2phc, only the slave PHC (the one using extts) has been synchronized to the master (the one using perout). This is partly because there is no proper kernel API to report the precise timestamp of a perout pulse. We only have the periodic API, and that doesn't report precise timestamps either; we just use vague approximations of what the PPS master PHC's time was, based on reading that PHC immediately after a slave extts event was received by the application. While this is far from ideal, it does work, and does allow PHC A to be synchronized to B. This is particularly useful with the yet-to-be-introduced "automatic" mode of ts2phc (similar to '-a' of phc2sys), and the PPS distribution tree is fixed in hardware (as opposed to port states, which in "automatic" mode are dynamic, as the name suggests). Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
16 lines
393 B
C
16 lines
393 B
C
/**
|
|
* @file ts2phc_generic_master.h
|
|
* @note Copyright (C) 2019 Richard Cochran <richardcochran@gmail.com>
|
|
* @note SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
#ifndef HAVE_TS2PHC_GENERIC_MASTER_H
|
|
#define HAVE_TS2PHC_GENERIC_MASTER_H
|
|
|
|
#include "ts2phc.h"
|
|
#include "ts2phc_master.h"
|
|
|
|
struct ts2phc_master *ts2phc_generic_master_create(struct ts2phc_private *priv,
|
|
const char *dev);
|
|
|
|
#endif
|