static inline void handle_keyboard_event(unsigned char scancode) { #ifdef CONFIG_VT kbd_exists = 1; if (do_acknowledge(scancode)) handle_scancode(scancode, !(scancode & 0x80)); #endif tasklet_schedule(&keyboard_tasklet); }
/* * This reads the keyboard status port, and does the * appropriate action. * * It requires that we hold the keyboard controller * spinlock. */ static unsigned char handle_kbd_event(void) { unsigned char status = kbd_read_status(); unsigned int work = 10000; while (status & KBD_STAT_OBF) { unsigned char scancode; scancode = kbd_read_input(); if (status & KBD_STAT_MOUSE_OBF) { handle_mouse_event(scancode); } else { do_acknowledge(scancode); printk("pc_keyb: %X ", scancode ); } status = kbd_read_status(); if(!work--) { printk("pc_keyb: controller jammed (0x%02X).\n", status); break; } } return status; }
static void pcikbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) { unsigned long flags; unsigned char status; spin_lock_irqsave(&pcikbd_lock, flags); kbd_pt_regs = regs; status = pcikbd_inb(pcikbd_iobase + KBD_STATUS_REG); do { unsigned char scancode; if(status & pckbd_read_mask & KBD_STAT_MOUSE_OBF) break; scancode = pcikbd_inb(pcikbd_iobase + KBD_DATA_REG); if((status & KBD_STAT_OBF) && do_acknowledge(scancode)) handle_scancode(scancode, !(scancode & 0x80)); status = pcikbd_inb(pcikbd_iobase + KBD_STATUS_REG); } while(status & KBD_STAT_OBF); tasklet_schedule(&keyboard_tasklet); spin_unlock_irqrestore(&pcikbd_lock, flags); }
static inline void handle_keyboard_event(unsigned char scancode) { if (do_acknowledge(scancode)) handle_scancode(scancode, !(scancode & 0x80)); }