Rev 1734 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1734 | Rev 1780 | ||
---|---|---|---|
Line 57... | Line 57... | ||
57 | #define SR_OUT 0x10 |
57 | #define SR_OUT 0x10 |
58 | #define TACK 0x10 |
58 | #define TACK 0x10 |
59 | #define TIP 0x20 |
59 | #define TIP 0x20 |
60 | 60 | ||
61 | 61 | ||
62 | static volatile __u8 *cuda = NULL; |
62 | static volatile uint8_t *cuda = NULL; |
63 | static iroutine vector; |
63 | static iroutine vector; |
64 | 64 | ||
65 | 65 | ||
66 | static char lchars[0x80] = { |
66 | static char lchars[0x80] = { |
67 | 'a', |
67 | 'a', |
Line 188... | Line 188... | ||
188 | SPECIAL, /* PageDown */ |
188 | SPECIAL, /* PageDown */ |
189 | SPECIAL /* F1 */ |
189 | SPECIAL /* F1 */ |
190 | }; |
190 | }; |
191 | 191 | ||
192 | 192 | ||
193 | void send_packet(const __u8 kind, index_t count, ...); |
193 | void send_packet(const uint8_t kind, index_t count, ...); |
194 | 194 | ||
195 | 195 | ||
196 | static void receive_packet(__u8 *kind, index_t count, __u8 data[]) |
196 | static void receive_packet(uint8_t *kind, index_t count, uint8_t data[]) |
197 | { |
197 | { |
198 | cuda[B] = cuda[B] & ~TIP; |
198 | cuda[B] = cuda[B] & ~TIP; |
199 | *kind = cuda[SR]; |
199 | *kind = cuda[SR]; |
200 | 200 | ||
201 | index_t i; |
201 | index_t i; |
Line 235... | Line 235... | ||
235 | }; |
235 | }; |
236 | 236 | ||
237 | 237 | ||
238 | int cuda_get_scancode(void) |
238 | int cuda_get_scancode(void) |
239 | { |
239 | { |
240 | __u8 kind; |
240 | uint8_t kind; |
241 | __u8 data[4]; |
241 | uint8_t data[4]; |
242 | 242 | ||
243 | receive_packet(&kind, 4, data); |
243 | receive_packet(&kind, 4, data); |
244 | 244 | ||
245 | if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) |
245 | if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) |
246 | return data[2]; |
246 | return data[2]; |
Line 251... | Line 251... | ||
251 | static void cuda_irq(int n, istate_t *istate) |
251 | static void cuda_irq(int n, istate_t *istate) |
252 | { |
252 | { |
253 | int scan_code = cuda_get_scancode(); |
253 | int scan_code = cuda_get_scancode(); |
254 | 254 | ||
255 | if (scan_code != -1) { |
255 | if (scan_code != -1) { |
256 | __u8 scancode = (__u8) scan_code; |
256 | uint8_t scancode = (uint8_t) scan_code; |
257 | if ((scancode & 0x80) != 0x80) |
257 | if ((scancode & 0x80) != 0x80) |
258 | chardev_push_character(&kbrd, lchars[scancode & 0x7f]); |
258 | chardev_push_character(&kbrd, lchars[scancode & 0x7f]); |
259 | } |
259 | } |
260 | } |
260 | } |
261 | 261 | ||
Line 273... | Line 273... | ||
273 | if (vector) |
273 | if (vector) |
274 | int_register(CUDA_IRQ, "user_interrupt", vector); |
274 | int_register(CUDA_IRQ, "user_interrupt", vector); |
275 | } |
275 | } |
276 | 276 | ||
277 | 277 | ||
278 | void cuda_init(__address base, size_t size) |
278 | void cuda_init(uintptr_t base, size_t size) |
279 | { |
279 | { |
280 | cuda = (__u8 *) hw_map(base, size); |
280 | cuda = (uint8_t *) hw_map(base, size); |
281 | 281 | ||
282 | int_register(CUDA_IRQ, "cuda", cuda_irq); |
282 | int_register(CUDA_IRQ, "cuda", cuda_irq); |
283 | pic_enable_interrupt(CUDA_IRQ); |
283 | pic_enable_interrupt(CUDA_IRQ); |
284 | 284 | ||
285 | chardev_initialize("cuda_kbd", &kbrd, &ops); |
285 | chardev_initialize("cuda_kbd", &kbrd, &ops); |
Line 288... | Line 288... | ||
288 | sysinfo_set_item_val("cuda", NULL, true); |
288 | sysinfo_set_item_val("cuda", NULL, true); |
289 | sysinfo_set_item_val("cuda.irq", NULL, CUDA_IRQ); |
289 | sysinfo_set_item_val("cuda.irq", NULL, CUDA_IRQ); |
290 | } |
290 | } |
291 | 291 | ||
292 | 292 | ||
293 | void send_packet(const __u8 kind, index_t count, ...) |
293 | void send_packet(const uint8_t kind, index_t count, ...) |
294 | { |
294 | { |
295 | index_t i; |
295 | index_t i; |
296 | va_list va; |
296 | va_list va; |
297 | 297 | ||
298 | cuda[B] = cuda[B] | TIP; |
298 | cuda[B] = cuda[B] | TIP; |