]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/XenBusDxe/XenBusDxe.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / XenBusDxe / XenBusDxe.h
index 388d2996953ca3e278486dcf6bbdadc1c9d97e39..8b32505cb09c6a7c426ae55d48ca0c66111ef3de 100644 (file)
@@ -3,13 +3,7 @@
 \r
   Copyright (C) 2014, Citrix Ltd.\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #include <Library/UefiLib.h>\r
 #include <Library/DevicePathLib.h>\r
 #include <Library/DebugLib.h>\r
-\r
+#include <Library/PcdLib.h>\r
 \r
 //\r
 // UEFI Driver Model Protocols\r
 //\r
 #include <Protocol/DriverBinding.h>\r
 \r
-\r
 //\r
 // Consumed Protocols\r
 //\r
-#include <Protocol/PciIo.h>\r
-\r
+#include <Protocol/XenIo.h>\r
 \r
 //\r
 // Produced Protocols\r
 //\r
-\r
+#include <Protocol/XenBus.h>\r
 \r
 //\r
 // Driver Version\r
 //\r
 #define XENBUS_DXE_VERSION  0x00000010\r
 \r
-\r
 //\r
 // Protocol instances\r
 //\r
-extern EFI_DRIVER_BINDING_PROTOCOL  gXenBusDxeDriverBinding;\r
+extern EFI_DRIVER_BINDING_PROTOCOL   gXenBusDxeDriverBinding;\r
 extern EFI_COMPONENT_NAME2_PROTOCOL  gXenBusDxeComponentName2;\r
-extern EFI_COMPONENT_NAME_PROTOCOL  gXenBusDxeComponentName;\r
-\r
+extern EFI_COMPONENT_NAME_PROTOCOL   gXenBusDxeComponentName;\r
 \r
 //\r
 // Include files with function prototypes\r
@@ -72,23 +62,61 @@ extern EFI_COMPONENT_NAME_PROTOCOL  gXenBusDxeComponentName;
 //\r
 #include <IndustryStandard/Xen/xen.h>\r
 \r
-#define PCI_VENDOR_ID_XEN                0x5853\r
-#define PCI_DEVICE_ID_XEN_PLATFORM       0x0001\r
-\r
-\r
-typedef struct _XENBUS_DEVICE XENBUS_DEVICE;\r
+typedef struct _XENBUS_DEVICE_PATH  XENBUS_DEVICE_PATH;\r
+typedef struct _XENBUS_DEVICE       XENBUS_DEVICE;\r
 \r
 // Have the state of the driver.\r
-#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')\r
+#define XENBUS_DEVICE_SIGNATURE  SIGNATURE_32 ('X','B','s','t')\r
 struct _XENBUS_DEVICE {\r
-  UINT32                        Signature;\r
-  EFI_DRIVER_BINDING_PROTOCOL   *This;\r
-  EFI_HANDLE                    ControllerHandle;\r
-  EFI_PCI_IO_PROTOCOL           *PciIo;\r
-  EFI_EVENT                     ExitBootEvent;\r
-\r
-  VOID                          *Hyperpage;\r
-  shared_info_t                 *SharedInfo;\r
+  UINT32                         Signature;\r
+  EFI_DRIVER_BINDING_PROTOCOL    *This;\r
+  EFI_HANDLE                     ControllerHandle;\r
+  XENIO_PROTOCOL                 *XenIo;\r
+  EFI_EVENT                      ExitBootEvent;\r
+  EFI_DEVICE_PATH_PROTOCOL       *DevicePath;\r
+  LIST_ENTRY                     ChildList;\r
+\r
+  shared_info_t                  *SharedInfo;\r
 };\r
 \r
+// There is one of this struct allocated for every child.\r
+#define XENBUS_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('X', 'B', 'p', 'd')\r
+typedef struct {\r
+  UINTN                 Signature;\r
+  LIST_ENTRY            Link;\r
+  EFI_HANDLE            Handle;\r
+  XENBUS_PROTOCOL       XenBusIo;\r
+  XENBUS_DEVICE         *Dev;\r
+  XENBUS_DEVICE_PATH    *DevicePath;\r
+} XENBUS_PRIVATE_DATA;\r
+\r
+#define XENBUS_PRIVATE_DATA_FROM_THIS(a) \\r
+  CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)\r
+#define XENBUS_PRIVATE_DATA_FROM_LINK(a) \\r
+  CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)\r
+\r
+/*\r
+ * Helpers\r
+ */\r
+\r
+/**\r
+  Atomically test and clear a bit.\r
+\r
+  @param Bit      Bit index to test in *Address\r
+  @param Address  The Address to the buffer that contain the bit to test.\r
+\r
+  @return Value of the Bit before it was cleared.\r
+**/\r
+INT32\r
+EFIAPI\r
+TestAndClearBit (\r
+  IN INT32  Bit,\r
+  IN VOID   *Address\r
+  );\r
+\r
+CHAR8 *\r
+AsciiStrDup (\r
+  IN CONST CHAR8  *Str\r
+  );\r
+\r
 #endif\r