]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/XenBusDxe/XenBusDxe.h
OvmfPkg/Csm/LegacyBiosDxe: Fix Legacy16GetTableAddress call for E820 data
[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
26
27 //
28 // UEFI Driver Model Protocols
29 //
30 #include <Protocol/DriverBinding.h>
31
32
33 //
34 // Consumed Protocols
35 //
36 #include <Protocol/XenIo.h>
37
38
39 //
40 // Produced Protocols
41 //
42 #include <Protocol/XenBus.h>
43
44
45 //
46 // Driver Version
47 //
48 #define XENBUS_DXE_VERSION 0x00000010
49
50
51 //
52 // Protocol instances
53 //
54 extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding;
55 extern EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2;
56 extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName;
57
58
59 //
60 // Include files with function prototypes
61 //
62 #include "DriverBinding.h"
63 #include "ComponentName.h"
64
65 //
66 // Other stuff
67 //
68 #include <IndustryStandard/Xen/xen.h>
69
70 typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
71 typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
72
73 // Have the state of the driver.
74 #define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')
75 struct _XENBUS_DEVICE {
76 UINT32 Signature;
77 EFI_DRIVER_BINDING_PROTOCOL *This;
78 EFI_HANDLE ControllerHandle;
79 XENIO_PROTOCOL *XenIo;
80 EFI_EVENT ExitBootEvent;
81 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
82 LIST_ENTRY ChildList;
83
84 shared_info_t *SharedInfo;
85 };
86
87 // There is one of this struct allocated for every child.
88 #define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
89 typedef struct {
90 UINTN Signature;
91 LIST_ENTRY Link;
92 EFI_HANDLE Handle;
93 XENBUS_PROTOCOL XenBusIo;
94 XENBUS_DEVICE *Dev;
95 XENBUS_DEVICE_PATH *DevicePath;
96 } XENBUS_PRIVATE_DATA;
97
98 #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
99 CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
100 #define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
101 CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
102
103 /*
104 * Helpers
105 */
106
107 /**
108 Atomically test and clear a bit.
109
110 @param Bit Bit index to test in *Address
111 @param Address The Address to the buffer that contain the bit to test.
112
113 @return Value of the Bit before it was cleared.
114 **/
115 INT32
116 EFIAPI
117 TestAndClearBit (
118 IN INT32 Bit,
119 IN VOID *Address
120 );
121
122 CHAR8*
123 AsciiStrDup (
124 IN CONST CHAR8* Str
125 );
126
127 #endif