]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/clock_oldops.c
xnu-4903.241.1.tar.gz
[apple/xnu.git] / osfmk / kern / clock_oldops.c
index 9870369543803dbb19c19198dd5f4ff347e6f49b..c77d40f2878b12d0608e4f896437dc0fb7ab9b8e 100644 (file)
@@ -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 <mach/mach_types.h>
 
-#include <kern/lock.h>
 #include <kern/host.h>
 #include <kern/spl.h>
 #include <kern/sched_prim.h>
@@ -60,6 +59,7 @@
 
 #include <mach/mach_host_server.h>
 #include <mach/host_priv_server.h>
+#include <libkern/section_keywords.h>
 
 /*
  * 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__ */