4 * i8042 IOCTL interface.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 #pragma GCC system_header
41 #define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \
42 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS)
44 #define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \
45 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
47 #define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \
48 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
50 #define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \
51 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
53 #define IOCTL_INTERNAL_I8042_HOOK_MOUSE \
54 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
56 #define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \
57 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
59 #define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \
60 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
62 #define I8042_POWER_SYS_BUTTON 0x0001
63 #define I8042_SLEEP_SYS_BUTTON 0x0002
64 #define I8042_WAKE_SYS_BUTTON 0x0004
65 #define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \
66 I8042_SLEEP_SYS_BUTTON | \
67 I8042_WAKE_SYS_BUTTON)
69 typedef enum _TRANSMIT_STATE
{
74 typedef struct _OUTPUT_PACKET
{
79 } OUTPUT_PACKET
, *POUTPUT_PACKET
;
81 typedef enum _KEYBOARD_SCAN_STATE
{
85 } KEYBOARD_SCAN_STATE
, *PKEYBOARD_SCAN_STATE
;
87 typedef enum _MOUSE_STATE
{
94 } MOUSE_STATE
, *PMOUSE_STATE
;
96 typedef enum _MOUSE_RESET_SUBSTATE
{
99 ExpectingGetDeviceIdACK
,
100 ExpectingGetDeviceIdValue
,
101 ExpectingSetResolutionDefaultACK
,
102 ExpectingSetResolutionDefaultValueACK
,
103 ExpectingSetResolutionACK
,
104 ExpectingSetResolutionValueACK
,
105 ExpectingSetScaling1to1ACK
,
106 ExpectingSetScaling1to1ACK2
,
107 ExpectingSetScaling1to1ACK3
,
108 ExpectingReadMouseStatusACK
,
109 ExpectingReadMouseStatusByte1
,
110 ExpectingReadMouseStatusByte2
,
111 ExpectingReadMouseStatusByte3
,
113 ExpectingLoopSetSamplingRateACK
,
114 ExpectingLoopSetSamplingRateValueACK
,
124 ExpectingGetDeviceId2ACK
,
125 ExpectingGetDeviceId2Value
,
126 ExpectingSetSamplingRateACK
,
127 ExpectingSetSamplingRateValueACK
,
129 ExpectingFinalResolutionACK
,
130 ExpectingFinalResolutionValueACK
,
131 ExpectingGetDeviceIdDetectACK
,
132 ExpectingGetDeviceIdDetectValue
,
133 CustomHookStateMinimum
= 100,
134 CustomHookStateMaximum
= 999,
135 I8042ReservedMinimum
= 1000
136 } MOUSE_RESET_SUBSTATE
, *PMOUSE_RESET_SUBSTATE
;
138 typedef struct _INTERNAL_I8042_START_INFORMATION
{
140 PKINTERRUPT InterruptObject
;
142 } INTERNAL_I8042_START_INFORMATION
, *PINTERNAL_I8042_START_INFORMATION
;
145 (*PI8042_ISR_WRITE_PORT
)(
150 (*PI8042_QUEUE_PACKET
)(
153 typedef NTSTATUS DDKAPI
154 (*PI8042_SYNCH_READ_PORT
) (
157 IN BOOLEAN WaitForACK
);
159 typedef NTSTATUS DDKAPI
160 (*PI8042_SYNCH_WRITE_PORT
)(
163 IN BOOLEAN WaitForACK
);
166 typedef NTSTATUS DDKAPI
167 (*PI8042_KEYBOARD_INITIALIZATION_ROUTINE
)(
168 IN PVOID InitializationContext
,
169 IN PVOID SynchFuncContext
,
170 IN PI8042_SYNCH_READ_PORT ReadPort
,
171 IN PI8042_SYNCH_WRITE_PORT WritePort
,
172 OUT PBOOLEAN TurnTranslationOn
);
174 typedef BOOLEAN DDKAPI
175 (*PI8042_KEYBOARD_ISR
)(
177 PKEYBOARD_INPUT_DATA CurrentInput
,
178 POUTPUT_PACKET CurrentOutput
,
181 PBOOLEAN ContinueProcessing
,
182 PKEYBOARD_SCAN_STATE ScanState
);
184 typedef struct _INTERNAL_I8042_HOOK_KEYBOARD
{
186 OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine
;
187 OUT PI8042_KEYBOARD_ISR IsrRoutine
;
188 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
189 IN PI8042_QUEUE_PACKET QueueKeyboardPacket
;
190 IN PVOID CallContext
;
191 } INTERNAL_I8042_HOOK_KEYBOARD
, *PINTERNAL_I8042_HOOK_KEYBOARD
;
193 typedef BOOLEAN DDKAPI
196 PMOUSE_INPUT_DATA CurrentInput
,
197 POUTPUT_PACKET CurrentOutput
,
200 PBOOLEAN ContinueProcessing
,
201 PMOUSE_STATE MouseState
,
202 PMOUSE_RESET_SUBSTATE ResetSubState
);
204 typedef struct _INTERNAL_I8042_HOOK_MOUSE
{
206 OUT PI8042_MOUSE_ISR IsrRoutine
;
207 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
208 IN PI8042_QUEUE_PACKET QueueMousePacket
;
209 IN PVOID CallContext
;
210 } INTERNAL_I8042_HOOK_MOUSE
, *PINTERNAL_I8042_HOOK_MOUSE
;
218 #endif /* __NTDD8042_H */