1f08c3bdfSopenharmony_ci/*
2f08c3bdfSopenharmony_ci * File: common_timers.h
3f08c3bdfSopenharmony_ci *
4f08c3bdfSopenharmony_ci * Keep all the common defines/checks for the timer tests here
5f08c3bdfSopenharmony_ci */
6f08c3bdfSopenharmony_ci
7f08c3bdfSopenharmony_ci#ifndef LAPI_COMMON_TIMERS_H__
8f08c3bdfSopenharmony_ci#define LAPI_COMMON_TIMERS_H__
9f08c3bdfSopenharmony_ci
10f08c3bdfSopenharmony_ci#include "config.h"
11f08c3bdfSopenharmony_ci#include "lapi/syscalls.h"
12f08c3bdfSopenharmony_ci#include "lapi/posix_clocks.h"
13f08c3bdfSopenharmony_ci
14f08c3bdfSopenharmony_ci#ifndef NSEC_PER_SEC
15f08c3bdfSopenharmony_ci#define NSEC_PER_SEC (1000000000LL)
16f08c3bdfSopenharmony_ci#endif
17f08c3bdfSopenharmony_ci
18f08c3bdfSopenharmony_cistatic const clock_t clock_list[] = {
19f08c3bdfSopenharmony_ci	CLOCK_REALTIME,
20f08c3bdfSopenharmony_ci	CLOCK_MONOTONIC,
21f08c3bdfSopenharmony_ci	CLOCK_PROCESS_CPUTIME_ID,
22f08c3bdfSopenharmony_ci	CLOCK_THREAD_CPUTIME_ID,
23f08c3bdfSopenharmony_ci	CLOCK_BOOTTIME,
24f08c3bdfSopenharmony_ci	CLOCK_BOOTTIME_ALARM,
25f08c3bdfSopenharmony_ci	CLOCK_REALTIME_ALARM,
26f08c3bdfSopenharmony_ci	CLOCK_TAI,
27f08c3bdfSopenharmony_ci};
28f08c3bdfSopenharmony_ci/* CLOCKS_DEFINED is the number of clock sources defined for sure */
29f08c3bdfSopenharmony_ci#define CLOCKS_DEFINED (sizeof(clock_list) / sizeof(*clock_list))
30f08c3bdfSopenharmony_ci/* MAX_CLOCKS is the maximum number of clock sources supported by kernel */
31f08c3bdfSopenharmony_ci#define MAX_CLOCKS 16
32f08c3bdfSopenharmony_ci
33f08c3bdfSopenharmony_ci#define CLOCK_TO_STR(def_name)	\
34f08c3bdfSopenharmony_ci	case def_name:		\
35f08c3bdfSopenharmony_ci		return #def_name;
36f08c3bdfSopenharmony_ci
37f08c3bdfSopenharmony_cistatic inline const char *get_clock_str(const int clock_id)
38f08c3bdfSopenharmony_ci{
39f08c3bdfSopenharmony_ci	switch (clock_id) {
40f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_REALTIME);
41f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_MONOTONIC);
42f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_PROCESS_CPUTIME_ID);
43f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_THREAD_CPUTIME_ID);
44f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_BOOTTIME);
45f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_BOOTTIME_ALARM);
46f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_REALTIME_ALARM);
47f08c3bdfSopenharmony_ci	CLOCK_TO_STR(CLOCK_TAI);
48f08c3bdfSopenharmony_ci	default:
49f08c3bdfSopenharmony_ci		return "CLOCK_!?!?!?";
50f08c3bdfSopenharmony_ci	}
51f08c3bdfSopenharmony_ci}
52f08c3bdfSopenharmony_ci
53f08c3bdfSopenharmony_cistatic inline int possibly_unsupported(clock_t clock)
54f08c3bdfSopenharmony_ci{
55f08c3bdfSopenharmony_ci	switch (clock) {
56f08c3bdfSopenharmony_ci	case CLOCK_BOOTTIME:
57f08c3bdfSopenharmony_ci	case CLOCK_BOOTTIME_ALARM:
58f08c3bdfSopenharmony_ci	case CLOCK_REALTIME_ALARM:
59f08c3bdfSopenharmony_ci	case CLOCK_TAI:
60f08c3bdfSopenharmony_ci			return 1;
61f08c3bdfSopenharmony_ci	default:
62f08c3bdfSopenharmony_ci			return 0;
63f08c3bdfSopenharmony_ci	}
64f08c3bdfSopenharmony_ci}
65f08c3bdfSopenharmony_ci
66f08c3bdfSopenharmony_ci#include "lapi/syscalls.h"
67f08c3bdfSopenharmony_ci
68f08c3bdfSopenharmony_ci#include <time.h>
69f08c3bdfSopenharmony_ci#include <unistd.h>
70f08c3bdfSopenharmony_ci
71f08c3bdfSopenharmony_ci/* timer_t in kernel(int) is different from  Glibc definition(void*).
72f08c3bdfSopenharmony_ci * Use the kernel definition for syscall tests
73f08c3bdfSopenharmony_ci */
74f08c3bdfSopenharmony_citypedef int kernel_timer_t;
75f08c3bdfSopenharmony_ci
76f08c3bdfSopenharmony_ci#endif /* LAPI_COMMON_TIMERS_H__ */
77