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