]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/timer_queue.h
xnu-2422.90.20.tar.gz
[apple/xnu.git] / osfmk / kern / timer_queue.h
index 3975b31015c034fbea258fbdb84b0ea6ac3b4688..060e72183c0cac3d921b686dd7d94975e429458d 100644 (file)
 
 #include <kern/queue.h>
 
+/* Kernel trace events associated with timers and timer queues */
+#define DECR_TRAP_LATENCY      MACHDBG_CODE(DBG_MACH_EXCP_DECI, 0)
+#define DECR_SET_DEADLINE      MACHDBG_CODE(DBG_MACH_EXCP_DECI, 1)
+#define DECR_TIMER_CALLOUT     MACHDBG_CODE(DBG_MACH_EXCP_DECI, 2)
+#define DECR_PM_DEADLINE       MACHDBG_CODE(DBG_MACH_EXCP_DECI, 3)
+#define DECR_TIMER_MIGRATE     MACHDBG_CODE(DBG_MACH_EXCP_DECI, 4)
+#if defined(i386) || defined(x86_64)
+#define DECR_RDHPET            MACHDBG_CODE(DBG_MACH_EXCP_DECI, 5)
+#define DECR_SET_TSC_DEADLINE  MACHDBG_CODE(DBG_MACH_EXCP_DECI, 6)
+#endif
+#define DECR_TIMER_ENTER       MACHDBG_CODE(DBG_MACH_EXCP_DECI, 7)
+#define DECR_TIMER_CANCEL      MACHDBG_CODE(DBG_MACH_EXCP_DECI, 8)
+#define DECR_TIMER_QUEUE       MACHDBG_CODE(DBG_MACH_EXCP_DECI, 9)
+#define DECR_TIMER_EXPIRE      MACHDBG_CODE(DBG_MACH_EXCP_DECI,10)
+#define DECR_TIMER_ASYNC_DEQ   MACHDBG_CODE(DBG_MACH_EXCP_DECI,11)
+#define DECR_TIMER_UPDATE      MACHDBG_CODE(DBG_MACH_EXCP_DECI,12)
+#define DECR_TIMER_ESCALATE    MACHDBG_CODE(DBG_MACH_EXCP_DECI,13)
+#define DECR_TIMER_OVERDUE     MACHDBG_CODE(DBG_MACH_EXCP_DECI,14)
+#define DECR_TIMER_RESCAN      MACHDBG_CODE(DBG_MACH_EXCP_DECI,15)
+
 /*
  *     Invoked by kernel, implemented by platform.
  */
 
 /* Request an expiration deadline, returns queue association */
-extern mpqueue_head_t *timer_queue_assign(
+extern mpqueue_head_t *        timer_queue_assign(
                                uint64_t                deadline);
 
 extern uint64_t                timer_call_slop(
-                                               uint64_t                deadline);
+                               uint64_t                deadline,
+                               uint64_t                armtime,
+                               uint32_t                urgency,
+                               thread_t                arming_thread,
+                               boolean_t               *rlimited);
+extern boolean_t       timer_resort_threshold(uint64_t);
 
 /* Cancel an associated expiration deadline and specify new deadline */
 extern void            timer_queue_cancel(
@@ -55,6 +80,22 @@ extern void          timer_queue_cancel(
                                uint64_t                deadline,
                                uint64_t                new_deadline);
 
+/* Return a pointer to the local timer queue for a given cpu */
+extern mpqueue_head_t *        timer_queue_cpu(
+                               int                     cpu);
+
+/* Call a function with argument on a cpu */
+extern void            timer_call_cpu(
+                               int                     cpu,
+                               void                    (*fn)(void *),
+                               void                    *arg);
+
+/* Queue a function to be called with argument on a cpu */
+extern void            timer_call_nosync_cpu(
+                               int                     cpu,
+                               void                    (*fn)(void *),
+                               void                    *arg);
+
 /*
  *     Invoked by platform, implemented by kernel.
  */
@@ -64,6 +105,11 @@ extern uint64_t             timer_queue_expire(
                                mpqueue_head_t          *queue,
                                uint64_t                deadline);
 
+extern uint64_t                timer_queue_expire_with_options(
+                               mpqueue_head_t *,
+                               uint64_t,
+                               boolean_t);
+
 /* Shutdown a timer queue and reassign existing activities */
 extern void            timer_queue_shutdown(
                                mpqueue_head_t          *queue);
@@ -73,6 +119,32 @@ extern int          timer_queue_migrate(
                                mpqueue_head_t          *from,
                                mpqueue_head_t          *to);
 
+/*
+ *     Invoked by platform, implemented by platfrom.
+ */
+
+extern void            timer_intr(int inuser, uint64_t iaddr);
+
+#if defined(i386) || defined(x86_64)
+extern uint64_t                setPop(uint64_t time);
+#else
+extern int             setPop(uint64_t time);
+#endif
+
+extern void            timer_resync_deadlines(void);
+
+extern void            timer_set_deadline(uint64_t deadline);
+
+/* Migrate the local timer queue of a given cpu to the master cpu */
+extern uint32_t                timer_queue_migrate_cpu(int target_cpu);
+
+extern void            timer_queue_trace(
+                               mpqueue_head_t          *queue);
+extern void            timer_queue_trace_cpu(int cpu);
+
+extern uint64_t                timer_sysctl_get(int oid);
+extern int             timer_sysctl_set(int oid, uint64_t value);
+
 #endif /* MACH_KERNEL_PRIVATE */
 
 #endif /* _KERN_TIMER_QUEUE_H_ */