- Implement IPortTopology::NewRegistryKey, IPortWavePci::NewRegistryKey

- Implement PcRegisterPhysicalConnection, PcRegisterPhysicalConnectionFromExternal, PcRegisterPhysicalConnectionToExternal- Implement PcRequestNewPowerState

svn path=/trunk/; revision=38731
This commit is contained in:
Johannes Anderwald 2009-01-12 18:37:02 +00:00
parent ca7c2576bb
commit efbe4ec231
8 changed files with 132 additions and 83 deletions

View file

@ -168,7 +168,8 @@ PcAddAdapterDevice(
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))

View file

@ -0,0 +1,43 @@
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;
}

View file

@ -187,7 +187,15 @@ IPortTopology_fnNewRegistryKey(
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 =

View file

@ -247,7 +247,23 @@ IPortWavePci_fnNewRegistryKey(
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

View file

@ -11,6 +11,7 @@
<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>

View file

@ -36,3 +36,50 @@ PcRegisterAdapterPowerManagement(
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;
}

View file

@ -15,6 +15,7 @@
#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')
@ -86,6 +87,17 @@ typedef struct
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
{
@ -96,6 +108,7 @@ typedef struct
IResourceList* resources;
LIST_ENTRY SubDeviceList;
LIST_ENTRY PhysicalConnectionList;
} PCExtension;

View file

@ -12,29 +12,6 @@
#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
*/
@ -51,60 +28,3 @@ PcCompletePendingPropertyRequest(
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
*/