/** @file
  Plug an EFI_PCI_IO_PROTOCOL backend into PciCapLib, for config space access
  -- internal macro and type definitions.

  Copyright (C) 2018, Red Hat, Inc.

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef __UEFI_PCI_CAP_PCI_IO_LIB_H__
#define __UEFI_PCI_CAP_PCI_IO_LIB_H__

#include <Library/DebugLib.h>

#include <Library/PciCapPciIoLib.h>

#define PROTO_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'I', 'O', 'P', 'R', 'T')

typedef struct {
  //
  // Signature identifying the derived class.
  //
  UINT64 Signature;
  //
  // Members added by the derived class, specific to the use of
  // EFI_PCI_IO_PROTOCOL.
  //
  EFI_PCI_IO_PROTOCOL *PciIo;
  //
  // Base class.
  //
  PCI_CAP_DEV BaseDevice;
} PROTO_DEV;

#define PROTO_DEV_FROM_PCI_CAP_DEV(PciDevice) \
  CR (PciDevice, PROTO_DEV, BaseDevice, PROTO_DEV_SIG)

#endif // __UEFI_PCI_CAP_PCI_IO_LIB_H__
