]> xenbits.xensource.com Git - seabios.git/commitdiff
Move ps2ctr manipulation from mouse.c to ps2port.c.
authorKevin O'Connor <kevin@koconnor.net>
Sat, 7 May 2011 18:19:29 +0000 (14:19 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 7 May 2011 18:19:29 +0000 (14:19 -0400)
This simplifies the mouse.c code.  It also prevents USB mouse
interaction from changing the ps2 port setup.

src/mouse.c
src/ps2port.c

index 09273b0e6220c2f09414c21a4ae5a278a2e2848a..e26cf694ca5bcc37791d533c564071f1ee863efd 100644 (file)
@@ -37,23 +37,11 @@ mouse_command(int command, u8 *param)
 #define RET_ENEEDRESEND  0x04
 #define RET_ENOHANDLER   0x05
 
-static int
-disable_mouse(u16 ebda_seg)
-{
-    u8 ps2ctr = GET_EBDA2(ebda_seg, ps2ctr);
-    ps2ctr |= I8042_CTR_AUXDIS;
-    ps2ctr &= ~I8042_CTR_AUXINT;
-    SET_EBDA2(ebda_seg, ps2ctr, ps2ctr);
-
-    return mouse_command(PSMOUSE_CMD_DISABLE, NULL);
-}
-
 // Disable Mouse
 static void
 mouse_15c20000(struct bregs *regs)
 {
-    u16 ebda_seg = get_ebda_seg();
-    int ret = disable_mouse(ebda_seg);
+    int ret = mouse_command(PSMOUSE_CMD_DISABLE, NULL);
     if (ret)
         set_code_invalid(regs, RET_ENEEDRESEND);
     else
@@ -64,18 +52,12 @@ mouse_15c20000(struct bregs *regs)
 static void
 mouse_15c20001(struct bregs *regs)
 {
-    u16 ebda_seg = get_ebda_seg();
-    u8 mouse_flags_2 = GET_EBDA2(ebda_seg, mouse_flag2);
+    u8 mouse_flags_2 = GET_EBDA(mouse_flag2);
     if ((mouse_flags_2 & 0x80) == 0) {
         set_code_invalid(regs, RET_ENOHANDLER);
         return;
     }
 
-    u8 ps2ctr = GET_EBDA2(ebda_seg, ps2ctr);
-    ps2ctr &= ~I8042_CTR_AUXDIS;
-    ps2ctr |= I8042_CTR_AUXINT;
-    SET_EBDA2(ebda_seg, ps2ctr, ps2ctr);
-
     int ret = mouse_command(PSMOUSE_CMD_ENABLE, NULL);
     if (ret)
         set_code_invalid(regs, RET_ENEEDRESEND);
@@ -250,7 +232,7 @@ mouse_15c207(struct bregs *regs)
         /* remove handler */
         if ((mouse_flags_2 & 0x80) != 0) {
             mouse_flags_2 &= ~0x80;
-            disable_mouse(ebda_seg);
+            mouse_command(PSMOUSE_CMD_DISABLE, NULL);
         }
     } else {
         /* install handler */
index d1e6d48ab51a10a183a4dce6b610c2cc588ceb03..81d47c9e62cb597799ded435d65547505cfcb5ec 100644 (file)
@@ -327,6 +327,17 @@ ps2_kbd_command(int command, u8 *param)
 int
 ps2_mouse_command(int command, u8 *param)
 {
+    // Update ps2ctr for mouse enable/disable.
+    if (command == PSMOUSE_CMD_ENABLE || command == PSMOUSE_CMD_DISABLE) {
+        u16 ebda_seg = get_ebda_seg();
+        u8 ps2ctr = GET_EBDA2(ebda_seg, ps2ctr);
+        if (command == PSMOUSE_CMD_ENABLE)
+            ps2ctr = (ps2ctr | I8042_CTR_AUXINT) & ~I8042_CTR_AUXDIS;
+        else
+            ps2ctr = (ps2ctr | I8042_CTR_AUXDIS) & ~I8042_CTR_AUXINT;
+        SET_EBDA2(ebda_seg, ps2ctr, ps2ctr);
+    }
+
     return ps2_command(1, command, param);
 }