/*++ Copyright (c) 2006, 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. Module Name: FwBlockService.h Abstract: Firmware volume block driver for Intel Firmware Hub (FWH) device --*/ #ifndef _FW_BLOCK_SERVICE_H #define _FW_BLOCK_SERVICE_H // // Fvb Protocol instance data // #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE) #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') #pragma pack (1) typedef struct { EFI_FIRMWARE_VOLUME_HEADER FvHdr; EFI_FV_BLOCK_MAP_ENTRY EndBlockMap; VARIABLE_STORE_HEADER VarHdr; } FVB_FV_HDR_AND_VARS_TEMPLATE; typedef struct { MEMMAP_DEVICE_PATH MemMapDevPath; EFI_DEVICE_PATH_PROTOCOL EndDevPath; } FV_DEVICE_PATH; #pragma pack () typedef struct { UINTN Signature; FV_DEVICE_PATH DevicePath; VOID *BufferPtr; UINTN BlockSize; UINTN Size; EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; } EFI_FW_VOL_BLOCK_DEVICE; // // Constants // #define EMU_FVB_BLOCK_SIZE (FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize)) #define EMU_FVB_SIZE (2 * FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize)) #define FTW_WRITE_QUEUE_SIZE \ (FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) - \ sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER)) #define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr) #define NOT_ERASED_BIT 0 #define ERASED_BIT 1 #define ERASED_UINT8 0xff #define ERASED_UINT32 0xffffffff // // Protocol APIs // EFI_STATUS EFIAPI FvbProtocolGetAttributes ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) ; EFI_STATUS EFIAPI FvbProtocolSetAttributes ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) ; EFI_STATUS EFIAPI FvbProtocolGetPhysicalAddress ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, OUT EFI_PHYSICAL_ADDRESS *Address ) ; EFI_STATUS EFIAPI FvbProtocolGetBlockSize ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, IN EFI_LBA Lba, OUT UINTN *BlockSize, OUT UINTN *NumberOfBlocks ) ; EFI_STATUS EFIAPI FvbProtocolRead ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, IN EFI_LBA Lba, IN UINTN Offset, IN OUT UINTN *NumBytes, IN OUT UINT8 *Buffer ) ; EFI_STATUS EFIAPI FvbProtocolWrite ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, IN EFI_LBA Lba, IN UINTN Offset, IN OUT UINTN *NumBytes, IN UINT8 *Buffer ) ; EFI_STATUS EFIAPI FvbProtocolEraseBlocks ( IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, ... ) ; #endif