Subversion Repositories HelenOS

Rev

Rev 4156 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4156 Rev 4296
Line 39... Line 39...
39
#include <arch/drivers/pic.h>
39
#include <arch/drivers/pic.h>
40
#include <sysinfo/sysinfo.h>
40
#include <sysinfo/sysinfo.h>
41
#include <interrupt.h>
41
#include <interrupt.h>
42
#include <stdarg.h>
42
#include <stdarg.h>
43
#include <ddi/device.h>
43
#include <ddi/device.h>
-
 
44
#include <string.h>
44
 
45
 
45
#define CUDA_IRQ 10
46
#define CUDA_IRQ 10
46
#define SPECIAL     '?'
-
 
47
 
47
 
48
#define PACKET_ADB  0x00
48
#define PACKET_ADB   0x00
49
#define PACKET_CUDA 0x01
49
#define PACKET_CUDA  0x01
50
 
50
 
51
#define CUDA_POWERDOWN  0x0a
51
#define CUDA_POWERDOWN  0x0a
Line 59... Line 59...
59
 
59
 
60
#define SR_OUT 0x10
60
#define SR_OUT  0x10
61
#define TACK 0x10
61
#define TACK    0x10
62
#define TIP 0x20
62
#define TIP     0x20
63
 
63
 
-
 
64
#define SCANCODES  128
64
 
65
 
65
static volatile uint8_t *cuda = NULL;
66
static volatile uint8_t *cuda = NULL;
66
static irq_t cuda_irq;      /**< Cuda's IRQ. */
67
static irq_t cuda_irq;                 /**< Cuda's IRQ. */
67
 
68
 
68
static char lchars[0x80] = {
69
static wchar_t lchars[SCANCODES] = {
69
    'a',
-
 
70
    's',
-
 
71
    'd',
-
 
72
    'f',
-
 
73
    'h',
-
 
74
    'g',
-
 
75
    'z',
-
 
76
    'x',
-
 
77
    'c',
-
 
78
    'v',
70
    'a', 's', 'd', 'f', 'h', 'g', 'z', 'x', 'c', 'v',
79
    SPECIAL,
71
    U_SPECIAL,
80
    'b',
-
 
81
    'q',
-
 
82
    'w',
-
 
83
    'e',
-
 
84
    'r',
-
 
85
    'y',
-
 
86
    't',
-
 
87
    '1',
-
 
88
    '2',
-
 
89
    '3',
-
 
90
    '4',
-
 
91
    '6',
-
 
92
    '5',
-
 
93
    '=',
-
 
94
    '9',
-
 
95
    '7',
-
 
96
    '-',
-
 
97
    '8',
-
 
98
    '0',
-
 
99
    ']',
-
 
100
    'o',
-
 
101
    'u',
-
 
102
    '[',
-
 
-
 
72
    'b', 'q', 'w', 'e', 'r', 'y', 't', '1', '2', '3', '4', '6', '5',
103
    'i',
73
    '=', '9', '7', '-', '8', '0', ']', 'o', 'u', '[', 'i', 'p',
104
    'p',
-
 
105
    '\n',    /* Enter */
74
    '\n',           /* Enter */
106
    'l',
-
 
107
    'j',
-
 
108
    '\'',
-
 
109
    'k',
-
 
110
    ';',
-
 
111
    '\\',
75
    'l', 'j', '\'', 'k', ';', '\\', ',', '/', 'n', 'm', '.',
112
    ',',
-
 
113
    '/',
-
 
114
    'n',
-
 
115
    'm',
-
 
116
    '.',
-
 
117
    '\t',    /* Tab */
76
    '\t',           /* Tab */
118
    ' ',
-
 
119
    '`',
77
    ' ', '`',
120
    '\b',    /* Backspace */
78
    '\b',           /* Backspace */
121
    SPECIAL,
79
    U_SPECIAL,
122
    SPECIAL, /* Escape */
80
    U_ESCAPE,       /* Escape */
123
    SPECIAL, /* Ctrl */
81
    U_SPECIAL,      /* Ctrl */
124
    SPECIAL, /* Alt */
82
    U_SPECIAL,      /* Alt */
125
    SPECIAL, /* Shift */
83
    U_SPECIAL,      /* Shift */
126
    SPECIAL, /* Caps-Lock */
84
    U_SPECIAL,      /* CapsLock */
127
    SPECIAL, /* RAlt */
85
    U_SPECIAL,      /* Right Alt */
128
    SPECIAL, /* Left */
86
    U_LEFT_ARROW,   /* Left */
129
    SPECIAL, /* Right */
87
    U_RIGHT_ARROW,  /* Right */
130
    SPECIAL, /* Down */
88
    U_DOWN_ARROW,   /* Down */
131
    SPECIAL, /* Up */
89
    U_UP_ARROW,     /* Up */
132
    SPECIAL,
90
    U_SPECIAL,
133
    SPECIAL,
91
    U_SPECIAL,
134
    '.',     /* Keypad . */
92
    '.',            /* Keypad . */
135
    SPECIAL,
93
    U_SPECIAL,
136
    '*',     /* Keypad * */
94
    '*',            /* Keypad * */
137
    SPECIAL,
95
    U_SPECIAL,
138
    '+',     /* Keypad + */
96
    '+',            /* Keypad + */
139
    SPECIAL,
97
    U_SPECIAL,
140
    SPECIAL, /* NumLock */
98
    U_SPECIAL,      /* NumLock */
141
    SPECIAL,
99
    U_SPECIAL,
142
    SPECIAL,
100
    U_SPECIAL,
143
    SPECIAL,
101
    U_SPECIAL,
144
    '/',     /* Keypad / */
102
    '/',            /* Keypad / */
145
    '\n',    /* Keypad Enter */
103
    '\n',           /* Keypad Enter */
146
    SPECIAL,
104
    U_SPECIAL,
147
    '-',     /* Keypad - */
105
    '-',            /* Keypad - */
148
    SPECIAL,
106
    U_SPECIAL,
149
    SPECIAL,
107
    U_SPECIAL,
150
    SPECIAL,
108
    U_SPECIAL,
151
    '0',     /* Keypad 0 */
109
    '0',            /* Keypad 0 */
152
    '1',     /* Keypad 1 */
110
    '1',            /* Keypad 1 */
153
    '2',     /* Keypad 2 */
111
    '2',            /* Keypad 2 */
154
    '3',     /* Keypad 3 */
112
    '3',            /* Keypad 3 */
155
    '4',     /* Keypad 4 */
113
    '4',            /* Keypad 4 */
156
    '5',     /* Keypad 5 */
114
    '5',            /* Keypad 5 */
157
    '6',     /* Keypad 6 */
115
    '6',            /* Keypad 6 */
158
    '7',     /* Keypad 7 */
116
    '7',            /* Keypad 7 */
159
    SPECIAL,
117
    U_SPECIAL,
160
    '8',     /* Keypad 8 */
118
    '8',            /* Keypad 8 */
161
    '9',     /* Keypad 9 */
119
    '9',            /* Keypad 9 */
162
    SPECIAL,
120
    U_SPECIAL,
163
    SPECIAL,
121
    U_SPECIAL,
164
    SPECIAL,
122
    U_SPECIAL,
165
    SPECIAL, /* F5 */
123
    U_SPECIAL,      /* F5 */
166
    SPECIAL, /* F6 */
124
    U_SPECIAL,      /* F6 */
167
    SPECIAL, /* F7 */
125
    U_SPECIAL,      /* F7 */
168
    SPECIAL, /* F3 */
126
    U_SPECIAL,      /* F3 */
169
    SPECIAL, /* F8 */
127
    U_SPECIAL,      /* F8 */
170
    SPECIAL, /* F9 */
128
    U_SPECIAL,      /* F9 */
171
    SPECIAL,
129
    U_SPECIAL,
172
    SPECIAL, /* F11 */
130
    U_SPECIAL,      /* F11 */
173
    SPECIAL,
131
    U_SPECIAL,
174
    SPECIAL, /* F13 */
132
    U_SPECIAL,      /* F13 */
175
    SPECIAL,
133
    U_SPECIAL,
176
    SPECIAL, /* ScrollLock */
134
    U_SPECIAL,      /* ScrollLock */
177
    SPECIAL,
135
    U_SPECIAL,
178
    SPECIAL, /* F10 */
136
    U_SPECIAL,      /* F10 */
179
    SPECIAL,
137
    U_SPECIAL,
180
    SPECIAL, /* F12 */
138
    U_SPECIAL,      /* F12 */
181
    SPECIAL,
139
    U_SPECIAL,
182
    SPECIAL, /* Pause */
140
    U_SPECIAL,      /* Pause */
183
    SPECIAL, /* Insert */
141
    U_SPECIAL,      /* Insert */
184
    SPECIAL, /* Home */
142
    U_HOME_ARROW,   /* Home */
185
    SPECIAL, /* PageUp */
143
    U_PAGE_UP,      /* Page Up */
186
    SPECIAL, /* Delete */
144
    U_DELETE,       /* Delete */
187
    SPECIAL, /* F4 */
145
    U_SPECIAL,      /* F4 */
188
    SPECIAL, /* End */
146
    U_END_ARROW,    /* End */
189
    SPECIAL, /* F2 */
147
    U_SPECIAL,      /* F2 */
190
    SPECIAL, /* PageDown */
148
    U_PAGE_DOWN,    /* Page Down */
191
    SPECIAL  /* F1 */
149
    U_SPECIAL       /* F1 */
192
};
150
};
193
 
151
 
194
 
-
 
195
static void receive_packet(uint8_t *kind, index_t count, uint8_t data[])
152
static void receive_packet(uint8_t *kind, index_t count, uint8_t data[])
196
{
153
{
197
    cuda[B] = cuda[B] & ~TIP;
154
    cuda[B] = cuda[B] & ~TIP;
198
    *kind = cuda[SR];
155
    *kind = cuda[SR];
199
   
156
   
Line 202... Line 159...
202
        data[i] = cuda[SR];
159
        data[i] = cuda[SR];
203
   
160
   
204
    cuda[B] = cuda[B] | TIP;
161
    cuda[B] = cuda[B] | TIP;
205
}
162
}
206
 
163
 
207
 
-
 
208
static indev_t kbrd;
164
static indev_t kbrd;
209
static indev_operations_t ops = {
165
static indev_operations_t ops = {
210
    .poll = NULL
166
    .poll = NULL
211
};
167
};
212
 
168
 
213
 
-
 
214
int cuda_get_scancode(void)
169
int cuda_get_scancode(void)
215
{
170
{
216
    if (cuda) {
171
    if (cuda) {
217
        uint8_t kind;
172
        uint8_t kind;
218
        uint8_t data[4];
173
        uint8_t data[4];
Line 261... Line 216...
261
    sysinfo_set_item_val("kbd", NULL, true);
216
    sysinfo_set_item_val("kbd", NULL, true);
262
    sysinfo_set_item_val("kbd.inr", NULL, CUDA_IRQ);
217
    sysinfo_set_item_val("kbd.inr", NULL, CUDA_IRQ);
263
    sysinfo_set_item_val("kbd.address.virtual", NULL, base);
218
    sysinfo_set_item_val("kbd.address.virtual", NULL, base);
264
}
219
}
265
 
220
 
266
 
-
 
267
static void send_packet(const uint8_t kind, count_t count, ...)
221
static void send_packet(const uint8_t kind, count_t count, ...)
268
{
222
{
269
    index_t i;
223
    index_t i;
270
    va_list va;
224
    va_list va;
271
   
225
   
Line 285... Line 239...
285
    va_end(va);
239
    va_end(va);
286
   
240
   
287
    cuda[B] = cuda[B] | TIP;
241
    cuda[B] = cuda[B] | TIP;
288
}
242
}
289
 
243
 
290
 
-
 
291
void cpu_halt(void) {
244
void cpu_halt(void) {
292
    asm volatile (
245
    asm volatile (
293
        "b 0\n"
246
        "b 0\n"
294
    );
247
    );
295
}
248
}