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