FvbService.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /** @file
  2. The header file for Firmware volume block driver.
  3. Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef _FW_BLOCK_SERVICE_H
  7. #define _FW_BLOCK_SERVICE_H
  8. #include <Guid/EventGroup.h>
  9. #include <Guid/FirmwareFileSystem2.h>
  10. #include <Guid/SystemNvDataGuid.h>
  11. #include <Protocol/DevicePath.h>
  12. #include <Protocol/FirmwareVolumeBlock.h>
  13. #include <Library/UefiDriverEntryPoint.h>
  14. #include <Library/UefiBootServicesTableLib.h>
  15. #include <Library/UefiLib.h>
  16. #include <Library/BaseLib.h>
  17. #include <Library/DebugLib.h>
  18. #include <Library/BaseMemoryLib.h>
  19. #include <Library/IoLib.h>
  20. #include <Library/CacheMaintenanceLib.h>
  21. #include <Library/MemoryAllocationLib.h>
  22. #include <Library/PcdLib.h>
  23. #include <Library/FlashDeviceLib.h>
  24. #include <Library/DevicePathLib.h>
  25. //
  26. // Define two helper macro to extract the Capability field or Status field in FVB
  27. // bit fields.
  28. //
  29. #define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \
  30. EFI_FVB2_READ_ENABLED_CAP | \
  31. EFI_FVB2_WRITE_DISABLED_CAP | \
  32. EFI_FVB2_WRITE_ENABLED_CAP | \
  33. EFI_FVB2_LOCK_CAP \
  34. )
  35. #define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)
  36. typedef struct {
  37. UINTN FvBase;
  38. UINTN NumOfBlocks;
  39. //
  40. // Note!!!: VolumeHeader must be the last element
  41. // of the structure.
  42. //
  43. EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
  44. } EFI_FW_VOL_INSTANCE;
  45. typedef struct {
  46. EFI_FW_VOL_INSTANCE *FvInstance;
  47. UINT32 NumFv;
  48. } FWB_GLOBAL;
  49. //
  50. // Fvb Protocol instance data.
  51. //
  52. #define FVB_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
  53. #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR(a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)
  54. #define FVB_DEVICE_SIGNATURE SIGNATURE_32('F','V','B','C')
  55. typedef struct {
  56. MEDIA_FW_VOL_DEVICE_PATH FvDevPath;
  57. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  58. } FV_PIWG_DEVICE_PATH;
  59. typedef struct {
  60. MEMMAP_DEVICE_PATH MemMapDevPath;
  61. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  62. } FV_MEMMAP_DEVICE_PATH;
  63. typedef struct {
  64. UINT32 Signature;
  65. EFI_DEVICE_PATH_PROTOCOL *DevicePath;
  66. UINTN Instance;
  67. EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
  68. } EFI_FW_VOL_BLOCK_DEVICE;
  69. EFI_STATUS
  70. GetFvbInfo (
  71. IN EFI_PHYSICAL_ADDRESS FvBaseAddress,
  72. OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
  73. );
  74. //
  75. // Protocol APIs
  76. //
  77. EFI_STATUS
  78. EFIAPI
  79. FvbProtocolGetAttributes (
  80. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  81. OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  82. );
  83. EFI_STATUS
  84. EFIAPI
  85. FvbProtocolSetAttributes (
  86. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  87. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  88. );
  89. EFI_STATUS
  90. EFIAPI
  91. FvbProtocolGetPhysicalAddress (
  92. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  93. OUT EFI_PHYSICAL_ADDRESS *Address
  94. );
  95. EFI_STATUS
  96. EFIAPI
  97. FvbProtocolGetBlockSize (
  98. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  99. IN EFI_LBA Lba,
  100. OUT UINTN *BlockSize,
  101. OUT UINTN *NumOfBlocks
  102. );
  103. EFI_STATUS
  104. EFIAPI
  105. FvbProtocolRead (
  106. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  107. IN EFI_LBA Lba,
  108. IN UINTN Offset,
  109. IN OUT UINTN *NumBytes,
  110. OUT UINT8 *Buffer
  111. );
  112. EFI_STATUS
  113. EFIAPI
  114. FvbProtocolWrite (
  115. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  116. IN EFI_LBA Lba,
  117. IN UINTN Offset,
  118. IN OUT UINTN *NumBytes,
  119. IN UINT8 *Buffer
  120. );
  121. EFI_STATUS
  122. EFIAPI
  123. FvbProtocolEraseBlocks (
  124. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  125. ...
  126. );
  127. EFI_FW_VOL_INSTANCE *
  128. GetFvbInstance (
  129. IN UINTN Instance
  130. );
  131. BOOLEAN
  132. IsFvHeaderValid (
  133. IN EFI_PHYSICAL_ADDRESS FvBase,
  134. IN CONST EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader
  135. );
  136. VOID
  137. InstallFvbProtocol (
  138. IN EFI_FW_VOL_INSTANCE *FwhInstance,
  139. IN UINTN InstanceNum
  140. );
  141. EFI_STATUS
  142. FvbInitialize (
  143. VOID
  144. );
  145. extern FWB_GLOBAL mFvbModuleGlobal;
  146. extern EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate;
  147. extern FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate;
  148. extern FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate;
  149. extern UINT32 mPlatformFvBaseAddress[3];
  150. #endif