text: /** @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__
  