]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Code clean for Ftw driver, remove the obsolete logic for boot block. Correct some...
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 24 Dec 2008 01:24:17 +0000 (01:24 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 24 Dec 2008 01:24:17 +0000 (01:24 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7108 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.c
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.h
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwLite.inf
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwMisc.c
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwWorkSpace.c
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/Ia32/Ia32FtwMisc.c [deleted file]
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/Ipf/IpfFtwMisc.c [deleted file]
MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/X64/X64FtwMisc.c [deleted file]
MdeModulePkg/Universal/PCD/Pei/Pcd.c
MdeModulePkg/Universal/PCD/Pei/Service.c
MdeModulePkg/Universal/PCD/Pei/Service.h

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