// /** @file
// ACPI CPU Data initialization module
//
// This module initializes the ACPI_CPU_DATA structure and registers the address
// of this structure in the PcdCpuS3DataAddress PCD.  This is a generic/simple
// version of this module.  It does not provide a machine check handler or CPU
// register initialization tables for ACPI S3 resume.  It also only supports the
// number of CPUs reported by the MP Services Protocol, so this module does not
// support hot plug CPUs.  This module can be copied into a CPU specific package
// and customized if these additional features are required.
//
// Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
//
// Copyright (c) 2015, Red Hat, Inc.
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which 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.
//
// **/

#string STR_MODULE_ABSTRACT
#language en-US
"ACPI CPU Data initialization module"

#string STR_MODULE_DESCRIPTION
#language en-US
"This module initializes the ACPI_CPU_DATA structure and registers the address "
"of this structure in the PcdCpuS3DataAddress PCD.  This is a generic/simple "
"version of this module.  It does not provide a machine check handler or CPU "
"register initialization tables for ACPI S3 resume.  It also only supports the "
"number of CPUs reported by the MP Services Protocol, so this module does not "
"support hot plug CPUs.  This module can be copied into a CPU specific package "
"and customized if these additional features are required."


