Sync with trunk rev.61910 to get latest improvements and bugfixes.
[reactos.git] / drivers / serial / serenum / serenum.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Serial enumerator driver
4 * FILE: drivers/bus/serenum/serenum.c
5 * PURPOSE: Serial enumerator driver entry point
6 *
7 * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
8 */
9
10 #define INITGUID
11 #include "serenum.h"
12
13 static DRIVER_DISPATCH SerenumPnp;
14 static DRIVER_DISPATCH IrpStub;
15 static DRIVER_UNLOAD DriverUnload;
16 DRIVER_INITIALIZE DriverEntry;
17
18 static NTSTATUS NTAPI
19 SerenumPnp(
20 IN PDEVICE_OBJECT DeviceObject,
21 IN PIRP Irp)
22 {
23 if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
24 return SerenumFdoPnp(DeviceObject, Irp);
25 else
26 return SerenumPdoPnp(DeviceObject, Irp);
27 }
28
29 static VOID NTAPI
30 DriverUnload(IN PDRIVER_OBJECT DriverObject)
31 {
32 // nothing to do here yet
33 }
34
35 static NTSTATUS NTAPI
36 IrpStub(
37 IN PDEVICE_OBJECT DeviceObject,
38 IN PIRP Irp)
39 {
40 if (((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
41 {
42 /* Forward IRPs to lower device */
43 return ForwardIrpToLowerDeviceAndForget(DeviceObject, Irp);
44 }
45 else
46 {
47 /* Forward IRPs to attached FDO */
48 return ForwardIrpToAttachedFdoAndForget(DeviceObject, Irp);
49 }
50 }
51
52 /*
53 * Standard DriverEntry method.
54 */
55 NTSTATUS NTAPI
56 DriverEntry(
57 IN PDRIVER_OBJECT DriverObject,
58 IN PUNICODE_STRING RegPath)
59 {
60 ULONG i;
61
62 DriverObject->DriverUnload = DriverUnload;
63 DriverObject->DriverExtension->AddDevice = SerenumAddDevice;
64
65 for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
66 DriverObject->MajorFunction[i] = IrpStub;
67
68 //DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = SerialQueryInformation;
69 DriverObject->MajorFunction[IRP_MJ_PNP] = SerenumPnp;
70 //DriverObject->MajorFunction[IRP_MJ_POWER] = SerialPower;
71
72 return STATUS_SUCCESS;
73 }