]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/XenBusDxe/XenStore.c
CryptoPkg/TlsLib: rewrite TlsSetCipherList()
[mirror_edk2.git] / OvmfPkg / XenBusDxe / XenStore.c
index 2df8f534858518d4174949115fb1492fb0335a33..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
@@ -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
@@ -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
@@ -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 = (evtchn_port_t)XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_EVTCHN);\r
-  XenStoreGpfn = (UINTN)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
@@ -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