Rev 1923 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1923 | Rev 1931 | ||
---|---|---|---|
Line 44... | Line 44... | ||
44 | #include <genarch/kbd.h> |
44 | #include <genarch/kbd.h> |
45 | 45 | ||
46 | #define KBD_KEY_RELEASE 0x80 |
46 | #define KBD_KEY_RELEASE 0x80 |
47 | #define KBD_ALL_KEYS_UP 0x7f |
47 | #define KBD_ALL_KEYS_UP 0x7f |
48 | 48 | ||
- | 49 | /** Top-half pseudocode for z8530. */ |
|
49 | irq_cmd_t z8530_cmds[] = { |
50 | irq_cmd_t z8530_cmds[] = { |
- | 51 | { |
|
50 | { CMD_MEM_READ_1, 0, 0, 1 } |
52 | CMD_MEM_READ_1, |
- | 53 | 0, /**< Address. Will be patched in run-time. */ |
|
- | 54 | 0, /**< Value. Not used. */ |
|
- | 55 | 1 /**< Arg 1 will contain the result. */ |
|
- | 56 | } |
|
51 | }; |
57 | }; |
52 | 58 | ||
53 | irq_code_t z8530_kbd = { |
59 | irq_code_t z8530_kbd = { |
54 | 1, |
60 | 1, |
55 | z8530_cmds |
61 | z8530_cmds |
56 | }; |
62 | }; |
57 | 63 | ||
- | 64 | /** Top-half pseudocode for ns16550. */ |
|
- | 65 | irq_cmd_t ns16550_cmds[] = { |
|
- | 66 | { |
|
- | 67 | CMD_MEM_READ_1, |
|
- | 68 | 0, /**< Address. Will be patched in run-time. */ |
|
- | 69 | 0, /**< Value. Not used. */ |
|
- | 70 | 1 /**< Arg 1 will contain the result. */ |
|
- | 71 | } |
|
- | 72 | }; |
|
- | 73 | ||
- | 74 | irq_code_t ns16550_kbd = { |
|
- | 75 | 1, |
|
- | 76 | ns16550_cmds |
|
- | 77 | }; |
|
- | 78 | ||
- | 79 | #define KBD_Z8530 1 |
|
- | 80 | #define KBD_NS16550 2 |
|
- | 81 | ||
58 | int kbd_arch_init(void) |
82 | int kbd_arch_init(void) |
59 | { |
83 | { |
- | 84 | int type = sysinfo_value("kbd.type"); |
|
- | 85 | switch (type) { |
|
- | 86 | case KBD_Z8530: |
|
60 | z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6; |
87 | z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6; |
61 | ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &z8530_kbd); |
88 | ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &z8530_kbd); |
- | 89 | break; |
|
- | 90 | case KBD_NS16550: |
|
- | 91 | ns16550_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual"); |
|
- | 92 | ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ns16550_kbd); |
|
- | 93 | break; |
|
- | 94 | default: |
|
- | 95 | break; |
|
- | 96 | } |
|
62 | return 0; |
97 | return 0; |
63 | } |
98 | } |
64 | 99 | ||
65 | /** Process keyboard events */ |
100 | /** Process keyboard events */ |
66 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |
101 | int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) |