-} *timer_call_t;
-
-typedef void *timer_call_param_t;
-typedef void (*timer_call_func_t)(
- timer_call_param_t param0,
- timer_call_param_t param1);
-#define TIMER_CALL_CRITICAL 0x01
-#define TIMER_CALL_LOCAL 0x02
+ uint64_t ttd; /* Time to deadline at creation */
+} timer_call_data_t, *timer_call_t;
+
+#define EndOfAllTime 0xFFFFFFFFFFFFFFFFULL
+
+typedef void *timer_call_param_t;
+typedef void (*timer_call_func_t)(
+ timer_call_param_t param0,
+ timer_call_param_t param1);
+
+/*
+ * Flags to alter the default timer/timeout coalescing behavior
+ * on a per-timer_call basis.
+ *
+ * The SYS urgency classes indicate that the timer_call is not
+ * directly related to the current thread at the time the timer_call
+ * is entered, so it is ignored in the calculation entirely (only
+ * the subclass specified is used).
+ *
+ * The USER flags indicate that both the current thread scheduling and QoS
+ * attributes, in addition to the per-timer_call urgency specification,
+ * are used to establish coalescing behavior.
+ */
+#define TIMER_CALL_SYS_NORMAL TIMEOUT_URGENCY_SYS_NORMAL
+#define TIMER_CALL_SYS_CRITICAL TIMEOUT_URGENCY_SYS_CRITICAL
+#define TIMER_CALL_SYS_BACKGROUND TIMEOUT_URGENCY_SYS_BACKGROUND
+
+#define TIMER_CALL_USER_MASK TIMEOUT_URGENCY_USER_MASK
+#define TIMER_CALL_USER_NORMAL TIMEOUT_URGENCY_USER_NORMAL
+#define TIMER_CALL_USER_CRITICAL TIMEOUT_URGENCY_USER_CRITICAL
+#define TIMER_CALL_USER_BACKGROUND TIMEOUT_URGENCY_USER_BACKGROUND
+
+#define TIMER_CALL_URGENCY_MASK TIMEOUT_URGENCY_MASK
+
+/*
+ * Indicate that a specific leeway value is being provided (otherwise
+ * the leeway parameter is ignored). This supplied value can currently
+ * only be used to extend the leeway calculated internally from the
+ * urgency class provided.
+ */
+#define TIMER_CALL_LEEWAY TIMEOUT_URGENCY_LEEWAY
+
+/*
+ * Non-migratable timer_call
+ */
+#define TIMER_CALL_LOCAL TIMEOUT_URGENCY_FIRST_AVAIL
+#define TIMER_CALL_RATELIMITED TIMEOUT_URGENCY_RATELIMITED