mirror of
https://github.com/reactos/reactos.git
synced 2026-07-06 02:44:24 +08:00
- fix "keyboard does not respond" bug on Biostar board (thanks to Peter Krawies)
- fix printf() svn path=/trunk/; revision=25803
This commit is contained in:
@@ -1621,58 +1621,69 @@ DetectKeyboardDevice(VOID)
|
||||
{
|
||||
UCHAR Status;
|
||||
UCHAR Scancode;
|
||||
ULONG Loops;
|
||||
BOOLEAN Result = TRUE;
|
||||
|
||||
/* Identify device */
|
||||
WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA,
|
||||
0xF2);
|
||||
|
||||
StallExecutionProcessor(10000);
|
||||
/* Wait for reply */
|
||||
for (Loops = 0; Loops < 100; Loops++)
|
||||
{
|
||||
StallExecutionProcessor(10000);
|
||||
Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
|
||||
if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0)
|
||||
break;
|
||||
}
|
||||
|
||||
Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
|
||||
if ((Status & 0x01) != 0x01)
|
||||
if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0)
|
||||
{
|
||||
/* PC/XT keyboard or no keyboard */
|
||||
return FALSE;
|
||||
Result = FALSE;
|
||||
}
|
||||
|
||||
Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
|
||||
if (Scancode != 0xFA)
|
||||
{
|
||||
/* No ACK received */
|
||||
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 */
|
||||
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)
|
||||
{
|
||||
/* No byte in buffer */
|
||||
return FALSE;
|
||||
Result = FALSE;
|
||||
}
|
||||
|
||||
Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
|
||||
if (Scancode != 0x41)
|
||||
{
|
||||
/* No 0x41 received */
|
||||
return FALSE;
|
||||
Result = FALSE;
|
||||
}
|
||||
|
||||
/* Found MF-II keyboard */
|
||||
return TRUE;
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1880,7 +1891,6 @@ static BOOLEAN
|
||||
DetectPS2AuxPort(VOID)
|
||||
{
|
||||
ULONG Loops;
|
||||
UCHAR Scancode;
|
||||
UCHAR Status;
|
||||
|
||||
/* Put the value 0x5A in the output buffer using the
|
||||
@@ -1901,22 +1911,15 @@ DetectPS2AuxPort(VOID)
|
||||
|
||||
for (Loops = 0; Loops < 10; Loops++)
|
||||
{
|
||||
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);
|
||||
Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS);
|
||||
if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0)
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA);
|
||||
|
||||
return (Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -1938,7 +1941,7 @@ DetectPS2AuxDevice(VOID)
|
||||
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);
|
||||
@@ -1964,15 +1967,6 @@ DetectPS2AuxDevice(VOID)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,9 +45,9 @@ int printf(const char *format, ... )
|
||||
{
|
||||
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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user