<ClCompile Include="../../src/xenvif/frontend.c" />
<ClCompile Include="../../src/xenvif/mac.c" />
<ClCompile Include="../../src/xenvif/notifier.c" />
+ <ClCompile Include="../../src/xenvif/granter.c" />
<ClCompile Include="../../src/xenvif/parse.c" />
<ClCompile Include="../../src/xenvif/pdo.c" />
<ClCompile Include="../../src/xenvif/pool.c" />
#include "thread.h"
#include "frontend.h"
#include "names.h"
+#include "granter.h"
#include "notifier.h"
#include "mac.h"
#include "tcpip.h"
PXENBUS_STORE_WATCH Watch;
PCHAR BackendPath;
USHORT BackendDomain;
+ PXENVIF_GRANTER Granter;
PXENVIF_NOTIFIER Notifier;
PXENVIF_MAC Mac;
PXENVIF_RECEIVER Receiver;
return __FrontendGetBackendDomain(Frontend);
}
+static FORCEINLINE PXENVIF_GRANTER
+__FrontendGetGranter(
+ IN PXENVIF_FRONTEND Frontend
+ )
+{
+ return Frontend->Granter;
+}
+
+PXENVIF_GRANTER
+FrontendGetGranter(
+ IN PXENVIF_FRONTEND Frontend
+ )
+{
+ return __FrontendGetGranter(Frontend);
+}
+
static FORCEINLINE PXENVIF_NOTIFIER
__FrontendGetNotifier(
IN PXENVIF_FRONTEND Frontend
if (!NT_SUCCESS(status))
goto fail1;
- status = MacConnect(__FrontendGetMac(Frontend));
+ status = GranterConnect(__FrontendGetGranter(Frontend));
if (!NT_SUCCESS(status))
goto fail2;
- status = ReceiverConnect(__FrontendGetReceiver(Frontend));
+ status = MacConnect(__FrontendGetMac(Frontend));
if (!NT_SUCCESS(status))
goto fail3;
- status = TransmitterConnect(__FrontendGetTransmitter(Frontend));
+ status = ReceiverConnect(__FrontendGetReceiver(Frontend));
if (!NT_SUCCESS(status))
goto fail4;
- status = NotifierConnect(__FrontendGetNotifier(Frontend));
+ status = TransmitterConnect(__FrontendGetTransmitter(Frontend));
if (!NT_SUCCESS(status))
goto fail5;
+ status = NotifierConnect(__FrontendGetNotifier(Frontend));
+ if (!NT_SUCCESS(status))
+ goto fail6;
+
Attempt = 0;
do {
PXENBUS_STORE_TRANSACTION Transaction;
} while (status == STATUS_RETRY);
if (!NT_SUCCESS(status))
- goto fail6;
+ goto fail7;
status = STORE(Printf,
Frontend->StoreInterface,
"%u",
XenbusStateConnected);
if (!NT_SUCCESS(status))
- goto fail7;
+ goto fail8;
State = XenbusStateInitWait;
status = __FrontendWaitForStateChange(Frontend, Path, &State);
if (!NT_SUCCESS(status))
- goto fail8;
+ goto fail9;
status = STATUS_UNSUCCESSFUL;
if (State != XenbusStateConnected)
- goto fail9;
+ goto fail10;
Trace("<====\n");
return STATUS_SUCCESS;
+fail10:
+ Error("fail10\n");
+
fail9:
Error("fail9\n");
fail7:
Error("fail7\n");
+ NotifierDisconnect(__FrontendGetNotifier(Frontend));
+
fail6:
- Error("fail7\n");
+ Error("fail6\n");
- NotifierDisconnect(__FrontendGetNotifier(Frontend));
+ TransmitterDisconnect(__FrontendGetTransmitter(Frontend));
fail5:
Error("fail5\n");
- TransmitterDisconnect(__FrontendGetTransmitter(Frontend));
+ ReceiverDisconnect(__FrontendGetReceiver(Frontend));
fail4:
Error("fail4\n");
- ReceiverDisconnect(__FrontendGetReceiver(Frontend));
+ MacDisconnect(__FrontendGetMac(Frontend));
fail3:
Error("fail3\n");
- MacDisconnect(__FrontendGetMac(Frontend));
+ GranterDisconnect(__FrontendGetGranter(Frontend));
fail2:
Error("fail2\n");
TransmitterDisconnect(__FrontendGetTransmitter(Frontend));
ReceiverDisconnect(__FrontendGetReceiver(Frontend));
MacDisconnect(__FrontendGetMac(Frontend));
+ GranterDisconnect(__FrontendGetGranter(Frontend));
DEBUG(Deregister,
Frontend->DebugInterface,
Trace("====>\n");
- status = MacEnable(__FrontendGetMac(Frontend));
+ status = GranterEnable(__FrontendGetGranter(Frontend));
if (!NT_SUCCESS(status))
goto fail1;
- status = ReceiverEnable(__FrontendGetReceiver(Frontend));
+ status = MacEnable(__FrontendGetMac(Frontend));
if (!NT_SUCCESS(status))
goto fail2;
- status = TransmitterEnable(__FrontendGetTransmitter(Frontend));
+ status = ReceiverEnable(__FrontendGetReceiver(Frontend));
if (!NT_SUCCESS(status))
goto fail3;
- status = NotifierEnable(__FrontendGetNotifier(Frontend));
+ status = TransmitterEnable(__FrontendGetTransmitter(Frontend));
if (!NT_SUCCESS(status))
goto fail4;
+ status = NotifierEnable(__FrontendGetNotifier(Frontend));
+ if (!NT_SUCCESS(status))
+ goto fail5;
+
Trace("<====\n");
return STATUS_SUCCESS;
+fail5:
+ Error("fail5\n");
+
+ TransmitterDisable(__FrontendGetTransmitter(Frontend));
+
fail4:
Error("fail4\n");
- TransmitterDisable(__FrontendGetTransmitter(Frontend));
+ ReceiverDisable(__FrontendGetReceiver(Frontend));
fail3:
Error("fail3\n");
- ReceiverDisable(__FrontendGetReceiver(Frontend));
+ MacDisable(__FrontendGetMac(Frontend));
fail2:
Error("fail2\n");
- MacDisable(__FrontendGetMac(Frontend));
+ GranterDisable(__FrontendGetGranter(Frontend));
fail1:
Error("fail1 (%08x)\n", status);
TransmitterDisable(__FrontendGetTransmitter(Frontend));
ReceiverDisable(__FrontendGetReceiver(Frontend));
MacDisable(__FrontendGetMac(Frontend));
+ GranterDisable(__FrontendGetGranter(Frontend));
Trace("<====\n");
}
if (!NT_SUCCESS(status))
goto fail6;
- status = MacInitialize(*Frontend, &(*Frontend)->Mac);
+ status = GranterInitialize(*Frontend, &(*Frontend)->Granter);
if (!NT_SUCCESS(status))
goto fail7;
if (!NT_SUCCESS(status))
goto fail8;
- status = ReceiverInitialize(*Frontend, 1, &(*Frontend)->Receiver);
+ status = MacInitialize(*Frontend, &(*Frontend)->Mac);
if (!NT_SUCCESS(status))
goto fail9;
- status = TransmitterInitialize(*Frontend, 1, &(*Frontend)->Transmitter);
+ status = ReceiverInitialize(*Frontend, 1, &(*Frontend)->Receiver);
if (!NT_SUCCESS(status))
goto fail10;
- status = ThreadCreate(FrontendMib, *Frontend, &(*Frontend)->MibThread);
+ status = TransmitterInitialize(*Frontend, 1, &(*Frontend)->Transmitter);
if (!NT_SUCCESS(status))
goto fail11;
+ status = ThreadCreate(FrontendMib, *Frontend, &(*Frontend)->MibThread);
+ if (!NT_SUCCESS(status))
+ goto fail12;
+
(*Frontend)->Magic = FRONTEND_MAGIC;
_ReadWriteBarrier();
&(*Frontend)->Handle);
if (!NT_SUCCESS(status)) {
if (status != STATUS_NOT_SUPPORTED)
- goto fail12;
+ goto fail13;
// If IP Helper isn't available (as in Windows PE) then
// NotifyUnicastIpAddressChange will not be supported
return STATUS_SUCCESS;
-fail12:
- Error("fail12\n");
+fail13:
+ Error("fail13\n");
(*Frontend)->Magic = 0;
ThreadJoin((*Frontend)->MibThread);
(*Frontend)->MibThread = NULL;
-fail11:
- Error("fail11\n");
+fail12:
+ Error("fail12\n");
TransmitterTeardown(__FrontendGetTransmitter(*Frontend));
(*Frontend)->Transmitter = NULL;
-fail10:
- Error("fail10\n");
+fail11:
+ Error("fail11\n");
ReceiverTeardown(__FrontendGetReceiver(*Frontend));
(*Frontend)->Receiver = NULL;
+fail10:
+ Error("fail10\n");
+
+ MacTeardown(__FrontendGetMac(*Frontend));
+ (*Frontend)->Mac = NULL;
+
fail9:
Error("fail9\n");
fail8:
Error("fail8\n");
- MacTeardown(__FrontendGetMac(*Frontend));
- (*Frontend)->Mac = NULL;
+ GranterTeardown(__FrontendGetGranter(*Frontend));
+ (*Frontend)->Granter = NULL;
fail7:
Error("fail7\n");
ReceiverTeardown(__FrontendGetReceiver(Frontend));
Frontend->Receiver = NULL;
+ MacTeardown(__FrontendGetMac(Frontend));
+ Frontend->Mac = NULL;
+
NotifierTeardown(__FrontendGetNotifier(Frontend));
Frontend->Notifier = NULL;
- MacTeardown(__FrontendGetMac(Frontend));
- Frontend->Mac = NULL;
+ GranterTeardown(__FrontendGetGranter(Frontend));
+ Frontend->Granter = NULL;
ThreadAlert(Frontend->EjectThread);
ThreadJoin(Frontend->EjectThread);
IN PXENVIF_FRONTEND Frontend
);
+#include "granter.h"
+
+extern PXENVIF_GRANTER
+FrontendGetGranter(
+ IN PXENVIF_FRONTEND Frontend
+ );
+
#include "notifier.h"
extern PXENVIF_NOTIFIER
--- /dev/null
+/* Copyright (c) Citrix Systems Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <ntddk.h>
+#include <ntstrsafe.h>
+#include <stdlib.h>
+#include <util.h>
+#include <evtchn_interface.h>
+#include <store_interface.h>
+
+#include "pdo.h"
+#include "frontend.h"
+#include "granter.h"
+#include "dbg_print.h"
+#include "assert.h"
+
+struct _XENVIF_GRANTER {
+ PXENVIF_FRONTEND Frontend;
+
+ PXENBUS_GNTTAB_INTERFACE GnttabInterface;
+};
+
+#define GRANTER_POOL 'NARG'
+
+static FORCEINLINE PVOID
+__GranterAllocate(
+ IN ULONG Length
+ )
+{
+ return __AllocateNonPagedPoolWithTag(Length, GRANTER_POOL);
+}
+
+static FORCEINLINE VOID
+__GranterFree(
+ IN PVOID Buffer
+ )
+{
+ __FreePoolWithTag(Buffer, GRANTER_POOL);
+}
+
+NTSTATUS
+GranterInitialize(
+ IN PXENVIF_FRONTEND Frontend,
+ OUT PXENVIF_GRANTER *Granter
+ )
+{
+ NTSTATUS status;
+
+ *Granter = __GranterAllocate(sizeof (XENVIF_GRANTER));
+
+ status = STATUS_NO_MEMORY;
+ if (*Granter == NULL)
+ goto fail1;
+
+ (*Granter)->Frontend = Frontend;
+
+ return STATUS_SUCCESS;
+
+fail1:
+ Error("fail1 (%08x)\n", status);
+
+ return status;
+}
+
+NTSTATUS
+GranterConnect(
+ IN PXENVIF_GRANTER Granter
+ )
+{
+ PXENVIF_FRONTEND Frontend;
+
+ Frontend = Granter->Frontend;
+
+ Granter->GnttabInterface = FrontendGetGnttabInterface(Frontend);
+
+ GNTTAB(Acquire, Granter->GnttabInterface);
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+GranterEnable(
+ IN PXENVIF_GRANTER Granter
+ )
+{
+ UNREFERENCED_PARAMETER(Granter);
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+GranterGet(
+ IN PXENVIF_GRANTER Granter,
+ OUT PXENVIF_GRANTER_HANDLE Handle
+ )
+{
+ ULONG Reference;
+ NTSTATUS status;
+
+ status = GNTTAB(Get,
+ Granter->GnttabInterface,
+ &Reference);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
+ *Handle = (XENVIF_GRANTER_HANDLE)(ULONG_PTR)Reference;
+ return STATUS_SUCCESS;
+
+fail1:
+ Error("fail1 (%08x)\n", status);
+
+ return status;
+}
+
+NTSTATUS
+GranterPermitAccess(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle,
+ IN PFN_NUMBER Pfn,
+ IN BOOLEAN ReadOnly
+ )
+{
+ PXENVIF_FRONTEND Frontend;
+ ULONG_PTR Reference;
+ NTSTATUS status;
+
+ Frontend = Granter->Frontend;
+
+ Reference = (ULONG_PTR)Handle;
+
+ status = GNTTAB(PermitForeignAccess,
+ Granter->GnttabInterface,
+ (ULONG)Reference,
+ FrontendGetBackendDomain(Frontend),
+ GNTTAB_ENTRY_FULL_PAGE,
+ Pfn,
+ ReadOnly);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
+ return STATUS_SUCCESS;
+
+fail1:
+ Error("fail1 (%08x)\n", status);
+
+ return status;
+}
+
+VOID
+GranterRevokeAccess(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle
+ )
+{
+ ULONG_PTR Reference;
+
+ Reference = (ULONG_PTR)Handle;
+
+ (VOID) GNTTAB(RevokeForeignAccess,
+ Granter->GnttabInterface,
+ (ULONG)Reference);
+}
+
+VOID
+GranterPut(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle
+ )
+{
+ ULONG_PTR Reference;
+
+ Reference = (ULONG_PTR)Handle;
+
+ GNTTAB(Put,
+ Granter->GnttabInterface,
+ (ULONG)Reference);
+}
+
+ULONG
+GranterGetReference(
+ IN XENVIF_GRANTER_HANDLE Handle
+ )
+{
+ return (ULONG)(ULONG_PTR)Handle;
+}
+
+VOID
+GranterDisable(
+ IN PXENVIF_GRANTER Granter
+ )
+{
+ UNREFERENCED_PARAMETER(Granter);
+}
+
+VOID
+GranterDisconnect(
+ IN PXENVIF_GRANTER Granter
+ )
+{
+ GNTTAB(Release, Granter->GnttabInterface);
+ Granter->GnttabInterface = NULL;
+}
+
+VOID
+GranterTeardown(
+ IN PXENVIF_GRANTER Granter
+ )
+{
+ Granter->Frontend = NULL;
+
+ ASSERT(IsZeroMemory(Granter, sizeof (XENVIF_GRANTER)));
+
+ __GranterFree(Granter);
+}
--- /dev/null
+/* Copyright (c) Citrix Systems Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _XENVIF_GRANTER_H
+#define _XENVIF_GRANTER_H
+
+#include <ntddk.h>
+#include <gnttab_interface.h>
+
+typedef struct _XENVIF_GRANTER XENVIF_GRANTER, *PXENVIF_GRANTER;
+
+typedef PVOID XENVIF_GRANTER_HANDLE, *PXENVIF_GRANTER_HANDLE;
+
+NTSTATUS
+GranterInitialize(
+ IN PXENVIF_FRONTEND Frontend,
+ OUT PXENVIF_GRANTER *Granter
+ );
+
+NTSTATUS
+GranterConnect(
+ IN PXENVIF_GRANTER Granter
+ );
+
+NTSTATUS
+GranterEnable(
+ IN PXENVIF_GRANTER Granter
+ );
+
+NTSTATUS
+GranterGet(
+ IN PXENVIF_GRANTER Granter,
+ OUT PXENVIF_GRANTER_HANDLE Handle
+ );
+
+NTSTATUS
+GranterPermitAccess(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle,
+ IN PFN_NUMBER Pfn,
+ IN BOOLEAN ReadOnly
+ );
+
+VOID
+GranterRevokeAccess(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle
+ );
+
+VOID
+GranterPut(
+ IN PXENVIF_GRANTER Granter,
+ IN XENVIF_GRANTER_HANDLE Handle
+ );
+
+ULONG
+GranterGetReference(
+ IN XENVIF_GRANTER_HANDLE Handle
+ );
+
+VOID
+GranterDisable(
+ IN PXENVIF_GRANTER Granter
+ );
+
+VOID
+GranterDisconnect(
+ IN PXENVIF_GRANTER Granter
+ );
+
+VOID
+GranterTeardown(
+ IN PXENVIF_GRANTER Granter
+ );
+
+#endif // _XENVIF_GRANTER_H
#include "checksum.h"
#include "parse.h"
#include "transmitter.h"
+#include "granter.h"
#include "mac.h"
#include "vif.h"
#include "thread.h"
ULONG Next;
TRANSMITTER_TAG_TYPE Type;
PVOID Context;
- ULONG Reference;
+ XENVIF_GRANTER_HANDLE Handle;
ULONG Offset;
ULONG Length;
} TRANSMITTER_TAG, *PTRANSMITTER_TAG;
PMDL Mdl;
netif_tx_front_ring_t Front;
netif_tx_sring_t *Shared;
- ULONG Reference;
+ XENVIF_GRANTER_HANDLE Handle;
BOOLEAN Connected;
BOOLEAN Enabled;
BOOLEAN Stopped;
PXENBUS_DEBUG_INTERFACE DebugInterface;
PXENBUS_STORE_INTERFACE StoreInterface;
- PXENBUS_GNTTAB_INTERFACE GnttabInterface;
PXENVIF_VIF_INTERFACE VifInterface;
PXENBUS_DEBUG_CALLBACK DebugCallback;
Pfn = MmGetMdlPfnArray(Mdl)[0];
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- TRUE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Tag->Handle,
+ Pfn,
+ TRUE);
ASSERT(NT_SUCCESS(status));
Tag->Offset = 0;
Tag->Length = 0;
Tag->Offset = 0;
- (VOID) GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference);
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Tag->Handle);
ASSERT3U(Tag->Type, ==, TAG_BUFFER);
Buffer = Tag->Context;
PageOffset = MdlOffset & (PAGE_SIZE - 1);
PageLength = __min(MdlLength, PAGE_SIZE - PageOffset);
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- TRUE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Tag->Handle,
+ Pfn,
+ TRUE);
ASSERT(NT_SUCCESS(status));
Tag->Offset = PageOffset;
Tag->Length = 0;
Tag->Offset = 0;
- (VOID) GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference);
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Tag->Handle);
Tag->Context = NULL;
Tag->Type = TAG_TYPE_INVALID;
Pfn = MmGetMdlPfnArray(Mdl)[0];
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- TRUE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Tag->Handle,
+ Pfn,
+ TRUE);
ASSERT(NT_SUCCESS(status));
Tag->Offset = 0;
Tag->Length = 0;
Tag->Offset = 0;
- (VOID) GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference);
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Tag->Handle);
Tag->Context = NULL;
Tag->Type = TAG_TYPE_INVALID;
PLIST_ENTRY ListEntry;
PTRANSMITTER_TAG Tag;
PXENVIF_TRANSMITTER_PACKET Packet;
- NTSTATUS status;
--State->Count;
Tag->Length = 0;
Tag->Offset = 0;
- status = GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference);
- ASSERT(NT_SUCCESS(status));
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Tag->Handle);
switch (Tag->Type) {
case TAG_BUFFER: {
Pfn = MmGetMdlPfnArray(Mdl)[0];
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- TRUE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Tag->Handle,
+ Pfn,
+ TRUE);
ASSERT(NT_SUCCESS(status));
Tag->Offset = 0;
Pfn = MmGetMdlPfnArray(Mdl)[0];
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- TRUE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Tag->Handle,
+ Pfn,
+ TRUE);
ASSERT(NT_SUCCESS(status));
Tag->Offset = 0;
id = (USHORT)(Tag - &Ring->Tag[0]);
req->id = id | REQ_ID_INTEGRITY_CHECK;
- req->gref = Tag->Reference;
+ req->gref = GranterGetReference(Tag->Handle);
req->offset = (USHORT)Tag->Offset;
req->size = (USHORT)Tag->Length;
req->flags = NETTXF_more_data;
)
{
PXENVIF_TRANSMITTER Transmitter;
- NTSTATUS status;
+ PXENVIF_FRONTEND Frontend;
Transmitter = Ring->Transmitter;
+ Frontend = Transmitter->Frontend;
Tag->Length = 0;
Tag->Offset = 0;
- status = GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Tag->Reference);
- ASSERT(NT_SUCCESS(status));
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Tag->Handle);
__TransmitterPutTag(Ring, Tag);
}
FRONT_RING_INIT(&Ring->Front, Ring->Shared, PAGE_SIZE);
ASSERT3P(Ring->Front.sring, ==, Ring->Shared);
- Transmitter->GnttabInterface = FrontendGetGnttabInterface(Frontend);
-
- GNTTAB(Acquire, Transmitter->GnttabInterface);
-
- status = GNTTAB(Get,
- Transmitter->GnttabInterface,
- &Ring->Reference);
+ status = GranterGet(FrontendGetGranter(Frontend),
+ &Ring->Handle);
if (!NT_SUCCESS(status))
goto fail2;
for (Index = 0; Index < MAXIMUM_TAG_COUNT; Index++) {
PTRANSMITTER_TAG Tag = &Ring->Tag[Index];
- status = GNTTAB(Get,
- Transmitter->GnttabInterface,
- &Tag->Reference);
+ status = GranterGet(FrontendGetGranter(Frontend),
+ &Tag->Handle);
if (!NT_SUCCESS(status))
goto fail3;
Pfn = MmGetMdlPfnArray(Ring->Mdl)[0];
- status = GNTTAB(PermitForeignAccess,
- Transmitter->GnttabInterface,
- Ring->Reference,
- FrontendGetBackendDomain(Frontend),
- GNTTAB_ENTRY_FULL_PAGE,
- Pfn,
- FALSE);
+ status = GranterPermitAccess(FrontendGetGranter(Frontend),
+ Ring->Handle,
+ Pfn,
+ FALSE);
ASSERT(NT_SUCCESS(status));
Ring->Connected = TRUE;
Ring->HeadFreeTag = Tag->Next;
Tag->Next = 0;
- GNTTAB(Put,
- Transmitter->GnttabInterface,
- Tag->Reference);
- Tag->Reference = 0;
+ GranterPut(FrontendGetGranter(Frontend),
+ Tag->Handle);
+ Tag->Handle = NULL;
}
Ring->HeadFreeTag = 0;
- GNTTAB(Put,
- Transmitter->GnttabInterface,
- Ring->Reference);
- Ring->Reference = 0;
+ GranterPut(FrontendGetGranter(Frontend),
+ Ring->Handle);
+ Ring->Handle = NULL;
fail2:
Error("fail2\n");
- GNTTAB(Release, Transmitter->GnttabInterface);
- Transmitter->GnttabInterface = NULL;
-
RtlZeroMemory(&Ring->Front, sizeof (netif_tx_front_ring_t));
RtlZeroMemory(Ring->Shared, PAGE_SIZE);
FrontendGetPath(Frontend),
"tx-ring-ref",
"%u",
- Ring->Reference);
+ GranterGetReference(Ring->Handle));
if (!NT_SUCCESS(status))
goto fail1;
PXENVIF_TRANSMITTER Transmitter;
PXENVIF_FRONTEND Frontend;
ULONG Count;
- NTSTATUS status;
ASSERT(Ring->Connected);
Ring->Connected = FALSE;
Ring->RequestsPushed = 0;
Ring->RequestsPosted = 0;
- status = GNTTAB(RevokeForeignAccess,
- Transmitter->GnttabInterface,
- Ring->Reference);
- ASSERT(NT_SUCCESS(status));
+ GranterRevokeAccess(FrontendGetGranter(Frontend),
+ Ring->Handle);
Count = 0;
while (Ring->HeadFreeTag != TAG_INDEX_INVALID) {
Ring->HeadFreeTag = Tag->Next;
Tag->Next = 0;
- GNTTAB(Put,
- Transmitter->GnttabInterface,
- Tag->Reference);
- Tag->Reference = 0;
+ GranterPut(FrontendGetGranter(Frontend),
+ Tag->Handle);
+ Tag->Handle = NULL;
Count++;
}
Ring->HeadFreeTag = 0;
- GNTTAB(Put,
- Transmitter->GnttabInterface,
- Ring->Reference);
- Ring->Reference = 0;
-
- GNTTAB(Release, Transmitter->GnttabInterface);
- Transmitter->GnttabInterface = NULL;
+ GranterPut(FrontendGetGranter(Frontend),
+ Ring->Handle);
+ Ring->Handle = NULL;
RtlZeroMemory(&Ring->Front, sizeof (netif_tx_front_ring_t));
RtlZeroMemory(Ring->Shared, PAGE_SIZE);