windows-nt/Source/XPSP1/NT/drivers/input/pnpi8042/hook.c
2020-09-26 16:20:57 +08:00

176 lines
3.3 KiB
C

/*++
Copyright (c) 1997-1998 Microsoft Corporation, All Rights Reserved
Module Name:
hook.c
Abstract:
Implements hook functions used by upper filters to directly control a PS/2
device.
Environment:
Kernel mode only.
Notes:
Revision History:
--*/
#include "i8042prt.h"
//
// Mouse hook functions
//
VOID
I8xMouseIsrWritePort(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR Value
)
/*++
Routine Description:
This routine runs at HIGH IRQL to write values to the mouse device
Arguments:
DeviceObject - The i8042prt FDO representing the mouse
Value - Value to write to the mouse
Return Value:
None.
--*/
{
#if DBG
ASSERT(! ((PCOMMON_DATA) DeviceObject->DeviceExtension)->IsKeyboard);
#else
UNREFERENCED_PARAMETER(DeviceObject);
#endif
I8X_WRITE_CMD_TO_MOUSE();
I8X_MOUSE_COMMAND( Value );
}
//
// Keyboard hook functions
//
NTSTATUS
I8xKeyboardSynchReadPort (
IN PDEVICE_OBJECT DeviceObject,
IN PUCHAR Value,
IN BOOLEAN Dummy
)
/*++
Routine Description:
This routine runs at PASSIVE IRQL to synchronousely read a value from the
keyboard device during the initialization of the device
Arguments:
DeviceObject - The i8042prt FDO representing the keyboard
Value - Pointer in which to place the results of the read
Return Value:
status of the operation, STATUS_SUCCESS if successful
--*/
{
#if DBG
ASSERT(((PCOMMON_DATA) DeviceObject->DeviceExtension)->IsKeyboard);
#else
UNREFERENCED_PARAMETER(DeviceObject);
#endif
UNREFERENCED_PARAMETER(Dummy);
return I8xGetBytePolled((CCHAR) KeyboardDeviceType,
Value
);
}
NTSTATUS
I8xKeyboardSynchWritePort (
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR Value,
IN BOOLEAN WaitForACK
)
/*++
Routine Description:
This routine runs at PASSIVE IRQL to synchronousely write values to the
keyboard device during the initialization of the device
Arguments:
DeviceObject - The i8042prt FDO representing the keyboard
Value - Value to write to the keyboard
WaitForACK - Whether we should wait the device to ACK the Value written
Return Value:
status of the operation, STATUS_SUCCESS if successful
--*/
{
#if DBG
ASSERT(((PCOMMON_DATA) DeviceObject->DeviceExtension)->IsKeyboard);
#else
UNREFERENCED_PARAMETER(DeviceObject);
#endif
return I8xPutBytePolled(
DataPort,
WaitForACK,
(CCHAR) KeyboardDeviceType,
Value
);
}
VOID
I8xKeyboardIsrWritePort(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR Value
)
/*++
Routine Description:
This routine runs at HIGH IRQL to write values to the keyboard device
Arguments:
DeviceObject - The i8042prt FDO representing the keyboard
Value - Value to write to the keyboard
Return Value:
None.
--*/
{
#if DBG
ASSERT(((PCOMMON_DATA) DeviceObject->DeviceExtension)->IsKeyboard);
#else
UNREFERENCED_PARAMETER(DeviceObject);
#endif
I8xPutByteAsynchronous((CCHAR) DataPort,
Value
);
}