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
134