]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/XenBusDxe/XenStore.c
OvmfPkg/PlatformBootManagerLib: port PlatformBdsConnectSequence to UefiBootManagerLib
[mirror_edk2.git] / OvmfPkg / XenBusDxe / XenStore.c
index aed6b141bdcd88c5ab1389d5b684f9a0031e7761..61976f91f11b7f7b4024a93dd81f7c3405081eb1 100644 (file)
@@ -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
@@ -69,7 +69,7 @@
 \r
 typedef struct {\r
   CONST VOID  *Data;\r
-  UINT      Len;\r
+  UINT32      Len;\r
 } WRITE_REQUEST;\r
 \r
 /* Register callback to watch subtree (node) in the XenStore. */\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
@@ -456,7 +456,7 @@ STATIC
 XENSTORE_STATUS\r
 XenStoreWriteStore (\r
   IN CONST VOID *DataPtr,\r
-  IN UINT     Len\r
+  IN UINT32     Len\r
   )\r
 {\r
   XENSTORE_RING_IDX Cons, Prod;\r
@@ -535,7 +535,7 @@ STATIC
 XENSTORE_STATUS\r
 XenStoreReadStore (\r
   OUT VOID *DataPtr,\r
-  IN  UINTN Len\r
+  IN  UINT32 Len\r
   )\r
 {\r
   XENSTORE_RING_IDX Cons, Prod;\r
@@ -660,7 +660,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
@@ -790,7 +790,7 @@ XenStoreReadReply (
 STATIC\r
 XENSTORE_STATUS\r
 XenStoreTalkv (\r
-  IN  XENSTORE_TRANSACTION    Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  enum xsd_sockmsg_type   RequestType,\r
   IN  CONST WRITE_REQUEST     *WriteRequest,\r
   IN  UINT32                  NumRequests,\r
@@ -803,7 +803,11 @@ XenStoreTalkv (
   UINT32 Index;\r
   XENSTORE_STATUS Status;\r
 \r
-  Message.tx_id = Transaction.Id;\r
+  if (Transaction == XST_NIL) {\r
+    Message.tx_id = 0;\r
+  } else {\r
+    Message.tx_id = Transaction->Id;\r
+  }\r
   Message.req_id = 0;\r
   Message.type = RequestType;\r
   Message.len = 0;\r
@@ -825,7 +829,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
@@ -839,7 +843,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
@@ -869,7 +873,7 @@ Error:
 STATIC\r
 XENSTORE_STATUS\r
 XenStoreSingle (\r
-  IN  XENSTORE_TRANSACTION    Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  enum xsd_sockmsg_type   RequestType,\r
   IN  CONST CHAR8             *Body,\r
   OUT UINT32                  *LenPtr OPTIONAL,\r
@@ -879,7 +883,7 @@ XenStoreSingle (
   WRITE_REQUEST WriteRequest;\r
 \r
   WriteRequest.Data = (VOID *) Body;\r
-  WriteRequest.Len = AsciiStrSize (Body);\r
+  WriteRequest.Len = (UINT32)AsciiStrSize (Body);\r
 \r
   return XenStoreTalkv (Transaction, RequestType, &WriteRequest, 1,\r
                         LenPtr, Result);\r
@@ -908,9 +912,9 @@ XenStoreWatch (
   WRITE_REQUEST WriteRequest[2];\r
 \r
   WriteRequest[0].Data = (VOID *) Path;\r
-  WriteRequest[0].Len = AsciiStrSize (Path);\r
+  WriteRequest[0].Len = (UINT32)AsciiStrSize (Path);\r
   WriteRequest[1].Data = (VOID *) Token;\r
-  WriteRequest[1].Len = AsciiStrSize (Token);\r
+  WriteRequest[1].Len = (UINT32)AsciiStrSize (Token);\r
 \r
   return XenStoreTalkv (XST_NIL, XS_WATCH, WriteRequest, 2, NULL, NULL);\r
 }\r
@@ -934,9 +938,9 @@ XenStoreUnwatch (
   WRITE_REQUEST WriteRequest[2];\r
 \r
   WriteRequest[0].Data = (VOID *) Path;\r
-  WriteRequest[0].Len = AsciiStrSize (Path);\r
+  WriteRequest[0].Len = (UINT32)AsciiStrSize (Path);\r
   WriteRequest[1].Data = (VOID *) Token;\r
-  WriteRequest[1].Len = AsciiStrSize (Token);\r
+  WriteRequest[1].Len = (UINT32)AsciiStrSize (Token);\r
 \r
   return XenStoreTalkv (XST_NIL, XS_UNWATCH, WriteRequest, 2, NULL, NULL);\r
 }\r
@@ -971,7 +975,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
@@ -988,9 +992,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
@@ -1003,12 +1007,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
@@ -1025,8 +1029,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
@@ -1053,8 +1057,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
@@ -1111,7 +1115,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
@@ -1157,7 +1161,7 @@ XenStoreDeinit (
 \r
 XENSTORE_STATUS\r
 XenStoreListDirectory (\r
-  IN  XENSTORE_TRANSACTION  Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  CONST CHAR8           *DirectoryPath,\r
   IN  CONST CHAR8           *Node,\r
   OUT UINT32                *DirectoryCountPtr,\r
@@ -1184,7 +1188,7 @@ XenStoreListDirectory (
 \r
 BOOLEAN\r
 XenStorePathExists (\r
-  IN XENSTORE_TRANSACTION  Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8           *Directory,\r
   IN CONST CHAR8           *Node\r
   )\r
@@ -1198,13 +1202,13 @@ XenStorePathExists (
   if (Status != XENSTORE_STATUS_SUCCESS) {\r
     return FALSE;\r
   }\r
-  FreePool (TempStr);\r
+  FreePool ((VOID*)TempStr);\r
   return TRUE;\r
 }\r
 \r
 XENSTORE_STATUS\r
 XenStoreRead (\r
-  IN  XENSTORE_TRANSACTION    Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  CONST CHAR8             *DirectoryPath,\r
   IN  CONST CHAR8             *Node,\r
   OUT UINT32                  *LenPtr OPTIONAL,\r
@@ -1228,7 +1232,7 @@ XenStoreRead (
 \r
 XENSTORE_STATUS\r
 XenStoreWrite (\r
-  IN XENSTORE_TRANSACTION  Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8           *DirectoryPath,\r
   IN CONST CHAR8           *Node,\r
   IN CONST CHAR8           *Str\r
@@ -1241,9 +1245,9 @@ XenStoreWrite (
   Path = XenStoreJoin (DirectoryPath, Node);\r
 \r
   WriteRequest[0].Data = (VOID *) Path;\r
-  WriteRequest[0].Len = AsciiStrSize (Path);\r
+  WriteRequest[0].Len = (UINT32)AsciiStrSize (Path);\r
   WriteRequest[1].Data = (VOID *) Str;\r
-  WriteRequest[1].Len = AsciiStrLen (Str);\r
+  WriteRequest[1].Len = (UINT32)AsciiStrLen (Str);\r
 \r
   Status = XenStoreTalkv (Transaction, XS_WRITE, WriteRequest, 2, NULL, NULL);\r
   FreePool (Path);\r
@@ -1253,7 +1257,7 @@ XenStoreWrite (
 \r
 XENSTORE_STATUS\r
 XenStoreRemove (\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8            *DirectoryPath,\r
   IN CONST CHAR8            *Node\r
   )\r
@@ -1279,7 +1283,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
@@ -1288,7 +1292,7 @@ XenStoreTransactionStart (
 \r
 XENSTORE_STATUS\r
 XenStoreTransactionEnd (\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN BOOLEAN                Abort\r
   )\r
 {\r
@@ -1305,7 +1309,7 @@ XenStoreTransactionEnd (
 \r
 XENSTORE_STATUS\r
 XenStoreVSPrint (\r
-  IN XENSTORE_TRANSACTION  Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8           *DirectoryPath,\r
   IN CONST CHAR8           *Node,\r
   IN CONST CHAR8           *FormatString,\r
@@ -1328,7 +1332,7 @@ XenStoreVSPrint (
 XENSTORE_STATUS\r
 EFIAPI\r
 XenStoreSPrint (\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8            *DirectoryPath,\r
   IN CONST CHAR8            *Node,\r
   IN CONST CHAR8            *FormatString,\r
@@ -1415,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
@@ -1444,7 +1448,7 @@ XENSTORE_STATUS
 EFIAPI\r
 XenBusXenStoreRead (\r
   IN  XENBUS_PROTOCOL       *This,\r
-  IN  XENSTORE_TRANSACTION  Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  CONST CHAR8           *Node,\r
   OUT VOID                  **Value\r
   )\r
@@ -1456,7 +1460,7 @@ XENSTORE_STATUS
 EFIAPI\r
 XenBusXenStoreBackendRead (\r
   IN  XENBUS_PROTOCOL       *This,\r
-  IN  XENSTORE_TRANSACTION  Transaction,\r
+  IN  CONST XENSTORE_TRANSACTION *Transaction,\r
   IN  CONST CHAR8           *Node,\r
   OUT VOID                  **Value\r
   )\r
@@ -1468,7 +1472,7 @@ XENSTORE_STATUS
 EFIAPI\r
 XenBusXenStoreRemove (\r
   IN XENBUS_PROTOCOL        *This,\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN const char             *Node\r
   )\r
 {\r
@@ -1489,7 +1493,7 @@ XENSTORE_STATUS
 EFIAPI\r
 XenBusXenStoreTransactionEnd (\r
   IN XENBUS_PROTOCOL        *This,\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN BOOLEAN                Abort\r
   )\r
 {\r
@@ -1500,7 +1504,7 @@ XENSTORE_STATUS
 EFIAPI\r
 XenBusXenStoreSPrint (\r
   IN XENBUS_PROTOCOL        *This,\r
-  IN XENSTORE_TRANSACTION   Transaction,\r
+  IN CONST XENSTORE_TRANSACTION *Transaction,\r
   IN CONST CHAR8            *DirectoryPath,\r
   IN CONST CHAR8            *Node,\r
   IN CONST CHAR8            *FormatString,\r