]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/XenBusDxe/XenStore.c
BaseTools/build: Expand PREBUILD/POSTBUILD DSC actions
[mirror_edk2.git] / OvmfPkg / XenBusDxe / XenStore.c
index 7c272b36efeaa034b4a1494b06d512e663f6e147..6812e1078cd88d2a7eda1c0a5da7392548160064 100644 (file)
@@ -10,7 +10,7 @@
 \r
   The XenStore is ASCII string based, and has a structure and semantics\r
   similar to a filesystem.  There are files and directories, the directories\r
-  able to contain files or other directories.  The depth of the hierachy\r
+  able to contain files or other directories.  The depth of the hierarchy\r
   is only limited by the XenStore's maximum path length.\r
 \r
   The communication channel between the XenStore service and other\r
@@ -60,8 +60,8 @@
 \r
 #include <IndustryStandard/Xen/hvm/params.h>\r
 \r
-#include "XenHypercall.h"\r
 #include "EventChannel.h"\r
+#include <Library/XenHypercallLib.h>\r
 \r
 //\r
 // Private Data Structures\r
@@ -248,7 +248,7 @@ Split (
 \r
   /* Transfer to one big alloc for easy freeing by the caller. */\r
   Dst = AllocatePool (*NumPtr * sizeof (CHAR8 *) + Len);\r
-  CopyMem (&Dst[*NumPtr], Strings, Len);\r
+  CopyMem ((VOID*)&Dst[*NumPtr], Strings, Len);\r
   FreePool (Strings);\r
 \r
   /* Extract pointers to newly allocated array. */\r
@@ -303,14 +303,17 @@ XenStoreJoin (
   )\r
 {\r
   CHAR8 *Buf;\r
+  UINTN BufSize;\r
 \r
   /* +1 for '/' and +1 for '\0' */\r
-  Buf = AllocateZeroPool (\r
-          AsciiStrLen (DirectoryPath) + AsciiStrLen (Node) + 2);\r
-  AsciiStrCat (Buf, DirectoryPath);\r
-  if (Node[0] != '\0') {\r
-    AsciiStrCat (Buf, "/");\r
-    AsciiStrCat (Buf, Node);\r
+  BufSize = AsciiStrLen (DirectoryPath) + AsciiStrLen (Node) + 2;\r
+  Buf = AllocatePool (BufSize);\r
+  ASSERT (Buf != NULL);\r
+\r
+  if (Node[0] == '\0') {\r
+    AsciiSPrint (Buf, BufSize, "%a", DirectoryPath);\r
+  } else {\r
+    AsciiSPrint (Buf, BufSize, "%a/%a", DirectoryPath, Node);\r
   }\r
 \r
   return Buf;\r
@@ -660,7 +663,7 @@ XenStoreProcessMessage (
     } else {\r
       DEBUG ((EFI_D_WARN, "XenStore: Watch handle %a not found\n",\r
               Message->u.Watch.Vector[XS_WATCH_TOKEN]));\r
-      FreePool(Message->u.Watch.Vector);\r
+      FreePool((VOID*)Message->u.Watch.Vector);\r
       FreePool(Message);\r
     }\r
     EfiReleaseLock (&xs.RegisteredWatchesLock);\r
@@ -710,7 +713,6 @@ static XenStoreErrors gXenStoreErrors[] = {
   { XENSTORE_STATUS_EISCONN, "EISCONN" },\r
   { XENSTORE_STATUS_E2BIG, "E2BIG" }\r
 };\r
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))\r
 \r
 STATIC\r
 XENSTORE_STATUS\r
@@ -829,7 +831,7 @@ XenStoreTalkv (
     }\r
   }\r
 \r
-  Status = XenStoreReadReply (&Message.type, LenPtr, &Return);\r
+  Status = XenStoreReadReply ((enum xsd_sockmsg_type *)&Message.type, LenPtr, &Return);\r
 \r
 Error:\r
   if (Status != XENSTORE_STATUS_SUCCESS) {\r
@@ -843,7 +845,7 @@ Error:
   }\r
 \r
   /* Reply is either error or an echo of our request message type. */\r
-  ASSERT (Message.type == RequestType);\r
+  ASSERT ((enum xsd_sockmsg_type)Message.type == RequestType);\r
 \r
   if (ResultPtr) {\r
     *ResultPtr = Return;\r
@@ -975,7 +977,7 @@ XenStoreWaitWatch (
       if (Message->u.Watch.Handle == Token) {\r
         RemoveEntryList (Entry);\r
         EfiReleaseLock (&xs.WatchEventsLock);\r
-        FreePool(Message->u.Watch.Vector);\r
+        FreePool((VOID*)Message->u.Watch.Vector);\r
         FreePool(Message);\r
         return XENSTORE_STATUS_SUCCESS;\r
       }\r
@@ -992,9 +994,9 @@ NotifyEventChannelCheckForEvent (
   IN VOID *Context\r
   )\r
 {\r
-  XENSTORE_PRIVATE *xs;\r
-  xs = (XENSTORE_PRIVATE *)Context;\r
-  if (TestAndClearBit (xs->EventChannel, xs->Dev->SharedInfo->evtchn_pending)) {\r
+  XENSTORE_PRIVATE *xsp;\r
+  xsp = (XENSTORE_PRIVATE *)Context;\r
+  if (TestAndClearBit (xsp->EventChannel, xsp->Dev->SharedInfo->evtchn_pending)) {\r
     gBS->SignalEvent (Event);\r
   }\r
 }\r
@@ -1007,12 +1009,12 @@ NotifyEventChannelCheckForEvent (
 STATIC\r
 EFI_STATUS\r
 XenStoreInitComms (\r
-  XENSTORE_PRIVATE *xs\r
+  XENSTORE_PRIVATE *xsp\r
   )\r
 {\r
   EFI_STATUS Status;\r
   EFI_EVENT TimerEvent;\r
-  struct xenstore_domain_interface *XenStore = xs->XenStore;\r
+  struct xenstore_domain_interface *XenStore = xsp->XenStore;\r
 \r
   Status = gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &TimerEvent);\r
   Status = gBS->SetTimer (TimerEvent, TimerRelative,\r
@@ -1029,8 +1031,8 @@ XenStoreInitComms (
   gBS->CloseEvent (TimerEvent);\r
 \r
   Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_NOTIFY,\r
-                             NotifyEventChannelCheckForEvent, xs,\r
-                             &xs->EventChannelEvent);\r
+                             NotifyEventChannelCheckForEvent, xsp,\r
+                             &xsp->EventChannelEvent);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   return Status;\r
@@ -1057,8 +1059,8 @@ XenStoreInit (
 \r
   xs.Dev = Dev;\r
 \r
-  xs.EventChannel = XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_EVTCHN);\r
-  XenStoreGpfn = XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_PFN);\r
+  xs.EventChannel = (evtchn_port_t)XenHypercallHvmGetParam (HVM_PARAM_STORE_EVTCHN);\r
+  XenStoreGpfn = (UINTN)XenHypercallHvmGetParam (HVM_PARAM_STORE_PFN);\r
   xs.XenStore = (VOID *) (XenStoreGpfn << EFI_PAGE_SHIFT);\r
   DEBUG ((EFI_D_INFO, "XenBusInit: XenBus rings @%p, event channel %x\n",\r
           xs.XenStore, xs.EventChannel));\r
@@ -1073,9 +1075,6 @@ XenStoreInit (
 \r
   /* Initialize the shared memory rings to talk to xenstored */\r
   Status = XenStoreInitComms (&xs);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
 \r
   return Status;\r
 }\r
@@ -1115,7 +1114,7 @@ XenStoreDeinit (
       XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry);\r
       Entry = GetNextNode (&xs.WatchEvents, Entry);\r
       RemoveEntryList (&Message->Link);\r
-      FreePool (Message->u.Watch.Vector);\r
+      FreePool ((VOID*)Message->u.Watch.Vector);\r
       FreePool (Message);\r
     }\r
   }\r
@@ -1202,7 +1201,7 @@ XenStorePathExists (
   if (Status != XENSTORE_STATUS_SUCCESS) {\r
     return FALSE;\r
   }\r
-  FreePool (TempStr);\r
+  FreePool ((VOID*)TempStr);\r
   return TRUE;\r
 }\r
 \r
@@ -1283,7 +1282,7 @@ XenStoreTransactionStart (
   Status = XenStoreSingle (XST_NIL, XS_TRANSACTION_START, "", NULL,\r
                            (VOID **) &IdStr);\r
   if (Status == XENSTORE_STATUS_SUCCESS) {\r
-    Transaction->Id = AsciiStrDecimalToUintn (IdStr);\r
+    Transaction->Id = (UINT32)AsciiStrDecimalToUintn (IdStr);\r
     FreePool (IdStr);\r
   }\r
 \r
@@ -1298,16 +1297,14 @@ XenStoreTransactionEnd (
 {\r
   CHAR8 AbortStr[2];\r
 \r
-  if (Abort) {\r
-    AsciiStrCpy (AbortStr, "F");\r
-  } else {\r
-    AsciiStrCpy (AbortStr, "T");\r
-  }\r
+  AbortStr[0] = Abort ? 'F' : 'T';\r
+  AbortStr[1] = '\0';\r
 \r
   return XenStoreSingle (Transaction, XS_TRANSACTION_END, AbortStr, NULL, NULL);\r
 }\r
 \r
 XENSTORE_STATUS\r
+EFIAPI\r
 XenStoreVSPrint (\r
   IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8           *DirectoryPath,\r
@@ -1319,8 +1316,11 @@ XenStoreVSPrint (
   CHAR8 *Buf;\r
   XENSTORE_STATUS Status;\r
   UINTN BufSize;\r
+  VA_LIST Marker2;\r
 \r
-  BufSize = SPrintLengthAsciiFormat (FormatString, Marker) + 1;\r
+  VA_COPY (Marker2, Marker);\r
+  BufSize = SPrintLengthAsciiFormat (FormatString, Marker2) + 1;\r
+  VA_END (Marker2);\r
   Buf = AllocateZeroPool (BufSize);\r
   AsciiVSPrint (Buf, BufSize, FormatString, Marker);\r
   Status = XenStoreWrite (Transaction, DirectoryPath, Node, Buf);\r
@@ -1419,7 +1419,7 @@ XenStoreUnregisterWatch (
     Entry = GetNextNode (&xs.WatchEvents, Entry);\r
     if (Message->u.Watch.Handle == Watch) {\r
       RemoveEntryList (&Message->Link);\r
-      FreePool (Message->u.Watch.Vector);\r
+      FreePool ((VOID*)Message->u.Watch.Vector);\r
       FreePool (Message);\r
     }\r
   }\r