MdeModule cleanup for PI:

1) PeiMain:
   - Use PCD for bundle of status code which definitions are put into MdePkg.dec file.
2) DxeMain:
   - Use PCD for bundle of status code which definitions are put into MdePkg.dec file.
   - Do not produce SectionExtraction protocol which is belong to IntelFramework specification.
   - Update many macro for PI specifications.
3) DxeIpl
   - Use PCD for bundle of status code which definitions are put into MdePkg.dec file.
4) Add SectionExtractionDxe module (IntelFrameworkModulePkg)
   - This module will produce EFI_SECTION_EXTRACTION_PROTOCOL defined in framework specification. If a old platform want to use this protocol, then this platform need dispatch this DXE driver.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4376 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
klu2 2007-12-10 03:47:56 +00:00
parent 256a0cc3c2
commit 797a9d6791
24 changed files with 1716 additions and 269 deletions

View File

@ -199,7 +199,7 @@
IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
IntelFrameworkModulePkg/Library/BaseReportStatusCodeLib/BaseReportStatusCodeLib.inf
IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtractionDxe.inf
[Components.IA32]
IntelFrameworkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.inf

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,64 @@
/**@file
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:
SectionExtraction.c
Abstract:
Section Extraction Protocol implementation.
Stream database is implemented as a linked list of section streams,
where each stream contains a linked list of children, which may be leaves or
encapsulations.
Children that are encapsulations generate new stream entries
when they are created. Streams can also be created by calls to
SEP->OpenSectionStream().
The database is only created far enough to return the requested data from
any given stream, or to determine that the requested data is not found.
If a GUIDed encapsulation is encountered, there are three possiblilites.
1) A support protocol is found, in which the stream is simply processed with
the support protocol.
2) A support protocol is not found, but the data is available to be read
without processing. In this case, the database is built up through the
recursions to return the data, and a RPN event is set that will enable
the stream in question to be refreshed if and when the required section
extraction protocol is published.This insures the AuthenticationStatus
does not become stale in the cache.
3) A support protocol is not found, and the data is not available to be read
without it. This results in EFI_PROTOCOL_ERROR.
**/
#ifndef _SECION_EXTRACTION_H_
#define _SECION_EXTRACTION_H_
#include <FrameworkDxe.h>
#include <Protocol/SectionExtraction.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <Protocol/Decompress.h>
#include <Protocol/GuidedSectionExtraction.h>
#endif // _SECTION_EXTRACTION_H_

View File

@ -0,0 +1,52 @@
#/** @file
# Section Extraction Dxe Driver.
#
# Status Code Architectural Protocol implementation as defined in Tiano
# Architecture Specification. This driver has limited functionality
# at runtime and will not log to Data Hub at runtime.
# 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.
#
#
#**/
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = SectionExtractionDxe
FILE_GUID = 801ADCA0-815E-46a4-84F7-657F53621A57
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
EDK_RELEASE_VERSION = 0x00020000
EFI_SPECIFICATION_VERSION = 0x00020000
ENTRY_POINT = SectionExtractionEntryPoint
[Sources]
SectionExtraction.c
SectionExtraction.h
[LibraryClasses]
UefiBootServicesTableLib
MemoryAllocationLib
UefiLib
DebugLib
BaseLib
BaseMemoryLib
UefiDriverEntryPoint
[Packages]
MdePkg/MdePkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
[Protocols]
gEfiSectionExtractionProtocolGuid # ALWAYS_PRODUCED
gEfiDecompressProtocolGuid # ALWAYS_CONSUMED
[Depex]
TRUE

View File

@ -1,21 +1,5 @@
/*++
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:
Dispatcher.c
Abstract:
Tiano DXE Dispatcher.
/**@file
DXE Dispatcher.
Step #1 - When a FV protocol is added to the system every driver in the FV
is added to the mDiscoveredList. The SOR, Before, and After Depex are
@ -42,7 +26,16 @@ Abstract:
Depex - Dependency Expresion.
SOR - Schedule On Request - Don't schedule if this bit is set.
--*/
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.
**/
#include <DxeMain.h>
@ -490,9 +483,15 @@ Returns:
CoreReleaseDispatcherLock ();
CoreReportProgressCodeSpecific (EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_BEGIN, DriverEntry->ImageHandle);
CoreReportProgressCodeSpecific (
FixedPcdGet32(PcdStatusCodeValueDxeDriverBegin),
DriverEntry->ImageHandle
);
Status = CoreStartImage (DriverEntry->ImageHandle, NULL, NULL);
CoreReportProgressCodeSpecific (EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_END, DriverEntry->ImageHandle);
CoreReportProgressCodeSpecific (
FixedPcdGet32(PcdStatusCodeValueDxeDriverEnd),
DriverEntry->ImageHandle
);
ReturnStatus = EFI_SUCCESS;
}

View File

@ -1,5 +1,6 @@
/*++
/**@file
Header file of DxeCore
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
@ -9,15 +10,7 @@ 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:
DxeMain.h
Abstract:
Revision History
--*/
**/
#ifndef _DXE_MAIN_H_
#define _DXE_MAIN_H_
@ -25,11 +18,9 @@ Revision History
#include <PiDxe.h>
#include <FrameworkPei.h>
#include <Protocol/LoadedImage.h>
#include <Protocol/GuidedSectionExtraction.h>
#include <Protocol/SectionExtraction.h>
#include <Guid/DebugImageInfoTable.h>
#include <Protocol/DevicePath.h>
#include <Protocol/Runtime.h>
@ -69,7 +60,6 @@ Revision History
#include <Protocol/Capsule.h>
#include <Protocol/BusSpecificDriverOverride.h>
#include <Protocol/Performance.h>
#include <Guid/StatusCodeDataTypeId.h>
#include <Library/DxeCoreEntryPoint.h>
#include <Library/DebugLib.h>
@ -82,6 +72,7 @@ Revision History
#include <Library/CacheMaintenanceLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/PeCoffLib.h>
#include <Library/PcdLib.h>
#include <Library/MemoryAllocationLib.h>
#include "DebugImageInfo.h"
@ -133,6 +124,13 @@ typedef struct {
BOOLEAN Present;
} ARCHITECTURAL_PROTOCOL_ENTRY;
typedef struct {
EFI_STATUS_CODE_DATA DataHeader;
EFI_HANDLE Handle;
} EFI_DXE_DEVICE_HANDLE_EXTENDED_DATA;
#define EFI_STATUS_CODE_DXE_CORE_GUID \
{ 0x335984bd, 0xe805, 0x409a, { 0xb8, 0xf8, 0xd2, 0x7e, 0xce, 0x5f, 0xf7, 0xa6 } }
//
// DXE Dispatcher Data structures
@ -2839,4 +2837,30 @@ DxeMainCustomDecompress (
IN UINT32 ScratchSize
);
EFI_STATUS
EFIAPI
OpenSectionStream (
IN UINTN SectionStreamLength,
IN VOID *SectionStream,
OUT UINTN *SectionStreamHandle
);
EFI_STATUS
EFIAPI
GetSection (
IN UINTN SectionStreamHandle,
IN EFI_SECTION_TYPE *SectionType,
IN EFI_GUID *SectionDefinitionGuid,
IN UINTN SectionInstance,
IN VOID **Buffer,
IN OUT UINTN *BufferSize,
OUT UINT32 *AuthenticationStatus
);
EFI_STATUS
EFIAPI
CloseSectionStream (
IN UINTN StreamHandleToClose
);
#endif

View File

@ -73,7 +73,6 @@
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
BaseMemoryLib
@ -134,4 +133,10 @@
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiLoadedImageProtocolGuid # PROTOCOL ALWAYS_PRODUCED
gEfiEbcProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
gEfiSectionExtractionProtocolGuid # PROTOCOL ALWAYS_PRODUCED
[FixedPcd.common]
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeCoreEntry | 0x3041000 # EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeCoreHandoffToBds | 0x3041001 # EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueBootServiceExit | 0x3100019 # EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeDriverBegin | 0x3040002 # EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_BEGIN
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeDriverEnd | 0x3040003 # EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_END

View File

@ -1,5 +1,6 @@
/*++
/**@file
DXE Core Main Entry Point
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
@ -9,15 +10,7 @@ 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:
DxeMain.c
Abstract:
DXE Core Main Entry Point
--*/
**/
#include <DxeMain.h>
@ -328,7 +321,7 @@ Returns:
//
// Report Status Code here for DXE_ENTRY_POINT once it is available
//
CoreReportProgressCode ((EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT));
CoreReportProgressCode (FixedPcdGet32(PcdStatusCodeValueDxeCoreEntry));
//
// Create the aligned system table pointer structure that is used by external
@ -423,7 +416,7 @@ Returns:
//
// Report Status code before transfer control to BDS
//
CoreReportProgressCode ((EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT));
CoreReportProgressCode (FixedPcdGet32 (PcdStatusCodeValueDxeCoreHandoffToBds));
//
// Display any drivers that were not dispatched because dependency expression
// evaluated to false if this is a debug build
@ -789,7 +782,7 @@ Returns:
//
// We are using gEfiCallerIdGuid as the caller ID for Dxe Core
//
CoreReportProgressCode ((EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES));
CoreReportProgressCode (FixedPcdGet32 (PcdStatusCodeValueBootServiceExit));
//
// Clear the non-runtime values of the EFI System Table

View File

@ -151,7 +151,7 @@ Returns:
//
// Close stream and free resources from SEP
//
FfsFileEntry->Sep->CloseSectionStream (FfsFileEntry->Sep, FfsFileEntry->StreamHandle);
CloseSectionStream (FfsFileEntry->StreamHandle);
}
CoreFreePool (FfsFileEntry);
@ -281,7 +281,7 @@ Returns:
//
// Scan to check the free space & File list
//
if (FvbAttributes & EFI_FVB_ERASE_POLARITY) {
if (FvbAttributes & EFI_FVB2_ERASE_POLARITY) {
FvDevice->ErasePolarity = 1;
} else {
FvDevice->ErasePolarity = 0;

View File

@ -413,7 +413,6 @@ FvReadFileSection (
EFI_FV_FILE_ATTRIBUTES FileAttributes;
UINTN FileSize;
UINT8 *FileBuffer;
EFI_SECTION_EXTRACTION_PROTOCOL *Sep;
FFS_FILE_LIST_ENTRY *FfsEntry;
if (NULL == NameGuid || Buffer == NULL) {
@ -456,17 +455,7 @@ FvReadFileSection (
// Use FfsEntry to cache Section Extraction Protocol Inforomation
//
if (FfsEntry->StreamHandle == 0) {
//
// Located the protocol
//
Status = CoreLocateProtocol (&gEfiSectionExtractionProtocolGuid, NULL, (VOID **)&Sep);
//
// Section Extraction Protocol is part of Dxe Core so this should never fail
//
ASSERT_EFI_ERROR (Status);
Status = Sep->OpenSectionStream (
Sep,
Status = OpenSectionStream (
FileSize,
FileBuffer,
&FfsEntry->StreamHandle
@ -474,28 +463,20 @@ FvReadFileSection (
if (EFI_ERROR (Status)) {
goto Done;
}
FfsEntry->Sep = Sep;
} else {
//
// Get cached copy of Sep
//
Sep = FfsEntry->Sep;
}
//
// If SectionType == 0 We need the whole section stream
//
Status = Sep->GetSection (
Sep,
FfsEntry->StreamHandle,
(SectionType == 0) ? NULL : &SectionType,
NULL,
(SectionType == 0) ? 0 : SectionInstance,
Buffer,
BufferSize,
AuthenticationStatus
);
Status = GetSection (
FfsEntry->StreamHandle,
(SectionType == 0) ? NULL : &SectionType,
NULL,
(SectionType == 0) ? 0 : SectionInstance,
Buffer,
BufferSize,
AuthenticationStatus
);
//
// Close of stream defered to close of FfsHeader list to allow SEP to cache data

View File

@ -1,5 +1,10 @@
/*++
/**@file
Firmware Volume Block protocol.. Consumes FV hobs and creates
appropriate block protocols.
Also consumes NT_NON_MM_FV envinronment variable and produces appropriate
block protocols fro them also... (this is TBD)
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
@ -9,19 +14,7 @@ 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:
FwVolBlock.c
Abstract:
Firmware Volume Block protocol.. Consumes FV hobs and creates
appropriate block protocols.
Also consumes NT_NON_MM_FV envinronment variable and produces appropriate
block protocols fro them also... (this is TBD)
--*/
**/
#include <DxeMain.h>
@ -202,7 +195,7 @@ Returns:
//
// Check if This FW can be read
//
if ((FvbDevice->FvbAttributes & EFI_FVB_READ_STATUS) == 0) {
if ((FvbDevice->FvbAttributes & EFI_FVB2_READ_STATUS) == 0) {
return EFI_ACCESS_DENIED;
}
@ -310,7 +303,7 @@ Returns:
FvbDevice = FVB_DEVICE_FROM_THIS (This);
if (FvbDevice->FvbAttributes & EFI_FVB_MEMORY_MAPPED) {
if (FvbDevice->FvbAttributes & EFI_FVB2_MEMORY_MAPPED) {
*Address = FvbDevice->BaseAddress;
return EFI_SUCCESS;
}

View File

@ -1,5 +1,7 @@
/*++
/**@file
Firmware File System protocol. Layers on top of Firmware
Block protocol to produce a file abstraction of FV based files.
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
@ -9,16 +11,7 @@ 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:
FwVolDriver.h
Abstract:
Firmware File System protocol. Layers on top of Firmware
Block protocol to produce a file abstraction of FV based files.
--*/
**/
#ifndef __FWVOL_H
#define __FWVOL_H
@ -33,7 +26,6 @@ typedef struct {
LIST_ENTRY Link;
EFI_FFS_FILE_HEADER *FfsHeader;
UINTN StreamHandle;
EFI_SECTION_EXTRACTION_PROTOCOL *Sep;
} FFS_FILE_LIST_ENTRY;
typedef struct {

View File

@ -1,6 +1,7 @@
/*++
Copyright (c) 2006, Intel Corporation
/**@file
DXE Core library services.
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
@ -9,25 +10,17 @@ 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:
Library.c
Abstract:
DXE Core library services.
--*/
**/
#include <DxeMain.h>
UINTN mErrorLevel = EFI_D_ERROR | EFI_D_LOAD;
EFI_DEVICE_HANDLE_EXTENDED_DATA mStatusCodeData = {
EFI_DXE_DEVICE_HANDLE_EXTENDED_DATA mStatusCodeData = {
{
sizeof (EFI_STATUS_CODE_DATA),
0,
EFI_STATUS_CODE_SPECIFIC_DATA_GUID
EFI_STATUS_CODE_DXE_CORE_GUID
},
NULL
};
@ -57,7 +50,7 @@ Returns:
--*/
{
mStatusCodeData.DataHeader.Size = sizeof (EFI_DEVICE_HANDLE_EXTENDED_DATA) - sizeof (EFI_STATUS_CODE_DATA);
mStatusCodeData.DataHeader.Size = sizeof (EFI_DXE_DEVICE_HANDLE_EXTENDED_DATA) - sizeof (EFI_STATUS_CODE_DATA);
mStatusCodeData.Handle = Handle;
if ((gStatusCode != NULL) && (gStatusCode->ReportStatusCode != NULL) ) {

View File

@ -1,20 +1,4 @@
/*++
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:
CoreSectionExtraction.c
Abstract:
/**@file
Section Extraction Protocol implementation.
Stream database is implemented as a linked list of section streams,
@ -42,8 +26,17 @@ Abstract:
3) A support protocol is not found, and the data is not available to be read
without it. This results in EFI_PROTOCOL_ERROR.
--*/
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.
**/
#include <DxeMain.h>
@ -131,38 +124,6 @@ CreateGuidedExtractionRpnEvent (
IN CORE_SECTION_CHILD_NODE *ChildNode
);
STATIC
EFI_STATUS
EFIAPI
OpenSectionStream (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN SectionStreamLength,
IN VOID *SectionStream,
OUT UINTN *SectionStreamHandle
);
STATIC
EFI_STATUS
EFIAPI
GetSection (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN SectionStreamHandle,
IN EFI_SECTION_TYPE *SectionType,
IN EFI_GUID *SectionDefinitionGuid,
IN UINTN SectionInstance,
IN VOID **Buffer,
IN OUT UINTN *BufferSize,
OUT UINT32 *AuthenticationStatus
);
STATIC
EFI_STATUS
EFIAPI
CloseSectionStream (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN StreamHandleToClose
);
STATIC
EFI_STATUS
FindStreamNode (
@ -214,8 +175,9 @@ IsValidSectionStream (
);
EFI_STATUS
EFIAPI
CustomGuidedSectionExtract (
IN CONST EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL *This,
IN CONST EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL *This,
IN CONST VOID *InputSection,
OUT VOID **OutputBuffer,
OUT UINTN *OutputSize,
@ -228,12 +190,6 @@ LIST_ENTRY mStreamRoot = INITIALIZE_LIST_HEAD_VARIABLE (mStreamRoot);
EFI_HANDLE mSectionExtractionHandle = NULL;
EFI_SECTION_EXTRACTION_PROTOCOL mSectionExtraction = {
OpenSectionStream,
GetSection,
CloseSectionStream
};
EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL mCustomGuidedSectionExtractionProtocol = {
CustomGuidedSectionExtract
};
@ -264,22 +220,12 @@ Returns:
EFI_GUID *ExtractHandlerGuidTable;
UINTN ExtractHandlerNumber;
//
// Install SEP to a new handle
//
Status = CoreInstallProtocolInterface (
&mSectionExtractionHandle,
&gEfiSectionExtractionProtocolGuid,
EFI_NATIVE_INTERFACE,
&mSectionExtraction
);
ASSERT_EFI_ERROR (Status);
//
// Get custom extract guided section method guid list
//
ExtractHandlerNumber = ExtractGuidedSectionGetGuidList (&ExtractHandlerGuidTable);
Status = EFI_SUCCESS;
//
// Install custom guided extraction protocol
//
@ -296,11 +242,9 @@ Returns:
return Status;
}
STATIC
EFI_STATUS
EFIAPI
OpenSectionStream (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN SectionStreamLength,
IN VOID *SectionStream,
OUT UINTN *SectionStreamHandle
@ -342,11 +286,9 @@ Returns:
);
}
STATIC
EFI_STATUS
EFIAPI
GetSection (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN SectionStreamHandle,
IN EFI_SECTION_TYPE *SectionType,
IN EFI_GUID *SectionDefinitionGuid,
@ -361,7 +303,6 @@ Routine Description:
SEP member function. Retrieves requested section from section stream.
Arguments:
This: Pointer to SEP instance.
SectionStreamHandle: The section stream from which to extract the requested
section.
SectionType: A pointer to the type of section to search for.
@ -485,11 +426,9 @@ GetSection_Done:
}
STATIC
EFI_STATUS
EFIAPI
CloseSectionStream (
IN EFI_SECTION_EXTRACTION_PROTOCOL *This,
IN UINTN StreamHandleToClose
)
/*++
@ -922,7 +861,7 @@ Returns:
//
// OR in the parent stream's aggregate status.
//
AuthenticationStatus |= Stream->AuthenticationStatus & EFI_AGGREGATE_AUTH_STATUS_ALL;
AuthenticationStatus |= Stream->AuthenticationStatus & EFI_AUTH_STATUS_ALL;
} else {
//
// since there's no authentication data contributed by the section,
@ -959,23 +898,6 @@ Returns:
// Figure out the proper authentication status
//
AuthenticationStatus = Stream->AuthenticationStatus;
if (GuidedHeader->Attributes & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) {
//
// The local status of the new stream is contained in
// AuthenticaionStatus. This value needs to be ORed into the
// Aggregate bits also...
//
//
// Clear out and initialize the local status
//
AuthenticationStatus &= ~EFI_LOCAL_AUTH_STATUS_ALL;
AuthenticationStatus |= EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED | EFI_LOCAL_AUTH_STATUS_NOT_TESTED;
//
// OR local status into aggregate status
//
AuthenticationStatus |= AuthenticationStatus >> 16;
}
SectionLength = SECTION_SIZE (GuidedHeader);
Status = OpenSectionStreamEx (
@ -991,17 +913,6 @@ Returns:
}
}
if ((AuthenticationStatus & EFI_LOCAL_AUTH_STATUS_ALL) ==
(EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED | EFI_LOCAL_AUTH_STATUS_NOT_TESTED)) {
//
// Need to register for RPN for when the required GUIDed extraction
// protocol becomes available. This will enable us to refresh the
// AuthenticationStatus cached in the Stream if it's ever requested
// again.
//
CreateGuidedExtractionRpnEvent (Stream, Node);
}
break;
default:
@ -1097,7 +1008,7 @@ Returns:
Context = RpnContext;
Status = CloseSectionStream (&mSectionExtraction, Context->ChildNode->EncapsulatedStreamHandle);
Status = CloseSectionStream (Context->ChildNode->EncapsulatedStreamHandle);
if (!EFI_ERROR (Status)) {
//
// The stream closed successfully, so re-open the stream with correct AuthenticationStatus
@ -1122,7 +1033,7 @@ Returns:
//
// OR in the parent stream's aggregagate status.
//
AuthenticationStatus |= Context->ParentStream->AuthenticationStatus & EFI_AGGREGATE_AUTH_STATUS_ALL;
AuthenticationStatus |= Context->ParentStream->AuthenticationStatus & EFI_AUTH_STATUS_ALL;
Status = OpenSectionStreamEx (
NewStreamBufferSize,
NewStreamBuffer,
@ -1173,7 +1084,7 @@ Returns:
// If it's an encapsulating section, we close the resulting section stream.
// CloseSectionStream will free all memory associated with the stream.
//
CloseSectionStream (&mSectionExtraction, ChildNode->EncapsulatedStreamHandle);
CloseSectionStream (ChildNode->EncapsulatedStreamHandle);
}
//
// Last, free the child node itself
@ -1454,6 +1365,7 @@ Returns:
**/
EFI_STATUS
EFIAPI
CustomGuidedSectionExtract (
IN CONST EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL *This,
IN CONST VOID *InputSection,

View File

@ -1,6 +1,6 @@
/*++
/**@file
Copyright (c) 2006, Intel Corporation
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
@ -9,13 +9,7 @@ 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:
DxeIpl.h
Abstract:
--*/
**/
#ifndef __PEI_DXEIPL_H__
#define __PEI_DXEIPL_H__
@ -26,9 +20,6 @@ Abstract:
#include <Ppi/EndOfPeiPhase.h>
#include <Protocol/CustomizedDecompress.h>
#include <Protocol/Decompress.h>
#include <Ppi/Security.h>
#include <Ppi/SectionExtraction.h>
#include <Ppi/FvLoadFile.h>
#include <Ppi/MemoryDiscovered.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Guid/MemoryTypeInformation.h>

View File

@ -59,7 +59,6 @@
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
PeCoffLib
@ -102,7 +101,8 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplEnableIdt
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode
[FixedPcd.common]
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiHandoffToDxe
[Depex]
gEfiPeiMemoryDiscoveredPpiGuid

View File

@ -15,7 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "DxeIpl.h"
#include <Ppi/GuidedSectionExtraction.h>
#include <FrameworkPei.h>
EFI_STATUS
CustomGuidedSectionExtract (
@ -258,7 +257,7 @@ DxeLoadCore (
//
REPORT_STATUS_CODE (
EFI_PROGRESS_CODE,
EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_CORE_PC_HANDOFF_TO_NEXT
PcdGet32(PcdStatusCodeValuePeiHandoffToDxe)
);
DEBUG_CODE_BEGIN ();

View File

@ -23,6 +23,11 @@ Revision History
#include <PeiMain.h>
typedef struct {
EFI_STATUS_CODE_DATA DataHeader;
EFI_HANDLE Handle;
} PEIM_FILE_HANDLE_EXTENDED_DATA;
STATIC
VOID
InvokePeiCore (
@ -223,7 +228,7 @@ Returns:
UINTN PeimCount;
UINT32 AuthenticationState;
EFI_PHYSICAL_ADDRESS EntryPoint;
EFI_PEIM_ENTRY_POINT PeimEntryPoint;
EFI_PEIM_ENTRY_POINT2 PeimEntryPoint;
BOOLEAN PeimNeedingDispatch;
BOOLEAN PeimDispatchOnThisPass;
UINTN SaveCurrentPeimCount;
@ -231,7 +236,7 @@ Returns:
EFI_PEI_FILE_HANDLE SaveCurrentFileHandle;
VOID *TopOfStack;
PEI_CORE_PARAMETERS PeiCoreParameters;
EFI_DEVICE_HANDLE_EXTENDED_DATA ExtendedData;
PEIM_FILE_HANDLE_EXTENDED_DATA ExtendedData;
EFI_FV_FILE_INFO FvFileInfo;
@ -270,10 +275,10 @@ Returns:
//
// Call the PEIM entry point
//
PeimEntryPoint = (EFI_PEIM_ENTRY_POINT)(UINTN)EntryPoint;
PeimEntryPoint = (EFI_PEIM_ENTRY_POINT2)(UINTN)EntryPoint;
PERF_START (0, "PEIM", NULL, 0);
PeimEntryPoint(PeimFileHandle, &Private->PS);
PeimEntryPoint(PeimFileHandle, (const EFI_PEI_SERVICES **) &Private->PS);
PERF_END (0, "PEIM", NULL, 0);
}
@ -357,7 +362,7 @@ Returns:
REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
EFI_PROGRESS_CODE,
EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_BEGIN,
FixedPcdGet32(PcdStatusCodeValuePeimDispatch),
(VOID *)(&ExtendedData),
sizeof (ExtendedData)
);
@ -373,18 +378,16 @@ Returns:
//
// Call the PEIM entry point for PEIM driver
//
PeimEntryPoint = (EFI_PEIM_ENTRY_POINT)(UINTN)EntryPoint;
PeimEntryPoint (PeimFileHandle, PeiServices);
PeimEntryPoint = (EFI_PEIM_ENTRY_POINT2)(UINTN)EntryPoint;
PeimEntryPoint (PeimFileHandle, (const EFI_PEI_SERVICES **) PeiServices);
}
//
// One module has been dispatched.
//
PeimDispatchOnThisPass = TRUE;
}
REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
EFI_PROGRESS_CODE,
EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_END,
FixedPcdGet32(PcdStatusCodeValuePeimDispatch),
(VOID *)(&ExtendedData),
sizeof (ExtendedData)
);
@ -483,7 +486,7 @@ Returns:
// We call the entry point a 2nd time so the module knows it's shadowed.
//
//PERF_START (PeiServices, L"PEIM", PeimFileHandle, 0);
PeimEntryPoint (PeimFileHandle, PeiServices);
PeimEntryPoint (PeimFileHandle, (const EFI_PEI_SERVICES **) PeiServices);
//PERF_END (PeiServices, L"PEIM", PeimFileHandle, 0);
//

View File

@ -198,7 +198,7 @@ Returns:
FileHeader = (EFI_FFS_FILE_HEADER **)FileHandle;
FvLength = FwVolHeader->FvLength;
if (FwVolHeader->Attributes & EFI_FVB_ERASE_POLARITY) {
if (FwVolHeader->Attributes & EFI_FVB2_ERASE_POLARITY) {
ErasePolarity = 1;
} else {
ErasePolarity = 0;
@ -781,7 +781,7 @@ Returns:
return EFI_INVALID_PARAMETER;
}
if (((EFI_FIRMWARE_VOLUME_HEADER*)VolumeHandle)->Attributes & EFI_FVB_ERASE_POLARITY) {
if (((EFI_FIRMWARE_VOLUME_HEADER*)VolumeHandle)->Attributes & EFI_FVB2_ERASE_POLARITY) {
ErasePolarity = 1;
} else {
ErasePolarity = 0;

View File

@ -25,8 +25,6 @@ Revision History
#define _PEI_MAIN_H_
#include <PiPei.h>
#include <FrameworkPei.h>
#include <Guid/StatusCodeDataTypeId.h>
#include <Ppi/DxeIpl.h>
#include <Ppi/MemoryDiscovered.h>
#include <Ppi/StatusCode.h>

View File

@ -65,7 +65,6 @@
[Packages]
MdeModulePkg/MdeModulePkg.dec
MdePkg/MdePkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
TimerLib
@ -101,6 +100,8 @@
[FixedPcd.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeimPerFv
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeimDispatch
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiCoreEntry
[FeaturePcd.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst

View File

@ -213,7 +213,7 @@ Returns:
//
REPORT_STATUS_CODE (
EFI_PROGRESS_CODE,
EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT
FixedPcdGet32 (PcdStatusCodeValuePeiCoreEntry)
);
PERF_START (NULL,"PEI", NULL, mTick);

View File

@ -97,5 +97,6 @@ typedef struct {
#define EFI_AUTH_STATUS_IMAGE_SIGNED 0x02
#define EFI_AUTH_STATUS_NOT_TESTED 0x04
#define EFI_AUTH_STATUS_TEST_FAILED 0x08
#define EFI_AUTH_STATUS_ALL 0x0f
#endif

View File

@ -326,6 +326,27 @@
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|1|UINT8|0x00000022
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|1|UINT8|0x00000023
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|0|UINT8|0x00000024 # 0-PCANSI, 1-VT100, 2-VT00+, 3-UTF8
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueMouseInterfaceError|0x01020005|UINT32|0x30001000
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueMouseEnable|0x01020004|UINT32|0x30001001
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueMouseDisable|0x01020002|UINT32|0x30001002
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardEnable|0x01010004|UINT32|0x30001003
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardDisable|0x01010002|UINT32|0x30001004
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardPresenceDetect|0x01010003|UINT32|0x30001005
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardReset|0x01010001|UINT32|0x30001006
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardClearBuffer|0x01011000|UINT32|0x30001007
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardSelfTest|0x01011001|UINT32|0x30001008
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardInterfaceError|0x01010005|UINT32|0x30001009
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueKeyboardInputError|0x01010007|UINT32|0x3000100a
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueMouseInputError|0x01020007|UINT32|0x3000100b
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueMouseReset|0x01020001|UINT32|0x3000100c
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiHandoffToDxe|0x3031001|UINT32|0x3000100d # EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_CORE_PC_HANDOFF_TO_NEXT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeimDispatch|0x3020002|UINT32|0x3000100e # EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_BEGIN
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiCoreEntry|0x3020000|UINT32|0x3000100f # EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeCoreEntry|0x3041000|UINT32|0x30001010 # EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeCoreHandoffToBds|0x3041001|UINT32|0x30001011 # EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueBootServiceExit|0x3100019|UINT32|0x30001012 # EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeDriverBegin|0x3040002|UINT32|0x30001013 # EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_BEGIN
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeDriverEnd|0x3040003|UINT32|0x30001014 # EFI_SOFTWARE_DXE_CORE | EFI_SW_PC_INIT_END
[PcdsFixedAtBuild.IPF]
gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000|UINT64|0x0000000f