static irqreturn_t top_half(int irq, void *dev_id) { #ifdef DEBUG to_tty_string("[simple_keyboard.c] Entring top_half.\n\r"); #endif tasklet_data.status = i8042_read_status(); tasklet_data.scancode = i8042_read_data(); #ifdef DEBUG to_tty_string("[simple_keyboard.c] Got scancode\n\r"); #endif printk(KERN_INFO "Got scancode %02x in top_half.\n", tasklet_data.scancode); if ((tasklet_data.scancode & BIT_SCANCODE) == 0x01) exit_driver(); tasklet_schedule(&simple_keyboard_tasklet); return IRQ_HANDLED; }
inline void i8042_wait_write() { while (i8042_read_status() & I8042_STATUS_FLAG_OUT_FULL); }
r = i8042_read_data(); if (r == 0x55) return 0; } return -1; } void i8042_enable_aux() { i8042_toggle_port(1, 1); i8042_write_ram(I8042_RAM_CCR, (i8042_read_ram(I8042_RAM_CCR) | I8042_CCR_AUX_IEN | I8042_CCR_KBD_IEN) & ~I8042_CCR_AUX_DISABLE ); } int i8042_isr(__attribute__((__unused__)) irq_id_t irq_id, __attribute__((__unused__)) void *context) { int status = i8042_read_status(); int data = 0; //debugcon_aprintf("i8042isr status:%i\n",status); if (~status & I8042_STATUS_FLAG_IN_FULL) return 1; while (status & I8042_STATUS_FLAG_IN_FULL) { data = i8042_read_data(); if (status & I8042_STATUS_FLAG_AUX_DATA) { ps2aux_handle_data(data); } else { ps2kbd_handle_data(data); } status = i8042_read_status(); } return 1;