/** @file
Plug a PciSegmentLib 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 __BASE_PCI_CAP_PCI_SEGMENT_LIB_H__
#define __BASE_PCI_CAP_PCI_SEGMENT_LIB_H__
#include <Library/DebugLib.h>
#include <Library/PciCapPciSegmentLib.h>
#define SEGMENT_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'S', 'G', 'M', 'N', 'T')
typedef struct {
//
// Signature identifying the derived class.
UINT64 Signature;
// Members added by the derived class, specific to the use of PciSegmentLib.
PCI_CAP_DOMAIN MaxDomain;
UINT16 SegmentNr;
UINT8 BusNr;
UINT8 DeviceNr;
UINT8 FunctionNr;
// Base class.
PCI_CAP_DEV BaseDevice;
} SEGMENT_DEV;
#define SEGMENT_DEV_FROM_PCI_CAP_DEV(PciDevice) \
CR (PciDevice, SEGMENT_DEV, BaseDevice, SEGMENT_DEV_SIG)
#endif // __BASE_PCI_CAP_PCI_SEGMENT_LIB_H__