2383760b0fadb5def73857365f63b1ba4560752f
[reactos.git] / reactos / drivers / serial / serenum / serenum.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Serial enumerator driver
4 * FILE: drivers/bus/serenum/serenum.h
5 * PURPOSE: Serial enumerator driver header
6 *
7 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
8 */
9
10 #include <ntifs.h>
11 #include <ntddser.h>
12
13 typedef enum
14 {
15 dsStopped,
16 dsStarted,
17 dsPaused,
18 dsRemoved,
19 dsSurpriseRemoved
20 } SERENUM_DEVICE_STATE;
21
22 typedef struct _COMMON_DEVICE_EXTENSION
23 {
24 BOOLEAN IsFDO;
25 SERENUM_DEVICE_STATE PnpState;
26 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
27
28 typedef struct _FDO_DEVICE_EXTENSION
29 {
30 COMMON_DEVICE_EXTENSION Common;
31
32 PDEVICE_OBJECT LowerDevice;
33 PDEVICE_OBJECT Pdo;
34 IO_REMOVE_LOCK RemoveLock;
35
36 UNICODE_STRING SerenumInterfaceName;
37
38 PDEVICE_OBJECT AttachedPdo;
39 ULONG Flags;
40 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
41
42 typedef struct _PDO_DEVICE_EXTENSION
43 {
44 COMMON_DEVICE_EXTENSION Common;
45
46 PDEVICE_OBJECT AttachedFdo;
47
48 UNICODE_STRING DeviceDescription; // REG_SZ
49 UNICODE_STRING DeviceId; // REG_SZ
50 UNICODE_STRING InstanceId; // REG_SZ
51 UNICODE_STRING HardwareIds; // REG_MULTI_SZ
52 UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
53 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
54
55 #define SERENUM_TAG 'ereS'
56
57 /* Flags */
58 #define FLAG_ENUMERATION_DONE 0x01
59
60 /************************************ detect.c */
61
62 NTSTATUS
63 SerenumDetectPnpDevice(
64 IN PDEVICE_OBJECT DeviceObject,
65 IN PDEVICE_OBJECT LowerDevice);
66
67 NTSTATUS
68 SerenumDetectLegacyDevice(
69 IN PDEVICE_OBJECT DeviceObject,
70 IN PDEVICE_OBJECT LowerDevice);
71
72 /************************************ fdo.c */
73
74 DRIVER_ADD_DEVICE SerenumAddDevice;
75
76 NTSTATUS
77 SerenumFdoPnp(
78 IN PDEVICE_OBJECT DeviceObject,
79 IN PIRP Irp);
80
81 /************************************ misc.c */
82
83 NTSTATUS
84 SerenumInitMultiSzString(
85 OUT PUNICODE_STRING Destination,
86 ... /* list of PCSZ */);
87
88 NTSTATUS
89 ForwardIrpAndWait(
90 IN PDEVICE_OBJECT DeviceObject,
91 IN PIRP Irp);
92
93 NTSTATUS NTAPI
94 ForwardIrpToLowerDeviceAndForget(
95 IN PDEVICE_OBJECT DeviceObject,
96 IN PIRP Irp);
97
98 NTSTATUS NTAPI
99 ForwardIrpToAttachedFdoAndForget(
100 IN PDEVICE_OBJECT DeviceObject,
101 IN PIRP Irp);
102
103 NTSTATUS NTAPI
104 ForwardIrpAndForget(
105 IN PDEVICE_OBJECT DeviceObject,
106 IN PIRP Irp);
107
108 NTSTATUS
109 DuplicateUnicodeString(
110 IN ULONG Flags,
111 IN PCUNICODE_STRING SourceString,
112 OUT PUNICODE_STRING DestinationString);
113
114 /************************************ pdo.c */
115
116 NTSTATUS
117 SerenumPdoPnp(
118 IN PDEVICE_OBJECT DeviceObject,
119 IN PIRP Irp);
120
121 /************************************ serenum.c */
122
123 NTSTATUS NTAPI
124 DriverEntry(
125 IN PDRIVER_OBJECT DriverObject,
126 IN PUNICODE_STRING RegPath);