/** @file
  Work with PCI capabilities in PCI config space -- internal type definitions.

  Copyright (C) 2018, Red Hat, Inc.

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#pragma once

#include <Library/OrderedCollectionLib.h>

#include <Library/PciCapLib.h>

//
// Structure that uniquely identifies a capability instance and serves as key
// for insertion and lookup.
//
typedef struct {
  PCI_CAP_DOMAIN    Domain;
  UINT16            CapId;
  UINT16            Instance;
} PCI_CAP_KEY;

//
// In Instance==0 PCI_CAP objects, store NumInstances directly. In Instance>0
// PCI_CAP objects, link Instance#0 of the same (Domain, CapId). This way
// NumInstances needs maintenance in one object only, per (Domain, CapId) pair.
//
typedef union {
  UINT16     NumInstances;
  PCI_CAP    *InstanceZero;
} PCI_CAP_NUM_INSTANCES;

//
// Complete the incomplete PCI_CAP structure here.
//
struct PCI_CAP {
  PCI_CAP_KEY              Key;
  PCI_CAP_NUM_INSTANCES    NumInstancesUnion;
  UINT16                   Offset;
  UINT16                   MaxSizeHint;
  UINT8                    Version;
};

//
// Complete the incomplete PCI_CAP_LIST structure here.
//
struct PCI_CAP_LIST {
  ORDERED_COLLECTION    *Capabilities;
};
