~ubuntu-branches/ubuntu/quantal/linux-linaro-mx51/quantal

« back to all changes in this revision

Viewing changes to include/linux/ptp_clock_kernel.h

  • Committer: Package Import Robot
  • Author(s): John Rigby, John Rigby
  • Date: 2011-09-26 10:44:23 UTC
  • Revision ID: package-import@ubuntu.com-20110926104423-3o58a3c1bj7x00rs
Tags: 3.0.0-1007.9
[ John Rigby ]

Enable crypto modules and remove crypto-modules from
exclude-module files
LP: #826021

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
27
struct 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 period change in parts per billion.
 
54
 *
 
55
 * @adjtime:  Shifts the time of the hardware clock.
 
56
 *            parameter delta: Desired change in nanoseconds.
 
57
 *
 
58
 * @gettime:  Reads the current time from the hardware clock.
 
59
 *            parameter ts: Holds the result.
 
60
 *
 
61
 * @settime:  Set the current time on the hardware clock.
 
62
 *            parameter ts: Time value to set.
 
63
 *
 
64
 * @enable:   Request driver to enable or disable an ancillary feature.
 
65
 *            parameter request: Desired resource to enable or disable.
 
66
 *            parameter on: Caller passes one to enable or zero to disable.
 
67
 *
 
68
 * Drivers should embed their ptp_clock_info within a private
 
69
 * structure, obtaining a reference to it using container_of().
 
70
 *
 
71
 * The callbacks must all return zero on success, non-zero otherwise.
 
72
 */
 
73
 
 
74
struct ptp_clock_info {
 
75
        struct module *owner;
 
76
        char name[16];
 
77
        s32 max_adj;
 
78
        int n_alarm;
 
79
        int n_ext_ts;
 
80
        int n_per_out;
 
81
        int pps;
 
82
        int (*adjfreq)(struct ptp_clock_info *ptp, s32 delta);
 
83
        int (*adjtime)(struct ptp_clock_info *ptp, s64 delta);
 
84
        int (*gettime)(struct ptp_clock_info *ptp, struct timespec *ts);
 
85
        int (*settime)(struct ptp_clock_info *ptp, const struct timespec *ts);
 
86
        int (*enable)(struct ptp_clock_info *ptp,
 
87
                      struct ptp_clock_request *request, int on);
 
88
};
 
89
 
 
90
struct ptp_clock;
 
91
 
 
92
/**
 
93
 * ptp_clock_register() - register a PTP hardware clock driver
 
94
 *
 
95
 * @info:  Structure describing the new clock.
 
96
 */
 
97
 
 
98
extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info);
 
99
 
 
100
/**
 
101
 * ptp_clock_unregister() - unregister a PTP hardware clock driver
 
102
 *
 
103
 * @ptp:  The clock to remove from service.
 
104
 */
 
105
 
 
106
extern int ptp_clock_unregister(struct ptp_clock *ptp);
 
107
 
 
108
 
 
109
enum ptp_clock_events {
 
110
        PTP_CLOCK_ALARM,
 
111
        PTP_CLOCK_EXTTS,
 
112
        PTP_CLOCK_PPS,
 
113
};
 
114
 
 
115
/**
 
116
 * struct ptp_clock_event - decribes a PTP hardware clock event
 
117
 *
 
118
 * @type:  One of the ptp_clock_events enumeration values.
 
119
 * @index: Identifies the source of the event.
 
120
 * @timestamp: When the event occured.
 
121
 */
 
122
 
 
123
struct ptp_clock_event {
 
124
        int type;
 
125
        int index;
 
126
        u64 timestamp;
 
127
};
 
128
 
 
129
/**
 
130
 * ptp_clock_event() - notify the PTP layer about an event
 
131
 *
 
132
 * @ptp:    The clock obtained from ptp_clock_register().
 
133
 * @event:  Message structure describing the event.
 
134
 */
 
135
 
 
136
extern void ptp_clock_event(struct ptp_clock *ptp,
 
137
                            struct ptp_clock_event *event);
 
138
 
 
139
#endif