+extern void thread_bootstrap(void);
+
+extern void thread_init(void);
+
+extern void thread_daemon_init(void);
+
+#define thread_reference_internal(thread) \
+ (void)hw_atomic_add(&(thread)->ref_count, 1)
+
+#define thread_deallocate_internal(thread) \
+ hw_atomic_sub(&(thread)->ref_count, 1)
+
+#define thread_reference(thread) \
+MACRO_BEGIN \
+ if ((thread) != THREAD_NULL) \
+ thread_reference_internal(thread); \
+MACRO_END
+
+extern void thread_deallocate(
+ thread_t thread);
+
+extern void thread_terminate_self(void);
+
+extern kern_return_t thread_terminate_internal(
+ thread_t thread);
+
+extern void thread_start_internal(
+ thread_t thread) __attribute__ ((noinline));
+
+extern void thread_terminate_enqueue(
+ thread_t thread);
+
+extern void thread_stack_enqueue(
+ thread_t thread);
+
+extern void thread_hold(
+ thread_t thread);
+
+extern void thread_release(
+ thread_t thread);
+
+
+#define thread_lock_init(th) simple_lock_init(&(th)->sched_lock, 0)
+#define thread_lock(th) simple_lock(&(th)->sched_lock)
+#define thread_unlock(th) simple_unlock(&(th)->sched_lock)
+
+#define wake_lock_init(th) simple_lock_init(&(th)->wake_lock, 0)
+#define wake_lock(th) simple_lock(&(th)->wake_lock)
+#define wake_unlock(th) simple_unlock(&(th)->wake_lock)
+
+#define thread_should_halt_fast(thread) (!(thread)->active)
+
+extern void stack_alloc(
+ thread_t thread);
+
+extern void stack_handoff(
+ thread_t from,
+ thread_t to);
+
+extern void stack_free(
+ thread_t thread);
+
+extern void stack_free_reserved(
+ thread_t thread);
+
+extern boolean_t stack_alloc_try(
+ thread_t thread);
+
+extern void stack_collect(void);
+
+extern void stack_init(void);
+
+
+extern kern_return_t thread_info_internal(
+ thread_t thread,
+ thread_flavor_t flavor,
+ thread_info_t thread_info_out,
+ mach_msg_type_number_t *thread_info_count);
+
+extern void thread_task_priority(
+ thread_t thread,
+ integer_t priority,
+ integer_t max_priority);
+
+extern void thread_policy_reset(
+ thread_t thread);
+
+extern kern_return_t kernel_thread_create(
+ thread_continue_t continuation,
+ void *parameter,
+ integer_t priority,
+ thread_t *new_thread);
+
+extern kern_return_t kernel_thread_start_priority(
+ thread_continue_t continuation,
+ void *parameter,
+ integer_t priority,
+ thread_t *new_thread);
+
+extern void machine_stack_attach(
+ thread_t thread,
+ vm_offset_t stack);
+
+extern vm_offset_t machine_stack_detach(
+ thread_t thread);
+
+extern void machine_stack_handoff(
+ thread_t old,
+ thread_t new);
+
+extern thread_t machine_switch_context(
+ thread_t old_thread,
+ thread_continue_t continuation,
+ thread_t new_thread);
+
+extern void machine_load_context(
+ thread_t thread);
+
+extern kern_return_t machine_thread_state_initialize(
+ thread_t thread);
+
+extern kern_return_t machine_thread_set_state(
+ thread_t thread,
+ thread_flavor_t flavor,
+ thread_state_t state,
+ mach_msg_type_number_t count);
+
+extern kern_return_t machine_thread_get_state(
+ thread_t thread,
+ thread_flavor_t flavor,
+ thread_state_t state,
+ mach_msg_type_number_t *count);
+
+extern kern_return_t machine_thread_dup(
+ thread_t self,
+ thread_t target);
+
+extern void machine_thread_init(void);
+
+extern kern_return_t machine_thread_create(
+ thread_t thread,
+ task_t task);
+extern void machine_thread_switch_addrmode(
+ thread_t thread);
+
+extern void machine_thread_destroy(
+ thread_t thread);
+
+extern void machine_set_current_thread(
+ thread_t thread);
+
+extern kern_return_t machine_thread_get_kern_state(
+ thread_t thread,
+ thread_flavor_t flavor,
+ thread_state_t tstate,
+ mach_msg_type_number_t *count);
+
+extern kern_return_t machine_thread_inherit_taskwide(
+ thread_t thread,
+ task_t parent_task);
+
+/*
+ * XXX Funnel locks XXX
+ */
+