1 /*
2 * Copyright (c) 2023 Meta
3 * Copyright (c) 2025 Tenstorrent AI ULC
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8 #include "posix_clock.h"
9 #include "posix_internal.h"
10
11 #include <stddef.h>
12 #include <time.h>
13 #include <errno.h>
14
15 #include <zephyr/sys/clock.h>
16 #include <zephyr/toolchain.h>
17
clock_nanosleep(clockid_t clock_id,int flags,const struct timespec * rqtp,struct timespec * rmtp)18 int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp,
19 struct timespec *rmtp)
20 {
21 int ret;
22
23 if (rqtp == NULL) {
24 errno = EFAULT;
25 return -1;
26 }
27
28 ret = sys_clock_nanosleep(sys_clock_from_clockid((int)clock_id), flags, rqtp, rmtp);
29 if (ret < 0) {
30 errno = -ret;
31 return -1;
32 }
33
34 return 0;
35 }
36
pthread_condattr_getclock(const pthread_condattr_t * ZRESTRICT att,clockid_t * ZRESTRICT clock_id)37 int pthread_condattr_getclock(const pthread_condattr_t *ZRESTRICT att,
38 clockid_t *ZRESTRICT clock_id)
39 {
40 struct posix_condattr *const attr = (struct posix_condattr *)att;
41
42 if ((attr == NULL) || !attr->initialized) {
43 return EINVAL;
44 }
45
46 *clock_id = attr->clock;
47
48 return 0;
49 }
50
pthread_condattr_setclock(pthread_condattr_t * att,clockid_t clock_id)51 int pthread_condattr_setclock(pthread_condattr_t *att, clockid_t clock_id)
52 {
53 struct posix_condattr *const attr = (struct posix_condattr *)att;
54
55 if (clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC) {
56 return -EINVAL;
57 }
58
59 if ((attr == NULL) || !attr->initialized) {
60 return EINVAL;
61 }
62
63 attr->clock = clock_id;
64
65 return 0;
66 }
67