]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UnixPkg/FvbServicesRuntimeDxe/FWBlockService.c
Add Missing invocations to VA_END() for VA_START().
[mirror_edk2.git] / UnixPkg / FvbServicesRuntimeDxe / FWBlockService.c
index 79f6be6ae5b4deca737a223033293ac7d3bf7ad4..b49a660eabf8dfdc6933ec9367c52d0380427bc8 100644 (file)
@@ -1,7 +1,7 @@
 /*++\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
+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
@@ -21,9 +21,7 @@ Revision History
 \r
 #include "PiDxe.h"\r
 #include <Guid/EventGroup.h>\r
-#include <Protocol/FvbExtension.h>\r
 #include <Protocol/FirmwareVolumeBlock.h>\r
-#include <Guid/AlternateFvBlock.h>\r
 #include <Protocol/DevicePath.h>\r
 \r
 #include <Library/UefiLib.h>\r
@@ -35,8 +33,8 @@ Revision History
 #include <Library/HobLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/DevicePathLib.h>
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/DevicePathLib.h>\r
 \r
 #include "FwBlockService.h"\r
 \r
@@ -79,9 +77,6 @@ EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = {
     FvbProtocolWrite,\r
     FvbProtocolEraseBlocks,\r
     NULL\r
-  },\r
-  {\r
-    FvbExtendProtocolEraseCustomBlockRange\r
   }\r
 };\r
 \r
@@ -135,7 +130,6 @@ Returns:
     Index++;\r
   }\r
 \r
-  EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal->FvbScratchSpace[FVB_VIRTUAL]);\r
   EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal);\r
 }\r
 \r
@@ -216,7 +210,7 @@ Returns:
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE *FwhInstance = NULL;\r
   EFI_STATUS          Status;\r
 \r
   //\r
@@ -232,7 +226,7 @@ Returns:
 EFI_STATUS\r
 FvbGetVolumeAttributes (\r
   IN UINTN                                Instance,\r
-  OUT EFI_FVB_ATTRIBUTES_2                  *Attributes,\r
+  OUT EFI_FVB_ATTRIBUTES_2                *Attributes,\r
   IN ESAL_FWB_GLOBAL                      *Global,\r
   IN BOOLEAN                              Virtual\r
   )\r
@@ -256,7 +250,7 @@ Returns:
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE *FwhInstance = NULL;\r
   EFI_STATUS          Status;\r
 \r
   //\r
@@ -309,7 +303,7 @@ Returns:
   UINTN                   Offset;\r
   EFI_LBA                 StartLba;\r
   EFI_LBA                 NextLba;\r
-  EFI_FW_VOL_INSTANCE     *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE     *FwhInstance = NULL;\r
   EFI_FV_BLOCK_MAP_ENTRY  *BlockMap;\r
   EFI_STATUS              Status;\r
 \r
@@ -566,10 +560,10 @@ Returns:
 {\r
 \r
   EFI_FVB_ATTRIBUTES_2  Attributes;\r
-  UINTN               LbaAddress;\r
-  UINTN               LbaLength;\r
-  EFI_STATUS          Status;\r
-  UINT8               Data;\r
+  UINTN                 LbaAddress;\r
+  UINTN                 LbaLength;\r
+  EFI_STATUS            Status;\r
+  UINT8                 Data;\r
 \r
   //\r
   // Check if the FV is write enabled\r
@@ -599,117 +593,10 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-EFI_STATUS\r
-FvbEraseCustomBlockRange (\r
-  IN UINTN                                Instance,\r
-  IN EFI_LBA                              StartLba,\r
-  IN UINTN                                OffsetStartLba,\r
-  IN EFI_LBA                              LastLba,\r
-  IN UINTN                                OffsetLastLba,\r
-  IN ESAL_FWB_GLOBAL                      *Global,\r
-  IN BOOLEAN                              Virtual\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Erases and initializes a specified range of a firmware volume\r
-\r
-Arguments:\r
-  Instance              - The FV instance to be erased\r
-  StartLba              - The starting logical block index to be erased\r
-  OffsetStartLba        - Offset into the starting block at which to \r
-                          begin erasing\r
-  LastLba               - The last logical block index to be erased\r
-  OffsetStartLba        - Offset into the last block at which to end erasing\r
-  Global                - Pointer to ESAL_FWB_GLOBAL that contains all\r
-                          instance data\r
-  Virtual               - Whether CPU is in virtual or physical mode\r
-\r
-Returns: \r
-  EFI_SUCCESS           - The firmware volume was erased successfully\r
-  EFI_ACCESS_DENIED     - The firmware volume is in the WriteDisabled state\r
-  EFI_DEVICE_ERROR      - The block device is not functioning correctly and \r
-                          could not be written. Firmware device may have been\r
-                          partially erased\r
-  EFI_INVALID_PARAMETER - Instance not found\r
-\r
---*/\r
-{\r
-  EFI_LBA Index;\r
-  UINTN   LbaSize;\r
-  UINTN   ScratchLbaSizeData;\r
-  EFI_STATUS Status;\r
-\r
-  //\r
-  // First LBA\r
-  //\r
-  Status = FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Use the scratch space as the intermediate buffer to transfer data\r
-  // Back up the first LBA in scratch space.\r
-  //\r
-  FvbReadBlock (Instance, StartLba, 0, &LbaSize, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
-\r
-  //\r
-  // erase now\r
-  //\r
-  FvbEraseBlock (Instance, StartLba, Global, Virtual);\r
-  ScratchLbaSizeData = OffsetStartLba;\r
-\r
-  //\r
-  // write the data back to the first block\r
-  //\r
-  if (ScratchLbaSizeData > 0) {\r
-    Status = FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-  //\r
-  // Middle LBAs\r
-  //\r
-  if (LastLba > (StartLba + 1)) {\r
-    for (Index = (StartLba + 1); Index <= (LastLba - 1); Index++) {\r
-      FvbEraseBlock (Instance, Index, Global, Virtual);\r
-    }\r
-  }\r
-  //\r
-  // Last LBAs, the same as first LBAs\r
-  //\r
-  if (LastLba > StartLba) {\r
-    Status = FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-    FvbReadBlock (Instance, LastLba, 0, &LbaSize, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
-    FvbEraseBlock (Instance, LastLba, Global, Virtual);\r
-  }\r
-\r
-  ScratchLbaSizeData = LbaSize - (OffsetLastLba + 1);\r
-\r
-  if (ScratchLbaSizeData > 0) {\r
-    Status = FvbWriteBlock (\r
-              Instance,\r
-              LastLba,\r
-              (OffsetLastLba + 1),\r
-              &ScratchLbaSizeData,\r
-              Global->FvbScratchSpace[Virtual] + OffsetLastLba + 1,\r
-              Global,\r
-              Virtual\r
-              );\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
 EFI_STATUS\r
 FvbSetVolumeAttributes (\r
   IN UINTN                                Instance,\r
-  IN OUT EFI_FVB_ATTRIBUTES_2               *Attributes,\r
+  IN OUT EFI_FVB_ATTRIBUTES_2             *Attributes,\r
   IN ESAL_FWB_GLOBAL                      *Global,\r
   IN BOOLEAN                              Virtual\r
   )\r
@@ -739,13 +626,13 @@ Returns:
 \r
 --*/\r
 {\r
-  EFI_FW_VOL_INSTANCE *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE   *FwhInstance = NULL;\r
   EFI_FVB_ATTRIBUTES_2  OldAttributes;\r
   EFI_FVB_ATTRIBUTES_2  *AttribPtr;\r
-  UINT32              Capabilities;\r
-  UINT32              OldStatus;\r
-  UINT32              NewStatus;\r
-  EFI_STATUS          Status;\r
+  UINT32                Capabilities;\r
+  UINT32                OldStatus;\r
+  UINT32                NewStatus;\r
+  EFI_STATUS            Status;\r
   EFI_FVB_ATTRIBUTES_2  UnchangedAttributes;\r
 \r
 \r
@@ -846,7 +733,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetPhysicalAddress (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
   OUT EFI_PHYSICAL_ADDRESS                        *Address\r
   )\r
 /*++\r
@@ -877,7 +764,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetBlockSize (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
   IN  EFI_LBA                                     Lba,\r
   OUT UINTN                                       *BlockSize,\r
   OUT UINTN                                       *NumOfBlocks\r
@@ -921,8 +808,8 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolGetAttributes (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  OUT EFI_FVB_ATTRIBUTES_2                          *Attributes\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
+  OUT EFI_FVB_ATTRIBUTES_2                        *Attributes\r
   )\r
 /*++\r
 \r
@@ -948,8 +835,8 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolSetAttributes (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
-  IN OUT EFI_FVB_ATTRIBUTES_2                       *Attributes\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
+  IN OUT EFI_FVB_ATTRIBUTES_2                     *Attributes\r
   )\r
 /*++\r
 \r
@@ -975,7 +862,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolEraseBlocks (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,\r
   ...  \r
   )\r
 /*++\r
@@ -1004,7 +891,7 @@ Returns:
 --*/\r
 {\r
   EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
-  EFI_FW_VOL_INSTANCE     *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE     *FwhInstance = NULL;\r
   UINTN                   NumOfBlocks;\r
   VA_LIST                 args;\r
   EFI_LBA                 StartingLba;\r
@@ -1031,14 +918,10 @@ Returns:
     //\r
     // Check input parameters\r
     //\r
-    if (NumOfLba == 0) {\r
+    if (NumOfLba == 0 || (StartingLba + NumOfLba) > NumOfBlocks) {\r
       VA_END (args);\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-\r
-    if ((StartingLba + NumOfLba) > NumOfBlocks) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
   } while (1);\r
 \r
   VA_END (args);\r
@@ -1073,7 +956,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolWrite (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
   IN EFI_LBA                                      Lba,\r
   IN UINTN                                        Offset,\r
   IN OUT UINTN                                    *NumBytes,\r
@@ -1121,7 +1004,7 @@ Returns:
 EFI_STATUS\r
 EFIAPI\r
 FvbProtocolRead (\r
-  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL     *This,\r
   IN EFI_LBA                                      Lba,\r
   IN UINTN                                        Offset,\r
   IN OUT UINTN                                    *NumBytes,\r
@@ -1166,55 +1049,6 @@ Returns:
 \r
   return FvbReadBlock (FvbDevice->Instance, Lba, Offset, NumBytes, Buffer, mFvbModuleGlobal, EfiGoneVirtual ());\r
 }\r
-//\r
-// FVB Extension Protocols\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-FvbExtendProtocolEraseCustomBlockRange (\r
-  IN EFI_FVB_EXTENSION_PROTOCOL           *This,\r
-  IN EFI_LBA                              StartLba,\r
-  IN UINTN                                OffsetStartLba,\r
-  IN EFI_LBA                              LastLba,\r
-  IN UINTN                                OffsetLastLba\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Erases and initializes a specified range of a firmware volume\r
-\r
-Arguments:\r
-  This                  - Calling context\r
-  StartLba              - The starting logical block index to be erased\r
-  OffsetStartLba        - Offset into the starting block at which to \r
-                          begin erasing\r
-  LastLba               - The last logical block index to be erased\r
-  OffsetStartLba        - Offset into the last block at which to end erasing\r
-\r
-Returns: \r
-  EFI_SUCCESS           - The firmware volume was erased successfully\r
-  EFI_ACCESS_DENIED     - The firmware volume is in the WriteDisabled state\r
-  EFI_DEVICE_ERROR      - The block device is not functioning correctly and \r
-                          could not be written. Firmware device may have been\r
-                          partially erased\r
-\r
---*/\r
-{\r
-  EFI_FW_VOL_BLOCK_DEVICE *FvbDevice;\r
-\r
-  FvbDevice = FVB_EXTEND_DEVICE_FROM_THIS (This);\r
-\r
-  return FvbEraseCustomBlockRange (\r
-          FvbDevice->Instance,\r
-          StartLba,\r
-          OffsetStartLba,\r
-          LastLba,\r
-          OffsetLastLba,\r
-          mFvbModuleGlobal,\r
-          EfiGoneVirtual ()\r
-          );\r
-}\r
-\r
 EFI_STATUS\r
 ValidateFvHeader (\r
   EFI_FIRMWARE_VOLUME_HEADER            *FwVolHeader\r
@@ -1286,7 +1120,7 @@ Returns:
 --*/\r
 {\r
   EFI_STATUS                          Status;\r
-  EFI_FW_VOL_INSTANCE                 *FwhInstance;\r
+  EFI_FW_VOL_INSTANCE                 *FwhInstance = NULL;\r
   EFI_FIRMWARE_VOLUME_HEADER          *FwVolHeader;\r
   EFI_DXE_SERVICES                    *DxeServices;\r
   EFI_GCD_MEMORY_SPACE_DESCRIPTOR     Descriptor;\r
@@ -1515,19 +1349,6 @@ Returns:
       //\r
       ASSERT (FALSE);\r
     }\r
-    //\r
-    // Install FVB Extension Protocol on the same handle\r
-    //\r
-    Status = gBS->InstallMultipleProtocolInterfaces (\r
-                    &FwbHandle,\r
-                    &gEfiFvbExtensionProtocolGuid,\r
-                    &FvbDevice->FvbExtension,\r
-                    &gEfiAlternateFvBlockGuid,\r
-                    NULL,\r
-                    NULL\r
-                    );\r
-\r
-    ASSERT_EFI_ERROR (Status);\r
 \r
     FwhInstance = (EFI_FW_VOL_INSTANCE *)\r
       (\r
@@ -1538,17 +1359,5 @@ Returns:
     FvHob.Raw = GET_NEXT_HOB (FvHob);\r
   }\r
 \r
-  //\r
-  // Allocate for scratch space, an intermediate buffer for FVB extention\r
-  //\r
-  Status = gBS->AllocatePool (\r
-                  EfiRuntimeServicesData,\r
-                  MaxLbaSize,\r
-                  (VOID**)&mFvbModuleGlobal->FvbScratchSpace[FVB_PHYSICAL]\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  mFvbModuleGlobal->FvbScratchSpace[FVB_VIRTUAL] = mFvbModuleGlobal->FvbScratchSpace[FVB_PHYSICAL];\r
-\r
   return EFI_SUCCESS;\r
 }\r