- Timestamp:
- 2005-11-23T00:16:03Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a83a802
- Parents:
- 2677758
- Location:
- arch
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/src/amd64.c
r2677758 r607c5f9 103 103 void arch_post_smp_init(void) 104 104 { 105 trap_virtual_enable_irqs(1<<IRQ_KBD); 105 106 } 106 107 -
arch/ia32/src/drivers/i8042.c
r2677758 r607c5f9 36 36 #include <synch/spinlock.h> 37 37 #include <typedefs.h> 38 #include <console/chardev.h> 39 #include <console/console.h> 38 40 39 41 /** … … 55 57 static volatile int keyflags; /**< Tracking of multiple keypresses. */ 56 58 static volatile int lockflags; /**< Tracking of multiple keys lockings. */ 59 60 static void i8042_suspend(void); 61 static void i8042_resume(void); 62 63 static chardev_t kbrd; 64 static chardev_operations_t ops = { 65 .suspend = i8042_suspend, 66 .resume = i8042_resume 67 }; 57 68 58 69 /** Primary meaning of scancodes. */ … … 221 232 trap_register(VECTOR_KBD, i8042_interrupt); 222 233 spinlock_initialize(&keylock); 234 chardev_initialize(&kbrd, &ops); 235 stdin = &kbrd; 223 236 } 224 237 … … 293 306 if (shift) 294 307 map = sc_secondary_map; 295 putchar(map[sc]);308 chardev_push_character(&kbrd, map[sc]); 296 309 break; 297 310 } 298 311 spinlock_unlock(&keylock); 299 312 } 313 314 /* Called from getc(). */ 315 void i8042_resume(void) 316 { 317 } 318 319 /* Called from getc(). */ 320 void i8042_suspend(void) 321 { 322 } -
arch/mips32/src/drivers/keyboard.c
r2677758 r607c5f9 37 37 #include <typedefs.h> 38 38 39 static void keyboard_enable(void); 40 static void keyboard_disable(void); 41 39 42 static chardev_t kbrd; 40 41 static void keyboard_enable(void); 43 static chardev_operations_t ops = { 44 .resume = keyboard_enable, 45 .suspend = keyboard_disable 46 }; 42 47 43 48 /** Initialize keyboard subsystem. */ … … 45 50 { 46 51 cp0_unmask_int(KEYBOARD_IRQ); 47 chardev_initialize(&kbrd, keyboard_enable);52 chardev_initialize(&kbrd, &ops); 48 53 stdin = &kbrd; 49 54 } 50 55 51 /** Process keyboard interrupt. 52 * 53 * This function is called directly from the interrupt handler. 54 * It feeds the keyboard buffer with characters read. When the buffer 55 * is full, it simply masks the keyboard interrupt signal. 56 */ 56 /** Process keyboard interrupt. */ 57 57 void keyboard(void) 58 58 { 59 59 char ch; 60 60 61 spinlock_lock(&kbrd.lock);62 kbrd.counter++;63 if (kbrd.counter == CHARDEV_BUFLEN - 1) {64 /* buffer full => disable keyboard interrupt */65 cp0_mask_int(KEYBOARD_IRQ);66 }67 68 61 ch = *((char *) KEYBOARD_ADDRESS); 69 putchar(ch); 70 kbrd.buffer[kbrd.index++] = ch; 71 kbrd.index = kbrd.index % CHARDEV_BUFLEN; /* index modulo size of buffer */ 72 waitq_wakeup(&kbrd.wq, WAKEUP_FIRST); 73 spinlock_unlock(&kbrd.lock); 62 chardev_push_character(&kbrd, ch); 74 63 } 75 64 … … 79 68 cp0_unmask_int(KEYBOARD_IRQ); 80 69 } 70 71 /* Called from getc(). */ 72 void keyboard_disable(void) 73 { 74 cp0_mask_int(KEYBOARD_IRQ); 75 }
Note:
See TracChangeset
for help on using the changeset viewer.