|
[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 |