+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006, 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
-Module Name:\r
-\r
- FwBlockService.h\r
- \r
-Abstract:\r
-\r
- Firmware volume block driver for Intel Firmware Hub (FWH) device\r
-\r
---*/\r
-\r
-#ifndef _FW_BLOCK_SERVICE_H\r
-#define _FW_BLOCK_SERVICE_H\r
-\r
-//\r
-// Statements that include other header files\r
-//\r
-#include "Tiano.h"\r
-#include "EfiFirmwareVolumeHeader.h"\r
-#include "EfiRuntimeLib.h"\r
-#include "EfiHobLib.h"\r
-#include "EfiScriptLib.h"\r
-\r
-#include EFI_PROTOCOL_PRODUCER (FirmwareVolumeBlock)\r
-#include EFI_PROTOCOL_PRODUCER (FvbExtension)\r
-#include EFI_GUID_DEFINITION (AlternateFvBlock)\r
-#include EFI_GUID_DEFINITION (Hob)\r
-#include EFI_GUID_DEFINITION (DxeServices)\r
-#include EFI_PROTOCOL_CONSUMER (CpuIo)\r
-\r
-#define FVB_MAX_RETRY_TIMES 10000000\r
-#define FWH_BLOCK_ERASE_SETUP_COMMAND 0x20\r
-#define FWH_BLOCK_ERASE_CONFIRM_COMMAND 0xd0\r
-#define FWH_READ_STATUS_COMMAND 0x70\r
-#define FWH_CLEAR_STATUS_COMMAND 0x50\r
-#define FWH_READ_ARRAY_COMMAND 0xff\r
-#define FWH_WRITE_SETUP_COMMAND 0x40\r
-#define FWH_OPEN_FEATURE_SPACE_COMMAND 0x91\r
-#define FWH_READ_LOCK (1 << 2)\r
-#define FWH_WRITE_LOCK (1 << 1)\r
-#define FWH_LOCK_DOWN 1\r
-#define FWH_WRITE_STATE_STATUS (1 << 7)\r
-#define FWH_ERASE_STATUS (1 << 5)\r
-#define FWH_PROGRAM_STATUS (1 << 4)\r
-#define FWH_VPP_STATUS (1 << 3)\r
-#define STALL_TIME 5\r
-#define FWH_ERASE_STATUS_BITS (FWH_ERASE_STATUS || FWH_VPP_STATUS)\r
-#define FWH_WRITE_STATUS_BITS (FWH_WRITE_STATUS || FWH_VPP_STATUS)\r
-#define CFI_BLOCK_LOCK_UNLOCK 0x60\r
-#define CFI_BLOCK_LOCK_CONFIRM 1\r
-#define CFI_BLOCK_UNLOCK_CONFIRM 0xD0\r
-#define CFI_QUERY 0x98\r
-\r
-//\r
-// BugBug: Add documentation here for data structure!!!!\r
-//\r
-#define FVB_PHYSICAL 0\r
-#define FVB_VIRTUAL 1\r
-\r
-typedef struct {\r
- EFI_LOCK FvbDevLock;\r
- UINTN FvBase[2];\r
- UINTN FvWriteBase[2];\r
- UINTN NumOfBlocks;\r
- BOOLEAN WriteEnabled;\r
- EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
-} EFI_FW_VOL_INSTANCE;\r
-\r
-typedef struct {\r
- UINT32 NumFv;\r
- EFI_FW_VOL_INSTANCE *FvInstance[2];\r
- UINT8 *FvbScratchSpace[2];\r
-} ESAL_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 EFI_SIGNATURE_32 ('F', 'V', 'B', 'C')\r
-\r
-typedef struct {\r
- MEMMAP_DEVICE_PATH MemMapDevPath;\r
- EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
-} FV_DEVICE_PATH;\r
-\r
-typedef struct {\r
- UINTN Signature;\r
- FV_DEVICE_PATH DevicePath;\r
- UINTN Instance;\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
- EFI_FVB_EXTENSION_PROTOCOL FvbExtension;\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
-EFI_STATUS\r
-EnableFvbWrites (\r
- IN BOOLEAN EnableWrites\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-PlatformGetFvbWriteBase (\r
- IN UINTN CurrentBaseAddress,\r
- IN UINTN *NewBaseAddress,\r
- IN BOOLEAN *WriteEnabled\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EnablePlatformFvb (\r
- VOID\r
- )\r
-;\r
-\r
-BOOLEAN\r
-SetPlatformFvbLock (\r
- IN UINTN LbaAddress\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbReadBlock (\r
- IN UINTN Instance,\r
- IN EFI_LBA Lba,\r
- IN UINTN BlockOffset,\r
- IN OUT UINTN *NumBytes,\r
- IN UINT8 *Buffer,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbWriteBlock (\r
- IN UINTN Instance,\r
- IN EFI_LBA Lba,\r
- IN UINTN BlockOffset,\r
- IN OUT UINTN *NumBytes,\r
- IN UINT8 *Buffer,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbEraseBlock (\r
- IN UINTN Instance,\r
- IN EFI_LBA Lba,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbSetVolumeAttributes (\r
- IN UINTN Instance,\r
- IN OUT EFI_FVB_ATTRIBUTES *Attributes,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbGetVolumeAttributes (\r
- IN UINTN Instance,\r
- OUT EFI_FVB_ATTRIBUTES *Attributes,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbGetPhysicalAddress (\r
- IN UINTN Instance,\r
- OUT EFI_PHYSICAL_ADDRESS *Address,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbInitialize (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-;\r
-\r
-\r
-VOID\r
-EFIAPI\r
-FvbClassAddressChangeEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbSpecificInitialize (\r
- IN ESAL_FWB_GLOBAL *mFvbModuleGlobal\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-FvbGetLbaAddress (\r
- IN UINTN Instance,\r
- IN EFI_LBA Lba,\r
- OUT UINTN *LbaAddress,\r
- OUT UINTN *LbaWriteAddress,\r
- OUT UINTN *LbaLength,\r
- OUT UINTN *NumOfBlocks,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
- )\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
-//\r
-// Protocol APIs\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolGetAttributes (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- OUT EFI_FVB_ATTRIBUTES *Attributes\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolSetAttributes (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- IN OUT EFI_FVB_ATTRIBUTES *Attributes\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolGetPhysicalAddress (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- OUT EFI_PHYSICAL_ADDRESS *Address\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolGetBlockSize (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- IN EFI_LBA Lba,\r
- OUT UINTN *BlockSize,\r
- OUT UINTN *NumOfBlocks\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolRead (\r
- IN 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
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolWrite (\r
- IN 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
-\r
-EFI_STATUS\r
-EFIAPI\r
-FvbProtocolEraseBlocks (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- ...\r
- )\r
-;\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
-#endif\r