X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/89b3af67bb32e691275bf6fa803d1834b2284115..b226f5e54a60dc81db17b1260381d7dbfea3cdf1:/osfmk/kern/clock_oldops.c diff --git a/osfmk/kern/clock_oldops.c b/osfmk/kern/clock_oldops.c index 987036954..c77d40f28 100644 --- a/osfmk/kern/clock_oldops.c +++ b/osfmk/kern/clock_oldops.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2005 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2008 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -39,7 +39,6 @@ #include -#include #include #include #include @@ -60,6 +59,7 @@ #include #include +#include /* * Actual clock alarm structure. Used for user clock_sleep() and @@ -128,8 +128,6 @@ static kern_return_t clock_sleep_internal( sleep_type_t sleep_type, mach_timespec_t *sleep_time); -int rtclock_config(void); - int rtclock_init(void); kern_return_t rtclock_gettime( @@ -140,8 +138,8 @@ kern_return_t rtclock_getattr( clock_attr_t attr, mach_msg_type_number_t *count); -struct clock_ops sysclk_ops = { - rtclock_config, rtclock_init, +SECURITY_READ_ONLY_EARLY(struct clock_ops) sysclk_ops = { + NULL, rtclock_init, rtclock_gettime, rtclock_getattr, }; @@ -154,12 +152,25 @@ kern_return_t calend_getattr( clock_attr_t attr, mach_msg_type_number_t *count); -struct clock_ops calend_ops = { - 0, 0, +SECURITY_READ_ONLY_EARLY(struct clock_ops) calend_ops = { + NULL, NULL, calend_gettime, calend_getattr, }; +/* + * List of clock devices. + */ +SECURITY_READ_ONLY_LATE(struct clock) clock_list[] = { + + /* SYSTEM_CLOCK */ + { &sysclk_ops, 0, 0 }, + + /* CALENDAR_CLOCK */ + { &calend_ops, 0, 0 } +}; +int clock_count = sizeof(clock_list) / sizeof(clock_list[0]); + /* * Macros to lock/unlock clock system. */ @@ -175,7 +186,7 @@ void clock_oldconfig(void) { clock_t clock; - register int i; + int i; simple_lock_init(&alarm_lock, 0); thread_call_setup(&alarm_done_call, (thread_call_func_t)alarm_done, NULL); @@ -188,7 +199,7 @@ clock_oldconfig(void) clock = &clock_list[i]; if (clock->cl_ops && clock->cl_ops->c_config) { if ((*clock->cl_ops->c_config)() == 0) - clock->cl_ops = 0; + clock->cl_ops = NULL; } } @@ -200,7 +211,7 @@ void clock_oldinit(void) { clock_t clock; - register int i; + int i; /* * Initialize basic clock structures. @@ -219,7 +230,7 @@ void clock_service_create(void) { clock_t clock; - register int i; + int i; /* * Initialize ipc clock services. @@ -298,7 +309,12 @@ kern_return_t rtclock_gettime( mach_timespec_t *time) /* OUT */ { - clock_get_system_nanotime(&time->tv_sec, (uint32_t *)&time->tv_nsec); + clock_sec_t secs; + clock_nsec_t nsecs; + + clock_get_system_nanotime(&secs, &nsecs); + time->tv_sec = (unsigned int)secs; + time->tv_nsec = nsecs; return (KERN_SUCCESS); } @@ -307,7 +323,12 @@ kern_return_t calend_gettime( mach_timespec_t *time) /* OUT */ { - clock_get_calendar_nanotime(&time->tv_sec, (uint32_t *)&time->tv_nsec); + clock_sec_t secs; + clock_nsec_t nsecs; + + clock_get_calendar_nanotime(&secs, &nsecs); + time->tv_sec = (unsigned int)secs; + time->tv_nsec = nsecs; return (KERN_SUCCESS); } @@ -491,7 +512,7 @@ clock_sleep_trap( int sleep_nsec = args->sleep_nsec; mach_vm_address_t wakeup_time_addr = args->wakeup_time; clock_t clock; - mach_timespec_t swtime; + mach_timespec_t swtime = {}; kern_return_t rvalue; /* @@ -613,8 +634,8 @@ static void alarm_expire(void) { clock_t clock; - register alarm_t alrm1; - register alarm_t alrm2; + alarm_t alrm1; + alarm_t alrm2; mach_timespec_t clock_time; mach_timespec_t *alarm_time; spl_t s; @@ -645,7 +666,7 @@ alarm_expire(void) * which issued the clock_sleep() call. */ if (alrm2->al_status == ALARM_SLEEP) { - alrm2->al_next = 0; + alrm2->al_next = NULL; alrm2->al_status = ALARM_DONE; alrm2->al_time = clock_time; thread_wakeup((event_t)alrm2); @@ -680,7 +701,7 @@ alarm_expire(void) static void alarm_done(void) { - register alarm_t alrm; + alarm_t alrm; kern_return_t code; spl_t s; @@ -719,7 +740,7 @@ static void post_alarm( alarm_t alarm) { - register alarm_t alrm1, alrm2; + alarm_t alrm1, alrm2; mach_timespec_t *alarm_time; mach_timespec_t *queue_time; @@ -756,7 +777,7 @@ set_alarm( uint64_t abstime; nanotime_to_absolutetime(alarm_time->tv_sec, alarm_time->tv_nsec, &abstime); - timer_call_enter(&alarm_expire_timer, abstime); + timer_call_enter_with_leeway(&alarm_expire_timer, NULL, abstime, 0, TIMER_CALL_USER_NORMAL, FALSE); } /* @@ -785,6 +806,8 @@ check_time( return ((result >= 0)? result: 0); } +#ifndef __LP64__ + mach_timespec_t clock_get_system_value(void) { @@ -806,3 +829,5 @@ clock_get_calendar_value(void) return value; } + +#endif /* __LP64__ */