summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Core/DxeIplPeim
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2006-12-07 11:32:26 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2006-12-07 11:32:26 +0000
commit4afc6a7bf2e75801630c298a312a0ab552a1369f (patch)
tree22efaa56864d5964f50574118c54e2728a85a484 /EdkModulePkg/Core/DxeIplPeim
parent77206d75adb5b2f1763352e57e5211edb07a6101 (diff)
downloadedk2-platforms-4afc6a7bf2e75801630c298a312a0ab552a1369f.tar.xz
(1) Using EfiCompress in place of TianoCompress as EFI_STANDARD_COMPRESSION type to conform to spec.
(2) Remove unused library class EdkPeCoffLoaderX64Lib and library instance EdkPeCoffLoaderX64Lib, because current BasePeCoffLib can supports IA32, EBC, & X64 images all. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2069 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg/Core/DxeIplPeim')
-rw-r--r--EdkModulePkg/Core/DxeIplPeim/DxeLoad.c108
1 files changed, 68 insertions, 40 deletions
diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c
index 8dbc3763d6..6a4c53b922 100644
--- a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c
+++ b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c
@@ -669,6 +669,13 @@ Returns:
EFI_COMPRESSION_SECTION *CompressionSection;
UINT32 FvAlignment;
+ //
+ // Initialize local variables.
+ //
+ DecompressLibrary = NULL;
+ DstBuffer = NULL;
+ DstBufferSize = 0;
+
Status = PeiServicesFfsFindSectionData (
EFI_SECTION_COMPRESSION,
FfsFileHeader,
@@ -784,8 +791,11 @@ Returns:
switch (CompressionSection->CompressionType) {
case EFI_STANDARD_COMPRESSION:
+ //
+ // Load EFI standard compression.
+ //
if (FeaturePcdGet (PcdDxeIplSupportTianoDecompress)) {
- DecompressLibrary = &gTianoDecompress;
+ DecompressLibrary = &gEfiDecompress;
} else {
ASSERT (FALSE);
return EFI_NOT_FOUND;
@@ -794,7 +804,7 @@ Returns:
case EFI_CUSTOMIZED_COMPRESSION:
//
- // Load user customized compression protocol.
+ // Load user customized compression.
//
if (FeaturePcdGet (PcdDxeIplSupportCustomDecompress)) {
DecompressLibrary = &gCustomDecompress;
@@ -805,52 +815,71 @@ Returns:
break;
case EFI_NOT_COMPRESSED:
+ //
+ // Allocate destination buffer
+ //
+ DstBufferSize = CompressionSection->UncompressedLength;
+ DstBuffer = AllocatePages (EFI_SIZE_TO_PAGES (DstBufferSize));
+ if (DstBuffer == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // stream is not actually compressed, just encapsulated. So just copy it.
+ //
+ CopyMem (DstBuffer, CompressionSection + 1, DstBufferSize);
+ break;
+
default:
//
- // Need to support not compressed file
+ // Don't support other unknown compression type.
//
ASSERT_EFI_ERROR (Status);
return EFI_NOT_FOUND;
}
-
- Status = DecompressLibrary->GetInfo (
- (UINT8 *) ((EFI_COMPRESSION_SECTION *) Section + 1),
- (UINT32) SectionLength - sizeof (EFI_COMPRESSION_SECTION),
- &DstBufferSize,
- &ScratchBufferSize
- );
- if (EFI_ERROR (Status)) {
+
+ if (CompressionSection->CompressionType != EFI_NOT_COMPRESSED) {
//
- // GetInfo failed
+ // For compressed data, decompress them to dstbuffer.
//
- return EFI_NOT_FOUND;
- }
-
- //
- // Allocate scratch buffer
- //
- ScratchBuffer = AllocatePages (EFI_SIZE_TO_PAGES (ScratchBufferSize));
- if (ScratchBuffer == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- //
- // Allocate destination buffer
- //
- DstBuffer = AllocatePages (EFI_SIZE_TO_PAGES (DstBufferSize));
- if (DstBuffer == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ Status = DecompressLibrary->GetInfo (
+ (UINT8 *) ((EFI_COMPRESSION_SECTION *) Section + 1),
+ (UINT32) SectionLength - sizeof (EFI_COMPRESSION_SECTION),
+ &DstBufferSize,
+ &ScratchBufferSize
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // GetInfo failed
+ //
+ return EFI_NOT_FOUND;
+ }
+
+ //
+ // Allocate scratch buffer
+ //
+ ScratchBuffer = AllocatePages (EFI_SIZE_TO_PAGES (ScratchBufferSize));
+ if (ScratchBuffer == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ //
+ // Allocate destination buffer
+ //
+ DstBuffer = AllocatePages (EFI_SIZE_TO_PAGES (DstBufferSize));
+ if (DstBuffer == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ //
+ // Call decompress function
+ //
+ Status = DecompressLibrary->Decompress (
+ (CHAR8 *) ((EFI_COMPRESSION_SECTION *) Section + 1),
+ DstBuffer,
+ ScratchBuffer
+ );
}
-
- //
- // Call decompress function
- //
- Status = DecompressLibrary->Decompress (
- (CHAR8 *) ((EFI_COMPRESSION_SECTION *) Section + 1),
- DstBuffer,
- ScratchBuffer
- );
-
+
CmpSection = (EFI_COMMON_SECTION_HEADER *) DstBuffer;
if (CmpSection->Type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) {
//
@@ -909,7 +938,6 @@ Returns:
} else {
return EFI_NOT_FOUND;
}
-
}
}
//