1 /** @file
2
3 This file contains support for ACPI Tables that are generated at boot time.
4
5 Copyright (c) 2015, ARM Ltd. All rights reserved.<BR>
6
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #include "ArmPlatform.h"
18 #include "ArmJunoDxeInternal.h"
19
20 #include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
21
22 /*
23 * Memory Mapped Configuration Space Access Table (MCFG)
24 */
25 typedef struct {
26 EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER Header;
27 EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE Entry;
28 } MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE;
29
30 MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE mAcpiMcfgTable = {
31 {
32 ARM_ACPI_HEADER (
33 EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
34 MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ACCESS_TABLE,
35 EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION
36 ),
37 0, // Reserved
38 }, {
39 FixedPcdGet32 (PcdPciConfigurationSpaceBaseAddress),
40 0, // PciSegmentGroupNumber
41 FixedPcdGet32 (PcdPciBusMin),
42 FixedPcdGet32 (PcdPciBusMax),
43 0 // Reserved;
44 }
45 };
46
47 /**
48 * Callback called when ACPI Protocol is installed
49 */
50 VOID
AcpiPciNotificationEvent(IN EFI_EVENT Event,IN VOID * Context)51 AcpiPciNotificationEvent (
52 IN EFI_EVENT Event,
53 IN VOID *Context
54 )
55 {
56 EFI_STATUS Status;
57 EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol;
58 UINTN AcpiTableKey;
59
60 //
61 // Ensure the ACPI protocol is installed
62 //
63 Status = gBS->LocateProtocol (
64 &gEfiAcpiTableProtocolGuid,
65 NULL,
66 (VOID**)&AcpiTableProtocol
67 );
68 if (EFI_ERROR (Status)) {
69 return;
70 }
71
72 //
73 // Install MCFG Table
74 //
75 AcpiTableKey = 0;
76 Status = AcpiTableProtocol->InstallAcpiTable (AcpiTableProtocol, &mAcpiMcfgTable, sizeof (mAcpiMcfgTable), &AcpiTableKey);
77 ASSERT_EFI_ERROR (Status);
78 }
79