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
37 #define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \
38 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS)
40 #define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \
41 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
43 #define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \
44 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
46 #define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \
47 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
49 #define IOCTL_INTERNAL_I8042_HOOK_MOUSE \
50 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
52 #define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \
53 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
55 #define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \
56 CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
58 #define I8042_POWER_SYS_BUTTON 0x0001
59 #define I8042_SLEEP_SYS_BUTTON 0x0002
60 #define I8042_WAKE_SYS_BUTTON 0x0004
61 #define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \
62 I8042_SLEEP_SYS_BUTTON | \
63 I8042_WAKE_SYS_BUTTON)
65 typedef enum _TRANSMIT_STATE
{
70 typedef struct _OUTPUT_PACKET
{
75 } OUTPUT_PACKET
, *POUTPUT_PACKET
;
77 typedef enum _KEYBOARD_SCAN_STATE
{
81 } KEYBOARD_SCAN_STATE
, *PKEYBOARD_SCAN_STATE
;
83 typedef enum _MOUSE_STATE
{
90 } MOUSE_STATE
, *PMOUSE_STATE
;
92 typedef enum _MOUSE_RESET_SUBSTATE
{
95 ExpectingGetDeviceIdACK
,
96 ExpectingGetDeviceIdValue
,
97 ExpectingSetResolutionDefaultACK
,
98 ExpectingSetResolutionDefaultValueACK
,
99 ExpectingSetResolutionACK
,
100 ExpectingSetResolutionValueACK
,
101 ExpectingSetScaling1to1ACK
,
102 ExpectingSetScaling1to1ACK2
,
103 ExpectingSetScaling1to1ACK3
,
104 ExpectingReadMouseStatusACK
,
105 ExpectingReadMouseStatusByte1
,
106 ExpectingReadMouseStatusByte2
,
107 ExpectingReadMouseStatusByte3
,
109 ExpectingLoopSetSamplingRateACK
,
110 ExpectingLoopSetSamplingRateValueACK
,
120 ExpectingGetDeviceId2ACK
,
121 ExpectingGetDeviceId2Value
,
122 ExpectingSetSamplingRateACK
,
123 ExpectingSetSamplingRateValueACK
,
125 ExpectingFinalResolutionACK
,
126 ExpectingFinalResolutionValueACK
,
127 ExpectingGetDeviceIdDetectACK
,
128 ExpectingGetDeviceIdDetectValue
,
129 CustomHookStateMinimum
= 100,
130 CustomHookStateMaximum
= 999,
131 I8042ReservedMinimum
= 1000
132 } MOUSE_RESET_SUBSTATE
, *PMOUSE_RESET_SUBSTATE
;
134 typedef struct _INTERNAL_I8042_START_INFORMATION
{
136 PKINTERRUPT InterruptObject
;
138 } INTERNAL_I8042_START_INFORMATION
, *PINTERNAL_I8042_START_INFORMATION
;
141 (*PI8042_ISR_WRITE_PORT
)(
146 (*PI8042_QUEUE_PACKET
)(
149 typedef NTSTATUS DDKAPI
150 (*PI8042_SYNCH_READ_PORT
) (
153 IN BOOLEAN WaitForACK
);
155 typedef NTSTATUS DDKAPI
156 (*PI8042_SYNCH_WRITE_PORT
)(
159 IN BOOLEAN WaitForACK
);
162 typedef NTSTATUS DDKAPI
163 (*PI8042_KEYBOARD_INITIALIZATION_ROUTINE
)(
164 IN PVOID InitializationContext
,
165 IN PVOID SynchFuncContext
,
166 IN PI8042_SYNCH_READ_PORT ReadPort
,
167 IN PI8042_SYNCH_WRITE_PORT WritePort
,
168 OUT PBOOLEAN TurnTranslationOn
);
170 typedef BOOLEAN DDKAPI
171 (*PI8042_KEYBOARD_ISR
)(
173 PKEYBOARD_INPUT_DATA CurrentInput
,
174 POUTPUT_PACKET CurrentOutput
,
177 PBOOLEAN ContinueProcessing
,
178 PKEYBOARD_SCAN_STATE ScanState
);
180 typedef struct _INTERNAL_I8042_HOOK_KEYBOARD
{
182 OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine
;
183 OUT PI8042_KEYBOARD_ISR IsrRoutine
;
184 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
185 IN PI8042_QUEUE_PACKET QueueKeyboardPacket
;
186 IN PVOID CallContext
;
187 } INTERNAL_I8042_HOOK_KEYBOARD
, *PINTERNAL_I8042_HOOK_KEYBOARD
;
189 typedef BOOLEAN DDKAPI
192 PMOUSE_INPUT_DATA CurrentInput
,
193 POUTPUT_PACKET CurrentOutput
,
196 PBOOLEAN ContinueProcessing
,
197 PMOUSE_STATE MouseState
,
198 PMOUSE_RESET_SUBSTATE ResetSubState
);
200 typedef struct _INTERNAL_I8042_HOOK_MOUSE
{
202 OUT PI8042_MOUSE_ISR IsrRoutine
;
203 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
204 IN PI8042_QUEUE_PACKET QueueMousePacket
;
205 IN PVOID CallContext
;
206 } INTERNAL_I8042_HOOK_MOUSE
, *PINTERNAL_I8042_HOOK_MOUSE
;
212 #endif /* __NTDD8042_H */