]> 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 050b09afac99c8f7f2d85c2e6e4210b382f58c61..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 queue_t         timer_queue_assign(
-                                               uint64_t                deadline);
+extern mpqueue_head_t *        timer_queue_assign(
+                               uint64_t                deadline);
+
+extern uint64_t                timer_call_slop(
+                               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(
-                                               queue_t                 queue,
-                                               uint64_t                deadline,
-                                               uint64_t                new_deadline);
+extern void            timer_queue_cancel(
+                               mpqueue_head_t          *queue,
+                               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.
@@ -58,12 +102,48 @@ extern void                        timer_queue_cancel(
 
 /* Process deadline expiration for queue, returns new deadline */
 extern uint64_t                timer_queue_expire(
-                                               queue_t                 queue,
-                                               uint64_t                deadline);
+                               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(
-                                               queue_t                 queue);
+extern void            timer_queue_shutdown(
+                               mpqueue_head_t          *queue);
+
+/* Move timer requests from one queue to another */
+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 */