summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/XenBusDxe/GrantTable.c
diff options
context:
space:
mode:
Diffstat (limited to 'OvmfPkg/XenBusDxe/GrantTable.c')
-rw-r--r--OvmfPkg/XenBusDxe/GrantTable.c98
1 files changed, 54 insertions, 44 deletions
diff --git a/OvmfPkg/XenBusDxe/GrantTable.c b/OvmfPkg/XenBusDxe/GrantTable.c
index 58d687abad..76e0e8f17f 100644
--- a/OvmfPkg/XenBusDxe/GrantTable.c
+++ b/OvmfPkg/XenBusDxe/GrantTable.c
@@ -20,31 +20,31 @@
#include "GrantTable.h"
-#define NR_RESERVED_ENTRIES 8
+#define NR_RESERVED_ENTRIES 8
-#define NR_GRANT_FRAMES (FixedPcdGet32 (PcdXenGrantFrames))
-#define NR_GRANT_ENTRIES (NR_GRANT_FRAMES * EFI_PAGE_SIZE / sizeof(grant_entry_v1_t))
+#define NR_GRANT_FRAMES (FixedPcdGet32 (PcdXenGrantFrames))
+#define NR_GRANT_ENTRIES (NR_GRANT_FRAMES * EFI_PAGE_SIZE / sizeof(grant_entry_v1_t))
-STATIC grant_entry_v1_t *GrantTable = NULL;
-STATIC grant_ref_t GrantList[NR_GRANT_ENTRIES];
-STATIC EFI_LOCK mGrantListLock;
+STATIC grant_entry_v1_t *GrantTable = NULL;
+STATIC grant_ref_t GrantList[NR_GRANT_ENTRIES];
+STATIC EFI_LOCK mGrantListLock;
#ifdef GNT_DEBUG
-STATIC BOOLEAN GrantInUseList[NR_GRANT_ENTRIES];
+STATIC BOOLEAN GrantInUseList[NR_GRANT_ENTRIES];
#endif
STATIC
VOID
XenGrantTablePutFreeEntry (
- grant_ref_t Ref
+ grant_ref_t Ref
)
{
EfiAcquireLock (&mGrantListLock);
-#ifdef GNT_DEBUG
+ #ifdef GNT_DEBUG
ASSERT (GrantInUseList[Ref]);
GrantInUseList[Ref] = FALSE;
-#endif
+ #endif
GrantList[Ref] = GrantList[0];
- GrantList[0] = Ref;
+ GrantList[0] = Ref;
EfiReleaseLock (&mGrantListLock);
}
@@ -54,16 +54,16 @@ XenGrantTableGetFreeEntry (
VOID
)
{
- grant_ref_t Ref;
+ grant_ref_t Ref;
EfiAcquireLock (&mGrantListLock);
Ref = GrantList[0];
ASSERT (Ref >= NR_RESERVED_ENTRIES && Ref < NR_GRANT_ENTRIES);
GrantList[0] = GrantList[Ref];
-#ifdef GNT_DEBUG
+ #ifdef GNT_DEBUG
ASSERT (!GrantInUseList[Ref]);
GrantInUseList[Ref] = TRUE;
-#endif
+ #endif
EfiReleaseLock (&mGrantListLock);
return Ref;
}
@@ -76,11 +76,11 @@ XenGrantTableGrantAccess (
IN BOOLEAN ReadOnly
)
{
- grant_ref_t Ref;
- UINT16 Flags;
+ grant_ref_t Ref;
+ UINT16 Flags;
ASSERT (GrantTable != NULL);
- Ref = XenGrantTableGetFreeEntry ();
+ Ref = XenGrantTableGetFreeEntry ();
GrantTable[Ref].frame = (UINT32)Frame;
GrantTable[Ref].domid = DomainId;
MemoryFence ();
@@ -88,6 +88,7 @@ XenGrantTableGrantAccess (
if (ReadOnly) {
Flags |= GTF_readonly;
}
+
GrantTable[Ref].flags = Flags;
return Ref;
@@ -96,10 +97,10 @@ XenGrantTableGrantAccess (
STATIC
EFI_STATUS
XenGrantTableEndAccess (
- grant_ref_t Ref
+ grant_ref_t Ref
)
{
- UINT16 Flags, OldFlags;
+ UINT16 Flags, OldFlags;
ASSERT (GrantTable != NULL);
ASSERT (Ref >= NR_RESERVED_ENTRIES && Ref < NR_GRANT_ENTRIES);
@@ -110,6 +111,7 @@ XenGrantTableEndAccess (
DEBUG ((DEBUG_WARN, "WARNING: g.e. still in use! (%x)\n", Flags));
return EFI_NOT_READY;
}
+
OldFlags = InterlockedCompareExchange16 (&GrantTable[Ref].flags, Flags, 0);
} while (OldFlags != Flags);
@@ -122,40 +124,42 @@ XenGrantTableInit (
IN XENBUS_DEVICE *Dev
)
{
- xen_add_to_physmap_t Parameters;
- INTN Index;
- INTN ReturnCode;
+ xen_add_to_physmap_t Parameters;
+ INTN Index;
+ INTN ReturnCode;
-#ifdef GNT_DEBUG
- SetMem(GrantInUseList, sizeof (GrantInUseList), 1);
-#endif
+ #ifdef GNT_DEBUG
+ SetMem (GrantInUseList, sizeof (GrantInUseList), 1);
+ #endif
EfiInitializeLock (&mGrantListLock, TPL_NOTIFY);
for (Index = NR_RESERVED_ENTRIES; Index < NR_GRANT_ENTRIES; Index++) {
XenGrantTablePutFreeEntry ((grant_ref_t)Index);
}
- GrantTable = (VOID*)(UINTN) Dev->XenIo->GrantTableAddress;
+ GrantTable = (VOID *)(UINTN)Dev->XenIo->GrantTableAddress;
for (Index = 0; Index < NR_GRANT_FRAMES; Index++) {
Parameters.domid = DOMID_SELF;
- Parameters.idx = Index;
+ Parameters.idx = Index;
Parameters.space = XENMAPSPACE_grant_table;
- Parameters.gpfn = (xen_pfn_t) ((UINTN) GrantTable >> EFI_PAGE_SHIFT) + Index;
- ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters);
+ Parameters.gpfn = (xen_pfn_t)((UINTN)GrantTable >> EFI_PAGE_SHIFT) + Index;
+ ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters);
if (ReturnCode != 0) {
- DEBUG ((DEBUG_ERROR,
+ DEBUG ((
+ DEBUG_ERROR,
"Xen GrantTable, add_to_physmap hypercall error: %Ld\n",
- (INT64)ReturnCode));
+ (INT64)ReturnCode
+ ));
}
}
}
VOID
XenGrantTableDeinit (
- XENBUS_DEVICE *Dev
+ XENBUS_DEVICE *Dev
)
{
- INTN ReturnCode, Index;
- xen_remove_from_physmap_t Parameters;
+ INTN ReturnCode, Index;
+ xen_remove_from_physmap_t Parameters;
if (GrantTable == NULL) {
return;
@@ -163,27 +167,33 @@ XenGrantTableDeinit (
for (Index = NR_GRANT_FRAMES - 1; Index >= 0; Index--) {
Parameters.domid = DOMID_SELF;
- Parameters.gpfn = (xen_pfn_t) ((UINTN) GrantTable >> EFI_PAGE_SHIFT) + Index;
- DEBUG ((DEBUG_INFO, "Xen GrantTable, removing %Lx\n",
- (UINT64)Parameters.gpfn));
+ Parameters.gpfn = (xen_pfn_t)((UINTN)GrantTable >> EFI_PAGE_SHIFT) + Index;
+ DEBUG ((
+ DEBUG_INFO,
+ "Xen GrantTable, removing %Lx\n",
+ (UINT64)Parameters.gpfn
+ ));
ReturnCode = XenHypercallMemoryOp (XENMEM_remove_from_physmap, &Parameters);
if (ReturnCode != 0) {
- DEBUG ((DEBUG_ERROR,
+ DEBUG ((
+ DEBUG_ERROR,
"Xen GrantTable, remove_from_physmap hypercall error: %Ld\n",
- (INT64)ReturnCode));
+ (INT64)ReturnCode
+ ));
}
}
+
GrantTable = NULL;
}
EFI_STATUS
EFIAPI
XenBusGrantAccess (
- IN XENBUS_PROTOCOL *This,
- IN domid_t DomainId,
- IN UINTN Frame, // MFN
- IN BOOLEAN ReadOnly,
- OUT grant_ref_t *RefPtr
+ IN XENBUS_PROTOCOL *This,
+ IN domid_t DomainId,
+ IN UINTN Frame, // MFN
+ IN BOOLEAN ReadOnly,
+ OUT grant_ref_t *RefPtr
)
{
*RefPtr = XenGrantTableGrantAccess (DomainId, Frame, ReadOnly);