⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timepps.h

📁 内核中关于nano计时的功能
💻 H
字号:
/* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp * ---------------------------------------------------------------------------- * * $FreeBSD: src/sys/sys/timepps.h,v 1.12 1999/12/29 04:24:48 peter Exp $ * * The is a FreeBSD protype version of the "draft-mogul-pps-api-05.txt"  * specification for Pulse Per Second timing interfaces.   */#ifndef _SYS_TIMEPPS_H_#define _SYS_TIMEPPS_H_#include <sys/ioccom.h>#define PPS_API_VERS_1	1typedef int pps_handle_t;	typedef unsigned pps_seq_t;typedef struct ntp_fp {	unsigned int	integral;	unsigned int	fractional;} ntp_fp_t;typedef union pps_timeu {	struct timespec	tspec;	ntp_fp_t	ntpfp;	unsigned long	longpad[3];} pps_timeu_t;typedef struct {	pps_seq_t	assert_sequence;	/* assert event seq # */	pps_seq_t	clear_sequence;		/* clear event seq # */	pps_timeu_t	assert_tu;	pps_timeu_t	clear_tu;	int		current_mode;		/* current mode bits */} pps_info_t;#define assert_timestamp        assert_tu.tspec#define clear_timestamp         clear_tu.tspec#define assert_timestamp_ntpfp  assert_tu.ntpfp#define clear_timestamp_ntpfp   clear_tu.ntpfptypedef struct {	int api_version;			/* API version # */	int mode;				/* mode bits */	pps_timeu_t assert_off_tu;	pps_timeu_t clear_off_tu;} pps_params_t;#define assert_offset   assert_off_tu.tspec#define clear_offset    clear_off_tu.tspec#define assert_offset_ntpfp     assert_off_tu.ntpfp#define clear_offset_ntpfp      clear_off_tu.ntpfp#define PPS_CAPTUREASSERT	0x01#define PPS_CAPTURECLEAR	0x02#define PPS_CAPTUREBOTH		0x03#define PPS_OFFSETASSERT	0x10#define PPS_OFFSETCLEAR		0x20#define PPS_ECHOASSERT		0x40#define PPS_ECHOCLEAR		0x80#define PPS_CANWAIT		0x100#define PPS_CANPOLL		0x200#define PPS_TSFMT_TSPEC		0x1000#define PPS_TSFMT_NTPFP		0x2000#define PPS_KC_HARDPPS		0#define PPS_KC_HARDPPS_PLL	1#define PPS_KC_HARDPPS_FLL	2struct pps_fetch_args {	int tsformat;	pps_info_t	pps_info_buf;	struct timespec	timeout;};struct pps_kcbind_args {	int kernel_consumer;	int edge;	int tsformat;};#define PPS_IOC_CREATE		_IO('1', 1)#define PPS_IOC_DESTROY		_IO('1', 2)#define PPS_IOC_SETPARAMS	_IOW('1', 3, pps_params_t)#define PPS_IOC_GETPARAMS	_IOR('1', 4, pps_params_t)#define PPS_IOC_GETCAP		_IOR('1', 5, int)#define PPS_IOC_FETCH		_IOWR('1', 6, struct pps_fetch_args)#define PPS_IOC_KCBIND		_IOW('1', 7, struct pps_kcbind_args)#ifdef _KERNELstruct pps_state {	pps_params_t	ppsparam;	pps_info_t	ppsinfo;	int		kcmode;	int		ppscap;	struct timecounter *ppstc;	unsigned	ppscount[3];};void pps_event __P((struct pps_state *pps, struct timecounter *tc, unsigned count, int event));void pps_init __P((struct pps_state *pps));int pps_ioctl __P((u_long cmd, caddr_t data, struct pps_state *pps));void hardpps __P((struct timespec *tsp, long nsec));#else /* !_KERNEL */static __inline inttime_pps_create(int filedes, pps_handle_t *handle){	int error;	*handle = -1;	error = ioctl(filedes, PPS_IOC_CREATE, 0);	if (error < 0) 		return (-1);	*handle = filedes;	return (0);}static __inline inttime_pps_destroy(pps_handle_t handle){	return (ioctl(handle, PPS_IOC_DESTROY, 0));}static __inline inttime_pps_setparams(pps_handle_t handle, const pps_params_t *ppsparams){	return (ioctl(handle, PPS_IOC_SETPARAMS, ppsparams));}static __inline inttime_pps_getparams(pps_handle_t handle, pps_params_t *ppsparams){	return (ioctl(handle, PPS_IOC_GETPARAMS, ppsparams));}static __inline int time_pps_getcap(pps_handle_t handle, int *mode){	return (ioctl(handle, PPS_IOC_GETCAP, mode));}static __inline inttime_pps_fetch(pps_handle_t handle, const int tsformat,	pps_info_t *ppsinfobuf, const struct timespec *timeout){	int error;	struct pps_fetch_args arg;	arg.tsformat = tsformat;	if (timeout == NULL) {		arg.timeout.tv_sec = -1;		arg.timeout.tv_nsec = -1;	} else		arg.timeout = *timeout;	error = ioctl(handle, PPS_IOC_FETCH, &arg);	*ppsinfobuf = arg.pps_info_buf;	return (error);}static __inline inttime_pps_kcbind(pps_handle_t handle, const int kernel_consumer,	const int edge, const int tsformat){	struct pps_kcbind_args arg;	arg.kernel_consumer = kernel_consumer;	arg.edge = edge;	arg.tsformat = tsformat;	return (ioctl(handle, PPS_IOC_KCBIND, &arg));}#endif /* !_KERNEL */#endif /* _SYS_TIMEPPS_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -