+ int s = ml_set_interrupts_enabled(FALSE);
+ lck_spin_lock(kds_spin_lock);
+
+ if (enabled) {
+ kdebug_enable |= KDEBUG_ENABLE_TRACE;
+ kd_ctrl_page.kdebug_slowcheck &= ~SLOW_NOLOG;
+ kd_ctrl_page.enabled = 1;
+ } else {
+ kdebug_enable &= ~KDEBUG_ENABLE_TRACE;
+ kd_ctrl_page.kdebug_slowcheck |= SLOW_NOLOG;
+ kd_ctrl_page.enabled = 0;
+ }
+ lck_spin_unlock(kds_spin_lock);
+ ml_set_interrupts_enabled(s);
+}
+
+static void
+kdbg_set_flags(int slowflag, int enableflag, boolean_t enabled)
+{
+ int s = ml_set_interrupts_enabled(FALSE);
+ lck_spin_lock(kds_spin_lock);
+
+ if (enabled) {
+ kd_ctrl_page.kdebug_slowcheck |= slowflag;
+ kdebug_enable |= enableflag;
+ } else {
+ kd_ctrl_page.kdebug_slowcheck &= ~slowflag;
+ kdebug_enable &= ~enableflag;
+ }
+ lck_spin_unlock(kds_spin_lock);
+ ml_set_interrupts_enabled(s);
+}
+
+
+#ifdef NATIVE_TRACE_FACILITY
+void
+disable_wrap(uint32_t *old_slowcheck, uint32_t *old_flags)
+{
+ int s = ml_set_interrupts_enabled(FALSE);
+ lck_spin_lock(kds_spin_lock);
+
+ *old_slowcheck = kd_ctrl_page.kdebug_slowcheck;
+ *old_flags = kd_ctrl_page.kdebug_flags;
+
+ kd_ctrl_page.kdebug_flags &= ~KDBG_WRAPPED;
+ kd_ctrl_page.kdebug_flags |= KDBG_NOWRAP;
+
+ lck_spin_unlock(kds_spin_lock);
+ ml_set_interrupts_enabled(s);
+}
+
+void
+enable_wrap(uint32_t old_slowcheck, boolean_t lostevents)
+{
+ int s = ml_set_interrupts_enabled(FALSE);
+ lck_spin_lock(kds_spin_lock);
+
+ kd_ctrl_page.kdebug_flags &= ~KDBG_NOWRAP;
+
+ if ( !(old_slowcheck & SLOW_NOLOG))
+ kd_ctrl_page.kdebug_slowcheck &= ~SLOW_NOLOG;
+
+ if (lostevents == TRUE)
+ kd_ctrl_page.kdebug_flags |= KDBG_WRAPPED;
+
+ lck_spin_unlock(kds_spin_lock);
+ ml_set_interrupts_enabled(s);
+}
+
+void trace_set_timebases(__unused uint64_t tsc, __unused uint64_t ns)
+{
+}
+#else
+/* Begin functions that are defined twice */
+void trace_set_timebases(uint64_t tsc, uint64_t ns)
+{
+ int cpu = cpu_number();
+ kd_ctrl_page.cpu_timebase[cpu].tsc_base = tsc;
+ kd_ctrl_page.cpu_timebase[cpu].ns_base = ns;