]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/XenBusDxe/XenBusDxe.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / XenBusDxe / XenBusDxe.h
1 /** @file
2 Function declaration and internal data for XenBusDxe.
3
4 Copyright (C) 2014, Citrix Ltd.
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef __EFI_XENBUS_DXE_H__
11 #define __EFI_XENBUS_DXE_H__
12
13 #include <Uefi.h>
14
15 //
16 // Libraries
17 //
18 #include <Library/UefiBootServicesTableLib.h>
19 #include <Library/MemoryAllocationLib.h>
20 #include <Library/BaseMemoryLib.h>
21 #include <Library/BaseLib.h>
22 #include <Library/UefiLib.h>
23 #include <Library/DevicePathLib.h>
24 #include <Library/DebugLib.h>
25 #include <Library/PcdLib.h>
26
27
28 //
29 // UEFI Driver Model Protocols
30 //
31 #include <Protocol/DriverBinding.h>
32
33
34 //
35 // Consumed Protocols
36 //
37 #include <Protocol/XenIo.h>
38
39
40 //
41 // Produced Protocols
42 //
43 #include <Protocol/XenBus.h>
44
45
46 //
47 // Driver Version
48 //
49 #define XENBUS_DXE_VERSION 0x00000010
50
51
52 //
53 // Protocol instances
54 //
55 extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding;
56 extern EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2;
57 extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName;
58
59
60 //
61 // Include files with function prototypes
62 //
63 #include "DriverBinding.h"
64 #include "ComponentName.h"
65
66 //
67 // Other stuff
68 //
69 #include <IndustryStandard/Xen/xen.h>
70
71 typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
72 typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
73
74 // Have the state of the driver.
75 #define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')
76 struct _XENBUS_DEVICE {
77 UINT32 Signature;
78 EFI_DRIVER_BINDING_PROTOCOL *This;
79 EFI_HANDLE ControllerHandle;
80 XENIO_PROTOCOL *XenIo;
81 EFI_EVENT ExitBootEvent;
82 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
83 LIST_ENTRY ChildList;
84
85 shared_info_t *SharedInfo;
86 };
87
88 // There is one of this struct allocated for every child.
89 #define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
90 typedef struct {
91 UINTN Signature;
92 LIST_ENTRY Link;
93 EFI_HANDLE Handle;
94 XENBUS_PROTOCOL XenBusIo;
95 XENBUS_DEVICE *Dev;
96 XENBUS_DEVICE_PATH *DevicePath;
97 } XENBUS_PRIVATE_DATA;
98
99 #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
100 CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
101 #define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
102 CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
103
104 /*
105 * Helpers
106 */
107
108 /**
109 Atomically test and clear a bit.
110
111 @param Bit Bit index to test in *Address
112 @param Address The Address to the buffer that contain the bit to test.
113
114 @return Value of the Bit before it was cleared.
115 **/
116 INT32
117 EFIAPI
118 TestAndClearBit (
119 IN INT32 Bit,
120 IN VOID *Address
121 );
122
123 CHAR8*
124 AsciiStrDup (
125 IN CONST CHAR8* Str
126 );
127
128 #endif