16ae81428485020dd371eaefa5b97b24f21efe117klu/**@file 255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 38f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtianCopyright (c) 2006, Intel Corporation. All rights reserved.<BR> 48f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtianThis program and the accompanying materials 555e6660f6b4652dcac70ae5eb312a3cd2c96733dkluare licensed and made available under the terms and conditions of the BSD License 655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluwhich accompanies this distribution. The full text of the license may be found at 755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluhttp://opensource.org/licenses/bsd-license.php 855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 1055e6660f6b4652dcac70ae5eb312a3cd2c96733dkluWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 1155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 1255e6660f6b4652dcac70ae5eb312a3cd2c96733dkluModule Name: 1355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 1455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu FwBlockService.h 1555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 1655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluAbstract: 1755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 1855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu Firmware volume block driver for Intel Firmware Hub (FWH) device 1955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 206ae81428485020dd371eaefa5b97b24f21efe117klu**/ 2155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 2255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#ifndef _FW_BLOCK_SERVICE_H 2355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#define _FW_BLOCK_SERVICE_H 2455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 2555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 2655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// BugBug: Add documentation here for data structure!!!! 2755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 2855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#define FVB_PHYSICAL 0 2955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#define FVB_VIRTUAL 1 3055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 3155e6660f6b4652dcac70ae5eb312a3cd2c96733dklutypedef struct { 3255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu EFI_LOCK FvbDevLock; 3355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINTN FvBase[2]; 3455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINTN NumOfBlocks; 3555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu EFI_FIRMWARE_VOLUME_HEADER VolumeHeader; 3655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu} EFI_FW_VOL_INSTANCE; 3755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 3855e6660f6b4652dcac70ae5eb312a3cd2c96733dklutypedef struct { 3955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINT32 NumFv; 4055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu EFI_FW_VOL_INSTANCE *FvInstance[2]; 4155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINT8 *FvbScratchSpace[2]; 4255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu} ESAL_FWB_GLOBAL; 4355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 4455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 4555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// Fvb Protocol instance data 4655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 4755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE) 4855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE) 4999e1dd896a87bc8c8548f4dcd7c1a902825c9c42qhuang#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') 5055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 5155e6660f6b4652dcac70ae5eb312a3cd2c96733dklutypedef struct { 52eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu MEDIA_FW_VOL_DEVICE_PATH FvDevPath; 5355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu EFI_DEVICE_PATH_PROTOCOL EndDevPath; 54eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu} FV_PIWG_DEVICE_PATH; 55eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu 56eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklutypedef struct { 57eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu MEMMAP_DEVICE_PATH MemMapDevPath; 58eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu EFI_DEVICE_PATH_PROTOCOL EndDevPath; 59eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu} FV_MEMMAP_DEVICE_PATH; 6055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 6155e6660f6b4652dcac70ae5eb312a3cd2c96733dklutypedef struct { 6255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINTN Signature; 63eb9203646f2f05dff08a2852fe3a862d1c4fc5bdklu EFI_DEVICE_PATH_PROTOCOL *DevicePath; 6455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu UINTN Instance; 6555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; 6655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu} EFI_FW_VOL_BLOCK_DEVICE; 6755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 6855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 6955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluGetFvbInfo ( 7055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINT64 FvLength, 7155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo 72ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 7355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 7455e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 7555e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbReadBlock ( 7655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 7755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_LBA Lba, 7855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN BlockOffset, 7955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN OUT UINTN *NumBytes, 8055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINT8 *Buffer, 8155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 8255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 83ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 8455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 8555e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 8655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbWriteBlock ( 8755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 8855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_LBA Lba, 8955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST UINTN BlockOffset, 9055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN OUT UINTN *NumBytes, 9155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST UINT8 *Buffer, 9255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 9355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 94ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 9555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 9655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 9755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbEraseBlock ( 9855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 9955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_LBA Lba, 10055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 10155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 102ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 10355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 10455e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 10555e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbSetVolumeAttributes ( 10655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 1078ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, 10855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 10955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 110ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 11155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 11255e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 11355e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbGetVolumeAttributes ( 11455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 1158ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff OUT EFI_FVB_ATTRIBUTES_2 *Attributes, 11655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 11755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 118ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 11955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 12055e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 12155e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbGetPhysicalAddress ( 12255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 12355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT EFI_PHYSICAL_ADDRESS *Address, 12455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 12555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 126ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 12755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 12855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 12955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 13055e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbInitialize ( 13155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_HANDLE ImageHandle, 13255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_SYSTEM_TABLE *SystemTable 133ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 13455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 13555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 13655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluVOID 13755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 13855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbClassAddressChangeEvent ( 13955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_EVENT Event, 14055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN VOID *Context 141ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 14255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 14355e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 14455e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbGetLbaAddress ( 14555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINTN Instance, 14655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN EFI_LBA Lba, 14755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT UINTN *LbaAddress, 14855e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT UINTN *LbaLength, 14955e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT UINTN *NumOfBlocks, 15055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN ESAL_FWB_GLOBAL *Global, 15155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN BOOLEAN Virtual 152ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 15355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 15455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 15555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// Protocol APIs 15655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu// 15755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 15855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 15955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolGetAttributes ( 16055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 1618ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff OUT EFI_FVB_ATTRIBUTES_2 *Attributes 162ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 16355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 16455e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 16555e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 16655e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolSetAttributes ( 16755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 1688ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes 169ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 17055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 17155e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 17255e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 17355e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolGetPhysicalAddress ( 17455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 17555e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT EFI_PHYSICAL_ADDRESS *Address 176ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 17755e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 17855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 17955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 18055e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolGetBlockSize ( 18155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 18255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_LBA Lba, 18355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT UINTN *BlockSize, 18455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu OUT UINTN *NumOfBlocks 185ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 18655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 18755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 18855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 18955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolRead ( 19055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 19155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_LBA Lba, 19255e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST UINTN Offset, 19355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN OUT UINTN *NumBytes, 19455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN UINT8 *Buffer 195ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 19655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 19755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 19855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 19955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolWrite ( 20055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 2010b94e31981fde83116598dc7a2c8a346d46fd3cfklu IN EFI_LBA Lba, 2020b94e31981fde83116598dc7a2c8a346d46fd3cfklu IN UINTN Offset, 2030b94e31981fde83116598dc7a2c8a346d46fd3cfklu IN OUT UINTN *NumBytes, 2040b94e31981fde83116598dc7a2c8a346d46fd3cfklu IN UINT8 *Buffer 205ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 20655e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 20755e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFI_STATUS 20855e6660f6b4652dcac70ae5eb312a3cd2c96733dkluEFIAPI 20955e6660f6b4652dcac70ae5eb312a3cd2c96733dkluFvbProtocolEraseBlocks ( 21055e6660f6b4652dcac70ae5eb312a3cd2c96733dklu IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 21155e6660f6b4652dcac70ae5eb312a3cd2c96733dklu ... 212ed66e1bc0d2be0a185fc47adab4930c3b7e2767fvanjeff ); 21355e6660f6b4652dcac70ae5eb312a3cd2c96733dklu 21455e6660f6b4652dcac70ae5eb312a3cd2c96733dklu#endif 215