xref: /freebsd/sys/dev/ntsync/ntsync.h (revision 03ca6dbdb80da79408f135d823fbd9a00fd4f25b)
1*03ca6dbdSKonstantin Belousov /*
2*03ca6dbdSKonstantin Belousov  * SPDX-License-Identifier: BSD-2-Clause
3*03ca6dbdSKonstantin Belousov  *
4*03ca6dbdSKonstantin Belousov  * Copyright 2026 The FreeBSD Foundation
5*03ca6dbdSKonstantin Belousov  *
6*03ca6dbdSKonstantin Belousov  * This software was developed by Konstantin Belousov <kib@FreeBSD.org>
7*03ca6dbdSKonstantin Belousov  * under sponsorship from the FreeBSD Foundation.
8*03ca6dbdSKonstantin Belousov  */
9*03ca6dbdSKonstantin Belousov 
10*03ca6dbdSKonstantin Belousov #ifndef __DEV_NTSYNC_H__
11*03ca6dbdSKonstantin Belousov #define	__DEV_NTSYNC_H__
12*03ca6dbdSKonstantin Belousov 
13*03ca6dbdSKonstantin Belousov #include <sys/types.h>
14*03ca6dbdSKonstantin Belousov #include <sys/ioccom.h>
15*03ca6dbdSKonstantin Belousov 
16*03ca6dbdSKonstantin Belousov struct ntsync_sem_args {
17*03ca6dbdSKonstantin Belousov 	uint32_t count;
18*03ca6dbdSKonstantin Belousov 	uint32_t max;
19*03ca6dbdSKonstantin Belousov };
20*03ca6dbdSKonstantin Belousov 
21*03ca6dbdSKonstantin Belousov struct ntsync_mutex_args {
22*03ca6dbdSKonstantin Belousov 	uint32_t owner;
23*03ca6dbdSKonstantin Belousov 	uint32_t count;
24*03ca6dbdSKonstantin Belousov };
25*03ca6dbdSKonstantin Belousov 
26*03ca6dbdSKonstantin Belousov struct ntsync_event_args {
27*03ca6dbdSKonstantin Belousov 	uint32_t manual;
28*03ca6dbdSKonstantin Belousov 	uint32_t signaled;
29*03ca6dbdSKonstantin Belousov };
30*03ca6dbdSKonstantin Belousov 
31*03ca6dbdSKonstantin Belousov struct ntsync_wait_args {
32*03ca6dbdSKonstantin Belousov 	uint64_t timeout;
33*03ca6dbdSKonstantin Belousov 	uint64_t objs;
34*03ca6dbdSKonstantin Belousov 	uint32_t count;
35*03ca6dbdSKonstantin Belousov 	uint32_t index;
36*03ca6dbdSKonstantin Belousov 	uint32_t flags;
37*03ca6dbdSKonstantin Belousov 	uint32_t owner;
38*03ca6dbdSKonstantin Belousov 	uint32_t alert;
39*03ca6dbdSKonstantin Belousov 	uint32_t pad;
40*03ca6dbdSKonstantin Belousov };
41*03ca6dbdSKonstantin Belousov 
42*03ca6dbdSKonstantin Belousov #define	NTSYNC_WAIT_REALTIME	0x00000001
43*03ca6dbdSKonstantin Belousov 
44*03ca6dbdSKonstantin Belousov #define	NTSYNC_MAX_WAIT_COUNT	64
45*03ca6dbdSKonstantin Belousov 
46*03ca6dbdSKonstantin Belousov /*
47*03ca6dbdSKonstantin Belousov  * 'sp' means that the ioctl is special, it might return both error
48*03ca6dbdSKonstantin Belousov  * and copy out parameters.  See ntsync_ioctl_copyout().
49*03ca6dbdSKonstantin Belousov  */
50*03ca6dbdSKonstantin Belousov 
51*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_CREATE_SEM	_IOW('n', 1, struct ntsync_sem_args)
52*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_CREATE_MUTEX	_IOW('n', 2, struct ntsync_mutex_args)
53*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_CREATE_EVENT	_IOW('n', 3, struct ntsync_event_args)
54*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_SEM_RELEASE	_IOWR('n', 4, uint32_t)
55*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_MUTEX_UNLOCK	_IOWR('n', 5, struct ntsync_mutex_args)
56*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_EVENT_SET	_IOR('n', 6, uint32_t)
57*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_EVENT_RESET	_IOR('n', 7, uint32_t)
58*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_EVENT_PULSE	_IOR('n', 8, uint32_t)
59*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_SEM_READ	_IOR('n', 9, struct ntsync_sem_args)
60*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_MUTEX_READ	_IO('n', 10) /* sp */
61*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_EVENT_READ	_IOR('n', 11, struct ntsync_event_args)
62*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_MUTEX_KILL	_IOW('n', 12, uint32_t)
63*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_WAIT_ANY	_IOW('n', 13, struct ntsync_wait_args) /* sp */
64*03ca6dbdSKonstantin Belousov #define	NTSYNC_IOC_WAIT_ALL	_IOW('n', 14, struct ntsync_wait_args) /* sp */
65*03ca6dbdSKonstantin Belousov 
66*03ca6dbdSKonstantin Belousov #endif
67