]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbService.h
Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to
[mirror_edk2.git] / Vlv2TbltDevicePkg / FvbRuntimeDxe / FvbService.h
diff --git a/Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbService.h b/Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbService.h
new file mode 100644 (file)
index 0000000..cfdb92c
--- /dev/null
@@ -0,0 +1,187 @@
+/** @file\r
+  The header file for Firmware volume block driver.\r
+\r
+Copyright (c) 2006  - 2014, Intel Corporation. All rights reserved.<BR>\r
+                                                                                   \r\r
+  This program and the accompanying materials are licensed and made available under\r\r
+  the terms and conditions of the BSD License that accompanies this distribution.  \r\r
+  The full text of the license may be found at                                     \r\r
+  http://opensource.org/licenses/bsd-license.php.                                  \r\r
+                                                                                   \r\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,            \r\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.    \r\r
+                                                                                   \r\r
+\r
+**/\r
+\r
+#ifndef _FW_BLOCK_SERVICE_H\r
+#define _FW_BLOCK_SERVICE_H\r
+\r
+#include <Guid/EventGroup.h>\r
+#include <Guid/FirmwareFileSystem2.h>\r
+#include <Guid/SystemNvDataGuid.h>\r
+#include <Protocol/DevicePath.h>\r
+#include <Protocol/FirmwareVolumeBlock.h>\r
+\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/IoLib.h>\r
+#include <Library/CacheMaintenanceLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/FlashDeviceLib.h>\r
+#include <Library/DevicePathLib.h>\r
+\r
+//\r
+// Define two helper macro to extract the Capability field or Status field in FVB\r
+// bit fields.\r
+//\r
+#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \\r
+                              EFI_FVB2_READ_ENABLED_CAP | \\r
+                              EFI_FVB2_WRITE_DISABLED_CAP | \\r
+                              EFI_FVB2_WRITE_ENABLED_CAP | \\r
+                              EFI_FVB2_LOCK_CAP \\r
+                              )\r
+\r
+#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)\r
+\r
+\r
+typedef struct {\r
+  UINTN                       FvBase;\r
+  UINTN                       NumOfBlocks;\r
+  //\r
+  // Note!!!: VolumeHeader must be the last element\r
+  // of the structure.\r
+  //\r
+  EFI_FIRMWARE_VOLUME_HEADER  VolumeHeader;\r
+} EFI_FW_VOL_INSTANCE;\r
+\r
+typedef struct {\r
+  EFI_FW_VOL_INSTANCE         *FvInstance;\r
+  UINT32                      NumFv;\r
+} FWB_GLOBAL;\r
+\r
+//\r
+// Fvb Protocol instance data.\r
+//\r
+#define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
+#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)\r
+#define FVB_DEVICE_SIGNATURE       SIGNATURE_32('F','V','B','C')\r
+\r
+typedef struct {\r
+  MEDIA_FW_VOL_DEVICE_PATH  FvDevPath;\r
+  EFI_DEVICE_PATH_PROTOCOL  EndDevPath;\r
+} FV_PIWG_DEVICE_PATH;\r
+\r
+typedef struct {\r
+  MEMMAP_DEVICE_PATH          MemMapDevPath;\r
+  EFI_DEVICE_PATH_PROTOCOL    EndDevPath;\r
+} FV_MEMMAP_DEVICE_PATH;\r
+\r
+typedef struct {\r
+  UINT32                                Signature;\r
+  EFI_DEVICE_PATH_PROTOCOL              *DevicePath;\r
+  UINTN                                 Instance;\r
+  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    FwVolBlockInstance;\r
+} EFI_FW_VOL_BLOCK_DEVICE;\r
+\r
+EFI_STATUS\r
+GetFvbInfo (\r
+  IN  EFI_PHYSICAL_ADDRESS              FvBaseAddress,\r
+  OUT EFI_FIRMWARE_VOLUME_HEADER        **FvbInfo\r
+  );\r
+\r
+//\r
+// Protocol APIs\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolGetAttributes (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,\r
+  OUT EFI_FVB_ATTRIBUTES_2                      *Attributes\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolSetAttributes (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,\r
+  IN OUT EFI_FVB_ATTRIBUTES_2                   *Attributes\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolGetPhysicalAddress (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+       OUT EFI_PHYSICAL_ADDRESS                *Address\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolGetBlockSize (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,\r
+  IN  EFI_LBA                            Lba,\r
+  OUT UINTN                              *BlockSize,\r
+  OUT UINTN                              *NumOfBlocks\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolRead (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,\r
+  IN EFI_LBA                              Lba,\r
+  IN UINTN                                Offset,\r
+  IN OUT UINTN                            *NumBytes,\r
+  OUT UINT8                                *Buffer\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolWrite (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,\r
+  IN EFI_LBA                              Lba,\r
+  IN UINTN                                Offset,\r
+  IN OUT UINTN                            *NumBytes,\r
+  IN UINT8                                *Buffer\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+FvbProtocolEraseBlocks (\r
+  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,\r
+  ...\r
+  );\r
+\r
+EFI_FW_VOL_INSTANCE *\r
+GetFvbInstance (\r
+  IN  UINTN                              Instance\r
+  );\r
+\r
+BOOLEAN\r
+IsFvHeaderValid (\r
+  IN       EFI_PHYSICAL_ADDRESS          FvBase,\r
+  IN CONST EFI_FIRMWARE_VOLUME_HEADER    *FwVolHeader\r
+  );\r
+\r
+VOID\r
+InstallFvbProtocol (\r
+  IN  EFI_FW_VOL_INSTANCE               *FwhInstance,\r
+  IN  UINTN                             InstanceNum\r
+  );\r
+\r
+EFI_STATUS\r
+FvbInitialize (\r
+  VOID\r
+  );\r
+\r
+extern FWB_GLOBAL              mFvbModuleGlobal;\r
+extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate;\r
+extern FV_MEMMAP_DEVICE_PATH   mFvMemmapDevicePathTemplate;\r
+extern FV_PIWG_DEVICE_PATH     mFvPIWGDevicePathTemplate;\r
+extern UINT32                  mPlatformFvBaseAddress[3];\r
+\r
+#endif\r
+\r