blob: 8b32505cb09c6a7c426ae55d48ca0c66111ef3de [file] [log] [blame]
/** @file
Function declaration and internal data for XenBusDxe.
Copyright (C) 2014, Citrix Ltd.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __EFI_XENBUS_DXE_H__
#define __EFI_XENBUS_DXE_H__
#include <Uefi.h>
//
// Libraries
//
#include <Library/UefiBootServicesTableLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/BaseLib.h>
#include <Library/UefiLib.h>
#include <Library/DevicePathLib.h>
#include <Library/DebugLib.h>
#include <Library/PcdLib.h>
//
// UEFI Driver Model Protocols
//
#include <Protocol/DriverBinding.h>
//
// Consumed Protocols
//
#include <Protocol/XenIo.h>
//
// Produced Protocols
//
#include <Protocol/XenBus.h>
//
// Driver Version
//
#define XENBUS_DXE_VERSION 0x00000010
//
// Protocol instances
//
extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding;
extern EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2;
extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName;
//
// Include files with function prototypes
//
#include "DriverBinding.h"
#include "ComponentName.h"
//
// Other stuff
//
#include <IndustryStandard/Xen/xen.h>
typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH;
typedef struct _XENBUS_DEVICE XENBUS_DEVICE;
// Have the state of the driver.
#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t')
struct _XENBUS_DEVICE {
UINT32 Signature;
EFI_DRIVER_BINDING_PROTOCOL *This;
EFI_HANDLE ControllerHandle;
XENIO_PROTOCOL *XenIo;
EFI_EVENT ExitBootEvent;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
LIST_ENTRY ChildList;
shared_info_t *SharedInfo;
};
// There is one of this struct allocated for every child.
#define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd')
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
EFI_HANDLE Handle;
XENBUS_PROTOCOL XenBusIo;
XENBUS_DEVICE *Dev;
XENBUS_DEVICE_PATH *DevicePath;
} XENBUS_PRIVATE_DATA;
#define XENBUS_PRIVATE_DATA_FROM_THIS(a) \
CR (a, XENBUS_PRIVATE_DATA, XenBusIo, XENBUS_PRIVATE_DATA_SIGNATURE)
#define XENBUS_PRIVATE_DATA_FROM_LINK(a) \
CR (a, XENBUS_PRIVATE_DATA, Link, XENBUS_PRIVATE_DATA_SIGNATURE)
/*
* Helpers
*/
/**
Atomically test and clear a bit.
@param Bit Bit index to test in *Address
@param Address The Address to the buffer that contain the bit to test.
@return Value of the Bit before it was cleared.
**/
INT32
EFIAPI
TestAndClearBit (
IN INT32 Bit,
IN VOID *Address
);
CHAR8 *
AsciiStrDup (
IN CONST CHAR8 *Str
);
#endif