[ros-diffs] [fireball] 28281: Merge Revision: 25803 Author: dgorbachev Message: - fix "keyboard does not respond" bug on Biostar board (thanks to Peter Krawies) - fix printf()

fireball at svn.reactos.org fireball at svn.reactos.org
Sat Aug 11 11:22:22 CEST 2007


Author: fireball
Date: Sat Aug 11 13:22:22 2007
New Revision: 28281

URL: http://svn.reactos.org/svn/reactos?rev=28281&view=rev
Log:
Merge Revision: 25803
Author: dgorbachev
Message:
- fix "keyboard does not respond" bug on Biostar board (thanks to Peter Krawies)
- fix printf()


Modified:
    branches/winldr/arch/i386/hardware.c
    branches/winldr/ui/tui.c

Modified: branches/winldr/arch/i386/hardware.c
URL: http://svn.reactos.org/svn/reactos/branches/winldr/arch/i386/hardware.c?rev=28281&r1=28280&r2=28281&view=diff
==============================================================================
--- branches/winldr/arch/i386/hardware.c (original)
+++ branches/winldr/arch/i386/hardware.c Sat Aug 11 13:22:22 2007
@@ -1675,18 +1675,27 @@
 {
   UCHAR Status;
   UCHAR Scancode;
-
+  ULONG Loops;
+  BOOLEAN Result = TRUE;
+
+  /* Identify device */
   WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA,
 		   0xF2);
 
+  /* Wait for reply */
+  for (Loops = 0; Loops < 100; Loops++)
+    {
   StallExecutionProcessor(10000);
-
   Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
-  if ((Status & 0x01) != 0x01)
+      if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0)
+        break;
+    }
+
+  if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0)
     {
       /* PC/XT keyboard or no keyboard */
       DPRINT1("PC/XT keyboard or no keyboard found\n");
-      return FALSE;
+      Result = FALSE;
     }
 
   Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
@@ -1694,32 +1703,37 @@
     {
       /* No ACK received */
       DPRINT1("No ACK received\n");
-      return FALSE;
+      Result = FALSE;
+
     }
 
   StallExecutionProcessor(10000);
+
   Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
-  if ((Status & 0x01) != 0x01)
+  if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0)
     {
       /* Found AT keyboard */
-      return TRUE;
+      return Result;
     }
 
   Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
   if (Scancode != 0xAB)
     {
       /* No 0xAB received */
+      Result = FALSE;
       DPRINT1("No 0xAB received\n");
-      return FALSE;
+
     }
 
   StallExecutionProcessor(10000);
+
   Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
-  if ((Status & 0x01) != 0x01)
+  if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0)
     {
       /* No byte in buffer */
       DPRINT1("No byte in buffer\n");
-      return FALSE;
+      Result = FALSE;
+
     }
 
   Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
@@ -1727,12 +1741,12 @@
     {
       /* No 0x41 received */
       DPRINT1("No 0x41 received\n");
-      return FALSE;
+      Result = FALSE;
     }
 
   /* Found MF-II keyboard */
   DPRINT1("Found MF-II keyboard\n");
-  return TRUE;
+  return Result;
 }
 
 static USHORT
@@ -1910,7 +1924,6 @@
 DetectPS2AuxPort(VOID)
 {
   ULONG Loops;
-  UCHAR Scancode;
   UCHAR Status;
 
   /* Put the value 0x5A in the output buffer using the
@@ -1931,22 +1944,15 @@
 
   for (Loops = 0; Loops < 10; Loops++)
     {
+      StallExecutionProcessor(10000);
       Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
-
       if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0)
-	{
-	  Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
-	  if ((Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL) != 0)
-	    {
-	      return TRUE;
-	    }
 	  break;
 	}
 
-      StallExecutionProcessor(10000);
-    }
-
-  return FALSE;
+  READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
+
+  return (Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL);
 }
 
 
@@ -1968,7 +1974,7 @@
 		   0xF2);
 
   /* Wait for reply */
-  for (Loops = 0; Loops < 10; Loops++)
+  for (Loops = 0; Loops < 100; Loops++)
     {
       StallExecutionProcessor(10000);
       Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
@@ -1993,15 +1999,6 @@
   Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
   if (Scancode != 0x00)
     Result = FALSE;
-
-  /* Flush output buffer */
-  for (Loops = 0; Loops < 10; Loops++)
-    {
-      Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
-      if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0)
-        break;
-      StallExecutionProcessor(10000);
-    }
 
   return Result;
 }

Modified: branches/winldr/ui/tui.c
URL: http://svn.reactos.org/svn/reactos/branches/winldr/ui/tui.c?rev=28281&r1=28280&r2=28281&view=diff
==============================================================================
--- branches/winldr/ui/tui.c (original)
+++ branches/winldr/ui/tui.c Sat Aug 11 13:22:22 2007
@@ -45,9 +45,9 @@
 			{
 			case 'd': case 'u': case 'x':
                 if (c == 'x')
-                    *_itoa(va_arg(ap, unsigned long), str, 16) = 0;
+                    _itoa(va_arg(ap, unsigned long), str, 16);
                 else
-                    *_itoa(va_arg(ap, unsigned long), str, 10) = 0;
+                    _itoa(va_arg(ap, unsigned long), str, 10);
 
 				ptr = str;
 




More information about the Ros-diffs mailing list