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