\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
//\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