Unifying External Interrupt System (#51)
[lunaix-os.git] / lunaix-os / arch / x86 / hal / ps2kbd.c
index 02e98d1d8532afc8254fd5ba8be66c6d0a1f05a5..1df42bdb59ec0af1a1f4e34ebd39216241612227 100644 (file)
@@ -6,12 +6,13 @@
 #include <lunaix/timer.h>
 #include <lunaix/hart_state.h>
 
 #include <lunaix/timer.h>
 #include <lunaix/hart_state.h>
 
+#include <hal/irq.h>
+
 #include "asm/x86.h"
 
 #include <klibc/string.h>
 
 #include "asm/x86_cpu.h"
 #include "asm/x86.h"
 
 #include <klibc/string.h>
 
 #include "asm/x86_cpu.h"
-#include <asm/x86_isrm.h>
 #include <asm/x86_pmio.h>
 
 #define PS2_PORT_ENC_DATA 0x60
 #include <asm/x86_pmio.h>
 
 #define PS2_PORT_ENC_DATA 0x60
@@ -189,7 +190,7 @@ static struct input_device* kbd_idev;
 // #define KBD_DBGLOG
 
 static void
 // #define KBD_DBGLOG
 
 static void
-intr_ps2_kbd_handler(const struct hart_state* hstate);
+intr_ps2_kbd_handler(irq_t irq, const struct hart_state* hstate);
 
 static u8_t
 ps2_issue_cmd_wretry(char cmd, u16_t arg);
 
 static u8_t
 ps2_issue_cmd_wretry(char cmd, u16_t arg);
@@ -215,7 +216,7 @@ ps2_device_post_cmd(char cmd, char arg)
 }
 
 static int
 }
 
 static int
-ps2_kbd_init(struct device_def* devdef)
+ps2_kbd_create(struct device_def* devdef, morph_t* obj)
 {
 
     memset(&cmd_q, 0, sizeof(cmd_q));
 {
 
     memset(&cmd_q, 0, sizeof(cmd_q));
@@ -309,7 +310,9 @@ ps2_kbd_init(struct device_def* devdef)
      *
      *  所以,保险的方法是:在初始化后才去设置ioapic,这样一来我们就能有一个稳定的IRQ#1以放心使用。
      */
      *
      *  所以,保险的方法是:在初始化后才去设置ioapic,这样一来我们就能有一个稳定的IRQ#1以放心使用。
      */
-    isrm_bindirq(PC_AT_IRQ_KBD, intr_ps2_kbd_handler);
+    
+    irq_t irq = irq_declare_line(intr_ps2_kbd_handler, PC_AT_IRQ_KBD);    
+    irq_assign(irq_owning_domain(kbd_idev->dev_if), irq, NULL);
 
     return 0;
 
 
     return 0;
 
@@ -401,7 +404,7 @@ kbd_buffer_key_event(kbd_keycode_t key, u8_t scancode, kbd_kstate_t state)
 }
 
 static void
 }
 
 static void
-intr_ps2_kbd_handler(const struct hart_state* hstate)
+intr_ps2_kbd_handler(irq_t irq, const struct hart_state* hstate)
 {
 
     // This is important! Don't believe me? try comment it out and run on Bochs!
 {
 
     // This is important! Don't believe me? try comment it out and run on Bochs!
@@ -569,8 +572,8 @@ ps2_issue_dev_cmd(char cmd, u16_t arg)
 }
 
 static struct device_def devrtc_i8042kbd = {
 }
 
 static struct device_def devrtc_i8042kbd = {
-    .name = "i8042 Keyboard",
-    .class = DEVCLASS(DEVIF_SOC, DEVFN_INPUT, DEV_KBD),
-    .init = ps2_kbd_init
+    def_device_class(INTEL, INPUT, KBD),
+    def_device_name("i8042 Keyboard"),
+    def_on_create(ps2_kbd_create)
 };
 EXPORT_DEVICE(i8042_kbd, &devrtc_i8042kbd, load_onboot);
 };
 EXPORT_DEVICE(i8042_kbd, &devrtc_i8042kbd, load_onboot);