xref: /illumos-gate/usr/src/test/libc-tests/tests/clocklock/clock_lock.h (revision 8b6b46dcb073dba71917d6a7309f0df7bad798a2)
1*8b6b46dcSRobert Mustacchi /*
2*8b6b46dcSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*8b6b46dcSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*8b6b46dcSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*8b6b46dcSRobert Mustacchi  * 1.0 of the CDDL.
6*8b6b46dcSRobert Mustacchi  *
7*8b6b46dcSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*8b6b46dcSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*8b6b46dcSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*8b6b46dcSRobert Mustacchi  */
11*8b6b46dcSRobert Mustacchi 
12*8b6b46dcSRobert Mustacchi /*
13*8b6b46dcSRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*8b6b46dcSRobert Mustacchi  */
15*8b6b46dcSRobert Mustacchi 
16*8b6b46dcSRobert Mustacchi #ifndef _CLOCK_LOCK_H
17*8b6b46dcSRobert Mustacchi #define	_CLOCK_LOCK_H
18*8b6b46dcSRobert Mustacchi 
19*8b6b46dcSRobert Mustacchi /*
20*8b6b46dcSRobert Mustacchi  * Common definitions for the clock_lock test.
21*8b6b46dcSRobert Mustacchi  */
22*8b6b46dcSRobert Mustacchi 
23*8b6b46dcSRobert Mustacchi #include <stdbool.h>
24*8b6b46dcSRobert Mustacchi #include <time.h>
25*8b6b46dcSRobert Mustacchi 
26*8b6b46dcSRobert Mustacchi #ifdef __cplusplus
27*8b6b46dcSRobert Mustacchi extern "C" {
28*8b6b46dcSRobert Mustacchi #endif
29*8b6b46dcSRobert Mustacchi 
30*8b6b46dcSRobert Mustacchi typedef struct lock_ops {
31*8b6b46dcSRobert Mustacchi 	void (*lo_create)(const char *, void **);
32*8b6b46dcSRobert Mustacchi 	void (*lo_destroy)(void *);
33*8b6b46dcSRobert Mustacchi 	void (*lo_lock)(void *);
34*8b6b46dcSRobert Mustacchi 	void (*lo_unlock)(void *);
35*8b6b46dcSRobert Mustacchi } lock_ops_t;
36*8b6b46dcSRobert Mustacchi 
37*8b6b46dcSRobert Mustacchi typedef struct clock_test {
38*8b6b46dcSRobert Mustacchi 	const char *ct_desc;
39*8b6b46dcSRobert Mustacchi 	const lock_ops_t *ct_ops;
40*8b6b46dcSRobert Mustacchi 	bool ct_enter;
41*8b6b46dcSRobert Mustacchi 	bool (*ct_test)(const struct clock_test *, void *);
42*8b6b46dcSRobert Mustacchi } clock_test_t;
43*8b6b46dcSRobert Mustacchi 
44*8b6b46dcSRobert Mustacchi extern const clock_test_t clock_cond_tests[];
45*8b6b46dcSRobert Mustacchi extern size_t clock_cond_ntests;
46*8b6b46dcSRobert Mustacchi extern const clock_test_t clock_mutex_tests[];
47*8b6b46dcSRobert Mustacchi extern size_t clock_mutex_ntests;
48*8b6b46dcSRobert Mustacchi extern const clock_test_t clock_rwlock_tests[];
49*8b6b46dcSRobert Mustacchi extern size_t clock_rwlock_ntests;
50*8b6b46dcSRobert Mustacchi extern const clock_test_t clock_sem_tests[];
51*8b6b46dcSRobert Mustacchi extern size_t clock_sem_ntests;
52*8b6b46dcSRobert Mustacchi 
53*8b6b46dcSRobert Mustacchi /*
54*8b6b46dcSRobert Mustacchi  * Timeouts and functions tests can use.
55*8b6b46dcSRobert Mustacchi  */
56*8b6b46dcSRobert Mustacchi extern const struct timespec clock_to_100ms;
57*8b6b46dcSRobert Mustacchi extern const struct timespec clock_to_invns;
58*8b6b46dcSRobert Mustacchi extern const struct timespec clock_to_invnegs;
59*8b6b46dcSRobert Mustacchi extern const struct timespec clock_to_invnegns;
60*8b6b46dcSRobert Mustacchi 
61*8b6b46dcSRobert Mustacchi extern void clock_rel_to_abs(clockid_t, const struct timespec *restrict,
62*8b6b46dcSRobert Mustacchi     struct timespec *restrict);
63*8b6b46dcSRobert Mustacchi extern bool clock_abs_after(clockid_t, const struct timespec *);
64*8b6b46dcSRobert Mustacchi extern bool clock_rel_after(clockid_t, const struct timespec *,
65*8b6b46dcSRobert Mustacchi     const struct timespec *);
66*8b6b46dcSRobert Mustacchi 
67*8b6b46dcSRobert Mustacchi #ifdef __cplusplus
68*8b6b46dcSRobert Mustacchi }
69*8b6b46dcSRobert Mustacchi #endif
70*8b6b46dcSRobert Mustacchi 
71*8b6b46dcSRobert Mustacchi #endif /* _CLOCK_LOCK_H */
72