34,6 → 34,7 |
* @brief i8042 processor driver |
* |
* It takes care of the i8042 serial communication. |
* |
*/ |
|
#include <genarch/drivers/i8042/i8042.h> |
49,6 → 50,7 |
|
#define i8042_SET_COMMAND 0x60 |
#define i8042_COMMAND 0x69 |
#define i8042_CPU_RESET 0xfe |
|
#define i8042_BUFFER_FULL_MASK 0x01 |
#define i8042_WAIT_MASK 0x02 |
96,9 → 98,7 |
instance->irq.instance = instance; |
irq_register(&instance->irq); |
|
/* |
* Clear input buffer. |
*/ |
/* Clear input buffer */ |
while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) |
(void) pio_read_8(&dev->data); |
|
105,5 → 105,18 |
return &instance->kbrdin; |
} |
|
/* Reset CPU by pulsing pin 0 */ |
void i8042_cpu_reset(i8042_t *dev) |
{ |
interrupts_disable(); |
|
/* Clear input buffer */ |
while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) |
(void) pio_read_8(&dev->data); |
|
/* Reset CPU */ |
pio_write_8(&dev->status, i8042_CPU_RESET); |
} |
|
/** @} |
*/ |