- Implement PcRegisterPhysicalConnection, PcRegisterPhysicalConnectionFromExternal, PcRegisterPhysicalConnectionToExternal- Implement PcRequestNewPowerState
svn path=/trunk/; revision=38731
RtlZeroMemory(portcls_ext, sizeof(PCExtension));
portcls_ext->PhysicalDeviceObject = PhysicalDeviceObject;
portcls_ext->StartDevice = StartDevice;
- InitializeListHead(&portcls_ext->SubDeviceList);
+ InitializeListHead(&portcls_ext->SubDeviceList);
+ InitializeListHead(&portcls_ext->PhysicalConnectionList);
status = KsAllocateDeviceHeader(&portcls_ext->KsDeviceHeader, 0, NULL);
if (!NT_SUCCESS(status))
--- /dev/null
+
+
+NTSTATUS
+NewIrpStreamPhysical(
+ OUT IIrpStreamPhysical ** OutIIrpStreamPhysical,
+ IN IUnknown *OuterUnknown)
+{
+ return STATUS_UNSUCCESSFUL;
+}
+
+
+/*
+ * @implemented
+ */
+
+NTSTATUS
+NTAPI
+PcNewIrpStreamPhysical(
+ OUT IIrpStreamPhysical ** OutIrpStreamPhysical,
+ IN IUnknown * OuterUnknown,
+ IN BOOLEAN Wait,
+ IN KSPIN_CONNECT *ConnectDetails,
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PDMA_ADAPTER DmaAdapter)
+{
+ NTSTATUS Status;
+ IIrpStreamPhysical * Irp;
+
+ Status = NewIrpStreamPhysical(&Irp, OuterUnknown);
+ if (!NT_SUCCESS(Status))
+ return Status;
+
+
+ Status = Irp->lpVtbl->Init(Irp, Wait, ConnectDetails, DeviceObject, DmaAdapter);
+ if (!NT_SUCCESS(Status))
+ {
+ Irp->lpVtbl->Release(Irp);
+ return Status;
+ }
+
+ *OutIrpStreamPhysical = Irp;
+ return Status;
+}
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
- return STATUS_UNSUCCESSFUL;
+ return PcNewRegistryKey(OutRegistryKey,
+ OuterUnknown,
+ RegistryKeyType,
+ DesiredAccess,
+ This->pDeviceObject,
+ NULL,//FIXME
+ ObjectAttributes,
+ CreateOptions,
+ Disposition);
}
static IPortTopologyVtbl vt_IPortTopology =
IN ULONG CreateOptions OPTIONAL,
OUT PULONG Disposition OPTIONAL)
{
- return STATUS_UNSUCCESSFUL;
+ IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
+
+ if (!This->bInitialized)
+ {
+ DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initiazed\n");
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ return PcNewRegistryKey(OutRegistryKey,
+ OuterUnknown,
+ RegistryKeyType,
+ DesiredAccess,
+ This->pDeviceObject,
+ NULL,//FIXME
+ ObjectAttributes,
+ CreateOptions,
+ Disposition);
}
NTSTATUS
<library>rtl</library>
<library>hal</library>
<file>api.c</file>
+ <file>connection.c</file>
<file>dll.c</file>
<file>dma_slave.c</file>
<file>drm_port.c</file>
DeviceExt->AdapterPowerManagement = pPower;
return STATUS_SUCCESS;
}
+
+
+static
+VOID
+NTAPI
+PwrCompletionCallback(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN UCHAR MinorFunction,
+ IN POWER_STATE PowerState,
+ IN PVOID Context,
+ IN PIO_STATUS_BLOCK IoStatus)
+{
+ KeSetEvent((PRKEVENT)Context, IO_NO_INCREMENT, FALSE);
+}
+
+/*
+ * @implemented
+ */
+NTSTATUS NTAPI
+PcRequestNewPowerState(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN DEVICE_POWER_STATE RequestedNewState)
+{
+ KEVENT Event;
+ NTSTATUS Status;
+ POWER_STATE PowerState;
+ PCExtension* DeviceExt;
+
+ if (!DeviceObject || !RequestedNewState)
+ return STATUS_INVALID_PARAMETER;
+
+ DeviceExt = (PCExtension*)DeviceObject->DeviceExtension;
+ KeInitializeEvent(&Event, SynchronizationEvent, FALSE);
+
+ PowerState.DeviceState = RequestedNewState;
+ PowerState.SystemState = PowerSystemUnspecified;
+
+ Status = PoRequestPowerIrp(DeviceExt->PhysicalDeviceObject, IRP_MN_SET_POWER, PowerState, PwrCompletionCallback, (PVOID)&Event, NULL);
+ if (NT_SUCCESS(Status))
+ {
+ KeWaitForSingleObject((PVOID)&Event, Executive, KernelMode, FALSE, NULL);
+ }
+
+
+ return Status;
+}
+
#include <dmusicks.h>
#include "interfaces.h"
+#include <ks.h>
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
#define TAG_PORTCLASS TAG('P', 'C', 'L', 'S')
KSOBJECT_HEADER ObjectHeader;
}SUBDEVICE_ENTRY;
+typedef struct
+{
+ LIST_ENTRY Entry;
+ ISubdevice * FromSubDevice;
+ LPWSTR FromUnicodeString;
+ ULONG FromPin;
+ ISubdevice * ToSubDevice;
+ LPWSTR ToUnicodeString;
+ ULONG ToPin;
+}PHYSICAL_CONNECTION;
+
typedef struct
{
IResourceList* resources;
LIST_ENTRY SubDeviceList;
+ LIST_ENTRY PhysicalConnectionList;
} PCExtension;
#include "private.h"
#include <portcls.h>
-/*
- Factory Stubs
-*/
-
-
-
-/* ===============================================================
- Power Management
-*/
-
-/*
- * @unimplemented
- */
-NTSTATUS NTAPI
-PcRequestNewPowerState(
- IN PDEVICE_OBJECT pDeviceObject,
- IN DEVICE_POWER_STATE RequestedNewState)
-{
- UNIMPLEMENTED;
- return STATUS_UNSUCCESSFUL;
-}
-
-
/* ===============================================================
Properties
*/
return STATUS_UNSUCCESSFUL;
}
-/* ===============================================================
- Physical Connections
-*/
-
-/*
- * @unimplemented
- */
-NTSTATUS NTAPI
-PcRegisterPhysicalConnection(
- IN PDEVICE_OBJECT DeviceObject,
- IN PUNKNOWN FromUnknown,
- IN ULONG FromPin,
- IN PUNKNOWN ToUnknown,
- IN ULONG ToPin)
-{
- UNIMPLEMENTED;
- return STATUS_UNSUCCESSFUL;
-}
-
-/*
- * @unimplemented
- */
-NTSTATUS NTAPI
-PcRegisterPhysicalConnectionFromExternal(
- IN PDEVICE_OBJECT DeviceObject,
- IN PUNICODE_STRING FromString,
- IN ULONG FromPin,
- IN PUNKNOWN ToUnknown,
- IN ULONG ToPin)
-{
- UNIMPLEMENTED;
- return STATUS_UNSUCCESSFUL;
-}
-
-/*
- * @unimplemented
- */
-NTSTATUS NTAPI
-PcRegisterPhysicalConnectionToExternal(
- IN PDEVICE_OBJECT DeviceObject,
- IN PUNKNOWN FromUnknown,
- IN ULONG FromPin,
- IN PUNICODE_STRING ToString,
- IN ULONG ToPin)
-{
- UNIMPLEMENTED;
- return STATUS_UNSUCCESSFUL;
-}
-
-
-/* ===============================================================
- Misc
-*/
-
-/*
- * @unimplemented
- */