2 The header file for Firmware volume block driver.
4 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials are licensed and made available under
7 the terms and conditions of the BSD License that accompanies this distribution.
8 The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #ifndef _FW_BLOCK_SERVICE_H
18 #define _FW_BLOCK_SERVICE_H
20 #include <Guid/EventGroup.h>
21 #include <Guid/FirmwareFileSystem2.h>
22 #include <Guid/SystemNvDataGuid.h>
23 #include <Protocol/DevicePath.h>
24 #include <Protocol/FirmwareVolumeBlock.h>
26 #include <Library/UefiDriverEntryPoint.h>
27 #include <Library/UefiBootServicesTableLib.h>
28 #include <Library/UefiLib.h>
29 #include <Library/BaseLib.h>
30 #include <Library/DebugLib.h>
31 #include <Library/BaseMemoryLib.h>
32 #include <Library/IoLib.h>
33 #include <Library/CacheMaintenanceLib.h>
34 #include <Library/MemoryAllocationLib.h>
35 #include <Library/PcdLib.h>
36 #include <Library/FlashDeviceLib.h>
37 #include <Library/DevicePathLib.h>
40 // Define two helper macro to extract the Capability field or Status field in FVB
43 #define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \
44 EFI_FVB2_READ_ENABLED_CAP | \
45 EFI_FVB2_WRITE_DISABLED_CAP | \
46 EFI_FVB2_WRITE_ENABLED_CAP | \
50 #define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)
57 // Note!!!: VolumeHeader must be the last element
60 EFI_FIRMWARE_VOLUME_HEADER VolumeHeader
;
61 } EFI_FW_VOL_INSTANCE
;
64 EFI_FW_VOL_INSTANCE
*FvInstance
;
69 // Fvb Protocol instance data.
71 #define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
72 #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)
73 #define FVB_DEVICE_SIGNATURE SIGNATURE_32('F','V','B','C')
76 MEDIA_FW_VOL_DEVICE_PATH FvDevPath
;
77 EFI_DEVICE_PATH_PROTOCOL EndDevPath
;
78 } FV_PIWG_DEVICE_PATH
;
81 MEMMAP_DEVICE_PATH MemMapDevPath
;
82 EFI_DEVICE_PATH_PROTOCOL EndDevPath
;
83 } FV_MEMMAP_DEVICE_PATH
;
87 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
89 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance
;
90 } EFI_FW_VOL_BLOCK_DEVICE
;
94 IN EFI_PHYSICAL_ADDRESS FvBaseAddress
,
95 OUT EFI_FIRMWARE_VOLUME_HEADER
**FvbInfo
103 FvbProtocolGetAttributes (
104 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
105 OUT EFI_FVB_ATTRIBUTES_2
*Attributes
110 FvbProtocolSetAttributes (
111 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
112 IN OUT EFI_FVB_ATTRIBUTES_2
*Attributes
117 FvbProtocolGetPhysicalAddress (
118 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
119 OUT EFI_PHYSICAL_ADDRESS
*Address
124 FvbProtocolGetBlockSize (
125 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
127 OUT UINTN
*BlockSize
,
128 OUT UINTN
*NumOfBlocks
134 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
137 IN OUT UINTN
*NumBytes
,
144 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
147 IN OUT UINTN
*NumBytes
,
153 FvbProtocolEraseBlocks (
154 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL
*This
,
158 EFI_FW_VOL_INSTANCE
*
165 IN EFI_PHYSICAL_ADDRESS FvBase
,
166 IN CONST EFI_FIRMWARE_VOLUME_HEADER
*FwVolHeader
171 IN EFI_FW_VOL_INSTANCE
*FwhInstance
,
180 extern FWB_GLOBAL mFvbModuleGlobal
;
181 extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate
;
182 extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate
;
183 extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate
;
184 extern UINT32 mPlatformFvBaseAddress
[3];