refactor: isrm to centeralize interrupt/irq resources management.
[lunaix-os.git] / lunaix-os / debug / sdbg.c
index 537e9cde07416d97bc5054737ac8eaa91f7662de..3cc23cf29d388068ec7668b89ab6955d749acd04 100644 (file)
@@ -1,6 +1,7 @@
 #include <hal/acpi/acpi.h>
 #include <hal/ioapic.h>
 #include <klibc/stdio.h>
+#include <lunaix/isrm.h>
 #include <lunaix/lxconsole.h>
 #include <lunaix/peripheral/serial.h>
 #include <lunaix/syslog.h>
@@ -10,6 +11,8 @@
 
 // #define USE_LSDBG_BACKEND
 
+LOG_MODULE("SDBG")
+
 volatile int debug_mode = 0;
 
 void
@@ -68,16 +71,40 @@ done:
     serial_enable_irq(SERIAL_COM1);
 }
 
-extern uint8_t
-ioapic_get_irq(acpi_context* acpi_ctx, uint8_t old_irq);
-
+void
+sdbg_imm(const isr_param* param)
+{
+    kprintf(KDEBUG "Quick debug mode\n");
+    kprintf(KDEBUG "cs=%p eip=%p eax=%p ebx=%p\n",
+            param->cs,
+            param->eip,
+            param->registers.eax,
+            param->registers.ebx);
+    kprintf(KDEBUG "ecx=%p edx=%p edi=%p esi=%p\n",
+            param->registers.ecx,
+            param->registers.edx,
+            param->registers.edi,
+            param->registers.esi);
+    kprintf(KDEBUG "u.esp=%p k.esp=%p ebp=%p ps=%p\n",
+            param->registers.esp,
+            param->esp,
+            param->registers.ebp,
+            param->eflags);
+    kprintf(KDEBUG "ss=%p ds=%p es=%p fs=%p gs=%p\n",
+            param->ss,
+            param->registers.ds,
+            param->registers.es,
+            param->registers.fs,
+            param->registers.gs);
+    console_flush();
+    while (1)
+        ;
+}
 void
 sdbg_init()
 {
-    intr_subscribe(UART_COM1, sdbg_loop);
-    intr_subscribe(INSTR_DEBUG, sdbg_loop); // #DB
+    isrm_bindiv(INSTR_DEBUG, sdbg_loop); // #DB
+    isrm_bindiv(INSTR_BREAK, sdbg_loop); // #BRK
 
-    acpi_context* acpi_ctx = acpi_get_context();
-    uint8_t irq = ioapic_get_irq(acpi_ctx, COM1_IRQ);
-    ioapic_redirect(irq, UART_COM1, 0, IOAPIC_DELMOD_FIXED);
+    isrm_bindirq(COM1_IRQ, sdbg_loop);
 }
\ No newline at end of file