static void enter_debugger(void) { sUseUHCI = has_debugger_command("uhci_process_transfer"); sUseOHCI = has_debugger_command("ohci_process_transfer"); sUseEHCI = has_debugger_command("ehci_process_transfer"); sUseXHCI = has_debugger_command("xhci_process_transfer"); if (!has_debugger_command("get_usb_keyboard_config") || !has_debugger_command("get_usb_pipe_for_id") || (!sUseUHCI && !sUseOHCI && !sUseEHCI && !sUseXHCI)) { return; } unset_debug_variable("_usbPipe"); unset_debug_variable("_usbReportSize"); evaluate_debug_command("get_usb_keyboard_config"); sUSBTransferLength = get_debug_variable("_usbReportSize", 0); if (sUSBTransferLength == 0 || sUSBTransferLength > sizeof(sUSBTransferData)) return; evaluate_debug_command("get_usb_pipe_for_id"); sUSBPipe = (void *)get_debug_variable("_usbPipe", 0); if (sUSBPipe == NULL) return; sUseUSBKeyboard = true; }
static void dump_sem(struct sem_entry* sem) { kprintf("SEM: %p\n", sem); kprintf("id: %ld (%#lx)\n", sem->id, sem->id); if (sem->id >= 0) { kprintf("name: '%s'\n", sem->u.used.name); kprintf("owner: %ld\n", sem->u.used.owner); kprintf("count: %ld\n", sem->u.used.count); kprintf("queue: "); if (!sem->queue.IsEmpty()) { ThreadQueue::Iterator it = sem->queue.GetIterator(); while (queued_thread* entry = it.Next()) kprintf(" %ld", entry->thread->id); kprintf("\n"); } else kprintf(" -\n"); set_debug_variable("_sem", (addr_t)sem); set_debug_variable("_semID", sem->id); set_debug_variable("_owner", sem->u.used.owner); #if DEBUG_SEM_LAST_ACQUIRER kprintf("last acquired by: %ld, count: %ld\n", sem->u.used.last_acquirer, sem->u.used.last_acquire_count); kprintf("last released by: %ld, count: %ld\n", sem->u.used.last_releaser, sem->u.used.last_release_count); if (sem->u.used.last_releaser != 0) set_debug_variable("_releaser", sem->u.used.last_releaser); else unset_debug_variable("_releaser"); #else kprintf("last acquired by: %ld\n", sem->u.used.last_acquirer); #endif if (sem->u.used.last_acquirer != 0) set_debug_variable("_acquirer", sem->u.used.last_acquirer); else unset_debug_variable("_acquirer"); } else { kprintf("next: %p\n", sem->u.unused.next); kprintf("next_id: %ld\n", sem->u.unused.next_id); } }