diff --git a/reactos/include/ddk/ntdd8042.h b/reactos/include/ddk/ntdd8042.h index e415fe9b515..a0441fe3096 100644 --- a/reactos/include/ddk/ntdd8042.h +++ b/reactos/include/ddk/ntdd8042.h @@ -1,27 +1,73 @@ -#ifndef _NTDD8042_ -#define _NTDD8042_ +/* + * ntdd8042.h + * + * i8042 IOCTL interface. + * + * This file is part of the w32api package. + * + * Contributors: + * Created by Casper S. Hornstrup + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ -#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) -#define IOCTL_INTERNAL_I8042_HOOK_MOUSE CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) +#ifndef __NTDD8042_H +#define __NTDD8042_H -typedef enum _KEYBOARD_SCAN_STATE { - Normal, - GotE0, - GotE1 -} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE; +#if __GNUC__ >=3 +#pragma GCC system_header +#endif -typedef -NTSTATUS -(*PI8042_SYNCH_READ_PORT) ( - IN PVOID Context, - PUCHAR Value, - BOOLEAN WaitForACK); +#ifdef __cplusplus +extern "C" { +#endif -typedef NTSTATUS -(*PI8042_SYNCH_WRITE_PORT) ( - IN PVOID Context, - UCHAR Value, - BOOLEAN WaitForACK); +#pragma pack(push,4) + +#include "ntddk.h" +#include "ntddkbd.h" +#include "ntddmou.h" + +#ifndef DDKAPI +#define DDKAPI STDCALL +#endif + +#define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \ + CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \ + CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \ + CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \ + CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_HOOK_MOUSE \ + CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \ + CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \ + CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define I8042_POWER_SYS_BUTTON 0x0001 +#define I8042_SLEEP_SYS_BUTTON 0x0002 +#define I8042_WAKE_SYS_BUTTON 0x0004 +#define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \ + I8042_SLEEP_SYS_BUTTON | \ + I8042_WAKE_SYS_BUTTON) typedef enum _TRANSMIT_STATE { Idle = 0, @@ -35,7 +81,92 @@ typedef struct _OUTPUT_PACKET { TRANSMIT_STATE State; } OUTPUT_PACKET, *POUTPUT_PACKET; -typedef NTSTATUS +typedef enum _KEYBOARD_SCAN_STATE { + Normal, + GotE0, + GotE1 +} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE; + +typedef enum _MOUSE_STATE { + MouseIdle, + XMovement, + YMovement, + ZMovement, + MouseExpectingACK, + MouseResetting +} MOUSE_STATE, *PMOUSE_STATE; + +typedef enum _MOUSE_RESET_SUBSTATE { + ExpectingReset, + ExpectingResetId, + ExpectingGetDeviceIdACK, + ExpectingGetDeviceIdValue, + ExpectingSetResolutionDefaultACK, + ExpectingSetResolutionDefaultValueACK, + ExpectingSetResolutionACK, + ExpectingSetResolutionValueACK, + ExpectingSetScaling1to1ACK, + ExpectingSetScaling1to1ACK2, + ExpectingSetScaling1to1ACK3, + ExpectingReadMouseStatusACK, + ExpectingReadMouseStatusByte1, + ExpectingReadMouseStatusByte2, + ExpectingReadMouseStatusByte3, + StartPnPIdDetection, + ExpectingLoopSetSamplingRateACK, + ExpectingLoopSetSamplingRateValueACK, + ExpectingPnpIdByte1, + ExpectingPnpIdByte2, + ExpectingPnpIdByte3, + ExpectingPnpIdByte4, + ExpectingPnpIdByte5, + ExpectingPnpIdByte6, + ExpectingPnpIdByte7, + EnableWheel, + Enable5Buttons, + ExpectingGetDeviceId2ACK, + ExpectingGetDeviceId2Value, + ExpectingSetSamplingRateACK, + ExpectingSetSamplingRateValueACK, + ExpectingEnableACK, + ExpectingFinalResolutionACK, + ExpectingFinalResolutionValueACK, + ExpectingGetDeviceIdDetectACK, + ExpectingGetDeviceIdDetectValue, + CustomHookStateMinimum = 100, + CustomHookStateMaximum = 999, + I8042ReservedMinimum = 1000 +} MOUSE_RESET_SUBSTATE, *PMOUSE_RESET_SUBSTATE; + +typedef struct _INTERNAL_I8042_START_INFORMATION { + ULONG Size; + PKINTERRUPT InterruptObject; + ULONG Reserved[8]; +} INTERNAL_I8042_START_INFORMATION, *PINTERNAL_I8042_START_INFORMATION; + +typedef VOID DDKAPI +(*PI8042_ISR_WRITE_PORT)( + IN PVOID Context, + IN UCHAR Value); + +typedef VOID DDKAPI +(*PI8042_QUEUE_PACKET)( + IN PVOID Context); + +typedef NTSTATUS DDKAPI +(*PI8042_SYNCH_READ_PORT) ( + IN PVOID Context, + OUT PUCHAR Value, + IN BOOLEAN WaitForACK); + +typedef NTSTATUS DDKAPI +(*PI8042_SYNCH_WRITE_PORT) ( + IN PVOID Context, + IN UCHAR Value, + IN BOOLEAN WaitForACK); + + +typedef NTSTATUS DDKAPI (*PI8042_KEYBOARD_INITIALIZATION_ROUTINE) ( IN PVOID InitializationContext, IN PVOID SynchFuncContext, @@ -43,7 +174,7 @@ typedef NTSTATUS IN PI8042_SYNCH_WRITE_PORT WritePort, OUT PBOOLEAN TurnTranslationOn); -typedef BOOLEAN +typedef BOOLEAN DDKAPI (*PI8042_KEYBOARD_ISR) ( PVOID IsrContext, PKEYBOARD_INPUT_DATA CurrentInput, @@ -58,34 +189,59 @@ typedef struct _INTERNAL_I8042_HOOK_KEYBOARD { // // Context variable for all callback routines // - PVOID Context; + OUT PVOID Context; // // Routine to call after the mouse is reset // - PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine; + OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine; // // Routine to call when a byte is received via the interrupt // - PI8042_KEYBOARD_ISR IsrRoutine; + OUT PI8042_KEYBOARD_ISR IsrRoutine; // // Write function // - //UNIMPLEMENTED PI8042_ISR_WRITE_PORT IsrWritePort; + //UNIMPLEMENTED IN PI8042_ISR_WRITE_PORT IsrWritePort; // // Queue the current packet (ie the one passed into the isr callback hook) // to be reported to the class driver // - //UNIMPLEMENTED PI8042_QUEUE_PACKET QueueKeyboardPacket; + //UNIMPLEMENTED IN PI8042_QUEUE_PACKET QueueKeyboardPacket; // // Context for IsrWritePort, QueueKeyboardPacket // - //UNIMPLEMENTED PVOID CallContext; + //UNIMPLEMENTED IN PVOID CallContext; } INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD; -#endif //_NTDD8042_ +typedef BOOLEAN DDKAPI +(*PI8042_MOUSE_ISR)( + PVOID IsrContext, + PMOUSE_INPUT_DATA CurrentInput, + POUTPUT_PACKET CurrentOutput, + UCHAR StatusByte, + PUCHAR Byte, + PBOOLEAN ContinueProcessing, + PMOUSE_STATE MouseState, + PMOUSE_RESET_SUBSTATE ResetSubState); + +typedef struct _INTERNAL_I8042_HOOK_MOUSE { + OUT PVOID Context; + OUT PI8042_MOUSE_ISR IsrRoutine; + IN PI8042_ISR_WRITE_PORT IsrWritePort; + IN PI8042_QUEUE_PACKET QueueMousePacket; + IN PVOID CallContext; +} INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE; + +#pragma pack(pop) + +#ifdef __cplusplus +} +#endif + +#endif /* __NTDD8042_H */