X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/a35bb9648f1a9eddb071a50ff6a4dcdb8f379f24..f89517343bf062d299d54408eea2f9387bfefb6d:/lunaix-os/arch/x86/hal/ps2kbd.c?ds=sidebyside diff --git a/lunaix-os/arch/x86/hal/ps2kbd.c b/lunaix-os/arch/x86/hal/ps2kbd.c index 02e98d1..1df42bd 100644 --- a/lunaix-os/arch/x86/hal/ps2kbd.c +++ b/lunaix-os/arch/x86/hal/ps2kbd.c @@ -6,12 +6,13 @@ #include #include +#include + #include "asm/x86.h" #include #include "asm/x86_cpu.h" -#include #include #define PS2_PORT_ENC_DATA 0x60 @@ -189,7 +190,7 @@ static struct input_device* kbd_idev; // #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); @@ -215,7 +216,7 @@ ps2_device_post_cmd(char cmd, char arg) } 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)); @@ -309,7 +310,9 @@ ps2_kbd_init(struct device_def* devdef) * * 所以,保险的方法是:在初始化后才去设置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; @@ -401,7 +404,7 @@ kbd_buffer_key_event(kbd_keycode_t key, u8_t scancode, kbd_kstate_t state) } 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! @@ -569,8 +572,8 @@ ps2_issue_dev_cmd(char cmd, u16_t arg) } 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);