/*++

  Copyright (c) 2004  - 2014, Intel Corporation. All rights reserved.<BR>

  This program and the accompanying materials are licensed and made available under
  the terms and conditions of the BSD License that accompanies this distribution.
  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.



Module Name:

  Mcfg.c

Abstract:

  This file contains a structure definition for the ACPI Memory mapped
  configuration space base address Description Table (MCFG).  Any changes
  to the MCFG table require updating the respective structure count in
  Mcfg.h and then adding the structure to the MCFG defined in this file.
  The table layout is defined in Mcfg.h and the table contents are defined
  in McfgTable.h and Mcfg.h.

--*/

//
// Statements that include other files
//
#include <Mcfg.h>

//
// MCFG Table definition
//
EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE MCFG = {
  EFI_ACPI_3_0_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_SIGNATURE,
  sizeof (EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE),
  EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_REVISION,
  //
  // Checksum will be updated at runtime
  //
  0x00,
  //
  // It is expected that these values will be programmed at runtime
  //
  ' ',
  ' ',
  ' ',
  ' ',
  ' ',
  ' ',

  0,
  EFI_ACPI_OEM_MCFG_REVISION,
  0,
  0,
  //
  // Beginning of MCFG specific fields
  //
  EFI_ACPI_RESERVED_QWORD,
  //
  // Sample Memory Mapped Configuration Space Base Address Structure
  //
  // 0x0,                                                              // Base Address
  // 0x0,                                                              // PCI Segment Group Number
  // 0x0,                                                              // Start Bus Number
  // 0x0,                                                              // End Bus Number
  // EFI_ACPI_RESERVED_DWORD,                                          // Reserved
  //
  // Memory Mapped Configuration Space Base Address Structure
  //
  0x0,                      // Base Address, will be updated by AcpiPlatform
  0x0,                      // PCI Segment Group Number
  0x0,                      // Start Bus Number
  PLATFORM_MAX_BUS_NUM,     // End Bus Number
  EFI_ACPI_RESERVED_DWORD,  // Reserved
};

VOID*
ReferenceAcpiTable (
  VOID
  )
{
  //
  // Reference the table being generated to prevent the optimizer from
  // removing the data structure from the executable
  //
  return (VOID*)&MCFG;
}
