a98920a06c59e5b02ba38cac3c37cc8025ff7232
[reactos.git] / reactos / drivers / input / kbdclass / kbdclass.h
1 #include <ntifs.h>
2 #include <kbdmou.h>
3 #include <ntddkbd.h>
4 #include <stdio.h>
5 #include <pseh/pseh2.h>
6
7 #include <debug.h>
8
9 #define MAX_PATH 260
10
11 #define MIN(a, b) ((a) < (b) ? (a) : (b))
12
13 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
14 #define CLASS_TAG TAG('K', 'b', 'd', 'C')
15 #define DPFLTR_CLASS_NAME_ID DPFLTR_KBDCLASS_ID
16
17 typedef enum
18 {
19 dsStopped,
20 dsStarted,
21 dsPaused,
22 dsRemoved,
23 dsSurpriseRemoved
24 } PORT_DEVICE_STATE;
25
26 typedef struct _CLASS_DRIVER_EXTENSION
27 {
28 UNICODE_STRING RegistryPath;
29
30 /* Registry settings */
31 ULONG ConnectMultiplePorts;
32 ULONG DataQueueSize;
33 UNICODE_STRING DeviceBaseName;
34
35 PDEVICE_OBJECT MainClassDeviceObject;
36 } CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION;
37
38 typedef struct _COMMON_DEVICE_EXTENSION
39 {
40 BOOLEAN IsClassDO;
41 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
42
43 typedef struct _PORT_DEVICE_EXTENSION
44 {
45 COMMON_DEVICE_EXTENSION Common;
46
47 LIST_ENTRY ListEntry;
48 PDEVICE_OBJECT DeviceObject;
49 PORT_DEVICE_STATE PnpState;
50 PDEVICE_OBJECT LowerDevice;
51 PDEVICE_OBJECT ClassDO;
52 UNICODE_STRING InterfaceName;
53 } PORT_DEVICE_EXTENSION, *PPORT_DEVICE_EXTENSION;
54
55 typedef struct _CLASS_DEVICE_EXTENSION
56 {
57 COMMON_DEVICE_EXTENSION Common;
58
59 PCLASS_DRIVER_EXTENSION DriverExtension;
60
61 LIST_ENTRY ListHead;
62 KSPIN_LOCK ListSpinLock;
63 KSPIN_LOCK SpinLock;
64 PIRP PendingIrp;
65 SIZE_T InputCount;
66 PKEYBOARD_INPUT_DATA PortData;
67 LPCWSTR DeviceName;
68 } CLASS_DEVICE_EXTENSION, *PCLASS_DEVICE_EXTENSION;
69
70 /* misc.c */
71
72 NTSTATUS
73 ForwardIrpAndWait(
74 IN PDEVICE_OBJECT DeviceObject,
75 IN PIRP Irp);
76
77 DRIVER_DISPATCH ForwardIrpAndForget;
78
79 NTSTATUS
80 DuplicateUnicodeString(
81 IN ULONG Flags,
82 IN PCUNICODE_STRING SourceString,
83 OUT PUNICODE_STRING DestinationString);
84
85 /* setup.c */
86 BOOLEAN
87 IsFirstStageSetup(
88 VOID);
89
90 VOID NTAPI
91 Send8042StartDevice(
92 IN PDRIVER_OBJECT DriverObject,
93 IN PDEVICE_OBJECT Pdo);