Synchronize with trunk revision 59636 (just before Alex's CreateProcess revamp).
[reactos.git] / drivers / bus / acpi / interface.c
1 #include <ntddk.h>
2
3 #include <acpi.h>
4
5 #include <acpisys.h>
6 #include <acpi_bus.h>
7 #include <acpi_drivers.h>
8
9 #include <wdmguid.h>
10 #define NDEBUG
11 #include <debug.h>
12
13 VOID
14 NTAPI
15 AcpiInterfaceReference(PVOID Context)
16 {
17 UNIMPLEMENTED
18 }
19
20 VOID
21 NTAPI
22 AcpiInterfaceDereference(PVOID Context)
23 {
24 UNIMPLEMENTED
25 }
26
27 NTSTATUS
28 NTAPI
29 AcpiInterfaceConnectVector(PDEVICE_OBJECT Context,
30 ULONG GpeNumber,
31 KINTERRUPT_MODE Mode,
32 BOOLEAN Shareable,
33 PGPE_SERVICE_ROUTINE ServiceRoutine,
34 PVOID ServiceContext,
35 PVOID ObjectContext)
36 {
37 UNIMPLEMENTED
38
39 return STATUS_NOT_IMPLEMENTED;
40 }
41
42 NTSTATUS
43 NTAPI
44 AcpiInterfaceDisconnectVector(PVOID ObjectContext)
45 {
46 UNIMPLEMENTED
47
48 return STATUS_NOT_IMPLEMENTED;
49 }
50
51 NTSTATUS
52 NTAPI
53 AcpiInterfaceEnableEvent(PDEVICE_OBJECT Context,
54 PVOID ObjectContext)
55 {
56 UNIMPLEMENTED
57
58 return STATUS_NOT_IMPLEMENTED;
59 }
60
61 NTSTATUS
62 NTAPI
63 AcpiInterfaceDisableEvent(PDEVICE_OBJECT Context,
64 PVOID ObjectContext)
65 {
66 UNIMPLEMENTED
67
68 return STATUS_NOT_IMPLEMENTED;
69 }
70
71 NTSTATUS
72 NTAPI
73 AcpiInterfaceClearStatus(PDEVICE_OBJECT Context,
74 PVOID ObjectContext)
75 {
76 UNIMPLEMENTED
77
78 return STATUS_NOT_IMPLEMENTED;
79 }
80
81 NTSTATUS
82 NTAPI
83 AcpiInterfaceNotificationsRegister(PDEVICE_OBJECT Context,
84 PDEVICE_NOTIFY_CALLBACK NotificationHandler,
85 PVOID NotificationContext)
86 {
87 UNIMPLEMENTED
88
89 return STATUS_NOT_IMPLEMENTED;
90 }
91
92 VOID
93 NTAPI
94 AcpiInterfaceNotificationsUnregister(PDEVICE_OBJECT Context,
95 PDEVICE_NOTIFY_CALLBACK NotificationHandler)
96 {
97 UNIMPLEMENTED
98 }
99
100 NTSTATUS
101 Bus_PDO_QueryInterface(PPDO_DEVICE_DATA DeviceData,
102 PIRP Irp)
103 {
104 PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
105 PACPI_INTERFACE_STANDARD AcpiInterface;
106
107 if (IrpSp->Parameters.QueryInterface.Version != 1)
108 {
109 DPRINT1("Invalid version number: %d\n",
110 IrpSp->Parameters.QueryInterface.Version);
111 return STATUS_INVALID_PARAMETER;
112 }
113
114 if (RtlCompareMemory(IrpSp->Parameters.QueryInterface.InterfaceType,
115 &GUID_ACPI_INTERFACE_STANDARD, sizeof(GUID)) == sizeof(GUID))
116 {
117 DPRINT("GUID_ACPI_INTERFACE_STANDARD\n");
118
119 if (IrpSp->Parameters.QueryInterface.Size < sizeof(ACPI_INTERFACE_STANDARD))
120 {
121 DPRINT1("Buffer too small! (%d)\n", IrpSp->Parameters.QueryInterface.Size);
122 return STATUS_BUFFER_TOO_SMALL;
123 }
124
125 AcpiInterface = (PACPI_INTERFACE_STANDARD)IrpSp->Parameters.QueryInterface.Interface;
126
127 AcpiInterface->InterfaceReference = AcpiInterfaceReference;
128 AcpiInterface->InterfaceDereference = AcpiInterfaceDereference;
129 AcpiInterface->GpeConnectVector = AcpiInterfaceConnectVector;
130 AcpiInterface->GpeDisconnectVector = AcpiInterfaceDisconnectVector;
131 AcpiInterface->GpeEnableEvent = AcpiInterfaceEnableEvent;
132 AcpiInterface->GpeDisableEvent = AcpiInterfaceDisableEvent;
133 AcpiInterface->GpeClearStatus = AcpiInterfaceClearStatus;
134 AcpiInterface->RegisterForDeviceNotifications = AcpiInterfaceNotificationsRegister;
135 AcpiInterface->UnregisterForDeviceNotifications = AcpiInterfaceNotificationsUnregister;
136
137 return STATUS_SUCCESS;
138 }
139 else
140 {
141 DPRINT1("Invalid GUID\n");
142 return STATUS_NOT_SUPPORTED;
143 }
144 }