Subversion Repositories HelenOS

Rev

Rev 3549 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3549 Rev 4073
Line 34... Line 34...
34
/** @file
34
/** @file
35
 */
35
 */
36
 
36
 
37
#include <arch/kbd.h>
37
#include <arch/kbd.h>
38
#include <arch/sgcn.h>
38
#include <arch/sgcn.h>
-
 
39
#include <arch/niagara.h>
39
#include <ipc/ipc.h>
40
#include <ipc/ipc.h>
40
#include <sysinfo.h>
41
#include <sysinfo.h>
41
#include <kbd.h>
42
#include <kbd.h>
42
#include <keys.h>
43
#include <keys.h>
43
#include <stdio.h>
44
#include <stdio.h>
Line 75... Line 76...
75
irq_code_t ns16550_kbd = {
76
irq_code_t ns16550_kbd = {
76
    1,
77
    1,
77
    ns16550_cmds
78
    ns16550_cmds
78
};
79
};
79
 
80
 
-
 
81
/** Top-half pseudocode for Niagara keyboard driver. */
-
 
82
irq_cmd_t niagara_cmds[] = {
-
 
83
    {
-
 
84
        CMD_NIAGARA_GETCHAR,
-
 
85
        0,          /**< Address. Not used. */
-
 
86
        0,          /**< Value. Not used. */
-
 
87
        1           /**< Arg 1 will contain the result. */
-
 
88
    }
-
 
89
};
-
 
90
   
-
 
91
irq_code_t niagara_kbd = {
-
 
92
    1,
-
 
93
    niagara_cmds
-
 
94
};
-
 
95
 
80
#define KBD_Z8530   1
96
#define KBD_Z8530   1
81
#define KBD_NS16550 2
97
#define KBD_NS16550 2
82
#define KBD_SGCN    3
98
#define KBD_SGCN    3
-
 
99
#define KBD_SUN4V   4
83
 
100
 
84
int kbd_arch_init(void)
101
int kbd_arch_init(void)
85
{
102
{
86
    int type = sysinfo_value("kbd.type");
103
    int type = sysinfo_value("kbd.type");
87
    switch (type) {
104
    switch (type) {
Line 94... Line 111...
94
        ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ns16550_kbd);
111
        ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ns16550_kbd);
95
        break;
112
        break;
96
    case KBD_SGCN:
113
    case KBD_SGCN:
97
        sgcn_init();
114
        sgcn_init();
98
        break;
115
        break;
-
 
116
    case KBD_SUN4V:
-
 
117
        ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &niagara_kbd);
-
 
118
        break;
99
    default:
119
    default:
100
        break;
120
        break;
101
    }
121
    }
-
 
122
 
102
    return 0;
123
    return 0;
103
}
124
}
104
 
125
 
105
/** Process keyboard events */
126
/** Process keyboard events */
106
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
127
int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
107
{
128
{
108
    if (sysinfo_value("kbd.type") == KBD_SGCN) {
129
    if (sysinfo_value("kbd.type") == KBD_SGCN) {
109
        sgcn_key_pressed();
130
        sgcn_key_pressed();
110
        return 1;
131
        return 1;
-
 
132
    } else if (sysinfo_value("kbd.type") == KBD_SUN4V) {
-
 
133
        char c = IPC_GET_ARG1(*call);
-
 
134
        niagara_key_pressed(c);
-
 
135
        return 1;
111
    }
136
    }
112
   
137
   
113
    int scan_code = IPC_GET_ARG1(*call);
138
    int scan_code = IPC_GET_ARG1(*call);
114
 
139
 
115
    if (scan_code == KBD_ALL_KEYS_UP)
140
    if (scan_code == KBD_ALL_KEYS_UP)