#ifndef _KERN_CALL_ENTRY_H_
#define _KERN_CALL_ENTRY_H_
-#ifdef MACH_KERNEL_PRIVATE
+#ifdef XNU_KERNEL_PRIVATE
#include <kern/queue.h>
+#if !CONFIG_EMBEDDED
+#define TIMER_TRACE 1
+#endif
+
typedef void *call_entry_param_t;
typedef void (*call_entry_func_t)(
call_entry_param_t param0,
call_entry_param_t param0;
call_entry_param_t param1;
uint64_t deadline;
+#if TIMER_TRACE
+ uint64_t entry_time;
+#endif
} call_entry_data_t;
typedef struct call_entry *call_entry_t;
+#ifdef MACH_KERNEL_PRIVATE
#define call_entry_setup(entry, pfun, p0) \
MACRO_BEGIN \
(entry)->func = (call_entry_func_t)(pfun); \
(entry)->param0 = (call_entry_param_t)(p0); \
(entry)->queue = NULL; \
+ (entry)->deadline = 0; \
+ queue_chain_init((entry)->q_link); \
MACRO_END
#define qe(x) ((queue_entry_t)(x))
queue_t old_queue = entry->queue;
if (old_queue != NULL)
- (void)remque(qe(entry));
-
- enqueue_tail(queue, qe(entry));
+ re_queue_tail(queue, &entry->q_link);
+ else
+ enqueue_tail(queue, &entry->q_link);
entry->queue = queue;
}
insque(qe(entry), qe(current));
}
- else
- if (deadline < entry->deadline) {
+ else if (deadline < entry->deadline) {
current = CE(queue_prev(qe(entry)));
(void)remque(qe(entry));
}
#endif /* MACH_KERNEL_PRIVATE */
+#endif /* XNU_KERNEL_PRIVATE */
+
#endif /* _KERN_CALL_ENTRY_H_ */