summaryrefslogtreecommitdiff
path: root/UefiCpuPkg/CpuS3DataDxe
diff options
context:
space:
mode:
authorGuo Mang <mang.guo@intel.com>2017-04-27 11:22:26 +0800
committerGuo Mang <mang.guo@intel.com>2017-04-27 11:22:26 +0800
commit38c2cbb9354d7f58e48f9f649f23eb9bd0d3cfca (patch)
tree1d4540cd9c19c47d10a161184c8f1a12f8ffc455 /UefiCpuPkg/CpuS3DataDxe
parentc6ff7c547bfc71da9d5e71a73984b9d3a4ea0809 (diff)
downloadedk2-platforms-38c2cbb9354d7f58e48f9f649f23eb9bd0d3cfca.tar.xz
UefiCpuPkg: Move to new location
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'UefiCpuPkg/CpuS3DataDxe')
-rw-r--r--UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c292
-rw-r--r--UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf70
-rw-r--r--UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.uni40
-rw-r--r--UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxeExtra.uni20
4 files changed, 0 insertions, 422 deletions
diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c b/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c
deleted file mode 100644
index dccb406b8d..0000000000
--- a/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/** @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) 2013 - 2017, 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.
-
-**/
-
-#include <PiDxe.h>
-
-#include <AcpiCpuData.h>
-
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/DebugLib.h>
-#include <Library/MtrrLib.h>
-
-#include <Protocol/MpService.h>
-#include <Guid/EventGroup.h>
-
-//
-// Data structure used to allocate ACPI_CPU_DATA and its supporting structures
-//
-typedef struct {
- ACPI_CPU_DATA AcpiCpuData;
- MTRR_SETTINGS MtrrTable;
- IA32_DESCRIPTOR GdtrProfile;
- IA32_DESCRIPTOR IdtrProfile;
-} ACPI_CPU_DATA_EX;
-
-/**
- Allocate EfiACPIMemoryNVS below 4G memory address.
-
- This function allocates EfiACPIMemoryNVS below 4G memory address.
-
- @param[in] Size Size of memory to allocate.
-
- @return Allocated address for output.
-
-**/
-VOID *
-AllocateAcpiNvsMemoryBelow4G (
- IN UINTN Size
- )
-{
- EFI_PHYSICAL_ADDRESS Address;
- EFI_STATUS Status;
- VOID *Buffer;
-
- Address = BASE_4GB - 1;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (Size),
- &Address
- );
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- Buffer = (VOID *)(UINTN)Address;
- ZeroMem (Buffer, Size);
-
- return Buffer;
-}
-
-/**
- Callback function executed when the EndOfDxe event group is signaled.
-
- We delay allocating StartupVector and saving the MTRR settings until BDS signals EndOfDxe.
-
- @param[in] Event Event whose notification function is being invoked.
- @param[out] Context Pointer to the MTRR_SETTINGS buffer to fill in.
-**/
-VOID
-EFIAPI
-CpuS3DataOnEndOfDxe (
- IN EFI_EVENT Event,
- OUT VOID *Context
- )
-{
- EFI_STATUS Status;
- ACPI_CPU_DATA_EX *AcpiCpuDataEx;
-
- AcpiCpuDataEx = (ACPI_CPU_DATA_EX *) Context;
- //
- // Allocate a 4KB reserved page below 1MB
- //
- AcpiCpuDataEx->AcpiCpuData.StartupVector = BASE_1MB - 1;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiReservedMemoryType,
- 1,
- &AcpiCpuDataEx->AcpiCpuData.StartupVector
- );
- ASSERT_EFI_ERROR (Status);
-
- DEBUG ((EFI_D_VERBOSE, "%a\n", __FUNCTION__));
- MtrrGetAllMtrrs (&AcpiCpuDataEx->MtrrTable);
-
- //
- // Close event, so it will not be invoked again.
- //
- gBS->CloseEvent (Event);
-}
-
-/**
- The entry function of the CpuS3Data driver.
-
- Allocate and initialize all fields of the ACPI_CPU_DATA structure except the
- MTRR settings. Register an event notification on gEfiEndOfDxeEventGroupGuid
- to capture the ACPI_CPU_DATA MTRR settings. The PcdCpuS3DataAddress is set
- to the address that ACPI_CPU_DATA is allocated at.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval EFI_UNSUPPORTED Do not support ACPI S3.
- @retval other Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-CpuS3DataInitialize (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- ACPI_CPU_DATA_EX *AcpiCpuDataEx;
- ACPI_CPU_DATA *AcpiCpuData;
- EFI_MP_SERVICES_PROTOCOL *MpServices;
- UINTN NumberOfCpus;
- UINTN NumberOfEnabledProcessors;
- VOID *Stack;
- UINTN TableSize;
- CPU_REGISTER_TABLE *RegisterTable;
- UINTN Index;
- EFI_PROCESSOR_INFORMATION ProcessorInfoBuffer;
- UINTN GdtSize;
- UINTN IdtSize;
- VOID *Gdt;
- VOID *Idt;
- EFI_EVENT Event;
- ACPI_CPU_DATA *OldAcpiCpuData;
-
- if (!PcdGetBool (PcdAcpiS3Enable)) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Set PcdCpuS3DataAddress to the base address of the ACPI_CPU_DATA structure
- //
- OldAcpiCpuData = (ACPI_CPU_DATA *) (UINTN) PcdGet64 (PcdCpuS3DataAddress);
-
- //
- // Allocate ACPI NVS memory below 4G memory for use on ACPI S3 resume.
- //
- AcpiCpuDataEx = AllocateAcpiNvsMemoryBelow4G (sizeof (ACPI_CPU_DATA_EX));
- ASSERT (AcpiCpuDataEx != NULL);
- AcpiCpuData = &AcpiCpuDataEx->AcpiCpuData;
-
- //
- // Get MP Services Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiMpServiceProtocolGuid,
- NULL,
- (VOID **)&MpServices
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Get the number of CPUs
- //
- Status = MpServices->GetNumberOfProcessors (
- MpServices,
- &NumberOfCpus,
- &NumberOfEnabledProcessors
- );
- ASSERT_EFI_ERROR (Status);
- AcpiCpuData->NumberOfCpus = (UINT32)NumberOfCpus;
-
- //
- // Initialize ACPI_CPU_DATA fields
- //
- AcpiCpuData->StackSize = PcdGet32 (PcdCpuApStackSize);
- AcpiCpuData->ApMachineCheckHandlerBase = 0;
- AcpiCpuData->ApMachineCheckHandlerSize = 0;
- AcpiCpuData->GdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->GdtrProfile;
- AcpiCpuData->IdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->IdtrProfile;
- AcpiCpuData->MtrrTable = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->MtrrTable;
-
- //
- // Allocate stack space for all CPUs
- //
- Stack = AllocateAcpiNvsMemoryBelow4G (NumberOfCpus * AcpiCpuData->StackSize);
- ASSERT (Stack != NULL);
- AcpiCpuData->StackAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Stack;
-
- //
- // Get the boot processor's GDT and IDT
- //
- AsmReadGdtr (&AcpiCpuDataEx->GdtrProfile);
- AsmReadIdtr (&AcpiCpuDataEx->IdtrProfile);
-
- //
- // Allocate GDT and IDT in ACPI NVS and copy current GDT and IDT contents
- //
- GdtSize = AcpiCpuDataEx->GdtrProfile.Limit + 1;
- IdtSize = AcpiCpuDataEx->IdtrProfile.Limit + 1;
- Gdt = AllocateAcpiNvsMemoryBelow4G (GdtSize + IdtSize);
- ASSERT (Gdt != NULL);
- Idt = (VOID *)((UINTN)Gdt + GdtSize);
- CopyMem (Gdt, (VOID *)AcpiCpuDataEx->GdtrProfile.Base, GdtSize);
- CopyMem (Idt, (VOID *)AcpiCpuDataEx->IdtrProfile.Base, IdtSize);
- AcpiCpuDataEx->GdtrProfile.Base = (UINTN)Gdt;
- AcpiCpuDataEx->IdtrProfile.Base = (UINTN)Idt;
-
- if (OldAcpiCpuData != NULL) {
- AcpiCpuData->RegisterTable = OldAcpiCpuData->RegisterTable;
- AcpiCpuData->PreSmmInitRegisterTable = OldAcpiCpuData->PreSmmInitRegisterTable;
- } else {
- //
- // Allocate buffer for empty RegisterTable and PreSmmInitRegisterTable for all CPUs
- //
- TableSize = 2 * NumberOfCpus * sizeof (CPU_REGISTER_TABLE);
- RegisterTable = (CPU_REGISTER_TABLE *)AllocateAcpiNvsMemoryBelow4G (TableSize);
- ASSERT (RegisterTable != NULL);
-
- for (Index = 0; Index < NumberOfCpus; Index++) {
- Status = MpServices->GetProcessorInfo (
- MpServices,
- Index,
- &ProcessorInfoBuffer
- );
- ASSERT_EFI_ERROR (Status);
-
- RegisterTable[Index].InitialApicId = (UINT32)ProcessorInfoBuffer.ProcessorId;
- RegisterTable[Index].TableLength = 0;
- RegisterTable[Index].AllocatedSize = 0;
- RegisterTable[Index].RegisterTableEntry = 0;
-
- RegisterTable[NumberOfCpus + Index].InitialApicId = (UINT32)ProcessorInfoBuffer.ProcessorId;
- RegisterTable[NumberOfCpus + Index].TableLength = 0;
- RegisterTable[NumberOfCpus + Index].AllocatedSize = 0;
- RegisterTable[NumberOfCpus + Index].RegisterTableEntry = 0;
- }
- AcpiCpuData->RegisterTable = (EFI_PHYSICAL_ADDRESS)(UINTN)RegisterTable;
- AcpiCpuData->PreSmmInitRegisterTable = (EFI_PHYSICAL_ADDRESS)(UINTN)(RegisterTable + NumberOfCpus);
- }
-
- //
- // Set PcdCpuS3DataAddress to the base address of the ACPI_CPU_DATA structure
- //
- Status = PcdSet64S (PcdCpuS3DataAddress, (UINT64)(UINTN)AcpiCpuData);
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register EFI_END_OF_DXE_EVENT_GROUP_GUID event.
- // The notification function allocates StartupVector and saves MTRRs for ACPI_CPU_DATA
- //
- Status = gBS->CreateEventEx (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- CpuS3DataOnEndOfDxe,
- AcpiCpuData,
- &gEfiEndOfDxeEventGroupGuid,
- &Event
- );
- ASSERT_EFI_ERROR (Status);
-
- return EFI_SUCCESS;
-}
diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf b/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
deleted file mode 100644
index 480c98ebcd..0000000000
--- a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+++ /dev/null
@@ -1,70 +0,0 @@
-## @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) 2013-2016, 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.
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = CpuS3DataDxe
- MODULE_UNI_FILE = CpuS3DataDxe.uni
- FILE_GUID = 4D2E57EE-0E3F-44DD-93C4-D3B57E96945D
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = CpuS3DataInitialize
-
-# The following information is for reference only and not required by the build
-# tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-
-[Sources]
- CpuS3Data.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- UefiCpuPkg/UefiCpuPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- BaseMemoryLib
- DebugLib
- BaseLib
- MtrrLib
-
-[Guids]
- gEfiEndOfDxeEventGroupGuid ## CONSUMES ## Event
-
-[Protocols]
- gEfiMpServiceProtocolGuid ## CONSUMES
-
-[Pcd]
- gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize ## CONSUMES
- gUefiCpuPkgTokenSpaceGuid.PcdCpuS3DataAddress ## PRODUCES
- gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable ## CONSUMES
-
-[Depex]
- gEfiMpServiceProtocolGuid
-
-[UserExtensions.TianoCore."ExtraFiles"]
- CpuS3DataDxeExtra.uni
diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.uni b/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.uni
deleted file mode 100644
index 4a0218f180..0000000000
--- a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.uni
+++ /dev/null
@@ -1,40 +0,0 @@
-// /** @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."
-
-
diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxeExtra.uni b/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxeExtra.uni
deleted file mode 100644
index 050f25f843..0000000000
--- a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxeExtra.uni
+++ /dev/null
@@ -1,20 +0,0 @@
-// /** @file
-// CpuS3DataDxe Localized Strings and Content
-//
-// 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_PROPERTIES_MODULE_NAME #language en-US "CpuS3DataDxe module"
-
-