This just moves code around to have related functions together and forward declaration at the beginning of the file. No code changes.
Signed-off-by: Jiri Benc <jb...@redhat.com> --- phc2sys.c | 208 ++++++++++++++++++++++++++++++------------------------------- 1 files changed, 103 insertions(+), 105 deletions(-) diff --git a/phc2sys.c b/phc2sys.c index 5b1f243528ad..3f086496ee76 100644 --- a/phc2sys.c +++ b/phc2sys.c @@ -60,7 +60,41 @@ #define PHC_PPS_OFFSET_LIMIT 10000000 #define PMC_UPDATE_INTERVAL (60 * NS_PER_SEC) -struct clock; +struct clock { + LIST_ENTRY(clock) list; + clockid_t clkid; + int sysoff_supported; + int is_utc; + struct servo *servo; + enum servo_state servo_state; + const char *source_label; + struct stats *offset_stats; + struct stats *freq_stats; + struct stats *delay_stats; + struct clockcheck *sanity_check; +}; + +struct node { + unsigned int stats_max_count; + int sanity_freq_limit; + enum servo_type servo_type; + int phc_readings; + double phc_interval; + int sync_offset; + int forced_sync_offset; + int leap; + int leap_set; + int kernel_leap; + struct pmc *pmc; + int pmc_ds_requested; + uint64_t pmc_last_update; + LIST_HEAD(clock_head, clock) clocks; + struct clock *master; +}; + +static int update_sync_offset(struct node *node); +static int clock_handle_leap(struct node *node, struct clock *clock, + int64_t offset, uint64_t ts, int do_leap); static clockid_t clock_open(char *device) { @@ -95,6 +129,74 @@ static clockid_t clock_open(char *device) return clkid; } +static int clock_add(struct node *node, clockid_t clkid) +{ + struct clock *c; + int max_ppb; + double ppb; + + c = calloc(1, sizeof(*c)); + if (!c) { + pr_err("failed to allocate memory for a clock"); + return -1; + } + c->clkid = clkid; + c->servo_state = SERVO_UNLOCKED; + + if (c->clkid == CLOCK_REALTIME) { + c->source_label = "sys"; + c->is_utc = 1; + } else { + c->source_label = "phc"; + } + + if (node->stats_max_count > 0) { + c->offset_stats = stats_create(); + c->freq_stats = stats_create(); + c->delay_stats = stats_create(); + if (!c->offset_stats || + !c->freq_stats || + !c->delay_stats) { + pr_err("failed to create stats"); + return -1; + } + } + if (node->sanity_freq_limit) { + c->sanity_check = clockcheck_create(node->sanity_freq_limit); + if (!c->sanity_check) { + pr_err("failed to create clock check"); + return -1; + } + } + + clockadj_init(c->clkid); + ppb = clockadj_get_freq(c->clkid); + /* The reading may silently fail and return 0, reset the frequency to + make sure ppb is the actual frequency of the clock. */ + clockadj_set_freq(c->clkid, ppb); + if (c->clkid == CLOCK_REALTIME) { + sysclk_set_leap(0); + max_ppb = sysclk_max_freq(); + } else { + max_ppb = phc_max_adj(c->clkid); + if (!max_ppb) { + pr_err("clock is not adjustable"); + return -1; + } + } + + c->servo = servo_create(node->servo_type, -ppb, max_ppb, 0); + servo_sync_interval(c->servo, node->phc_interval); + + if (clkid != CLOCK_REALTIME) + c->sysoff_supported = (SYSOFF_SUPPORTED == + sysoff_probe(CLOCKID_TO_FD(clkid), + node->phc_readings)); + + LIST_INSERT_HEAD(&node->clocks, c, list); + return 0; +} + static int read_phc(clockid_t clkid, clockid_t sysclk, int readings, int64_t *offset, uint64_t *ts, int64_t *delay) { @@ -126,42 +228,6 @@ static int read_phc(clockid_t clkid, clockid_t sysclk, int readings, return 1; } -struct clock { - LIST_ENTRY(clock) list; - clockid_t clkid; - int sysoff_supported; - int is_utc; - struct servo *servo; - enum servo_state servo_state; - const char *source_label; - struct stats *offset_stats; - struct stats *freq_stats; - struct stats *delay_stats; - struct clockcheck *sanity_check; -}; - -struct node { - unsigned int stats_max_count; - int sanity_freq_limit; - enum servo_type servo_type; - int phc_readings; - double phc_interval; - int sync_offset; - int forced_sync_offset; - int leap; - int leap_set; - int kernel_leap; - struct pmc *pmc; - int pmc_ds_requested; - uint64_t pmc_last_update; - LIST_HEAD(clock_head, clock) clocks; - struct clock *master; -}; - -static int update_sync_offset(struct node *node); -static int clock_handle_leap(struct node *node, struct clock *clock, - int64_t offset, uint64_t ts, int do_leap); - static int64_t get_sync_offset(struct node *node, struct clock *dst) { int direction = node->forced_sync_offset; @@ -600,74 +666,6 @@ static int clock_handle_leap(struct node *node, struct clock *clock, return 0; } -static int clock_add(struct node *node, clockid_t clkid) -{ - struct clock *c; - int max_ppb; - double ppb; - - c = calloc(1, sizeof(*c)); - if (!c) { - pr_err("failed to allocate memory for a clock"); - return -1; - } - c->clkid = clkid; - c->servo_state = SERVO_UNLOCKED; - - if (c->clkid == CLOCK_REALTIME) { - c->source_label = "sys"; - c->is_utc = 1; - } else { - c->source_label = "phc"; - } - - if (node->stats_max_count > 0) { - c->offset_stats = stats_create(); - c->freq_stats = stats_create(); - c->delay_stats = stats_create(); - if (!c->offset_stats || - !c->freq_stats || - !c->delay_stats) { - pr_err("failed to create stats"); - return -1; - } - } - if (node->sanity_freq_limit) { - c->sanity_check = clockcheck_create(node->sanity_freq_limit); - if (!c->sanity_check) { - pr_err("failed to create clock check"); - return -1; - } - } - - clockadj_init(c->clkid); - ppb = clockadj_get_freq(c->clkid); - /* The reading may silently fail and return 0, reset the frequency to - make sure ppb is the actual frequency of the clock. */ - clockadj_set_freq(c->clkid, ppb); - if (c->clkid == CLOCK_REALTIME) { - sysclk_set_leap(0); - max_ppb = sysclk_max_freq(); - } else { - max_ppb = phc_max_adj(c->clkid); - if (!max_ppb) { - pr_err("clock is not adjustable"); - return -1; - } - } - - c->servo = servo_create(node->servo_type, -ppb, max_ppb, 0); - servo_sync_interval(c->servo, node->phc_interval); - - if (clkid != CLOCK_REALTIME) - c->sysoff_supported = (SYSOFF_SUPPORTED == - sysoff_probe(CLOCKID_TO_FD(clkid), - node->phc_readings)); - - LIST_INSERT_HEAD(&node->clocks, c, list); - return 0; -} - static void usage(char *progname) { fprintf(stderr, -- 1.7.6.5 ------------------------------------------------------------------------------ HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions Find What Matters Most in Your Big Data with HPCC Systems Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. Leverages Graph Analysis for Fast Processing & Easy Data Exploration http://p.sf.net/sfu/hpccsystems _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel