/*
- * Copyright (c) 2000-2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#include <sys/cdefs.h>
+#ifdef __LP64__
+
+typedef unsigned long clock_sec_t;
+typedef unsigned int clock_usec_t, clock_nsec_t;
+
+#else /* __LP64__ */
+
+typedef uint32_t clock_sec_t;
+typedef uint32_t clock_usec_t, clock_nsec_t;
+
+#endif /* __LP64__ */
+
#ifdef MACH_KERNEL_PRIVATE
+#include <kern/queue.h>
+
/*
* Clock operations list structure. Contains vectors to machine
* dependent clock routines.
*/
extern void clock_service_create(void);
-typedef void (*clock_timer_func_t)(
- uint64_t timestamp);
-
-extern void clock_set_timer_func(
- clock_timer_func_t func);
-
-extern void clock_set_timer_deadline(
- uint64_t deadline);
-
extern void clock_gettimeofday_set_commpage(
uint64_t abstime,
uint64_t epoch,
uint64_t offset,
- uint32_t *secs,
- uint32_t *microsecs);
+ clock_sec_t *secs,
+ clock_usec_t *microsecs);
-extern void machine_delay_until(
+extern void machine_delay_until(uint64_t interval,
uint64_t deadline);
-#include <stat_time.h>
-
-#if STAT_TIME || GPROF
-
-extern void hertz_tick(
- natural_t ticks,
- boolean_t usermode, /* executing user code */
- natural_t pc);
-
-#endif /* STAT_TIME */
-
extern uint32_t hz_tick_interval;
-extern void absolutetime_to_nanotime(
- uint64_t abstime,
- uint32_t *secs,
- uint32_t *nanosecs);
-
extern void nanotime_to_absolutetime(
- uint32_t secs,
- uint32_t nanosecs,
+ clock_sec_t secs,
+ clock_nsec_t nanosecs,
uint64_t *result);
#endif /* MACH_KERNEL_PRIVATE */
#ifdef XNU_KERNEL_PRIVATE
extern void clock_adjtime(
- int32_t *secs,
- int32_t *microsecs);
+ long *secs,
+ int *microsecs);
extern void clock_initialize_calendar(void);
extern void clock_wakeup_calendar(void);
extern void clock_gettimeofday(
- uint32_t *secs,
- uint32_t *microsecs);
+ clock_sec_t *secs,
+ clock_usec_t *microsecs);
extern void clock_set_calendar_microtime(
- uint32_t secs,
- uint32_t microsecs);
+ clock_sec_t secs,
+ clock_usec_t microsecs);
extern void clock_get_boottime_nanotime(
- uint32_t *secs,
- uint32_t *nanosecs);
+ clock_sec_t *secs,
+ clock_nsec_t *nanosecs);
extern void absolutetime_to_microtime(
- uint64_t abstime,
- uint32_t *secs,
- uint32_t *microsecs);
+ uint64_t abstime,
+ clock_sec_t *secs,
+ clock_usec_t *microsecs);
extern void clock_deadline_for_periodic_event(
uint64_t interval,
uint64_t abstime,
uint64_t *deadline);
+#if CONFIG_DTRACE
+
+extern void clock_get_calendar_nanotime_nowait(
+ clock_sec_t *secs,
+ clock_nsec_t *nanosecs);
+
+#endif /* CONFIG_DTRACE */
+
#endif /* XNU_KERNEL_PRIVATE */
extern void clock_get_calendar_microtime(
- uint32_t *secs,
- uint32_t *microsecs);
+ clock_sec_t *secs,
+ clock_usec_t *microsecs);
-extern void clock_get_calendar_nanotime(
- uint32_t *secs,
- uint32_t *nanosecs);
+extern void clock_get_calendar_absolute_and_microtime(
+ clock_sec_t *secs,
+ clock_usec_t *microsecs,
+ uint64_t *abstime);
-/*
- * Gah! This file is included everywhere. The other domains do not correctly
- * include config_dtrace headers, so this isn't being defined. The last test
- * I ran stopped with a build failure in pexpert/i386/kd.c
- */
-#if CONFIG_DTRACE
-extern void clock_get_calendar_nanotime_nowait(
- uint32_t *secs,
- uint32_t *nanosecs);
-#endif /* CONFIG_DTRACE */
+extern void clock_get_calendar_nanotime(
+ clock_sec_t *secs,
+ clock_nsec_t *nanosecs);
extern void clock_get_system_microtime(
- uint32_t *secs,
- uint32_t *microsecs);
+ clock_sec_t *secs,
+ clock_usec_t *microsecs);
extern void clock_get_system_nanotime(
- uint32_t *secs,
- uint32_t *nanosecs);
+ clock_sec_t *secs,
+ clock_nsec_t *nanosecs);
extern void clock_timebase_info(
mach_timebase_info_t info);
uint64_t nanoseconds,
uint64_t *result);
+extern uint64_t mach_absolutetime_asleep;
+extern uint64_t mach_absolutetime_last_sleep;
+
#ifdef KERNEL_PRIVATE
/*
* Obsolete interfaces.
*/
+#ifndef __LP64__
+
#define MACH_TIMESPEC_SEC_MAX (0 - 1)
#define MACH_TIMESPEC_NSEC_MAX (NSEC_PER_SEC - 1)
} \
} while (0)
+#include <Availability.h>
-extern mach_timespec_t clock_get_system_value(void);
-
-extern mach_timespec_t clock_get_calendar_value(void);
-
-extern void delay_for_interval(
- uint32_t interval,
- uint32_t scale_factor);
-#ifndef MACH_KERNEL_PRIVATE
-
-#ifndef ABSOLUTETIME_SCALAR_TYPE
+/* Use mach_absolute_time() */
+extern mach_timespec_t clock_get_system_value(void) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_8, __IPHONE_2_0, __IPHONE_6_0);
-#define clock_get_uptime(a) \
- clock_get_uptime(__OSAbsoluteTimePtr(a))
+extern mach_timespec_t clock_get_calendar_value(void) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_8, __IPHONE_2_0, __IPHONE_6_0);
-#define clock_interval_to_deadline(a, b, c) \
- clock_interval_to_deadline((a), (b), __OSAbsoluteTimePtr(c))
+#else /* __LP64__ */
-#define clock_interval_to_absolutetime_interval(a, b, c) \
- clock_interval_to_absolutetime_interval((a), (b), __OSAbsoluteTimePtr(c))
-
-#define clock_absolutetime_interval_to_deadline(a, b) \
- clock_absolutetime_interval_to_deadline(__OSAbsoluteTime(a), __OSAbsoluteTimePtr(b))
-
-#define clock_deadline_for_periodic_event(a, b, c) \
- clock_deadline_for_periodic_event(__OSAbsoluteTime(a), __OSAbsoluteTime(b), __OSAbsoluteTimePtr(c))
+#ifdef XNU_KERNEL_PRIVATE
-#define clock_delay_until(a) \
- clock_delay_until(__OSAbsoluteTime(a))
+#define MACH_TIMESPEC_ZERO ((mach_timespec_t) { 0, 0 } )
-#define absolutetime_to_nanoseconds(a, b) \
- absolutetime_to_nanoseconds(__OSAbsoluteTime(a), (b))
+#endif /* XNU_KERNEL_PRIVATE */
-#define nanoseconds_to_absolutetime(a, b) \
- nanoseconds_to_absolutetime((a), __OSAbsoluteTimePtr(b))
+#endif /* __LP64__ */
-#endif /* ABSOLUTETIME_SCALAR_TYPE */
+extern void delay_for_interval(
+ uint32_t interval,
+ uint32_t scale_factor);
-#endif /* !MACH_KERNEL_PRIVATE */
+extern void delay_for_interval_with_leeway(
+ uint32_t interval,
+ uint32_t leeway,
+ uint32_t scale_factor);
#endif /* KERNEL_PRIVATE */