mirror of https://github.com/acidanthera/audk.git
Code clean for Ftw driver, remove the obsolete logic for boot block. Correct some comments in Pei Pcd driver.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7108 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
2da292f637
commit
5944a83bac
|
@ -3,7 +3,7 @@
|
||||||
This is a simple fault tolerant write driver.
|
This is a simple fault tolerant write driver.
|
||||||
And it only supports write BufferSize <= SpareAreaLength.
|
And it only supports write BufferSize <= SpareAreaLength.
|
||||||
|
|
||||||
This boot service only protocol provides fault tolerant write capability for
|
This boot service protocol only provides fault tolerant write capability for
|
||||||
block devices. The protocol has internal non-volatile intermediate storage
|
block devices. The protocol has internal non-volatile intermediate storage
|
||||||
of the data and private information. It should be able to recover
|
of the data and private information. It should be able to recover
|
||||||
automatically from a critical fault, such as power failure.
|
automatically from a critical fault, such as power failure.
|
||||||
|
@ -11,6 +11,22 @@
|
||||||
The implementation uses an FTW Lite (Fault Tolerant Write) Work Space.
|
The implementation uses an FTW Lite (Fault Tolerant Write) Work Space.
|
||||||
This work space is a memory copy of the work space on the Working Block,
|
This work space is a memory copy of the work space on the Working Block,
|
||||||
the size of the work space is the FTW_WORK_SPACE_SIZE bytes.
|
the size of the work space is the FTW_WORK_SPACE_SIZE bytes.
|
||||||
|
|
||||||
|
The work space stores each write record as EFI_FTW_LITE_RECORD structure.
|
||||||
|
The spare block stores the write buffer before write to the target block.
|
||||||
|
|
||||||
|
The write record has three states to specify the different phase of write operation.
|
||||||
|
1) WRITE_ALLOCATED is that the record is allocated in write space.
|
||||||
|
The write record structure records the information of write operation.
|
||||||
|
2) SPARE_COMPLETED is that the data from write buffer is writed into the spare block as the backup.
|
||||||
|
3) WRITE_COMPLETED is that the data is copied from the spare block to the target block.
|
||||||
|
|
||||||
|
This driver operates the data as the whole size of spare block. It also assumes that
|
||||||
|
working block is an area which contains working space in its last block and has the same size as spare block.
|
||||||
|
It first read the SpareAreaLength data from the target block into the spare memory buffer.
|
||||||
|
Then copy the write buffer data into the spare memory buffer.
|
||||||
|
Then write the spare memory buffer into the spare block.
|
||||||
|
Final copy the data from the spare block to the target block.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation
|
Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
|
@ -29,11 +45,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
Starts a target block update. This function will record data about write
|
Starts a target block update. This function will record data about write
|
||||||
in fault tolerant storage and will complete the write in a recoverable
|
in fault tolerant storage and will complete the write in a recoverable
|
||||||
manner, ensuring at all times that either the original contents or
|
manner, ensuring at all times that either the original contents or
|
||||||
the modified contents are available. We should check the target
|
the modified contents are available.
|
||||||
range to prevent the user from writing Spare block and Working
|
|
||||||
space directly.
|
|
||||||
|
|
||||||
@param This Calling context
|
@param This The pointer to this protocol instance.
|
||||||
@param FvbHandle The handle of FVB protocol that provides services for
|
@param FvbHandle The handle of FVB protocol that provides services for
|
||||||
reading, writing, and erasing the target block.
|
reading, writing, and erasing the target block.
|
||||||
@param Lba The logical block address of the target block.
|
@param Lba The logical block address of the target block.
|
||||||
|
@ -41,13 +55,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
@param NumBytes The number of bytes to write to the target block.
|
@param NumBytes The number of bytes to write to the target block.
|
||||||
@param Buffer The data to write.
|
@param Buffer The data to write.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The function completed successfully
|
@retval EFI_SUCCESS The function completed successfully
|
||||||
@retval EFI_BAD_BUFFER_SIZE The write would span a target block, which is not
|
@retval EFI_ABORTED The function could not complete successfully.
|
||||||
a valid action.
|
@retval EFI_BAD_BUFFER_SIZE The input data can't fit within the spare block.
|
||||||
@retval EFI_ACCESS_DENIED No writes have been allocated.
|
Offset + *NumBytes > SpareAreaLength.
|
||||||
@retval EFI_NOT_FOUND Cannot find FVB by handle.
|
@retval EFI_ACCESS_DENIED No writes have been allocated.
|
||||||
@retval EFI_OUT_OF_RESOURCES Cannot allocate memory.
|
@retval EFI_OUT_OF_RESOURCES Cannot allocate enough memory resource.
|
||||||
@retval EFI_ABORTED The function could not complete successfully.
|
@retval EFI_NOT_FOUND Cannot find FVB protocol by handle.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -112,7 +126,7 @@ FtwLiteWrite (
|
||||||
//
|
//
|
||||||
// Check if there is enough free space for allocate a record
|
// Check if there is enough free space for allocate a record
|
||||||
//
|
//
|
||||||
if ((MyOffset + WRITE_TOTAL_SIZE) > FtwLiteDevice->FtwWorkSpaceSize) {
|
if ((MyOffset + FTW_LITE_RECORD_SIZE) > FtwLiteDevice->FtwWorkSpaceSize) {
|
||||||
Status = FtwReclaimWorkSpace (FtwLiteDevice, TRUE);
|
Status = FtwReclaimWorkSpace (FtwLiteDevice, TRUE);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Reclaim work space - %r", Status));
|
DEBUG ((EFI_D_ERROR, "FtwLite: Reclaim work space - %r", Status));
|
||||||
|
@ -309,7 +323,7 @@ FtwLiteWrite (
|
||||||
FreePool (MyBuffer);
|
FreePool (MyBuffer);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set the SpareCompleteD in the FTW record,
|
// Set the SpareComplete in the FTW record,
|
||||||
//
|
//
|
||||||
MyOffset = (UINT8 *) Record - FtwLiteDevice->FtwWorkSpace;
|
MyOffset = (UINT8 *) Record - FtwLiteDevice->FtwWorkSpace;
|
||||||
Status = FtwUpdateFvState (
|
Status = FtwUpdateFvState (
|
||||||
|
@ -428,11 +442,6 @@ FtwWriteRecord (
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = FlushSpareBlockToWorkingBlock (FtwLiteDevice);
|
Status = FlushSpareBlockToWorkingBlock (FtwLiteDevice);
|
||||||
} else if (IsBootBlock (FtwLiteDevice, Fvb, Record->Lba)) {
|
|
||||||
//
|
|
||||||
// Update boot block
|
|
||||||
//
|
|
||||||
Status = FlushSpareBlockToBootBlock (FtwLiteDevice);
|
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Update blocks other than working block or boot block
|
// Update blocks other than working block or boot block
|
||||||
|
@ -607,8 +616,13 @@ InitializeFtwLite (
|
||||||
//
|
//
|
||||||
// Allocate Private data of this driver, including the FtwWorkSpace[FTW_WORK_SPACE_SIZE].
|
// Allocate Private data of this driver, including the FtwWorkSpace[FTW_WORK_SPACE_SIZE].
|
||||||
//
|
//
|
||||||
|
Length = FTW_WORK_SPACE_SIZE;
|
||||||
|
if (Length < PcdGet32 (PcdFlashNvStorageFtwWorkingSize)) {
|
||||||
|
Length = PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
|
||||||
|
}
|
||||||
|
|
||||||
FtwLiteDevice = NULL;
|
FtwLiteDevice = NULL;
|
||||||
FtwLiteDevice = AllocatePool (sizeof (EFI_FTW_LITE_DEVICE) + FTW_WORK_SPACE_SIZE);
|
FtwLiteDevice = AllocatePool (sizeof (EFI_FTW_LITE_DEVICE) + Length);
|
||||||
if (FtwLiteDevice != NULL) {
|
if (FtwLiteDevice != NULL) {
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
|
@ -625,6 +639,7 @@ InitializeFtwLite (
|
||||||
//
|
//
|
||||||
FtwLiteDevice->FtwWorkSpace = (UINT8 *) (FtwLiteDevice + 1);
|
FtwLiteDevice->FtwWorkSpace = (UINT8 *) (FtwLiteDevice + 1);
|
||||||
FtwLiteDevice->FtwWorkSpaceSize = FTW_WORK_SPACE_SIZE;
|
FtwLiteDevice->FtwWorkSpaceSize = FTW_WORK_SPACE_SIZE;
|
||||||
|
FtwLiteDevice->FtwWorkSpaceBase = FTW_WORK_SPACE_BASE;
|
||||||
SetMem (
|
SetMem (
|
||||||
FtwLiteDevice->FtwWorkSpace,
|
FtwLiteDevice->FtwWorkSpace,
|
||||||
FtwLiteDevice->FtwWorkSpaceSize,
|
FtwLiteDevice->FtwWorkSpaceSize,
|
||||||
|
@ -676,7 +691,7 @@ InitializeFtwLite (
|
||||||
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) BaseAddress);
|
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) BaseAddress);
|
||||||
|
|
||||||
if ((FtwLiteDevice->WorkSpaceAddress >= BaseAddress) &&
|
if ((FtwLiteDevice->WorkSpaceAddress >= BaseAddress) &&
|
||||||
(FtwLiteDevice->WorkSpaceAddress <= (BaseAddress + FwVolHeader->FvLength))
|
(FtwLiteDevice->WorkSpaceAddress < (BaseAddress + FwVolHeader->FvLength))
|
||||||
) {
|
) {
|
||||||
FtwLiteDevice->FtwFvBlock = Fvb;
|
FtwLiteDevice->FtwFvBlock = Fvb;
|
||||||
//
|
//
|
||||||
|
@ -689,7 +704,8 @@ InitializeFtwLite (
|
||||||
FvbMapEntry = &FwVolHeader->BlockMap[0];
|
FvbMapEntry = &FwVolHeader->BlockMap[0];
|
||||||
while (!((FvbMapEntry->NumBlocks == 0) && (FvbMapEntry->Length == 0))) {
|
while (!((FvbMapEntry->NumBlocks == 0) && (FvbMapEntry->Length == 0))) {
|
||||||
for (LbaIndex = 1; LbaIndex <= FvbMapEntry->NumBlocks; LbaIndex += 1) {
|
for (LbaIndex = 1; LbaIndex <= FvbMapEntry->NumBlocks; LbaIndex += 1) {
|
||||||
if (FtwLiteDevice->WorkSpaceAddress < (BaseAddress + FvbMapEntry->Length * LbaIndex)) {
|
if ((FtwLiteDevice->WorkSpaceAddress >= (BaseAddress + FvbMapEntry->Length * (LbaIndex - 1)))
|
||||||
|
&& (FtwLiteDevice->WorkSpaceAddress < (BaseAddress + FvbMapEntry->Length * LbaIndex))) {
|
||||||
FtwLiteDevice->FtwWorkSpaceLba = LbaIndex - 1;
|
FtwLiteDevice->FtwWorkSpaceLba = LbaIndex - 1;
|
||||||
//
|
//
|
||||||
// Get the Work space size and Base(Offset)
|
// Get the Work space size and Base(Offset)
|
||||||
|
@ -702,6 +718,12 @@ InitializeFtwLite (
|
||||||
//
|
//
|
||||||
// end for
|
// end for
|
||||||
//
|
//
|
||||||
|
if (LbaIndex <= FvbMapEntry->NumBlocks) {
|
||||||
|
//
|
||||||
|
// Work space range is found.
|
||||||
|
//
|
||||||
|
break;
|
||||||
|
}
|
||||||
FvbMapEntry++;
|
FvbMapEntry++;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
@ -724,7 +746,8 @@ InitializeFtwLite (
|
||||||
FvbMapEntry = &FwVolHeader->BlockMap[0];
|
FvbMapEntry = &FwVolHeader->BlockMap[0];
|
||||||
while (!((FvbMapEntry->NumBlocks == 0) && (FvbMapEntry->Length == 0))) {
|
while (!((FvbMapEntry->NumBlocks == 0) && (FvbMapEntry->Length == 0))) {
|
||||||
for (LbaIndex = 1; LbaIndex <= FvbMapEntry->NumBlocks; LbaIndex += 1) {
|
for (LbaIndex = 1; LbaIndex <= FvbMapEntry->NumBlocks; LbaIndex += 1) {
|
||||||
if (FtwLiteDevice->SpareAreaAddress < (BaseAddress + FvbMapEntry->Length * LbaIndex)) {
|
if ((FtwLiteDevice->SpareAreaAddress >= (BaseAddress + FvbMapEntry->Length * (LbaIndex - 1)))
|
||||||
|
&& (FtwLiteDevice->SpareAreaAddress < (BaseAddress + FvbMapEntry->Length * LbaIndex))) {
|
||||||
//
|
//
|
||||||
// Get the NumberOfSpareBlock and SizeOfSpareBlock
|
// Get the NumberOfSpareBlock and SizeOfSpareBlock
|
||||||
//
|
//
|
||||||
|
@ -738,7 +761,12 @@ InitializeFtwLite (
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (LbaIndex <= FvbMapEntry->NumBlocks) {
|
||||||
|
//
|
||||||
|
// Spare FV range is found.
|
||||||
|
//
|
||||||
|
break;
|
||||||
|
}
|
||||||
FvbMapEntry++;
|
FvbMapEntry++;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
@ -873,7 +901,7 @@ InitializeFtwLite (
|
||||||
Record = FtwLiteDevice->FtwLastRecord;
|
Record = FtwLiteDevice->FtwLastRecord;
|
||||||
Offset = (UINT8 *) Record - FtwLiteDevice->FtwWorkSpace;
|
Offset = (UINT8 *) Record - FtwLiteDevice->FtwWorkSpace;
|
||||||
if (FtwLiteDevice->FtwWorkSpace[Offset] != FTW_ERASED_BYTE) {
|
if (FtwLiteDevice->FtwWorkSpace[Offset] != FTW_ERASED_BYTE) {
|
||||||
Offset += WRITE_TOTAL_SIZE;
|
Offset += FTW_LITE_RECORD_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsErasedFlashBuffer (
|
if (!IsErasedFlashBuffer (
|
||||||
|
|
|
@ -20,7 +20,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
|
|
||||||
#include <Protocol/PciRootBridgeIo.h>
|
|
||||||
#include <Guid/SystemNvDataGuid.h>
|
#include <Guid/SystemNvDataGuid.h>
|
||||||
#include <Protocol/FaultTolerantWriteLite.h>
|
#include <Protocol/FaultTolerantWriteLite.h>
|
||||||
#include <Protocol/FirmwareVolumeBlock.h>
|
#include <Protocol/FirmwareVolumeBlock.h>
|
||||||
|
@ -96,9 +95,7 @@ typedef struct {
|
||||||
//
|
//
|
||||||
// MACRO for FTW header and record
|
// MACRO for FTW header and record
|
||||||
//
|
//
|
||||||
#define FTW_WORKING_QUEUE_SIZE (FTW_WORK_SPACE_SIZE - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER))
|
|
||||||
#define FTW_LITE_RECORD_SIZE (sizeof (EFI_FTW_LITE_RECORD))
|
#define FTW_LITE_RECORD_SIZE (sizeof (EFI_FTW_LITE_RECORD))
|
||||||
#define WRITE_TOTAL_SIZE FTW_LITE_RECORD_SIZE
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// EFI Fault tolerant protocol private data structure
|
// EFI Fault tolerant protocol private data structure
|
||||||
|
@ -138,9 +135,9 @@ typedef struct {
|
||||||
This function is the entry point of the Fault Tolerant Write driver.
|
This function is the entry point of the Fault Tolerant Write driver.
|
||||||
|
|
||||||
|
|
||||||
@param ImageHandle EFI_HANDLE: A handle for the image that is initializing
|
@param ImageHandle A handle for the image that is initializing
|
||||||
this driver
|
this driver
|
||||||
@param SystemTable EFI_SYSTEM_TABLE: A pointer to the EFI system table
|
@param SystemTable A pointer to the EFI system table
|
||||||
|
|
||||||
@retval EFI_SUCCESS FTW has finished the initialization
|
@retval EFI_SUCCESS FTW has finished the initialization
|
||||||
@retval EFI_ABORTED FTW initialization error
|
@retval EFI_ABORTED FTW initialization error
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#/** @file
|
#/** @file
|
||||||
# Component description file for FtwLite module.
|
# This driver provides lite fault tolerant capability for write operation on flash devices.
|
||||||
|
# Its implementation depends on the full functionality FVB protocol that support read, write/erase flash access.
|
||||||
|
# It only supports write BufferSize <= PcdFlashNvStorageFtwSpareSize.
|
||||||
|
# That's the input write buffer data must fit within the spare range.
|
||||||
|
# This driver doesn't differentiate the update for boot block and other block.
|
||||||
#
|
#
|
||||||
# This driver provides fault tolerant write capability for block devices.
|
# Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
# Copyright (c) 2006 - 2007, Intel Corporation
|
|
||||||
#
|
#
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -11,7 +14,6 @@
|
||||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#**/
|
#**/
|
||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
|
@ -33,26 +35,11 @@
|
||||||
FtwMisc.c
|
FtwMisc.c
|
||||||
FtwLite.c
|
FtwLite.c
|
||||||
FtwLite.h
|
FtwLite.h
|
||||||
|
|
||||||
[Sources.Ia32]
|
|
||||||
Ia32/Ia32FtwMisc.c
|
|
||||||
|
|
||||||
[Sources.X64]
|
|
||||||
X64/X64FtwMisc.c
|
|
||||||
|
|
||||||
[Sources.IPF]
|
|
||||||
Ipf/IpfFtwMisc.c
|
|
||||||
|
|
||||||
[Sources.EBC]
|
|
||||||
Ia32/Ia32FtwMisc.c
|
|
||||||
|
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
UefiBootServicesTableLib
|
UefiBootServicesTableLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
|
@ -63,19 +50,12 @@
|
||||||
DevicePathLib
|
DevicePathLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiSystemNvDataFvGuid # ALWAYS_CONSUMED
|
gEfiSystemNvDataFvGuid # ALWAYS_CONSUMED, Signature of Working Space Header
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||||
gEfiFaultTolerantWriteLiteProtocolGuid # PROTOCOL ALWAYS_PRODUCED
|
gEfiFaultTolerantWriteLiteProtocolGuid # PROTOCOL ALWAYS_PRODUCED
|
||||||
|
|
||||||
[Protocols.IA32]
|
|
||||||
gEfiPciRootBridgeIoProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
|
||||||
|
|
||||||
[Protocols.EBC]
|
|
||||||
gEfiPciRootBridgeIoProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
|
||||||
|
|
||||||
|
|
||||||
[Pcd.common]
|
[Pcd.common]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/** @file
|
/** @file
|
||||||
|
|
||||||
Internal generic functions to support fault tolerant write.
|
Internal generic functions to operate flash block.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation
|
Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
|
@ -54,7 +54,7 @@ IsErasedFlashBuffer (
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
To Erase one block. The size is FTW_BLOCK_SIZE
|
To erase the block with the spare block size.
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
@param FtwLiteDevice Calling context
|
||||||
|
|
|
@ -109,7 +109,7 @@ InitWorkSpaceHeader (
|
||||||
&gEfiSystemNvDataFvGuid,
|
&gEfiSystemNvDataFvGuid,
|
||||||
sizeof (EFI_GUID)
|
sizeof (EFI_GUID)
|
||||||
);
|
);
|
||||||
WorkingHeader->WriteQueueSize = FTW_WORKING_QUEUE_SIZE;
|
WorkingHeader->WriteQueueSize = (UINT64) (PcdGet32 (PcdFlashNvStorageFtwWorkingSize) - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Crc is calculated with all the fields except Crc and STATE
|
// Crc is calculated with all the fields except Crc and STATE
|
||||||
|
@ -284,7 +284,7 @@ WorkSpaceRefresh (
|
||||||
// If work space has error or Record is out of the workspace limit, THEN
|
// If work space has error or Record is out of the workspace limit, THEN
|
||||||
// call reclaim.
|
// call reclaim.
|
||||||
//
|
//
|
||||||
if (EFI_ERROR (Status) || (Offset + WRITE_TOTAL_SIZE >= FtwLiteDevice->FtwWorkSpaceSize)) {
|
if (EFI_ERROR (Status) || (Offset + FTW_LITE_RECORD_SIZE >= FtwLiteDevice->FtwWorkSpaceSize)) {
|
||||||
//
|
//
|
||||||
// reclaim work space in working block.
|
// reclaim work space in working block.
|
||||||
//
|
//
|
||||||
|
@ -388,7 +388,7 @@ FtwReclaimWorkSpace (
|
||||||
CopyMem (
|
CopyMem (
|
||||||
(UINT8 *) Ptr + sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER),
|
(UINT8 *) Ptr + sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER),
|
||||||
Record,
|
Record,
|
||||||
WRITE_TOTAL_SIZE
|
FTW_LITE_RECORD_SIZE
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,372 +0,0 @@
|
||||||
/** @file
|
|
||||||
|
|
||||||
Ia32 platform related code to support FtwLite.
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, 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 "FtwLite.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// MACROs for boot block update
|
|
||||||
//
|
|
||||||
#define BOOT_BLOCK_BASE 0xFFFF0000
|
|
||||||
|
|
||||||
//
|
|
||||||
// (LPC -- D31:F0)
|
|
||||||
//
|
|
||||||
#define LPC_BUS_NUMBER 0x00
|
|
||||||
#define LPC_DEVICE_NUMBER 0x1F
|
|
||||||
#define LPC_IF 0xF0
|
|
||||||
//
|
|
||||||
// Top swap
|
|
||||||
//
|
|
||||||
#define GEN_STATUS 0xD4
|
|
||||||
#define TOP_SWAP_BIT (1 << 13)
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Read PCI register value.
|
|
||||||
This is a internal function.
|
|
||||||
|
|
||||||
|
|
||||||
@param Offset Offset of the register
|
|
||||||
|
|
||||||
@return The pci register value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
ReadPciRegister (
|
|
||||||
IN UINT32 Offset
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
UINT32 Value;
|
|
||||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
|
|
||||||
|
|
||||||
Value = 0;
|
|
||||||
Status = gBS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **) &PciRootBridgeIo);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Locate PCI root bridge io protocol - %r", Status));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = PciRootBridgeIo->Pci.Read (
|
|
||||||
PciRootBridgeIo,
|
|
||||||
EfiPciWidthUint32,
|
|
||||||
EFI_PCI_ADDRESS (
|
|
||||||
LPC_BUS_NUMBER,
|
|
||||||
LPC_DEVICE_NUMBER,
|
|
||||||
LPC_IF,
|
|
||||||
Offset
|
|
||||||
),
|
|
||||||
1,
|
|
||||||
&Value
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
return Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Get swap state
|
|
||||||
|
|
||||||
This is a internal function.
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param SwapState Swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS State successfully got
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
GetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
OUT BOOLEAN *SwapState
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Top swap status is 13 bit
|
|
||||||
//
|
|
||||||
*SwapState = (BOOLEAN) ((ReadPciRegister (GEN_STATUS) & TOP_SWAP_BIT) != 0);
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set swap state.
|
|
||||||
|
|
||||||
This is a internal function.
|
|
||||||
|
|
||||||
@param FtwLiteDevice Indicates a pointer to the calling context.
|
|
||||||
@param TopSwap New swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The function completed successfully
|
|
||||||
Note:
|
|
||||||
the Top-Swap bit (bit 13, D31: F0, Offset D4h). Note that
|
|
||||||
software will not be able to clear the Top-Swap bit until the system is
|
|
||||||
rebooted without GNT[A]# being pulled down.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
SetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
IN BOOLEAN TopSwap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT32 GenStatus;
|
|
||||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Top-Swap bit (bit 13, D31: F0, Offset D4h)
|
|
||||||
//
|
|
||||||
GenStatus = ReadPciRegister (GEN_STATUS);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Set 13 bit, according to input NewSwapState
|
|
||||||
//
|
|
||||||
if (TopSwap) {
|
|
||||||
GenStatus |= TOP_SWAP_BIT;
|
|
||||||
} else {
|
|
||||||
GenStatus &= ~TOP_SWAP_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **) &PciRootBridgeIo);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Locate PCI root bridge io protocol - %r", Status));
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Write back the GenStatus register
|
|
||||||
//
|
|
||||||
Status = PciRootBridgeIo->Pci.Write (
|
|
||||||
PciRootBridgeIo,
|
|
||||||
EfiPciWidthUint32,
|
|
||||||
EFI_PCI_ADDRESS (
|
|
||||||
LPC_BUS_NUMBER,
|
|
||||||
LPC_DEVICE_NUMBER,
|
|
||||||
LPC_IF,
|
|
||||||
GEN_STATUS
|
|
||||||
),
|
|
||||||
1,
|
|
||||||
&GenStatus
|
|
||||||
);
|
|
||||||
|
|
||||||
DEBUG_CODE_BEGIN ();
|
|
||||||
if (TopSwap) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "SAR: Set top swap\n"));
|
|
||||||
} else {
|
|
||||||
DEBUG ((EFI_D_ERROR, "SAR: Clear top swap\n"));
|
|
||||||
}
|
|
||||||
DEBUG_CODE_END ();
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Check whether the block is a boot block.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param FvBlock Fvb protocol instance
|
|
||||||
@param Lba Lba value
|
|
||||||
|
|
||||||
@retval FALSE This is a boot block.
|
|
||||||
@retval TRUE This is not a boot block.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,
|
|
||||||
EFI_LBA Lba
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *BootFvb;
|
|
||||||
|
|
||||||
Status = GetFvbByAddress (BOOT_BLOCK_BASE, &BootFvb);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Compare the Fvb
|
|
||||||
//
|
|
||||||
return (BOOLEAN) (FvBlock == BootFvb);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy the content of spare block to a boot block. Size is FTW_BLOCK_SIZE.
|
|
||||||
Spare block is accessed by FTW backup FVB protocol interface. LBA is
|
|
||||||
FtwLiteDevice->FtwSpareLba.
|
|
||||||
Boot block is accessed by BootFvb protocol interface. LBA is 0.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice The private data of FTW_LITE driver
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS Spare block content is copied to boot block
|
|
||||||
@retval EFI_INVALID_PARAMETER Input parameter error
|
|
||||||
@retval EFI_OUT_OF_RESOURCES Allocate memory error
|
|
||||||
@retval EFI_ABORTED The function could not complete successfully
|
|
||||||
Notes:
|
|
||||||
FTW will do extra work on boot block update.
|
|
||||||
FTW should depend on a protocol of EFI_ADDRESS_RANGE_SWAP_PROTOCOL,
|
|
||||||
which is produced by a chipset driver.
|
|
||||||
FTW updating boot block steps:
|
|
||||||
1. Erase top swap block (0xFFFE-0xFFFEFFFF) and write data to it ready
|
|
||||||
2. Read data from top swap block to memory buffer
|
|
||||||
3. SetSwapState(EFI_SWAPPED)
|
|
||||||
4. Erasing boot block (0xFFFF-0xFFFFFFFF)
|
|
||||||
5. Programming boot block until the boot block is ok.
|
|
||||||
6. SetSwapState(UNSWAPPED)
|
|
||||||
Notes:
|
|
||||||
1. Since the SwapState bit is saved in CMOS, FTW can restore and continue
|
|
||||||
even in the scenario of power failure.
|
|
||||||
2. FTW shall not allow to update boot block when battery state is error.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
FlushSpareBlockToBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
UINTN Length;
|
|
||||||
UINT8 *Buffer;
|
|
||||||
UINTN Count;
|
|
||||||
UINT8 *Ptr;
|
|
||||||
UINTN Index;
|
|
||||||
BOOLEAN TopSwap;
|
|
||||||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *BootFvb;
|
|
||||||
EFI_LBA BootLba;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Allocate a memory buffer
|
|
||||||
//
|
|
||||||
Length = FtwLiteDevice->SpareAreaLength;
|
|
||||||
Buffer = AllocatePool (Length);
|
|
||||||
if (Buffer == NULL) {
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Get TopSwap bit state
|
|
||||||
//
|
|
||||||
Status = GetSwapState (FtwLiteDevice, &TopSwap);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Get Top Swapped status - %r\n", Status));
|
|
||||||
FreePool (Buffer);
|
|
||||||
return EFI_ABORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TopSwap) {
|
|
||||||
//
|
|
||||||
// Get FVB of current boot block
|
|
||||||
//
|
|
||||||
Status = GetFvbByAddress (FtwLiteDevice->SpareAreaAddress + FTW_BLOCK_SIZE, &BootFvb);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
FreePool (Buffer);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Read data from current boot block
|
|
||||||
//
|
|
||||||
BootLba = 0;
|
|
||||||
Ptr = Buffer;
|
|
||||||
for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {
|
|
||||||
Count = FtwLiteDevice->SizeOfSpareBlock;
|
|
||||||
Status = BootFvb->Read (
|
|
||||||
BootFvb,
|
|
||||||
BootLba + Index,
|
|
||||||
0,
|
|
||||||
&Count,
|
|
||||||
Ptr
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
FreePool (Buffer);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ptr += Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
//
|
|
||||||
// Read data from spare block
|
|
||||||
//
|
|
||||||
Ptr = Buffer;
|
|
||||||
for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {
|
|
||||||
Count = FtwLiteDevice->SizeOfSpareBlock;
|
|
||||||
Status = FtwLiteDevice->FtwBackupFvb->Read (
|
|
||||||
FtwLiteDevice->FtwBackupFvb,
|
|
||||||
FtwLiteDevice->FtwSpareLba + Index,
|
|
||||||
0,
|
|
||||||
&Count,
|
|
||||||
Ptr
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
FreePool (Buffer);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ptr += Count;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Set TopSwap bit
|
|
||||||
//
|
|
||||||
Status = SetSwapState (FtwLiteDevice, TRUE);
|
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Set Swap State - %r\n", Status));
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Erase boot block. After setting TopSwap bit, it's spare block now!
|
|
||||||
//
|
|
||||||
Status = FtwEraseSpareBlock (FtwLiteDevice);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
FreePool (Buffer);
|
|
||||||
return EFI_ABORTED;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Write memory buffer to currenet spare block
|
|
||||||
//
|
|
||||||
Ptr = Buffer;
|
|
||||||
for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {
|
|
||||||
Count = FtwLiteDevice->SizeOfSpareBlock;
|
|
||||||
Status = FtwLiteDevice->FtwBackupFvb->Write (
|
|
||||||
FtwLiteDevice->FtwBackupFvb,
|
|
||||||
FtwLiteDevice->FtwSpareLba + Index,
|
|
||||||
0,
|
|
||||||
&Count,
|
|
||||||
Ptr
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
DEBUG ((EFI_D_FTW_LITE, "FtwLite: FVB Write boot block - %r\n", Status));
|
|
||||||
FreePool (Buffer);
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ptr += Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (Buffer);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Clear TopSwap bit
|
|
||||||
//
|
|
||||||
Status = SetSwapState (FtwLiteDevice, FALSE);
|
|
||||||
DEBUG ((EFI_D_ERROR, "FtwLite: Clear Swap State - %r\n", Status));
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
|
@ -1,117 +0,0 @@
|
||||||
/** @file
|
|
||||||
|
|
||||||
Ipf platform related code to support FtwLite..
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, 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 "FtwLite.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// MACROs for boot block update
|
|
||||||
//
|
|
||||||
#define BOOT_BLOCK_BASE
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Get swap state
|
|
||||||
This is a internal function.
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param SwapState Swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS State successfully got
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
GetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
OUT BOOLEAN *SwapState
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set swap state.
|
|
||||||
This is a internal function.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Indicates a pointer to the calling context.
|
|
||||||
@param TopSwap New swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The function completed successfully
|
|
||||||
Note:
|
|
||||||
the Top-Swap bit (bit 13, D31: F0, Offset D4h). Note that
|
|
||||||
software will not be able to clear the Top-Swap bit until the system is
|
|
||||||
rebooted without GNT[A]# being pulled down.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
SetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
IN BOOLEAN TopSwap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Check whether the block is a boot block.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param FvBlock Fvb protocol instance
|
|
||||||
@param Lba Lba value
|
|
||||||
|
|
||||||
@retval FALSE This is a boot block.
|
|
||||||
@retval TRUE This is not a boot block.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,
|
|
||||||
EFI_LBA Lba
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// IPF doesn't support safe bootblock update
|
|
||||||
// so treat bootblock as normal block
|
|
||||||
//
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy the content of spare block to a boot block. Size is FTW_BLOCK_SIZE.
|
|
||||||
Spare block is accessed by FTW backup FVB protocol interface. LBA is
|
|
||||||
FtwLiteDevice->FtwSpareLba.
|
|
||||||
Boot block is accessed by BootFvb protocol interface. LBA is 0.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice The private data of FTW_LITE driver
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS Spare block content is copied to boot block
|
|
||||||
@retval EFI_INVALID_PARAMETER Input parameter error
|
|
||||||
@retval EFI_OUT_OF_RESOURCES Allocate memory error
|
|
||||||
@retval EFI_ABORTED The function could not complete successfully
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
FlushSpareBlockToBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
/** @file
|
|
||||||
|
|
||||||
X64 platform related code to support FtwLite.
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, 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 "FtwLite.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// MACROs for boot block update
|
|
||||||
//
|
|
||||||
#define BOOT_BLOCK_BASE
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Get swap state.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param SwapState Swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS State successfully read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
GetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
OUT BOOLEAN *SwapState
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set swap state.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Indicates a pointer to the calling context.
|
|
||||||
@param TopSwap New swap state
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The function completed successfully
|
|
||||||
Note:
|
|
||||||
the Top-Swap bit (bit 13, D31: F0, Offset D4h). Note that
|
|
||||||
software will not be able to clear the Top-Swap bit until the system is
|
|
||||||
rebooted without GNT[A]# being pulled down.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
SetSwapState (
|
|
||||||
IN EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
IN BOOLEAN TopSwap
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
Check whether the block is a boot block.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice Calling context
|
|
||||||
@param FvBlock Fvb protocol instance
|
|
||||||
@param Lba Lba value
|
|
||||||
|
|
||||||
@retval FALSE This is a boot block.
|
|
||||||
@retval TRUE This is not a boot block.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice,
|
|
||||||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,
|
|
||||||
EFI_LBA Lba
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy the content of spare block to a boot block. Size is FTW_BLOCK_SIZE.
|
|
||||||
Spare block is accessed by FTW backup FVB protocol interface. LBA is
|
|
||||||
FtwLiteDevice->FtwSpareLba.
|
|
||||||
Boot block is accessed by BootFvb protocol interface. LBA is 0.
|
|
||||||
|
|
||||||
|
|
||||||
@param FtwLiteDevice The private data of FTW_LITE driver
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS Spare block content is copied to boot block
|
|
||||||
@retval EFI_INVALID_PARAMETER Input parameter error
|
|
||||||
@retval EFI_OUT_OF_RESOURCES Allocate memory error
|
|
||||||
@retval EFI_ABORTED The function could not complete successfully
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
FlushSpareBlockToBootBlock (
|
|
||||||
EFI_FTW_LITE_DEVICE *FtwLiteDevice
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
/** @file
|
/** @file
|
||||||
PCD PEIM produces PCD database to manage all dynamic PCD in PEI phase and install Pcd Ppi.
|
All Pcd Ppi services are implemented here.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation
|
Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
|
@ -1207,7 +1207,7 @@ SetPtrTypeSize (
|
||||||
(*CurrentSize == MAX_ADDRESS)) {
|
(*CurrentSize == MAX_ADDRESS)) {
|
||||||
*CurrentSize = MaxSize;
|
*CurrentSize = MaxSize;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == 0) {
|
if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == 0) {
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/** @file
|
/** @file
|
||||||
Private functions used by PCD PEIM.
|
The driver internal functions are implmented here.
|
||||||
|
They build Pei PCD database, and provide access service to PCD database.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation
|
Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/** @file
|
/** @file
|
||||||
Private functions used by PCD PEIM.
|
The internal header file declares the private functions used by PeiPcd driver.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation
|
Copyright (c) 2006 - 2008, Intel Corporation
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
|
|
Loading…
Reference in New Issue