/*++ Copyright (c) 2006, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent 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 \ EFI_PAGE_SIZE #define EMU_FVB_NUM_SPARE_BLOCKS \ EFI_SIZE_TO_PAGES ((UINTN)FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize)) #define EMU_FVB_NUM_TOTAL_BLOCKS \ (2 * EMU_FVB_NUM_SPARE_BLOCKS) #define EMU_FVB_SIZE \ (EMU_FVB_NUM_TOTAL_BLOCKS * EMU_FVB_BLOCK_SIZE) #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