1a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen/**@file 2a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 3ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4141f0c644512e4da3bad7a0382fe82aa8c460762Laszlo Ersek 5ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek This program and the accompanying materials are licensed and made available 6ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek under the terms and conditions of the BSD License which accompanies this 7ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek distribution. The full text of the license may be found at 8ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek http://opensource.org/licenses/bsd-license.php 9a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 10ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 13ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek Module Name: 14141f0c644512e4da3bad7a0382fe82aa8c460762Laszlo Ersek 15ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek FwBlockService.h 16a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 17ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek Abstract: 18ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek 19ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek Firmware volume block driver for Intel Firmware Hub (FWH) device 20a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 21a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen**/ 22a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 23a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen#ifndef _FW_BLOCK_SERVICE_H 24a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen#define _FW_BLOCK_SERVICE_H 25a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 26a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justentypedef struct { 27109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek UINTN FvBase; 28a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen UINTN NumOfBlocks; 29a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen EFI_FIRMWARE_VOLUME_HEADER VolumeHeader; 30a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen} EFI_FW_VOL_INSTANCE; 31a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 32a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justentypedef struct { 33a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen UINT32 NumFv; 34109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek EFI_FW_VOL_INSTANCE *FvInstance; 35a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen} ESAL_FWB_GLOBAL; 36a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 371767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersekextern ESAL_FWB_GLOBAL *mFvbModuleGlobal; 381767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek 39a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// 40a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// Fvb Protocol instance data 41a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// 42ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \ 43ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek FwVolBlockInstance, FVB_DEVICE_SIGNATURE) 44ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek 45ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \ 46ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek FvbExtension, FVB_DEVICE_SIGNATURE) 47ea0d111efe756dcc53d355bc25d17d9a925c6007Laszlo Ersek 48a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') 49a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 50a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justentypedef struct { 51a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen MEDIA_FW_VOL_DEVICE_PATH FvDevPath; 52a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen EFI_DEVICE_PATH_PROTOCOL EndDevPath; 53a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen} FV_PIWG_DEVICE_PATH; 54a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 55a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justentypedef struct { 56a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen MEMMAP_DEVICE_PATH MemMapDevPath; 57a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen EFI_DEVICE_PATH_PROTOCOL EndDevPath; 58a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen} FV_MEMMAP_DEVICE_PATH; 59a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 60a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justentypedef struct { 61a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen UINTN Signature; 62a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen EFI_DEVICE_PATH_PROTOCOL *DevicePath; 63a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen UINTN Instance; 64a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; 65a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen} EFI_FW_VOL_BLOCK_DEVICE; 66a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 67a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 68a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenGetFvbInfo ( 69a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINT64 FvLength, 70a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo 71a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 72a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 73a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 74a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbSetVolumeAttributes ( 75a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINTN Instance, 76a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, 77109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek IN ESAL_FWB_GLOBAL *Global 78a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 79a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 80a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 81a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbGetVolumeAttributes ( 82a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINTN Instance, 83a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT EFI_FVB_ATTRIBUTES_2 *Attributes, 84109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek IN ESAL_FWB_GLOBAL *Global 85a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 86a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 87a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 88a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbGetPhysicalAddress ( 89a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINTN Instance, 90a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT EFI_PHYSICAL_ADDRESS *Address, 91109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek IN ESAL_FWB_GLOBAL *Global 92a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 93a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 94a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 95a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 96a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbInitialize ( 97a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN EFI_HANDLE ImageHandle, 98a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN EFI_SYSTEM_TABLE *SystemTable 99a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 100a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 101a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 102a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenVOID 103a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 104a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbClassAddressChangeEvent ( 105a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN EFI_EVENT Event, 106a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN VOID *Context 107a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 108a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 109a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 110a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbGetLbaAddress ( 111a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINTN Instance, 112a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN EFI_LBA Lba, 113a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT UINTN *LbaAddress, 114a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT UINTN *LbaLength, 115a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT UINTN *NumOfBlocks, 116109301e5a14ec4bfd0ce93e15439e30d7ccd8b0aLaszlo Ersek IN ESAL_FWB_GLOBAL *Global 117a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 118a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 119a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// 120a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// Protocol APIs 121a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen// 122a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 123a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 124a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolGetAttributes ( 125a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 126a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT EFI_FVB_ATTRIBUTES_2 *Attributes 127a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 128a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 129a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 130a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 131a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolSetAttributes ( 132a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 133a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes 134a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 135a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 136a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 137a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 138a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolGetPhysicalAddress ( 139a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 140a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT EFI_PHYSICAL_ADDRESS *Address 141a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 142a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 143a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 144a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 145a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolGetBlockSize ( 146a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 147a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_LBA Lba, 148a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT UINTN *BlockSize, 149a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen OUT UINTN *NumOfBlocks 150a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 151a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 152a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 153a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 154a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolRead ( 155a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 156a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_LBA Lba, 157a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST UINTN Offset, 158a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN OUT UINTN *NumBytes, 159a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINT8 *Buffer 160a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 161a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 162a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 163a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 164a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolWrite ( 165a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 166a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN EFI_LBA Lba, 167a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINTN Offset, 168a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN OUT UINTN *NumBytes, 169a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN UINT8 *Buffer 170a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 171a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 172a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFI_STATUS 173a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenEFIAPI 174a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan JustenFvbProtocolEraseBlocks ( 175a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, 176a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ... 177a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen ); 178a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen 1791767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek// 1801767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek// The following functions have different implementations dependent on the 1811767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek// module type chosen for building this driver. 1821767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek// 1831767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo ErsekVOID 1841767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo ErsekInstallProtocolInterfaces ( 1851767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice 1861767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek ); 1871767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek 1881767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo ErsekVOID 1891767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo ErsekInstallVirtualAddressChangeHandler ( 1901767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek VOID 1911767877a31b3ce191ddae6cb9aefba99a733fe20Laszlo Ersek ); 192a4ce9ffd470dbbab07ad1a9caeab5049b5a4bb6aJordan Justen#endif 193