]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/XenBusDxe/XenBusDxe.h
OvmfPkg/AmdSevDxe: sort #includes, and entries in INF file sections
[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 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef __EFI_XENBUS_DXE_H__
17 #define __EFI_XENBUS_DXE_H__
18
19 #include <Uefi.h>
20
21 //
22 // Libraries
23 //
24 #include <Library/UefiBootServicesTableLib.h>
25 #include <Library/MemoryAllocationLib.h>
26 #include <Library/BaseMemoryLib.h>
27 #include <Library/BaseLib.h>
28 #include <Library/UefiLib.h>
29 #include <Library/DevicePathLib.h>
30 #include <Library/DebugLib.h>
31
32
33 //
34 // UEFI Driver Model Protocols
35 //
36 #include <Protocol/DriverBinding.h>
37
38
39 //
40 // Consumed Protocols
41 //
42 #include <Protocol/XenIo.h>
43
44
45 //
46 // Produced Protocols
47 //
48 #include <Protocol/XenBus.h>
49
50
51 //
52 // Driver Version
53 //
54 #define XENBUS_DXE_VERSION 0x00000010
55
56
57 //
58 // Protocol instances
59 //
60 extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding;
61 extern EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2;
62 extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName;
63
64
65 //
66 // Include files with function prototypes
67 //
68 #include "DriverBinding.h"
69 #include "ComponentName.h"
70
71 //
72 // Other stuff
73 //
74 #include <IndustryStandard/Xen/xen.h>
75
76 typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
77 typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
78
79 // Have the state of the driver.
80 #define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')
81 struct _XENBUS_DEVICE {
82 UINT32 Signature;
83 EFI_DRIVER_BINDING_PROTOCOL *This;
84 EFI_HANDLE ControllerHandle;
85 XENIO_PROTOCOL *XenIo;
86 EFI_EVENT ExitBootEvent;
87 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
88 LIST_ENTRY ChildList;
89
90 shared_info_t *SharedInfo;
91 };
92
93 // There is one of this struct allocated for every child.
94 #define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
95 typedef struct {
96 UINTN Signature;
97 LIST_ENTRY Link;
98 EFI_HANDLE Handle;
99 XENBUS_PROTOCOL XenBusIo;
100 XENBUS_DEVICE *Dev;
101 XENBUS_DEVICE_PATH *DevicePath;
102 } XENBUS_PRIVATE_DATA;
103
104 #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
105 CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
106 #define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
107 CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
108
109 /*
110 * Helpers
111 */
112
113 /**
114 Atomically test and clear a bit.
115
116 @param Bit Bit index to test in *Address
117 @param Address The Address to the buffer that contain the bit to test.
118
119 @return Value of the Bit before it was cleared.
120 **/
121 INT32
122 EFIAPI
123 TestAndClearBit (
124 IN INT32 Bit,
125 IN VOID *Address
126 );
127
128 CHAR8*
129 AsciiStrDup (
130 IN CONST CHAR8* Str
131 );
132
133 #endif