[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 07/10] Refactor target.c
From: Owen Smith <owen.smith@xxxxxxxxxx> * Adds property accessors * Moves PNP SRB handler to adapter.c * Streamlines header Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/adapter.c | 27 +++- src/xenvbd/frontend.c | 1 + src/xenvbd/granter.c | 1 + src/xenvbd/target.c | 338 +++++++++++++++++++++----------------------------- src/xenvbd/target.h | 102 +++++++-------- 5 files changed, 205 insertions(+), 264 deletions(-) diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c index b0a7365..659dd22 100644 --- a/src/xenvbd/adapter.c +++ b/src/xenvbd/adapter.c @@ -1759,13 +1759,28 @@ __AdapterSrbPnp( IN PSCSI_PNP_REQUEST_BLOCK Srb ) { - if (!(Srb->SrbPnPFlags & SRB_PNP_FLAGS_ADAPTER_REQUEST)) { - PXENVBD_TARGET Target; + PXENVBD_TARGET Target; - Target = AdapterGetTarget(Adapter, Srb->TargetId); - if (Target) { - TargetSrbPnp(Target, Srb); - } + if (Srb->SrbPnPFlags & SRB_PNP_FLAGS_ADAPTER_REQUEST) + return; + + Target = AdapterGetTarget(Adapter, Srb->TargetId); + if (Target == NULL) + return; + + switch (Srb->PnPAction) { + case StorQueryCapabilities: { + PSTOR_DEVICE_CAPABILITIES Caps = Srb->DataBuffer; + + Caps->Removable = TargetGetRemovable(Target); + Caps->EjectSupported = TargetGetRemovable(Target); + Caps->SurpriseRemovalOK = TargetGetSurpriseRemovable(Target); + Caps->UniqueID = 1; + + } break; + + default: + break; } } diff --git a/src/xenvbd/frontend.c b/src/xenvbd/frontend.c index 79b8f8d..d56fc84 100644 --- a/src/xenvbd/frontend.c +++ b/src/xenvbd/frontend.c @@ -45,6 +45,7 @@ #include "thread.h" #include <store_interface.h> #include <suspend_interface.h> +#include <ntstrsafe.h> #include <stdlib.h> diff --git a/src/xenvbd/granter.c b/src/xenvbd/granter.c index e2b655e..ff7a575 100644 --- a/src/xenvbd/granter.c +++ b/src/xenvbd/granter.c @@ -36,6 +36,7 @@ #include "debug.h" #include "thread.h" #include <gnttab_interface.h> +#include <ntstrsafe.h> struct _XENVBD_GRANTER { PXENVBD_FRONTEND Frontend; diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c index dcd87c9..4e59e80 100644 --- a/src/xenvbd/target.c +++ b/src/xenvbd/target.c @@ -403,36 +403,6 @@ __TargetRestoreDevicePnpState( } } -//============================================================================= -// Query Methods -FORCEINLINE ULONG -TargetGetTargetId( - __in PXENVBD_TARGET Target - ) -{ - ASSERT3P(Target, !=, NULL); - return FrontendGetTargetId(Target->Frontend); -} - -ULONG -TargetGetDeviceId( - __in PXENVBD_TARGET Target - ) -{ - ASSERT3P(Target, !=, NULL); - return FrontendGetDeviceId(Target->Frontend); -} - -__checkReturn -FORCEINLINE PDEVICE_OBJECT -TargetGetDeviceObject( - __in PXENVBD_TARGET Target - ) -{ - ASSERT3P(Target, !=, NULL); - return Target->DeviceObject; -} - FORCEINLINE VOID TargetSetDeviceObject( __in PXENVBD_TARGET Target, @@ -461,15 +431,6 @@ TargetIsPaused( return Paused; } -__checkReturn -FORCEINLINE PXENVBD_ADAPTER -TargetGetAdapter( - __in PXENVBD_TARGET Target - ) -{ - return Target->Adapter; -} - static FORCEINLINE ULONG TargetSectorSize( __in PXENVBD_TARGET Target @@ -2091,44 +2052,55 @@ TargetShutdown( } VOID -TargetSrbPnp( - __in PXENVBD_TARGET Target, - __in PSCSI_PNP_REQUEST_BLOCK Srb +TargetIssueDeviceEject( + IN PXENVBD_TARGET Target, + IN const CHAR *Reason ) { - switch (Srb->PnPAction) { - case StorQueryCapabilities: { - PSTOR_DEVICE_CAPABILITIES DeviceCaps = Srb->DataBuffer; - PXENVBD_CAPS Caps = FrontendGetCaps(Target->Frontend); - - if (Caps->Removable) - DeviceCaps->Removable = 1; - if (Caps->Removable) - DeviceCaps->EjectSupported = 1; - if (Caps->SurpriseRemovable) - DeviceCaps->SurpriseRemovalOK = 1; - - DeviceCaps->UniqueID = 1; + KIRQL Irql; + BOOLEAN DoEject = FALSE; - } break; + KeAcquireSpinLock(&Target->Lock, &Irql); + if (Target->DeviceObject) { + DoEject = TRUE; + Target->EjectRequested = TRUE; + } else { + Target->EjectPending = TRUE; + } + KeReleaseSpinLock(&Target->Lock, Irql); - default: - break; + Verbose("Target[%d] : Ejecting (%s - %s)\n", + TargetGetTargetId(Target), + DoEject ? "Now" : "Next PnP IRP", + Reason); + if (!Target->WrittenEjected) { + Target->WrittenEjected = TRUE; + FrontendStoreWriteFrontend(Target->Frontend, + "ejected", + "1"); + } + if (DoEject) { + Verbose("Target[%d] : IoRequestDeviceEject(0x%p)\n", + TargetGetTargetId(Target), + Target->DeviceObject); + IoRequestDeviceEject(Target->DeviceObject); + } else { + Verbose("Target[%d] : Triggering BusChangeDetected to detect device\n", + TargetGetTargetId(Target)); + AdapterTargetListChanged(TargetGetAdapter(Target)); } } -//============================================================================= -// PnP Handler static FORCEINLINE VOID __TargetDeviceUsageNotification( - __in PXENVBD_TARGET Target, - __in PIRP Irp + IN PXENVBD_TARGET Target, + IN PIRP Irp ) { - PIO_STACK_LOCATION StackLocation; - BOOLEAN Value; + PIO_STACK_LOCATION StackLocation; + BOOLEAN Value; DEVICE_USAGE_NOTIFICATION_TYPE Type; - PXENVBD_CAPS Caps = FrontendGetCaps(Target->Frontend); + PXENVBD_CAPS Caps = FrontendGetCaps(Target->Frontend); StackLocation = IoGetCurrentIrpStackLocation(Irp); Value = StackLocation->Parameters.UsageNotification.InPath; @@ -2161,7 +2133,7 @@ __TargetDeviceUsageNotification( static FORCEINLINE VOID __TargetCheckEjectPending( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { KIRQL Irql; @@ -2176,14 +2148,16 @@ __TargetCheckEjectPending( KeReleaseSpinLock(&Target->Lock, Irql); if (EjectPending) { - Verbose("Target[%d] : IoRequestDeviceEject(0x%p)\n", TargetGetTargetId(Target), Target->DeviceObject); + Verbose("Target[%d] : IoRequestDeviceEject(0x%p)\n", + TargetGetTargetId(Target), + Target->DeviceObject); IoRequestDeviceEject(Target->DeviceObject); } } static FORCEINLINE VOID __TargetCheckEjectFailed( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { KIRQL Irql; @@ -2197,14 +2171,17 @@ __TargetCheckEjectFailed( KeReleaseSpinLock(&Target->Lock, Irql); if (EjectFailed) { - Error("Target[%d] : Unplug failed due to open handle(s)!\n", TargetGetTargetId(Target)); - FrontendStoreWriteFrontend(Target->Frontend, "error", "Unplug failed due to open handle(s)!"); + Error("Target[%d] : Unplug failed due to open handle(s)!\n", + TargetGetTargetId(Target)); + FrontendStoreWriteFrontend(Target->Frontend, + "error", + "Unplug failed due to open handle(s)!"); } } static FORCEINLINE VOID __TargetRemoveDevice( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { TargetD0ToD3(Target); @@ -2212,21 +2189,20 @@ __TargetRemoveDevice( switch (TargetGetDevicePnpState(Target)) { case SurpriseRemovePending: TargetSetMissing(Target, "Surprise Remove"); - TargetSetDevicePnpState(Target, Deleted); - AdapterTargetListChanged(TargetGetAdapter(Target)); break; default: TargetSetMissing(Target, "Removed"); - TargetSetDevicePnpState(Target, Deleted); - AdapterTargetListChanged(TargetGetAdapter(Target)); break; } + + TargetSetDevicePnpState(Target, Deleted); + AdapterTargetListChanged(TargetGetAdapter(Target)); } static FORCEINLINE VOID __TargetEject( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { TargetSetMissing(Target, "Ejected"); @@ -2234,19 +2210,20 @@ __TargetEject( AdapterTargetListChanged(TargetGetAdapter(Target)); } -__checkReturn NTSTATUS TargetDispatchPnp( - __in PXENVBD_TARGET Target, - __in PDEVICE_OBJECT DeviceObject, - __in PIRP Irp + IN PXENVBD_TARGET Target, + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp ) { - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); + PIO_STACK_LOCATION StackLocation; + + StackLocation = IoGetCurrentIrpStackLocation(Irp); __TargetCheckEjectPending(Target); - switch (Stack->MinorFunction) { + switch (StackLocation->MinorFunction) { case IRP_MN_START_DEVICE: (VOID) TargetD3ToD0(Target); TargetSetDevicePnpState(Target, Started); @@ -2296,66 +2273,29 @@ TargetDispatchPnp( return DriverDispatchPnp(DeviceObject, Irp); } -__drv_maxIRQL(DISPATCH_LEVEL) -VOID -TargetIssueDeviceEject( - __in PXENVBD_TARGET Target, - __in __nullterminated const CHAR* Reason - ) -{ - KIRQL Irql; - BOOLEAN DoEject = FALSE; - - KeAcquireSpinLock(&Target->Lock, &Irql); - if (Target->DeviceObject) { - DoEject = TRUE; - Target->EjectRequested = TRUE; - } else { - Target->EjectPending = TRUE; - } - KeReleaseSpinLock(&Target->Lock, Irql); - - Verbose("Target[%d] : Ejecting (%s - %s)\n", TargetGetTargetId(Target), DoEject ? "Now" : "Next PnP IRP", Reason); - if (!Target->WrittenEjected) { - Target->WrittenEjected = TRUE; - FrontendStoreWriteFrontend(Target->Frontend, "ejected", "1"); - } - if (DoEject) { - Verbose("Target[%d] : IoRequestDeviceEject(0x%p)\n", TargetGetTargetId(Target), Target->DeviceObject); - IoRequestDeviceEject(Target->DeviceObject); - } else { - Verbose("Target[%d] : Triggering BusChangeDetected to detect device\n", TargetGetTargetId(Target)); - AdapterTargetListChanged(TargetGetAdapter(Target)); - } -} - -__checkReturn NTSTATUS TargetD3ToD0( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { - NTSTATUS Status; - const ULONG TargetId = TargetGetTargetId(Target); + NTSTATUS status; + const ULONG TargetId = TargetGetTargetId(Target); if (!TargetSetDevicePowerState(Target, PowerDeviceD0)) return STATUS_SUCCESS; - Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); Verbose("Target[%d] : D3->D0\n", TargetId); - // power up frontend - Status = FrontendD3ToD0(Target->Frontend); - if (!NT_SUCCESS(Status)) + status = FrontendD3ToD0(Target->Frontend); + if (!NT_SUCCESS(status)) goto fail1; - // connect frontend - Status = FrontendSetState(Target->Frontend, XENVBD_ENABLED); - if (!NT_SUCCESS(Status)) + status = FrontendSetState(Target->Frontend, XENVBD_ENABLED); + if (!NT_SUCCESS(status)) goto fail2; + __TargetUnpauseDataPath(Target); - Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); return STATUS_SUCCESS; fail2: @@ -2363,35 +2303,29 @@ fail2: FrontendD0ToD3(Target->Frontend); fail1: - Error("Fail1 (%08x)\n", Status); + Error("Fail1 (%08x)\n", status); Target->DevicePowerState = PowerDeviceD3; - return Status; + return status; } VOID TargetD0ToD3( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { - const ULONG TargetId = TargetGetTargetId(Target); + const ULONG TargetId = TargetGetTargetId(Target); if (!TargetSetDevicePowerState(Target, PowerDeviceD3)) return; - Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); Verbose("Target[%d] : D0->D3\n", TargetId); - // close frontend __TargetPauseDataPath(Target, FALSE); (VOID) FrontendSetState(Target->Frontend, XENVBD_CLOSED); - ASSERT3U(QueueCount(&Target->SubmittedReqs), ==, 0); - // power down frontend FrontendD0ToD3(Target->Frontend); - - Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); } static FORCEINLINE ULONG @@ -2399,7 +2333,7 @@ __ParseVbd( IN PCHAR DeviceIdStr ) { - ULONG DeviceId = strtoul(DeviceIdStr, NULL, 10); + ULONG DeviceId = strtoul(DeviceIdStr, NULL, 10); ASSERT3U((DeviceId & ~((1 << 29) - 1)), ==, 0); @@ -2421,17 +2355,16 @@ __ParseVbd( } } -__checkReturn NTSTATUS TargetCreate( - __in PXENVBD_ADAPTER Adapter, - __in __nullterminated PCHAR DeviceId, - OUT PXENVBD_TARGET* _Target + IN PXENVBD_ADAPTER Adapter, + IN PCHAR DeviceId, + OUT PXENVBD_TARGET* _Target ) { - NTSTATUS Status; - PXENVBD_TARGET Target; - ULONG TargetId; + NTSTATUS status; + PXENVBD_TARGET Target; + ULONG TargetId; TargetId = __ParseVbd(DeviceId); if (TargetId >= XENVBD_MAX_TARGETS) @@ -2440,20 +2373,18 @@ TargetCreate( if (AdapterIsTargetEmulated(Adapter, TargetId)) return STATUS_RETRY; - Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); - - Status = STATUS_INSUFFICIENT_RESOURCES; + status = STATUS_INSUFFICIENT_RESOURCES; #pragma warning(suppress: 6014) Target = __TargetAlloc(sizeof(XENVBD_TARGET)); if (!Target) goto fail1; Verbose("Target[%d] : Creating\n", TargetId); - Target->Signature = TARGET_SIGNATURE; - Target->Adapter = Adapter; - Target->DeviceObject = NULL; // filled in later - Target->Paused = 1; // Paused until D3->D0 transition - Target->DevicePnpState = Present; + Target->Signature = TARGET_SIGNATURE; + Target->Adapter = Adapter; + Target->DeviceObject = NULL; // filled in later + Target->Paused = 1; // Paused until D3->D0 transition + Target->DevicePnpState = Present; Target->DevicePowerState = PowerDeviceD3; KeInitializeSpinLock(&Target->Lock); @@ -2465,18 +2396,17 @@ TargetCreate( __LookasideInit(&Target->SegmentList, sizeof(XENVBD_SEGMENT), SEGMENT_POOL_TAG); __LookasideInit(&Target->IndirectList, sizeof(XENVBD_INDIRECT), INDIRECT_POOL_TAG); - Status = FrontendCreate(Target, DeviceId, TargetId, &Target->Frontend); - if (!NT_SUCCESS(Status)) + status = FrontendCreate(Target, DeviceId, TargetId, &Target->Frontend); + if (!NT_SUCCESS(status)) goto fail2; - Status = TargetD3ToD0(Target); - if (!NT_SUCCESS(Status)) + status = TargetD3ToD0(Target); + if (!NT_SUCCESS(status)) goto fail3; *_Target = Target; Verbose("Target[%d] : Created (%s)\n", TargetId, Target); - Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); return STATUS_SUCCESS; fail3: @@ -2492,56 +2422,21 @@ fail2: __TargetFree(Target); fail1: - Error("Fail1 (%08x)\n", Status); - return Status; + Error("Fail1 (%08x)\n", status); + return status; } VOID TargetDestroy( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ) { const ULONG TargetId = TargetGetTargetId(Target); - PVOID Objects[3]; - PKWAIT_BLOCK WaitBlock; - Trace("Target[%d] @ (%d) =====>\n", TargetId, KeGetCurrentIrql()); Verbose("Target[%d] : Destroying\n", TargetId); - ASSERT3U(Target->Signature, ==, TARGET_SIGNATURE); - TargetD0ToD3(Target); - Verbose("Target[%d] : RequestListUsed %d\n", TargetId, Target->RequestList.Used); - Objects[0] = &Target->RequestList.Empty; - Objects[1] = &Target->SegmentList.Empty; - Objects[2] = &Target->IndirectList.Empty; - - WaitBlock = (PKWAIT_BLOCK)__TargetAlloc(sizeof(KWAIT_BLOCK) * ARRAYSIZE(Objects)); - if (WaitBlock == NULL) { - ULONG Index; - - Error("Unable to allocate resources for KWAIT_BLOCK\n"); - - for (Index = 0; Index < ARRAYSIZE(Objects); Index++) - KeWaitForSingleObject(Objects[Index], - Executive, - KernelMode, - FALSE, - NULL); - } else { - KeWaitForMultipleObjects(ARRAYSIZE(Objects), - Objects, - WaitAll, - Executive, - KernelMode, - FALSE, - NULL, - WaitBlock); -#pragma prefast(suppress:6102) - __TargetFree(WaitBlock); - } - ASSERT3U(TargetGetDevicePnpState(Target), ==, Deleted); FrontendDestroy(Target->Frontend); @@ -2551,10 +2446,57 @@ TargetDestroy( __LookasideTerm(&Target->SegmentList); __LookasideTerm(&Target->RequestList); - ASSERT3U(Target->Signature, ==, TARGET_SIGNATURE); RtlZeroMemory(Target, sizeof(XENVBD_TARGET)); __TargetFree(Target); Verbose("Target[%d] : Destroyed\n", TargetId); - Trace("Target[%d] @ (%d) <=====\n", TargetId, KeGetCurrentIrql()); } + +#define TARGET_GET_PROPERTY(_name, _type) \ +_type \ +TargetGet ## _name ## ( \ + IN PXENVBD_TARGET Target \ + ) \ +{ \ + return Target-> ## _name ## ; \ +} + +TARGET_GET_PROPERTY(Adapter, PXENVBD_ADAPTER) +TARGET_GET_PROPERTY(DeviceObject, PDEVICE_OBJECT) + +//TARGET_GET_PROPERTY(TargetId, ULONG) +ULONG +TargetGetTargetId( + IN PXENVBD_TARGET Target + ) +{ + return FrontendGetTargetId(Target->Frontend); +} +//TARGET_GET_PROPERTY(DeviceId, ULONG) +ULONG +TargetGetDeviceId( + IN PXENVBD_TARGET Target + ) +{ + return FrontendGetDeviceId(Target->Frontend); +} + +//TARGET_GET_PROPERTY(Removable, BOOLEAN) +BOOLEAN +TargetGetRemovable( + IN PXENVBD_TARGET Target + ) +{ + return FrontendGetCaps(Target->Frontend)->Removable; +} + +//TARGET_GET_PROPERTY(SurpriseRemovable, BOOLEAN) +BOOLEAN +TargetGetSurpriseRemovable( + IN PXENVBD_TARGET Target + ) +{ + return FrontendGetCaps(Target->Frontend)->SurpriseRemovable; +} + +#undef TARGET_GET_PROPERTY diff --git a/src/xenvbd/target.h b/src/xenvbd/target.h index 8808460..7f664a5 100644 --- a/src/xenvbd/target.h +++ b/src/xenvbd/target.h @@ -32,45 +32,57 @@ #ifndef _XENVBD_TARGET_H #define _XENVBD_TARGET_H +#include <ntddk.h> + typedef struct _XENVBD_TARGET XENVBD_TARGET, *PXENVBD_TARGET; -#include <ntddk.h> -#include <ntstrsafe.h> -#include <xenvbd-storport.h> +#include <storport.h> + +#include <debug_interface.h> + #include "adapter.h" #include "srbext.h" #include "types.h" -#include <debug_interface.h> - -extern VOID -TargetDebugCallback( - __in PXENVBD_TARGET Target, - __in PXENBUS_DEBUG_INTERFACE Debug - ); -// Creation/Deletion -__checkReturn extern NTSTATUS TargetCreate( - __in PXENVBD_ADAPTER Adapter, - __in __nullterminated PCHAR DeviceId, - OUT PXENVBD_TARGET* _Target + IN PXENVBD_ADAPTER Adapter, + IN PCHAR DeviceId, + OUT PXENVBD_TARGET* _Target ); extern VOID TargetDestroy( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ); -__checkReturn extern NTSTATUS TargetD3ToD0( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target ); extern VOID TargetD0ToD3( - __in PXENVBD_TARGET Target + IN PXENVBD_TARGET Target + ); + +extern NTSTATUS +TargetDispatchPnp( + IN PXENVBD_TARGET Target, + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +extern VOID +TargetIssueDeviceEject( + IN PXENVBD_TARGET Target, + IN const CHAR *Reason + ); + +extern VOID +TargetDebugCallback( + __in PXENVBD_TARGET Target, + __in PXENBUS_DEBUG_INTERFACE Debug ); // PnP States @@ -98,23 +110,6 @@ TargetGetDevicePnpState( __in PXENVBD_TARGET Target ); -// Query Methods -extern ULONG -TargetGetTargetId( - __in PXENVBD_TARGET Target - ); - -extern ULONG -TargetGetDeviceId( - __in PXENVBD_TARGET Target - ); - -__checkReturn -extern PDEVICE_OBJECT -TargetGetDeviceObject( - __in PXENVBD_TARGET Target - ); - extern VOID TargetSetDeviceObject( __in PXENVBD_TARGET Target, @@ -127,12 +122,6 @@ TargetIsPaused( __in PXENVBD_TARGET Target ); -__checkReturn -extern PXENVBD_ADAPTER -TargetGetAdapter( - __in PXENVBD_TARGET Target - ); - // Queue-Related extern VOID TargetSubmitRequests( @@ -185,26 +174,19 @@ TargetShutdown( IN PXENVBD_SRBEXT SrbExt ); -extern VOID -TargetSrbPnp( - __in PXENVBD_TARGET Target, - __in PSCSI_PNP_REQUEST_BLOCK Srb +#define TARGET_GET_PROPERTY(_name, _type) \ +extern _type \ +TargetGet ## _name ## ( \ + IN PXENVBD_TARGET Target \ ); -// PnP Handler -__checkReturn -extern NTSTATUS -TargetDispatchPnp( - __in PXENVBD_TARGET Target, - __in PDEVICE_OBJECT DeviceObject, - __in PIRP Irp - ); +TARGET_GET_PROPERTY(Adapter, PXENVBD_ADAPTER) +TARGET_GET_PROPERTY(DeviceObject, PDEVICE_OBJECT) +TARGET_GET_PROPERTY(TargetId, ULONG) +TARGET_GET_PROPERTY(DeviceId, ULONG) +TARGET_GET_PROPERTY(Removable, BOOLEAN) +TARGET_GET_PROPERTY(SurpriseRemovable, BOOLEAN) -__drv_maxIRQL(DISPATCH_LEVEL) -extern VOID -TargetIssueDeviceEject( - __in PXENVBD_TARGET Target, - __in __nullterminated const CHAR* Reason - ); +#undef TARGET_GET_PROPERTY #endif // _XENVBD_TARGET_H -- 2.8.3 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |