xref: /reactos/drivers/input/inport/inport.h (revision 74ec94e1)
1 /*
2  * PROJECT:     ReactOS InPort (Bus) Mouse Driver
3  * LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4  * PURPOSE:     Main header file
5  * COPYRIGHT:   Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
6  */
7 
8 #ifndef _INPORT_H_
9 #define _INPORT_H_
10 
11 #include <wdm.h>
12 #include <wmilib.h>
13 #include <wmistr.h>
14 #include <kbdmou.h>
15 
16 #define INPORT_TAG 'tPnI'
17 
18 typedef enum
19 {
20     dsStopped,
21     dsStarted,
22     dsRemoved
23 } INPORT_DEVICE_STATE;
24 
25 typedef enum
26 {
27     NecBusMouse,
28     MsInPortMouse,
29     LogitechBusMouse
30 } INPORT_MOUSE_TYPE;
31 
32 typedef struct _INPORT_RAW_DATA
33 {
34     CHAR DeltaX;
35     CHAR DeltaY;
36     UCHAR Buttons;
37     ULONG ButtonDiff;
38 } INPORT_RAW_DATA, *PINPORT_RAW_DATA;
39 
40 typedef struct _INPORT_DEVICE_EXTENSION
41 {
42     PDEVICE_OBJECT Self;
43     PDEVICE_OBJECT Pdo;
44     PDEVICE_OBJECT Ldo;
45     INPORT_DEVICE_STATE State;
46     IO_REMOVE_LOCK RemoveLock;
47     WMILIB_CONTEXT WmiLibInfo;
48     PUCHAR IoBase;
49     INPORT_MOUSE_TYPE MouseType;
50 
51     /* Interrupt */
52     PKINTERRUPT InterruptObject;
53     ULONG InterruptVector;
54     KIRQL InterruptLevel;
55     KINTERRUPT_MODE InterruptMode;
56     BOOLEAN InterruptShared;
57     KAFFINITY InterruptAffinity;
58 
59     /* Movement data and state of the mouse buttons */
60     INPORT_RAW_DATA RawData;
61 
62     /* Mouclass */
63     CONNECT_DATA ConnectData;
64     PDEVICE_OBJECT ClassDeviceObject;
65     PVOID ClassService;
66 
67     /* Mouse packet */
68     MOUSE_INPUT_DATA MouseInputData;
69 
70     /* Previous state */
71     ULONG MouseButtonState;
72 
73     /* Mouse device attributes */
74     MOUSE_ATTRIBUTES MouseAttributes;
75 } INPORT_DEVICE_EXTENSION, *PINPORT_DEVICE_EXTENSION;
76 
77 DRIVER_INITIALIZE DriverEntry;
78 
79 DRIVER_UNLOAD InPortUnload;
80 
81 DRIVER_ADD_DEVICE InPortAddDevice;
82 
83 _Dispatch_type_(IRP_MJ_CREATE)
84 _Dispatch_type_(IRP_MJ_CLOSE)
85 DRIVER_DISPATCH_PAGED InPortCreateClose;
86 
87 _Dispatch_type_(IRP_MJ_INTERNAL_DEVICE_CONTROL)
88 DRIVER_DISPATCH_RAISED InPortInternalDeviceControl;
89 
90 _Dispatch_type_(IRP_MJ_POWER)
91 DRIVER_DISPATCH_RAISED InPortPower;
92 
93 _Dispatch_type_(IRP_MJ_SYSTEM_CONTROL)
94 DRIVER_DISPATCH_PAGED InPortWmi;
95 
96 _Dispatch_type_(IRP_MJ_PNP)
97 DRIVER_DISPATCH_PAGED InPortPnp;
98 
99 KSERVICE_ROUTINE InPortIsr;
100 
101 IO_DPC_ROUTINE InPortDpcForIsr;
102 
103 KSYNCHRONIZE_ROUTINE InPortStartMouse;
104 
105 KSYNCHRONIZE_ROUTINE InPortStopMouse;
106 
107 NTSTATUS
108 NTAPI
109 InPortStartDevice(
110     _In_ PDEVICE_OBJECT DeviceObject,
111     _Inout_ PIRP Irp);
112 
113 NTSTATUS
114 NTAPI
115 InPortRemoveDevice(
116     _In_ PDEVICE_OBJECT DeviceObject,
117     _Inout_ PIRP Irp);
118 
119 VOID
120 NTAPI
121 InPortInitializeMouse(
122     _In_ PINPORT_DEVICE_EXTENSION DeviceExtension);
123 
124 NTSTATUS
125 NTAPI
126 InPortWmiRegistration(
127     _Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension);
128 
129 NTSTATUS
130 NTAPI
131 InPortWmiDeRegistration(
132     _Inout_ PINPORT_DEVICE_EXTENSION DeviceExtension);
133 
134 NTSTATUS
135 NTAPI
136 InPortQueryWmiRegInfo(
137     _Inout_ PDEVICE_OBJECT DeviceObject,
138     _Inout_ PULONG RegFlags,
139     _Inout_ PUNICODE_STRING InstanceName,
140     _Out_opt_ PUNICODE_STRING *RegistryPath,
141     _Inout_ PUNICODE_STRING MofResourceName,
142     _Out_opt_ PDEVICE_OBJECT *Pdo);
143 
144 NTSTATUS
145 NTAPI
146 InPortQueryWmiDataBlock(
147     _Inout_ PDEVICE_OBJECT DeviceObject,
148     _Inout_ PIRP Irp,
149     _In_ ULONG GuidIndex,
150     _In_ ULONG InstanceIndex,
151     _In_ ULONG InstanceCount,
152     _Out_opt_ PULONG InstanceLengthArray,
153     _In_ ULONG BufferAvail,
154     _Out_opt_ PUCHAR Buffer);
155 
156 extern UNICODE_STRING DriverRegistryPath;
157 
158 #endif /* _INPORT_H_ */
159