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