linux/include/linux/ptp_clock_kernel.h
<<
>>
Prefs
   1/*
   2 * PTP 1588 clock support
   3 *
   4 * Copyright (C) 2010 OMICRON electronics GmbH
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2 of the License, or
   9 *  (at your option) any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; if not, write to the Free Software
  18 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 */
  20
  21#ifndef _PTP_CLOCK_KERNEL_H_
  22#define _PTP_CLOCK_KERNEL_H_
  23
  24#include <linux/ptp_clock.h>
  25
  26
  27struct ptp_clock_request {
  28        enum {
  29                PTP_CLK_REQ_EXTTS,
  30                PTP_CLK_REQ_PEROUT,
  31                PTP_CLK_REQ_PPS,
  32        } type;
  33        union {
  34                struct ptp_extts_request extts;
  35                struct ptp_perout_request perout;
  36        };
  37};
  38
  39/**
  40 * struct ptp_clock_info - decribes a PTP hardware clock
  41 *
  42 * @owner:     The clock driver should set to THIS_MODULE.
  43 * @name:      A short name to identify the clock.
  44 * @max_adj:   The maximum possible frequency adjustment, in parts per billon.
  45 * @n_alarm:   The number of programmable alarms.
  46 * @n_ext_ts:  The number of external time stamp channels.
  47 * @n_per_out: The number of programmable periodic signals.
  48 * @pps:       Indicates whether the clock supports a PPS callback.
  49 *
  50 * clock operations
  51 *
  52 * @adjfreq:  Adjusts the frequency of the hardware clock.
  53 *            parameter delta: Desired frequency offset from nominal frequency
  54 *            in parts per billion
  55 *
  56 * @adjtime:  Shifts the time of the hardware clock.
  57 *            parameter delta: Desired change in nanoseconds.
  58 *
  59 * @gettime:  Reads the current time from the hardware clock.
  60 *            parameter ts: Holds the result.
  61 *
  62 * @settime:  Set the current time on the hardware clock.
  63 *            parameter ts: Time value to set.
  64 *
  65 * @enable:   Request driver to enable or disable an ancillary feature.
  66 *            parameter request: Desired resource to enable or disable.
  67 *            parameter on: Caller passes one to enable or zero to disable.
  68 *
  69 * Drivers should embed their ptp_clock_info within a private
  70 * structure, obtaining a reference to it using container_of().
  71 *
  72 * The callbacks must all return zero on success, non-zero otherwise.
  73 */
  74
  75struct ptp_clock_info {
  76        struct module *owner;
  77        char name[16];
  78        s32 max_adj;
  79        int n_alarm;
  80        int n_ext_ts;
  81        int n_per_out;
  82        int pps;
  83        int (*adjfreq)(struct ptp_clock_info *ptp, s32 delta);
  84        int (*adjtime)(struct ptp_clock_info *ptp, s64 delta);
  85        int (*gettime)(struct ptp_clock_info *ptp, struct timespec *ts);
  86        int (*settime)(struct ptp_clock_info *ptp, const struct timespec *ts);
  87        int (*enable)(struct ptp_clock_info *ptp,
  88                      struct ptp_clock_request *request, int on);
  89};
  90
  91struct ptp_clock;
  92
  93/**
  94 * ptp_clock_register() - register a PTP hardware clock driver
  95 *
  96 * @info:  Structure describing the new clock.
  97 */
  98
  99extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info);
 100
 101/**
 102 * ptp_clock_unregister() - unregister a PTP hardware clock driver
 103 *
 104 * @ptp:  The clock to remove from service.
 105 */
 106
 107extern int ptp_clock_unregister(struct ptp_clock *ptp);
 108
 109
 110enum ptp_clock_events {
 111        PTP_CLOCK_ALARM,
 112        PTP_CLOCK_EXTTS,
 113        PTP_CLOCK_PPS,
 114};
 115
 116/**
 117 * struct ptp_clock_event - decribes a PTP hardware clock event
 118 *
 119 * @type:  One of the ptp_clock_events enumeration values.
 120 * @index: Identifies the source of the event.
 121 * @timestamp: When the event occured.
 122 */
 123
 124struct ptp_clock_event {
 125        int type;
 126        int index;
 127        u64 timestamp;
 128};
 129
 130/**
 131 * ptp_clock_event() - notify the PTP layer about an event
 132 *
 133 * @ptp:    The clock obtained from ptp_clock_register().
 134 * @event:  Message structure describing the event.
 135 */
 136
 137extern void ptp_clock_event(struct ptp_clock *ptp,
 138                            struct ptp_clock_event *event);
 139
 140/**
 141 * ptp_clock_index() - obtain the device index of a PTP clock
 142 *
 143 * @ptp:    The clock obtained from ptp_clock_register().
 144 */
 145
 146extern int ptp_clock_index(struct ptp_clock *ptp);
 147
 148#endif
 149
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.