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