From 56a71b557eda2b1fad72728e0d4d074a4083ac68 Mon Sep 17 00:00:00 2001 From: klu2 Date: Thu, 5 Jul 2007 15:27:43 +0000 Subject: Porting WinNtFwhPei and WinNtFlashMapPei to produce FvHob. Help to build DxeCore in Nt32Pkg platform. Fix the wrong DebugLib used in Nt32Pkg platform. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3076 6f19259b-4bc3-4df7-8a09-765794883524 --- Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.dxs | 33 +++++++ Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.inf | 96 +++++++++++++++++++ Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.msa | 56 +++++++++++ Nt32Pkg/WinNtFirmwareVolumePei/WinntFwh.c | 138 ++++++++++++++++++++++++++++ 4 files changed, 323 insertions(+) create mode 100644 Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.dxs create mode 100644 Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.inf create mode 100644 Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.msa create mode 100644 Nt32Pkg/WinNtFirmwareVolumePei/WinntFwh.c (limited to 'Nt32Pkg/WinNtFirmwareVolumePei') diff --git a/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.dxs b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.dxs new file mode 100644 index 0000000000..b69c22716d --- /dev/null +++ b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.dxs @@ -0,0 +1,33 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + +Module Name: + + WinNtFwh.dxs + +Abstract: + + Dependency expression file for WinNtFwh PEIM. + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +#include + +DEPENDENCY_START + NT_FWH_PPI_GUID AND EFI_PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID +DEPENDENCY_END + + diff --git a/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.inf b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.inf new file mode 100644 index 0000000000..d90d81822b --- /dev/null +++ b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.inf @@ -0,0 +1,96 @@ +#/** @file +# Component description file for WinNtFwh module +# +# This PEIM will produce the HOB to describe Firmware Volume, Firmware Devices +# on the NT32 emulator. +# Copyright (c) 2006 - 2007, Intel Corporation +# +# All rights reserved. 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 Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = WinNtFwh + FILE_GUID = F0384FFD-8633-452f-9010-F6B7D2EAE2F1 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = PeimInitializeWinNtFwh + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + WinntFwh.c + + +################################################################################ +# +# Includes Section - list of Include locations that are required for +# this module. +# +################################################################################ + +[Includes] + $(WORKSPACE)/MdePkg/Include/Library + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + Nt32Pkg/Nt32Pkg.dec + MdePkg/MdePkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + HobLib + PeimEntryPoint + DebugLib + + +################################################################################ +# +# PPI C Name Section - list of PPI and PPI Notify C Names that this module +# uses or produces. +# +################################################################################ + +[Ppis] + gNtFwhPpiGuid # PPI ALWAYS_CONSUMED + +[depex] + gNtFwhPpiGuid AND gEfiPeiMemoryDiscoveredPpiGuid \ No newline at end of file diff --git a/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.msa b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.msa new file mode 100644 index 0000000000..9d600f2f1c --- /dev/null +++ b/Nt32Pkg/WinNtFirmwareVolumePei/WinNtFwh.msa @@ -0,0 +1,56 @@ + + + + WinNtFwh + PEIM + F0384FFD-8633-452f-9010-F6B7D2EAE2F1 + 1.0 + Component description file for WinNtFwh module + This PEIM will produce the HOB to describe Firmware Volume, Firmware Devices + on the NT32 emulator. + Copyright (c) 2006 - 2007, Intel Corporation + All rights reserved. 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + WinNtFwh + + + + DebugLib + + + PeimEntryPoint + + + HobLib + + + + WinntFwh.c + WinNtFwh.dxs + + + + + + + + gNtFwhPpiGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + PeimInitializeWinNtFwh + + + \ No newline at end of file diff --git a/Nt32Pkg/WinNtFirmwareVolumePei/WinntFwh.c b/Nt32Pkg/WinNtFirmwareVolumePei/WinntFwh.c new file mode 100644 index 0000000000..2431133136 --- /dev/null +++ b/Nt32Pkg/WinNtFirmwareVolumePei/WinntFwh.c @@ -0,0 +1,138 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + +Module Name: + WinNtFwh.c + +Abstract: + PEIM to abstract construction of firmware volume in a Windows NT environment. + +Revision History + +--*/ + +// +// The package level header files this module uses +// +#include +#include +// +// The protocols, PPI and GUID defintions for this module +// +#include +// +// The Library classes this module consumes +// +#include +#include +#include + +#include + + +EFI_STATUS +EFIAPI +PeimInitializeWinNtFwh ( + IN EFI_FFS_FILE_HEADER *FfsHeader, + IN EFI_PEI_SERVICES **PeiServices + ) +/*++ + +Routine Description: + Perform a call-back into the SEC simulator to get address of the Firmware Hub + +Arguments: + FfsHeader - Ffs Header availible to every PEIM + PeiServices - General purpose services available to every PEIM. + +Returns: + None + +--*/ +{ + EFI_STATUS Status; + EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; + NT_FWH_PPI *FwhPpi; + EFI_PHYSICAL_ADDRESS FdBase; + EFI_FIRMWARE_VOLUME_HEADER *FvHeader; + UINT64 FdSize; + UINTN Index; + + DEBUG ((EFI_D_ERROR, "NT 32 Firmware Volume PEIM Loaded\n")); + + // + // Get the Fwh Information PPI + // + Status = (**PeiServices).LocatePpi ( + PeiServices, + &gNtFwhPpiGuid, // GUID + 0, // INSTANCE + &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR + &FwhPpi // PPI + ); + ASSERT_EFI_ERROR (Status); + + Index = 0; + do { + // + // Get information about all the FD's in the system + // + Status = FwhPpi->NtFwh (Index, &FdBase, &FdSize); + if (!EFI_ERROR (Status)) { + // + // Assume the FD starts with an FV header + // + FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) FdBase; + + // + // Make an FV Hob for the first FV in the FD + // + BuildFvHob (FdBase, FvHeader->FvLength); + + if (Index == 0) { + // + // Assume the first FD was produced by the NT32.DSC + // All these strange offests are needed to keep in + // sync with the FlashMap and NT32.dsc file + // + BuildResourceDescriptorHob ( + EFI_RESOURCE_FIRMWARE_DEVICE, + (EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE), + FdBase, + (FvHeader->FvLength + EFI_WINNT_RUNTIME_UPDATABLE_LENGTH + EFI_WINNT_FTW_SPARE_BLOCK_LENGTH) + ); + + // + // Hard code the address of the spare block and variable services. + // Assume it's a hard coded offset from FV0 in FD0. + // + FdBase = FdBase + EFI_WINNT_RUNTIME_UPDATABLE_OFFSET; + FdSize = EFI_WINNT_RUNTIME_UPDATABLE_LENGTH + EFI_WINNT_FTW_SPARE_BLOCK_LENGTH; + + BuildFvHob (FdBase, FdSize); + } else { + // + // For other FD's just map them in. + // + BuildResourceDescriptorHob ( + EFI_RESOURCE_FIRMWARE_DEVICE, + (EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE), + FdBase, + FdSize + ); + } + } + + Index++; + } while (!EFI_ERROR (Status)); + + return Status; +} -- cgit v1.2.3