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