]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/XenBusDxe/XenBusDxe.h
9b7219906a69f19788469816f46cc800c40f9c90
[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 shared_info_t *SharedInfo;
95 };
96
97 // There is one of this struct allocated for every child.
98 #define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
99 typedef struct {
100 UINTN Signature;
101 LIST_ENTRY Link;
102 EFI_HANDLE Handle;
103 XENBUS_PROTOCOL XenBusIo;
104 XENBUS_DEVICE *Dev;
105 XENBUS_DEVICE_PATH *DevicePath;
106 } XENBUS_PRIVATE_DATA;
107
108 #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
109 CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
110 #define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
111 CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
112
113 /*
114 * Helpers
115 */
116
117 /**
118 Atomically test and clear a bit.
119
120 @param Bit Bit index to test in *Address
121 @param Address The Address to the buffer that contain the bit to test.
122
123 @return Value of the Bit before it was cleared.
124 **/
125 INT32
126 EFIAPI
127 TestAndClearBit (
128 IN INT32 Bit,
129 IN volatile VOID *Address
130 );
131
132 CHAR8*
133 AsciiStrDup (
134 IN CONST CHAR8* Str
135 );
136
137 #endif