git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Unifying External Interrupt System (#51)
[lunaix-os.git]
/
lunaix-os
/
arch
/
x86
/
hal
/
ps2kbd.c
diff --git
a/lunaix-os/arch/x86/hal/ps2kbd.c
b/lunaix-os/arch/x86/hal/ps2kbd.c
index 02e98d1d8532afc8254fd5ba8be66c6d0a1f05a5..1df42bdb59ec0af1a1f4e34ebd39216241612227 100644
(file)
--- a/
lunaix-os/arch/x86/hal/ps2kbd.c
+++ b/
lunaix-os/arch/x86/hal/ps2kbd.c
@@
-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);