#define PS2_RET_ACK 0xfa
#define PS2_RET_NAK 0xfe
#define PS2_RET_ACK 0xfa
#define PS2_RET_NAK 0xfe
-static void
-process_ps2byte(u8 status, u8 data)
-{
- if (!MODE16) {
- // Don't pull in all of keyboard/mouse code into 32bit code -
- // just discard the data.
- dprintf(1, "Discarding ps2 data %x (status=%x)\n", data, status);
- return;
- }
- if (status & I8042_STR_AUXDATA)
- process_mouse(data);
- else
- process_key(data);
-}
-
static int
ps2_recvbyte(int aux, int needack, int timeout)
{
static int
ps2_recvbyte(int aux, int needack, int timeout)
{
- // Data not part of this command.
- process_ps2byte(status, data);
+ // This data not for us - XXX - just discard it for now.
+ dprintf(1, "Discarding ps2 data %x (status=%x)\n", data, status);
* IRQ handlers
****************************************************************/
* IRQ handlers
****************************************************************/
-static void
-process_ps2irq(void)
-{
- u8 status = inb(PORT_PS2_STATUS);
- if (!(status & I8042_STR_OBF)) {
- dprintf(1, "ps2 irq but no data.\n");
- return;
- }
- u8 data = inb(PORT_PS2_DATA);
-
- process_ps2byte(status, data);
-}
-
// INT74h : PS/2 mouse hardware interrupt
void VISIBLE16
handle_74(void)
// INT74h : PS/2 mouse hardware interrupt
void VISIBLE16
handle_74(void)
return;
debug_isr(DEBUG_ISR_74);
return;
debug_isr(DEBUG_ISR_74);
+
+ u8 v = inb(PORT_PS2_STATUS);
+ if ((v & (I8042_STR_OBF|I8042_STR_AUXDATA))
+ != (I8042_STR_OBF|I8042_STR_AUXDATA)) {
+ dprintf(1, "mouse irq but no mouse data.\n");
+ goto done;
+ }
+ v = inb(PORT_PS2_DATA);
+
+ process_mouse(v);
+
+done:
return;
debug_isr(DEBUG_ISR_09);
return;
debug_isr(DEBUG_ISR_09);
+
+ // read key from keyboard controller
+ u8 v = inb(PORT_PS2_STATUS);
+ if ((v & (I8042_STR_OBF|I8042_STR_AUXDATA)) != I8042_STR_OBF) {
+ dprintf(1, "keyboard irq but no keyboard data.\n");
+ goto done;
+ }
+ v = inb(PORT_PS2_DATA);
+
+ process_key(v);
+
+done: