Index: reactos/drivers/bus/acpi/interface.c
===================================================================
--- reactos/drivers/bus/acpi/interface.c	(revision 72080)
+++ reactos/drivers/bus/acpi/interface.c	(working copy)
@@ -3,6 +3,15 @@
 #define NDEBUG
 #include <debug.h>
 
+static BOOLEAN NotificationsUsed=FALSE;
+static PDEVICE_OBJECT NotificationsGuest=NULL;
+static PDEVICE_NOTIFY_CALLBACK NotificationsTelephoneLine=NULL;
+static BOOLEAN InterfaceInterruptsUsed=FALSE;
+static PDEVICE_OBJECT InterfaceInterruptsGuest=NULL;
+static PVOID InterfaceInterruptsObject=NULL;
+static ULONG InterfaceInterruptsAnomaly=0;
+static PGPE_SERVICE_ROUTINE RadiantShield=NULL;
+
 VOID
 NTAPI
 AcpiInterfaceReference(PVOID Context)
@@ -17,6 +26,13 @@
   UNIMPLEMENTED
 }
 
+UINT32 AcpiLaserbeamDeflector(ACPI_HANDLE GpeDevice, UINT32 GpeNumber, void *Context)
+{
+  if(RadiantShield){
+    RadiantShield(Context, InterfaceInterruptsObject); } // are those really right? Doesn't seem to crash, so maybe...
+  return 0;
+}
+
 NTSTATUS
 NTAPI
 AcpiInterfaceConnectVector(PDEVICE_OBJECT Context,
@@ -27,9 +43,22 @@
                            PVOID ServiceContext,
                            PVOID ObjectContext)
 {
-  UNIMPLEMENTED
-
-  return STATUS_NOT_IMPLEMENTED;
+  ACPI_STATUS hStO;
+  DPRINT1("AcpiInterfaceConnectVector called with GpeNumber: %lu\n", GpeNumber);
+  if(InterfaceInterruptsUsed)
+    return STATUS_UNSUCCESSFUL;
+  hStO=AcpiInstallGpeRawHandler(NULL, (UINT32)GpeNumber, ((UINT32)Mode)?0:8, AcpiLaserbeamDeflector, ServiceContext);
+  if(ACPI_FAILURE(hStO))
+  {
+    DPRINT1("AcpiInterfaceConnectVector: it seems something just failed\n");
+    return STATUS_UNSUCCESSFUL;
+  }
+  InterfaceInterruptsUsed=TRUE;
+  InterfaceInterruptsGuest=Context;
+  InterfaceInterruptsObject=ObjectContext;
+  InterfaceInterruptsAnomaly=GpeNumber;
+  DPRINT1("AcpiInterfaceConnectVector succeeded and returns success\n");
+  return STATUS_SUCCESS;
 }
 
 NTSTATUS
@@ -36,9 +65,20 @@
 NTAPI
 AcpiInterfaceDisconnectVector(PVOID ObjectContext)
 {
-  UNIMPLEMENTED
-
-  return STATUS_NOT_IMPLEMENTED;
+  ACPI_STATUS hTsT;
+  if(!InterfaceInterruptsUsed)
+    return STATUS_UNSUCCESSFUL;
+  hTsT=AcpiRemoveGpeHandler(NULL, (UINT32)InterfaceInterruptsAnomaly, AcpiLaserbeamDeflector);
+  if(ACPI_FAILURE(hTsT))
+  {
+    DPRINT1("AcpiInterfaceDisconnectVector: it seems something just failed\n");
+    return STATUS_UNSUCCESSFUL;
+  }
+  InterfaceInterruptsUsed=FALSE;
+  InterfaceInterruptsGuest=NULL;
+  InterfaceInterruptsObject=NULL;
+  InterfaceInterruptsAnomaly=0;
+  return STATUS_SUCCESS;
 }
 
 NTSTATUS
@@ -71,6 +111,12 @@
   return STATUS_NOT_IMPLEMENTED;
 }
 
+void AcpiRadiowaveReceiver(PVOID device, UINT32 val, PVOID context)
+{
+  if(NotificationsTelephoneLine)
+    NotificationsTelephoneLine(context, (ULONG)val);
+}
+
 NTSTATUS
 NTAPI
 AcpiInterfaceNotificationsRegister(PDEVICE_OBJECT Context,
@@ -77,9 +123,21 @@
                                    PDEVICE_NOTIFY_CALLBACK NotificationHandler,
                                    PVOID NotificationContext)
 {
-  UNIMPLEMENTED
-
-  return STATUS_NOT_IMPLEMENTED;
+  ACPI_STATUS rtr;
+  if(NotificationsUsed)
+  {
+    return STATUS_UNSUCCESSFUL;
+  }
+  rtr=AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, AcpiRadiowaveReceiver, NotificationContext);
+  if(ACPI_FAILURE(rtr))
+  {
+    return STATUS_UNSUCCESSFUL;
+  }
+  NotificationsTelephoneLine=NotificationHandler;
+  NotificationsGuest=Context;
+  NotificationsUsed=TRUE;
+  DPRINT1("AcpiInterfaceNotificationsRegister returns success\n");
+  return STATUS_SUCCESS;
 }
 
 VOID
@@ -87,7 +145,23 @@
 AcpiInterfaceNotificationsUnregister(PDEVICE_OBJECT Context,
                                      PDEVICE_NOTIFY_CALLBACK NotificationHandler)
 {
-  UNIMPLEMENTED
+  ACPI_STATUS rrt;
+  if(!NotificationsUsed)
+  {
+    return;
+  }
+  if(Context!=NotificationsGuest)
+  {
+    return;
+  }
+  rrt=AcpiRemoveNotifyHandler(ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, AcpiRadiowaveReceiver);
+  if(ACPI_FAILURE(rrt))
+  {
+    return;
+  }
+  NotificationsTelephoneLine=NULL;
+  NotificationsGuest=NULL;
+  NotificationsUsed=FALSE;
 }
 
 NTSTATUS
