Commit 561ae15f authored by Alessandro Rubini's avatar Alessandro Rubini

white rabbit: fold enable_timing_output in operations

This is the last bit of the overhaul made by the previous commit,
and has no technical effect. (In a perfect world, the previous commit
would have been one per function, to easily find errors, but I had not
enough time; this is different because it was a two-level call).
Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 48b25f3c
......@@ -43,6 +43,8 @@ static struct wr_operations wrpc_wr_operations = {
.calib_poll = wrpc_calibrating_poll,
.calib_pattern_enable = wrpc_calibration_pattern_enable,
.calib_pattern_disable = wrpc_calibration_pattern_disable,
.enable_timing_output = wrpc_enable_timing_output,
};
/*ppi fields*/
......
......@@ -53,8 +53,12 @@ int wrpc_spll_enable_ptracker(struct pp_instance *ppi)
return WR_SPLL_OK;
}
int __wr_enable_timing_output(struct pp_instance *ppi, int enable)
int wrpc_enable_timing_output(struct pp_instance *ppi, int enable)
{
if (enable == WR_DSPOR(ppi)->ppsOutputOn)
return WR_SPLL_OK;
WR_DSPOR(ppi)->ppsOutputOn = enable;
shw_pps_gen_enable_output(enable);
return WR_SPLL_OK;
}
......
......@@ -46,6 +46,7 @@ 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 enable);
/* wrpc-calibration.c */
int wrpc_read_calibration_data(struct pp_instance *ppi,
......@@ -60,5 +61,4 @@ int wrpc_calibration_pattern_enable(struct pp_instance *ppi,
unsigned int calibrationPatternLen);
int wrpc_calibration_pattern_disable(struct pp_instance *ppi);
#endif /* __WRPC_H */
......@@ -67,3 +67,4 @@ int wrs_enable_ptracker(struct pp_instance *ppi);
int wrs_adjust_in_progress(void);
int wrs_adjust_counters(int64_t adjust_sec, int32_t adjust_nsec);
int wrs_adjust_phase(int32_t phase_ps);
int wrs_enable_timing_output(struct pp_instance *ppi, int enable);
......@@ -41,6 +41,8 @@ static struct wr_operations wrs_wr_operations = {
.calib_poll = wrs_calibrating_poll,
.calib_pattern_enable = wrs_calibration_pattern_enable,
.calib_pattern_disable = wrs_calibration_pattern_disable,
.enable_timing_output = wrs_enable_timing_output,
};
/* ppg and fields */
......
......@@ -15,7 +15,7 @@ static int wr_init(struct pp_instance *ppi, unsigned char *pkt, int plen)
wp->parentWrConfig = NON_WR;
wp->parentWrModeOn = 0;
wp->calibrated = !WR_DEFAULT_PHY_CALIBRATION_REQUIRED;
wr_enable_timing_output(ppi, 0);
wp->ops->enable_timing_output(ppi, 0);
return 0;
}
......@@ -111,6 +111,7 @@ static int wr_handle_resp(struct pp_instance *ppi)
MsgHeader *hdr = &ppi->received_ptp_header;
TimeInternal correction_field;
TimeInternal *ofm = &DSCUR(ppi)->offsetFromMaster;
struct wr_dsport *wrp = WR_DSPOR(ppi);
/* FIXME: check sub-nano relevance of correction filed */
cField_to_TimeInternal(&correction_field, hdr->correctionfield);
......@@ -120,7 +121,7 @@ static int wr_handle_resp(struct pp_instance *ppi)
* After we adjusted the pps counter, stamps are invalid, so
* we'll have the Unix time instead, marked by "correct"
*/
if (!WR_DSPOR(ppi)->wrModeOn) {
if (!wrp->wrModeOn) {
if (!ppi->t2.correct || !ppi->t3.correct) {
pp_diag(ppi, servo, 1,
"T2 or T3 incorrect, discarding tuple\n");
......@@ -131,9 +132,9 @@ static int wr_handle_resp(struct pp_instance *ppi)
* pps always on if offset less than 1 second,
* until ve have a configurable threshold */
if (ofm->seconds)
wr_enable_timing_output(ppi, 0);
wrp->ops->enable_timing_output(ppi, 0);
else
wr_enable_timing_output(ppi, 1);
wrp->ops->enable_timing_output(ppi, 1);
}
wr_servo_got_delay(ppi, hdr->correctionfield.lsb);
......
......@@ -110,13 +110,9 @@ struct wr_operations {
unsigned int calibrationPattern,
unsigned int calibrationPatternLen);
int (*calib_pattern_disable)(struct pp_instance *ppi);
int (*enable_timing_output)(struct pp_instance *ppi, int enable);
};
/* The former is called by ppsi, the latter is the internal hw detail */
int wr_enable_timing_output(struct pp_instance *ppi, int enable);
int __wr_enable_timing_output(struct pp_instance *ppi, int enable);
/* FIXME: fold function above into wr_operations */
/* wr_servo interface */
int wr_servo_init(struct pp_instance *ppi);
......
......@@ -31,15 +31,6 @@ void wr_servo_enable_tracking(int enable)
tracking_enabled = enable;
}
int wr_enable_timing_output(struct pp_instance *ppi, int enable)
{
/* Only act on changes, so hackers can force it on manually */
if (enable != WR_DSPOR(ppi)->ppsOutputOn)
__wr_enable_timing_output(ppi, enable);
WR_DSPOR(ppi)->ppsOutputOn = enable;
return 0;
}
/* my own timestamp arithmetic functions */
static void dump_timestamp(struct pp_instance *ppi, char *what, TimeInternal ts)
......@@ -164,7 +155,7 @@ int wr_servo_init(struct pp_instance *ppi)
&s->fiber_fix_alpha, &s->clock_period_ps) != WR_HW_CALIB_OK)
return -1;
wr_enable_timing_output(ppi, 0);
wrp->ops->enable_timing_output(ppi, 0);
/* FIXME useful?
strncpy(s->if_name, clock->netPath.ifaceName, 16);
......@@ -308,7 +299,7 @@ int wr_servo_update(struct pp_instance *ppi)
if (wrp->ops->locking_poll(ppi) != WR_SPLL_READY) {
pp_diag(ppi, servo, 1, "PLL OutOfLock, should restart sync\n");
wr_enable_timing_output(ppi, 0);
wrp->ops->enable_timing_output(ppi, 0);
/* TODO check
* DSPOR(ppi)->doRestart = TRUE; */
}
......@@ -326,7 +317,7 @@ int wr_servo_update(struct pp_instance *ppi)
break;
case WR_SYNC_TAI:
wr_enable_timing_output(ppi, 0);
wrp->ops->enable_timing_output(ppi, 0);
if (ts_offset_hw.seconds != 0) {
strcpy(cur_servo_state.slave_servo_state, "SYNC_SEC");
......@@ -378,7 +369,7 @@ int wr_servo_update(struct pp_instance *ppi)
s->state = WR_SYNC_TAI;
else
if(remaining_offset < WR_SERVO_OFFSET_STABILITY_THRESHOLD) {
wr_enable_timing_output(ppi, 1);
wrp->ops->enable_timing_output(ppi, 1);
s->state = WR_TRACK_PHASE;
} else {
s->missed_iters++;
......
......@@ -88,12 +88,15 @@ int wrs_enable_ptracker(struct pp_instance *ppi)
return WR_SPLL_OK;
}
int __wr_enable_timing_output(struct pp_instance *ppi, int enable)
int wrs_enable_timing_output(struct pp_instance *ppi, int enable)
{
int ret, rval;
hexp_pps_params_t p;
if (enable == WR_DSPOR(ppi)->ppsOutputOn)
return WR_SPLL_OK;
WR_DSPOR(ppi)->ppsOutputOn = enable;
p.pps_valid = enable;
ret = minipc_call(hal_ch, DEFAULT_TO, &__rpcdef_pps_cmd,
......
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