timepps.h revision 37110
136739Sphk/*
236739Sphk * ----------------------------------------------------------------------------
336739Sphk * "THE BEER-WARE LICENSE" (Revision 42):
436739Sphk * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
536739Sphk * can do whatever you want with this stuff. If we meet some day, and you think
636739Sphk * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
736739Sphk * ----------------------------------------------------------------------------
836739Sphk *
937110Sphk * $Id: timepps.h,v 1.3 1998/06/13 09:30:24 phk Exp $
1036739Sphk *
1136739Sphk * The is a FreeBSD protype version of the "draft-mogul-pps-api-02.txt"
1236739Sphk * specification for Pulse Per Second timing interfaces.
1336739Sphk *
1436739Sphk */
1536739Sphk
1636739Sphk#ifndef _SYS_TIMEPPS_H_
1736739Sphk#define _SYS_TIMEPPS_H_
1836739Sphk
1936739Sphk#include <sys/ioccom.h>
2036739Sphk
2136739Sphktypedef int pps_handle_t;
2236739Sphk
2336739Sphktypedef unsigned pps_seq_t;
2436739Sphk
2536938Sphktypedef struct ntp_fp {
2636938Sphk	unsigned int	integral;
2736938Sphk	unsigned int	fractional;
2836938Sphk} ntp_fp_t;
2936938Sphk
3036938Sphktypedef union pps_timeu {
3136938Sphk	struct timespec	tspec;
3236938Sphk	ntp_fp_t	ntpfp;
3336938Sphk	unsigned long	longpair[2];
3436938Sphk} pps_timeu_t;
3536938Sphk
3636739Sphktypedef struct {
3736938Sphk	pps_seq_t	assert_sequence;	/* assert event seq # */
3836938Sphk	pps_seq_t	clear_sequence;		/* clear event seq # */
3936938Sphk	pps_timeu_t	assert_tu;
4036938Sphk	pps_timeu_t	clear_tu;
4136938Sphk	int		current_mode;		/* current mode bits */
4236739Sphk} pps_info_t;
4336739Sphk
4436938Sphk#define assert_timestamp        assert_tu.tspec
4536938Sphk#define clear_timestamp         clear_tu.tspec
4636938Sphk
4736938Sphk#define assert_timestamp_ntpfp  assert_tu.ntpfp
4836938Sphk#define clear_timestamp_ntpfp   clear_tu.ntpfp
4936938Sphk
5036739Sphktypedef struct {
5136938Sphk	int mode;				/* mode bits */
5236938Sphk	pps_timeu_t assert_off_tu;
5336938Sphk	pps_timeu_t clear_off_tu;
5436739Sphk} pps_params_t;
5536739Sphk
5636938Sphk#define assert_offset   assert_off_tu.tspec
5736938Sphk#define clear_offset    clear_off_tu.tspec
5836938Sphk
5936938Sphk#define assert_offset_ntpfp     assert_off_tu.ntpfp
6036938Sphk#define clear_offset_ntpfp      clear_off_tu.ntpfp
6136938Sphk
6236938Sphk
6336739Sphk#define PPS_CAPTUREASSERT	0x01
6437110Sphk#define PPS_CAPTURECLEAR	0x02
6536739Sphk#define PPS_CAPTUREBOTH		0x03
6636739Sphk
6736938Sphk#define PPS_OFFSETASSERT	0x10
6836938Sphk#define PPS_OFFSETCLEAR		0x20
6936938Sphk
7036739Sphk#define PPS_HARDPPSONASSERT	0x04
7136739Sphk#define PPS_HARDPPSONCLEAR	0x08
7236739Sphk
7336739Sphk#define PPS_ECHOASSERT		0x40
7436739Sphk#define PPS_ECHOCLEAR		0x80
7536739Sphk
7636739Sphk#define PPS_CANWAIT		0x100
7736739Sphk
7836938Sphk#define PPS_TSFMT_TSPEC		0x1000
7936938Sphk#define PPS_TSFMT_NTPFP		0x2000
8036938Sphk
8136739Sphkstruct pps_wait_args {
8236739Sphk	struct timespec	timeout;
8336739Sphk	pps_info_t	pps_info_buf;
8436739Sphk};
8536739Sphk
8636739Sphk#define PPS_IOC_CREATE		_IO('1', 1)
8736739Sphk#define PPS_IOC_DESTROY		_IO('1', 2)
8836739Sphk#define PPS_IOC_SETPARAMS	_IOW('1', 3, pps_params_t)
8936739Sphk#define PPS_IOC_GETPARAMS	_IOR('1', 4, pps_params_t)
9036739Sphk#define PPS_IOC_GETCAP		_IOR('1', 5, int)
9136739Sphk#define PPS_IOC_FETCH		_IOWR('1', 6, pps_info_t)
9236739Sphk#define PPS_IOC_WAIT		_IOWR('1', 6, struct pps_wait_args)
9336739Sphk
9436941Sphk#ifdef KERNEL
9536941Sphkint std_pps_ioctl __P((u_long cmd, caddr_t data, pps_params_t *pp,
9636941Sphk	pps_info_t *pi, int ppscap));
9736941Sphk
9836941Sphk#endif /* KERNEL */
9936739Sphk#endif /* _SYS_TIMEPPS_H_ */
100