/** @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
