1655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng/****************************************************************************
2655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
3655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
4655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   This header was automatically generated from a Linux kernel header
5655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   of the same name, to make information necessary for userspace to
6655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   call into the kernel available to libc.  It contains only constants,
7655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   structures, and macros generated from the original header, and thus,
8655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   contains no copyrightable information.
9655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
10655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   To edit the content of this header, modify the corresponding
11655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   source file (e.g. under external/kernel-headers/original/) then
12655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   run bionic/libc/kernel/tools/update_all.py
13655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
14655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   Any manual change here will be lost the next time this script will
15655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***   be run. You've been warned!
16655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ***
17655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************
18655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************/
19655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#ifndef _PPS_H_
20655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define _PPS_H_
21655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#include <linux/types.h>
22655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_VERSION "5.3.6"
23655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_MAX_SOURCES 16
24655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_API_VERS_1 1
25655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_API_VERS PPS_API_VERS_1
26655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_MAX_NAME_LEN 32
27655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct pps_ktime {
28d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __s64 sec;
29d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __s32 nsec;
30d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 flags;
31655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
32525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferrisstruct pps_ktime_compat {
33525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  __s64 sec;
34525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  __s32 nsec;
35525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  __u32 flags;
36525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris} __attribute__((packed, aligned(4)));
37d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao#define PPS_TIME_INVALID (1 << 0)
38655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct pps_kinfo {
39d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 assert_sequence;
40d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  __u32 clear_sequence;
41d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_ktime assert_tu;
42d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_ktime clear_tu;
43d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int current_mode;
44655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
45525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferrisstruct pps_kinfo_compat {
46525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  __u32 assert_sequence;
47525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  __u32 clear_sequence;
48525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  struct pps_ktime_compat assert_tu;
49525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  struct pps_ktime_compat clear_tu;
50525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  int current_mode;
51525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris};
52655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct pps_kparams {
53d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int api_version;
54d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int mode;
55d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_ktime assert_off_tu;
56d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_ktime clear_off_tu;
57655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
58655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_CAPTUREASSERT 0x01
59655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_CAPTURECLEAR 0x02
60655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_CAPTUREBOTH 0x03
61655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_OFFSETASSERT 0x10
62655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_OFFSETCLEAR 0x20
63655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_CANWAIT 0x100
64655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_CANPOLL 0x200
65655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_ECHOASSERT 0x40
66655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_ECHOCLEAR 0x80
67655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_TSFMT_TSPEC 0x1000
68655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_TSFMT_NTPFP 0x2000
69655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_KC_HARDPPS 0
70655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_KC_HARDPPS_PLL 1
71655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_KC_HARDPPS_FLL 2
72655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct pps_fdata {
73d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_kinfo info;
74d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  struct pps_ktime timeout;
75655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
76525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferrisstruct pps_fdata_compat {
77525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  struct pps_kinfo_compat info;
78525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris  struct pps_ktime_compat timeout;
79525ce914edf136d2bd02ac8c404d56c52e737f4dChristopher Ferris};
80655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct pps_bind_args {
81d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int tsformat;
82d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int edge;
83d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao  int consumer;
84655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng};
85655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#include <linux/ioctl.h>
86655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_GETPARAMS _IOR('p', 0xa1, struct pps_kparams *)
87655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_SETPARAMS _IOW('p', 0xa2, struct pps_kparams *)
88655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_GETCAP _IOR('p', 0xa3, int *)
89655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_FETCH _IOWR('p', 0xa4, struct pps_fdata *)
90655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define PPS_KC_BIND _IOW('p', 0xa5, struct pps_bind_args *)
91655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#endif
92