[NTOS:MM] Implement and use MiAcquirePfnLockAtDpcLevel/MiReleasePfnLockFromDpcLevel.
[reactos.git] / 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 #ifndef _SERENUM_PCH_
11 #define _SERENUM_PCH_
12
13 #include <ntifs.h>
14 #include <ntddser.h>
15
16 typedef enum
17 {
18 dsStopped,
19 dsStarted,
20 dsPaused,
21 dsRemoved,
22 dsSurpriseRemoved
23 } SERENUM_DEVICE_STATE;
24
25 typedef struct _COMMON_DEVICE_EXTENSION
26 {
27 BOOLEAN IsFDO;
28 SERENUM_DEVICE_STATE PnpState;
29 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
30
31 typedef struct _FDO_DEVICE_EXTENSION
32 {
33 COMMON_DEVICE_EXTENSION Common;
34
35 PDEVICE_OBJECT LowerDevice;
36 PDEVICE_OBJECT Pdo;
37 IO_REMOVE_LOCK RemoveLock;
38
39 UNICODE_STRING SerenumInterfaceName;
40
41 PDEVICE_OBJECT AttachedPdo;
42 ULONG Flags;
43 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
44
45 typedef struct _PDO_DEVICE_EXTENSION
46 {
47 COMMON_DEVICE_EXTENSION Common;
48
49 PDEVICE_OBJECT AttachedFdo;
50
51 UNICODE_STRING DeviceDescription; // REG_SZ
52 UNICODE_STRING DeviceId; // REG_SZ
53 UNICODE_STRING InstanceId; // REG_SZ
54 UNICODE_STRING HardwareIds; // REG_MULTI_SZ
55 UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
56 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
57
58 #define SERENUM_TAG 'ereS'
59
60 /* Flags */
61 #define FLAG_ENUMERATION_DONE 0x01
62
63 /************************************ detect.c */
64
65 NTSTATUS
66 SerenumDetectPnpDevice(
67 IN PDEVICE_OBJECT DeviceObject,
68 IN PDEVICE_OBJECT LowerDevice);
69
70 NTSTATUS
71 SerenumDetectLegacyDevice(
72 IN PDEVICE_OBJECT DeviceObject,
73 IN PDEVICE_OBJECT LowerDevice);
74
75 /************************************ fdo.c */
76
77 DRIVER_ADD_DEVICE SerenumAddDevice;
78
79 NTSTATUS
80 SerenumFdoPnp(
81 IN PDEVICE_OBJECT DeviceObject,
82 IN PIRP Irp);
83
84 /************************************ misc.c */
85
86 NTSTATUS
87 SerenumInitMultiSzString(
88 OUT PUNICODE_STRING Destination,
89 ... /* list of PCSZ */);
90
91 NTSTATUS
92 ForwardIrpAndWait(
93 IN PDEVICE_OBJECT DeviceObject,
94 IN PIRP Irp);
95
96 NTSTATUS NTAPI
97 ForwardIrpToLowerDeviceAndForget(
98 IN PDEVICE_OBJECT DeviceObject,
99 IN PIRP Irp);
100
101 NTSTATUS NTAPI
102 ForwardIrpToAttachedFdoAndForget(
103 IN PDEVICE_OBJECT DeviceObject,
104 IN PIRP Irp);
105
106 NTSTATUS NTAPI
107 ForwardIrpAndForget(
108 IN PDEVICE_OBJECT DeviceObject,
109 IN PIRP Irp);
110
111 NTSTATUS
112 DuplicateUnicodeString(
113 IN ULONG Flags,
114 IN PCUNICODE_STRING SourceString,
115 OUT PUNICODE_STRING DestinationString);
116
117 /************************************ pdo.c */
118
119 NTSTATUS
120 SerenumPdoPnp(
121 IN PDEVICE_OBJECT DeviceObject,
122 IN PIRP Irp);
123
124 /************************************ serenum.c */
125
126 NTSTATUS NTAPI
127 DriverEntry(
128 IN PDRIVER_OBJECT DriverObject,
129 IN PUNICODE_STRING RegPath);
130
131 #endif /* _SERENUM_PCH_ */