2 * Copyright (C) 2006 Martin Decky
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup kbdsparc64 sparc64
30 * @brief HelenOS sparc64 arch dependent parts of uspace keyboard handler.
44 #include <genarch/kbd.h>
46 #define KBD_KEY_RELEASE 0x80
47 #define KBD_ALL_KEYS_UP 0x7f
49 /** Top-half pseudocode for z8530. */
50 irq_cmd_t z8530_cmds
[] = {
53 0, /**< Address. Will be patched in run-time. */
54 0, /**< Value. Not used. */
55 1 /**< Arg 1 will contain the result. */
59 irq_code_t z8530_kbd
= {
64 /** Top-half pseudocode for ns16550. */
65 irq_cmd_t ns16550_cmds
[] = {
68 0, /**< Address. Will be patched in run-time. */
69 0, /**< Value. Not used. */
70 1 /**< Arg 1 will contain the result. */
74 irq_code_t ns16550_kbd
= {
82 int kbd_arch_init(void)
84 int type
= sysinfo_value("kbd.type");
87 z8530_cmds
[0].addr
= (void *) sysinfo_value("kbd.address.virtual") + 6;
88 ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &z8530_kbd
);
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
);
100 /** Process keyboard events */
101 int kbd_arch_process(keybuffer_t
*keybuffer
, ipc_call_t
*call
)
103 int scan_code
= IPC_GET_ARG1(*call
);
105 if (scan_code
== KBD_ALL_KEYS_UP
)
108 if (scan_code
& KBD_KEY_RELEASE
)
109 key_released(keybuffer
, scan_code
^ KBD_KEY_RELEASE
);
111 key_pressed(keybuffer
, scan_code
);