+#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
+extern boolean_t timer_call_enter(
+ timer_call_t call,
+ uint64_t deadline,
+ uint32_t flags);
+
+extern boolean_t timer_call_enter1(
+ timer_call_t call,
+ timer_call_param_t param1,
+ uint64_t deadline,
+ uint32_t flags);
+
+extern boolean_t timer_call_enter_with_leeway(
+ timer_call_t call,
+ timer_call_param_t param1,
+ uint64_t deadline,
+ uint64_t leeway,
+ uint32_t flags,
+ boolean_t ratelimited);
+
+extern boolean_t timer_call_quantum_timer_enter(
+ timer_call_t call,
+ timer_call_param_t param1,
+ uint64_t deadline,
+ uint64_t ctime);
+
+extern boolean_t timer_call_cancel(
+ timer_call_t call);
+
+extern boolean_t timer_call_quantum_timer_cancel(
+ timer_call_t call);
+
+extern void timer_call_init(void);
+
+extern void timer_call_setup(
+ timer_call_t call,
+ timer_call_func_t func,
+ timer_call_param_t param0);
+
+extern int timer_get_user_idle_level(void);
+extern kern_return_t timer_set_user_idle_level(int ilevel);
+
+#define NUM_LATENCY_QOS_TIERS (6)
+typedef struct {
+ uint32_t powergate_latency_abstime;
+
+ uint32_t idle_entry_timer_processing_hdeadline_threshold_abstime;
+ uint32_t interrupt_timer_coalescing_ilat_threshold_abstime;
+ uint32_t timer_resort_threshold_abstime;