From fc1acf8469e3a6b6e4b5528eb4dfa8f12b55c1d0 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 23 Mar 2010 03:05:57 +0000 Subject: [PATCH 1/1] [ACPI] - Add stubs for ACPI_INTERFACE_STANDARD and write all of the glue code for IRP_MN_QUERY_INTERFACE svn path=/trunk/; revision=46353 --- reactos/drivers/bus/acpi/acpi.rbuild | 1 + reactos/drivers/bus/acpi/buspdo.c | 6 ++ reactos/drivers/bus/acpi/interface.c | 138 +++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 reactos/drivers/bus/acpi/interface.c diff --git a/reactos/drivers/bus/acpi/acpi.rbuild b/reactos/drivers/bus/acpi/acpi.rbuild index cbc124a26f5..4b9ec8674a5 100644 --- a/reactos/drivers/bus/acpi/acpi.rbuild +++ b/reactos/drivers/bus/acpi/acpi.rbuild @@ -26,6 +26,7 @@ osl.c acpienum.c + interface.c pnp.c power.c buspdo.c diff --git a/reactos/drivers/bus/acpi/buspdo.c b/reactos/drivers/bus/acpi/buspdo.c index 4a9498e7ad4..ed6439d60a5 100644 --- a/reactos/drivers/bus/acpi/buspdo.c +++ b/reactos/drivers/bus/acpi/buspdo.c @@ -176,6 +176,12 @@ Bus_PDO_PnP ( break; + case IRP_MN_QUERY_INTERFACE: + + status = Bus_PDO_QueryInterface(DeviceData, Irp); + + break; + case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: diff --git a/reactos/drivers/bus/acpi/interface.c b/reactos/drivers/bus/acpi/interface.c new file mode 100644 index 00000000000..59717056484 --- /dev/null +++ b/reactos/drivers/bus/acpi/interface.c @@ -0,0 +1,138 @@ +#include + +#include + +#include +#include +#include + +#include +#define NDEBUG +#include + +VOID +NTAPI +AcpiInterfaceReference(PVOID Context) +{ + UNIMPLEMENTED +} + +VOID +NTAPI +AcpiInterfaceDereference(PVOID Context) +{ + UNIMPLEMENTED +} + +NTSTATUS +AcpiInterfaceConnectVector(PDEVICE_OBJECT Context, + ULONG GpeNumber, + KINTERRUPT_MODE Mode, + BOOLEAN Shareable, + PGPE_SERVICE_ROUTINE ServiceRoutine, + PVOID ServiceContext, + PVOID *ObjectContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +AcpiInterfaceDisconnectVector(PDEVICE_OBJECT Context, + PVOID ObjectContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +AcpiInterfaceEnableEvent(PDEVICE_OBJECT Context, + PVOID ObjectContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +AcpiInterfaceDisableEvent(PDEVICE_OBJECT Context, + PVOID ObjectContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +AcpiInterfaceClearStatus(PDEVICE_OBJECT Context, + PVOID ObjectContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +AcpiInterfaceNotificationsRegister(PDEVICE_OBJECT Context, + PDEVICE_NOTIFY_CALLBACK NotificationHandler, + PVOID NotificationContext) +{ + UNIMPLEMENTED + + return STATUS_NOT_IMPLEMENTED; +} + +VOID +AcpiInterfaceNotificationsUnregister(PDEVICE_OBJECT Context, + PDEVICE_NOTIFY_CALLBACK NotificationHandler) +{ + UNIMPLEMENTED +} + +NTSTATUS +Bus_PDO_QueryInterface(PPDO_DEVICE_DATA DeviceData, + PIRP Irp) +{ + PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + PACPI_INTERFACE_STANDARD AcpiInterface; + + if (IrpSp->Parameters.QueryInterface.Version != 1) + { + DPRINT1("Invalid version number: %d\n", + IrpSp->Parameters.QueryInterface.Version); + return STATUS_INVALID_PARAMETER; + } + + if (RtlCompareMemory(IrpSp->Parameters.QueryInterface.InterfaceType, + &GUID_ACPI_INTERFACE_STANDARD, sizeof(GUID)) == sizeof(GUID)) + { + DPRINT("GUID_ACPI_INTERFACE_STANDARD\n"); + + if (IrpSp->Parameters.QueryInterface.Size < sizeof(ACPI_INTERFACE_STANDARD)) + { + DPRINT1("Buffer too small! (%d)\n", IrpSp->Parameters.QueryInterface.Size); + return STATUS_BUFFER_TOO_SMALL; + } + + AcpiInterface = (PACPI_INTERFACE_STANDARD)IrpSp->Parameters.QueryInterface.Interface; + + AcpiInterface->InterfaceReference = AcpiInterfaceReference; + AcpiInterface->InterfaceDereference = AcpiInterfaceDereference; + AcpiInterface->GpeConnectVector = AcpiInterfaceConnectVector; + AcpiInterface->GpeDisconnectVector = AcpiInterfaceDisconnectVector; + AcpiInterface->GpeEnableEvent = AcpiInterfaceEnableEvent; + AcpiInterface->GpeDisableEvent = AcpiInterfaceDisableEvent; + AcpiInterface->GpeClearStatus = AcpiInterfaceClearStatus; + AcpiInterface->RegisterForDeviceNotifications = AcpiInterfaceNotificationsRegister; + AcpiInterface->UnregisterForDeviceNotifications = AcpiInterfaceNotificationsUnregister; + + return STATUS_SUCCESS; + } + else + { + DPRINT1("Invalid GUID\n"); + return STATUS_INVALID_PARAMETER; + } +} -- 2.17.1