hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/** @file
 
  This file contains support for ACPI Tables that are generated at boot time.
 
  Copyright (c) 2015, ARM Ltd. All rights reserved.<BR>
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
#include "ArmPlatform.h"
#include "ArmJunoDxeInternal.h"
 
#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
 
/*
 * Memory Mapped Configuration Space Access Table (MCFG)
 */
typedef struct {
  EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER                        Header;
  EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE Entry;
} MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE;
 
MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE mAcpiMcfgTable = {
    {
        ARM_ACPI_HEADER (
          EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
          MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE,
          EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION
        ),
        0, // Reserved
    }, {
        FixedPcdGet32 (PcdPciConfigurationSpaceBaseAddress),
        0, // PciSegmentGroupNumber
        FixedPcdGet32 (PcdPciBusMin),
        FixedPcdGet32 (PcdPciBusMax),
        0 // Reserved;
    }
};
 
/**
 * Callback called when ACPI Protocol is installed
 */
VOID
AcpiPciNotificationEvent (
  IN  EFI_EVENT                Event,
  IN  VOID                     *Context
  )
{
  EFI_STATUS                Status;
  EFI_ACPI_TABLE_PROTOCOL   *AcpiTableProtocol;
  UINTN                     AcpiTableKey;
 
  //
  // Ensure the ACPI protocol is installed
  //
  Status = gBS->LocateProtocol (
                  &gEfiAcpiTableProtocolGuid,
                  NULL,
                  (VOID**)&AcpiTableProtocol
                  );
  if (EFI_ERROR (Status)) {
    return;
  }
 
  //
  // Install MCFG Table
  //
  AcpiTableKey = 0;
  Status = AcpiTableProtocol->InstallAcpiTable (AcpiTableProtocol, &mAcpiMcfgTable, sizeof (mAcpiMcfgTable), &AcpiTableKey);
  ASSERT_EFI_ERROR (Status);
}