summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/timer.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/sys/timer.h')
-rw-r--r--usr/src/uts/common/sys/timer.h31
1 files changed, 24 insertions, 7 deletions
diff --git a/usr/src/uts/common/sys/timer.h b/usr/src/uts/common/sys/timer.h
index 604ddf5d83..ec349c962f 100644
--- a/usr/src/uts/common/sys/timer.h
+++ b/usr/src/uts/common/sys/timer.h
@@ -24,6 +24,10 @@
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2015, Joyent, Inc. All rights reserved.
+ */
+
#ifndef _SYS_TIMER_H
#define _SYS_TIMER_H
@@ -55,32 +59,45 @@ extern int timer_max; /* patchable via /etc/system */
struct clock_backend;
-typedef struct itimer {
+struct itimer;
+typedef struct itimer itimer_t;
+
+struct itimer {
itimerspec_t it_itime;
hrtime_t it_hrtime;
ushort_t it_flags;
ushort_t it_lock;
- void *it_arg;
- sigqueue_t *it_sigq;
- klwp_t *it_lwp;
+ void *it_arg; /* clock backend-specific data */
struct proc *it_proc;
+ union {
+ struct {
+ sigqueue_t *__it_sigq;
+ klwp_t *__it_lwp;
+ } __proc;
+ void *__it_frontend;
+ } __data; /* timer frontend-specific data */
kcondvar_t it_cv;
int it_blockers;
int it_pending;
int it_overrun;
struct clock_backend *it_backend;
+ void (*it_fire)(itimer_t *);
kmutex_t it_mutex;
void *it_portev; /* port_kevent_t pointer */
void *it_portsrc; /* port_source_t pointer */
int it_portfd; /* port file descriptor */
-} itimer_t;
+};
+
+#define it_sigq __data.__proc.__it_sigq
+#define it_lwp __data.__proc.__it_lwp
+#define it_frontend __data.__it_frontend
typedef struct clock_backend {
struct sigevent clk_default;
int (*clk_clock_settime)(timespec_t *);
int (*clk_clock_gettime)(timespec_t *);
int (*clk_clock_getres)(timespec_t *);
- int (*clk_timer_create)(itimer_t *, struct sigevent *);
+ int (*clk_timer_create)(itimer_t *, void (*)(itimer_t *));
int (*clk_timer_settime)(itimer_t *, int, const struct itimerspec *);
int (*clk_timer_gettime)(itimer_t *, struct itimerspec *);
int (*clk_timer_delete)(itimer_t *);
@@ -88,8 +105,8 @@ typedef struct clock_backend {
} clock_backend_t;
extern void clock_add_backend(clockid_t clock, clock_backend_t *backend);
+extern clock_backend_t *clock_get_backend(clockid_t clock);
-extern void timer_fire(itimer_t *);
extern void timer_lwpbind();
extern void timer_func(sigqueue_t *);