source: mainline/uspace/srv/kbd/arch/sparc64/src/kbd.c@ 72381f1

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 72381f1 was 00acd66, checked in by Jakub Jermar <jakub@…>, 18 years ago

New, better-structured, directory layout for uspace.

  • Property mode set to 100644
File size: 3.2 KB
Line 
1/*
2 * Copyright (c) 2006 Martin Decky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
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.
16 *
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.
27 */
28
29/** @addtogroup kbdsparc64 sparc64
30 * @brief HelenOS sparc64 arch dependent parts of uspace keyboard handler.
31 * @ingroup kbd
32 * @{
33 */
34/** @file
35 */
36
37#include <arch/kbd.h>
38#include <ipc/ipc.h>
39#include <sysinfo.h>
40#include <kbd.h>
41#include <keys.h>
42#include <stdio.h>
43#include <types.h>
44#include <genarch/kbd.h>
45
46#define KBD_KEY_RELEASE 0x80
47#define KBD_ALL_KEYS_UP 0x7f
48
49/** Top-half pseudocode for z8530. */
50irq_cmd_t z8530_cmds[] = {
51 {
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 }
57};
58
59irq_code_t z8530_kbd = {
60 1,
61 z8530_cmds
62};
63
64/** Top-half pseudocode for ns16550. */
65irq_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
74irq_code_t ns16550_kbd = {
75 1,
76 ns16550_cmds
77};
78
79#define KBD_Z8530 1
80#define KBD_NS16550 2
81
82int kbd_arch_init(void)
83{
84 int type = sysinfo_value("kbd.type");
85 switch (type) {
86 case KBD_Z8530:
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);
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 }
97 return 0;
98}
99
100/** Process keyboard events */
101int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
102{
103 int scan_code = IPC_GET_ARG1(*call);
104
105 if (scan_code == KBD_ALL_KEYS_UP)
106 return 1;
107
108 if (scan_code & KBD_KEY_RELEASE)
109 key_released(keybuffer, scan_code ^ KBD_KEY_RELEASE);
110 else
111 key_pressed(keybuffer, scan_code);
112
113 return 1;
114}
115
116/** @}
117 */
Note: See TracBrowser for help on using the repository browser.