]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/XenBusDxe/XenBusDxe.h
Ovmf/Xen: move Xen interface version to <xen.h>
[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/PciIo.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 #define PCI_VENDOR_ID_XEN 0x5853
77 #define PCI_DEVICE_ID_XEN_PLATFORM 0x0001
78
79
80 typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
81 typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
82
83 // Have the state of the driver.
84 #define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')
85 struct _XENBUS_DEVICE {
86 UINT32 Signature;
87 EFI_DRIVER_BINDING_PROTOCOL *This;
88 EFI_HANDLE ControllerHandle;
89 EFI_PCI_IO_PROTOCOL *PciIo;
90 EFI_EVENT ExitBootEvent;
91 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
92 LIST_ENTRY ChildList;
93
94 VOID *Hyperpage;
95 shared_info_t *SharedInfo;
96 };
97
98 // There is one of this struct allocated for every child.
99 #define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
100 typedef struct {
101 UINTN Signature;
102 LIST_ENTRY Link;
103 EFI_HANDLE Handle;
104 XENBUS_PROTOCOL XenBusIo;
105 XENBUS_DEVICE *Dev;
106 XENBUS_DEVICE_PATH *DevicePath;
107 } XENBUS_PRIVATE_DATA;
108
109 #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
110 CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
111 #define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
112 CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
113
114 /*
115 * Helpers
116 */
117
118 /**
119 Atomically test and clear a bit.
120
121 @param Bit Bit index to test in *Address
122 @param Address The Address to the buffer that contain the bit to test.
123
124 @return Value of the Bit before it was cleared.
125 **/
126 INT32
127 EFIAPI
128 TestAndClearBit (
129 IN INT32 Bit,
130 IN volatile VOID *Address
131 );
132
133 CHAR8*
134 AsciiStrDup (
135 IN CONST CHAR8* Str
136 );
137
138 #endif