/**@file\r
\r
-Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\r
-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
+ Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>\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
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
-Module Name:\r
+ Module Name:\r
\r
- FwBlockService.h\r
+ FwBlockService.h\r
\r
-Abstract:\r
+ Abstract:\r
\r
- Firmware volume block driver for Intel Firmware Hub (FWH) device\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
-// 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 NumOfBlocks;\r
- EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;\r
+ UINTN FvBase;\r
+ UINTN NumOfBlocks;\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
+ UINT32 NumFv;\r
+ EFI_FW_VOL_INSTANCE *FvInstance;\r
} ESAL_FWB_GLOBAL;\r
\r
+extern ESAL_FWB_GLOBAL *mFvbModuleGlobal;\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 SIGNATURE_32 ('F', 'V', 'B', 'N')\r
+#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\\r
+ FwVolBlockInstance, FVB_DEVICE_SIGNATURE)\r
+\r
+#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\\r
+ FvbExtension, FVB_DEVICE_SIGNATURE)\r
+\r
+#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')\r
\r
typedef struct {\r
- MEDIA_FW_VOL_DEVICE_PATH FvDevPath;\r
- EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
+ MEDIA_FW_VOL_DEVICE_PATH FvDevPath;\r
+ EFI_DEVICE_PATH_PROTOCOL EndDevPath;\r
} FV_PIWG_DEVICE_PATH;\r
\r
typedef struct {\r
} FV_MEMMAP_DEVICE_PATH;\r
\r
typedef struct {\r
- UINTN Signature;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
- UINTN Instance;\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
+ UINTN Signature;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ UINTN Instance;\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;\r
} EFI_FW_VOL_BLOCK_DEVICE;\r
\r
EFI_STATUS\r
GetFvbInfo (\r
- IN UINT64 FvLength,\r
- OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
+ IN UINT64 FvLength,\r
+ OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo\r
);\r
\r
EFI_STATUS\r
FvbSetVolumeAttributes (\r
- IN UINTN Instance,\r
- IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
+ IN UINTN Instance,\r
+ IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
+ IN ESAL_FWB_GLOBAL *Global\r
);\r
\r
EFI_STATUS\r
FvbGetVolumeAttributes (\r
- IN UINTN Instance,\r
- OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
+ IN UINTN Instance,\r
+ OUT EFI_FVB_ATTRIBUTES_2 *Attributes,\r
+ IN ESAL_FWB_GLOBAL *Global\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
+ IN UINTN Instance,\r
+ OUT EFI_PHYSICAL_ADDRESS *Address,\r
+ IN ESAL_FWB_GLOBAL *Global\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbInitialize (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
);\r
\r
-\r
VOID\r
EFIAPI\r
FvbClassAddressChangeEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
EFI_STATUS\r
FvbGetLbaAddress (\r
- IN UINTN Instance,\r
- IN EFI_LBA Lba,\r
- OUT UINTN *LbaAddress,\r
- OUT UINTN *LbaLength,\r
- OUT UINTN *NumOfBlocks,\r
- IN ESAL_FWB_GLOBAL *Global,\r
- IN BOOLEAN Virtual\r
+ IN UINTN Instance,\r
+ IN EFI_LBA Lba,\r
+ OUT UINTN *LbaAddress,\r
+ OUT UINTN *LbaLength,\r
+ OUT UINTN *NumOfBlocks,\r
+ IN ESAL_FWB_GLOBAL *Global\r
);\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolGetAttributes (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolSetAttributes (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolGetPhysicalAddress (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- OUT EFI_PHYSICAL_ADDRESS *Address\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ OUT EFI_PHYSICAL_ADDRESS *Address\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolGetBlockSize (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- IN CONST EFI_LBA Lba,\r
- OUT UINTN *BlockSize,\r
- OUT UINTN *NumOfBlocks\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_LBA Lba,\r
+ OUT UINTN *BlockSize,\r
+ OUT UINTN *NumOfBlocks\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolRead (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
- IN CONST EFI_LBA Lba,\r
- IN CONST UINTN Offset,\r
- IN OUT UINTN *NumBytes,\r
- IN UINT8 *Buffer\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_LBA Lba,\r
+ IN CONST UINTN Offset,\r
+ IN OUT UINTN *NumBytes,\r
+ IN UINT8 *Buffer\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
FvbProtocolWrite (\r
- IN CONST 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
+ IN CONST 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
EFI_STATUS\r
EFIAPI\r
FvbProtocolEraseBlocks (\r
- IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
+ IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,\r
...\r
);\r
\r
+//\r
+// The following functions have different implementations dependent on the\r
+// module type chosen for building this driver.\r
+//\r
+VOID\r
+InstallProtocolInterfaces (\r
+ IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice\r
+ );\r
+\r
+VOID\r
+InstallVirtualAddressChangeHandler (\r
+ VOID\r
+ );\r
+\r
+EFI_STATUS\r
+MarkIoMemoryRangeForRuntimeAccess (\r
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
+ IN UINTN Length\r
+ );\r
+\r
+VOID\r
+SetPcdFlashNvStorageBaseAddresses (\r
+ VOID\r
+ );\r
+\r
#endif\r