FwBlockService.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*++ @file
  2. Firmware volume block driver for Intel Firmware Hub (FWH) device
  3. Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
  4. Portions copyright (c) 2011, Apple Inc. All rights reserved.
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #ifndef _FW_BLOCK_SERVICE_H
  8. #define _FW_BLOCK_SERVICE_H
  9. //
  10. // BugBug: Add documentation here for data structure!!!!
  11. //
  12. #define FVB_PHYSICAL 0
  13. #define FVB_VIRTUAL 1
  14. typedef struct {
  15. EFI_LOCK FvbDevLock;
  16. UINTN FvBase[2];
  17. UINTN NumOfBlocks;
  18. EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
  19. } EFI_FW_VOL_INSTANCE;
  20. typedef struct {
  21. UINT32 NumFv;
  22. EFI_FW_VOL_INSTANCE *FvInstance[2];
  23. } ESAL_FWB_GLOBAL;
  24. //
  25. // Fvb Protocol instance data
  26. //
  27. #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
  28. #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)
  29. #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
  30. typedef struct {
  31. MEMMAP_DEVICE_PATH MemMapDevPath;
  32. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  33. } FV_DEVICE_PATH;
  34. typedef struct {
  35. UINTN Signature;
  36. FV_DEVICE_PATH DevicePath;
  37. UINTN Instance;
  38. EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
  39. } EFI_FW_VOL_BLOCK_DEVICE;
  40. EFI_STATUS
  41. GetFvbInfo (
  42. IN UINT64 FvLength,
  43. OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
  44. )
  45. ;
  46. EFI_STATUS
  47. FvbReadBlock (
  48. IN UINTN Instance,
  49. IN EFI_LBA Lba,
  50. IN UINTN BlockOffset,
  51. IN OUT UINTN *NumBytes,
  52. IN UINT8 *Buffer,
  53. IN ESAL_FWB_GLOBAL *Global,
  54. IN BOOLEAN Virtual
  55. )
  56. ;
  57. EFI_STATUS
  58. FvbWriteBlock (
  59. IN UINTN Instance,
  60. IN EFI_LBA Lba,
  61. IN UINTN BlockOffset,
  62. IN OUT UINTN *NumBytes,
  63. IN UINT8 *Buffer,
  64. IN ESAL_FWB_GLOBAL *Global,
  65. IN BOOLEAN Virtual
  66. )
  67. ;
  68. EFI_STATUS
  69. FvbEraseBlock (
  70. IN UINTN Instance,
  71. IN EFI_LBA Lba,
  72. IN ESAL_FWB_GLOBAL *Global,
  73. IN BOOLEAN Virtual
  74. )
  75. ;
  76. EFI_STATUS
  77. FvbSetVolumeAttributes (
  78. IN UINTN Instance,
  79. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
  80. IN ESAL_FWB_GLOBAL *Global,
  81. IN BOOLEAN Virtual
  82. )
  83. ;
  84. EFI_STATUS
  85. FvbGetVolumeAttributes (
  86. IN UINTN Instance,
  87. OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
  88. IN ESAL_FWB_GLOBAL *Global,
  89. IN BOOLEAN Virtual
  90. )
  91. ;
  92. EFI_STATUS
  93. FvbGetPhysicalAddress (
  94. IN UINTN Instance,
  95. OUT EFI_PHYSICAL_ADDRESS *Address,
  96. IN ESAL_FWB_GLOBAL *Global,
  97. IN BOOLEAN Virtual
  98. )
  99. ;
  100. EFI_STATUS
  101. EFIAPI
  102. FvbInitialize (
  103. IN EFI_HANDLE ImageHandle,
  104. IN EFI_SYSTEM_TABLE *SystemTable
  105. )
  106. ;
  107. VOID
  108. EFIAPI
  109. FvbClassAddressChangeEvent (
  110. IN EFI_EVENT Event,
  111. IN VOID *Context
  112. )
  113. ;
  114. EFI_STATUS
  115. FvbGetLbaAddress (
  116. IN UINTN Instance,
  117. IN EFI_LBA Lba,
  118. OUT UINTN *LbaAddress,
  119. OUT UINTN *LbaLength,
  120. OUT UINTN *NumOfBlocks,
  121. IN ESAL_FWB_GLOBAL *Global,
  122. IN BOOLEAN Virtual
  123. )
  124. ;
  125. //
  126. // Protocol APIs
  127. //
  128. EFI_STATUS
  129. EFIAPI
  130. FvbProtocolGetAttributes (
  131. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  132. OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  133. )
  134. ;
  135. EFI_STATUS
  136. EFIAPI
  137. FvbProtocolSetAttributes (
  138. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  139. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  140. )
  141. ;
  142. EFI_STATUS
  143. EFIAPI
  144. FvbProtocolGetPhysicalAddress (
  145. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  146. OUT EFI_PHYSICAL_ADDRESS *Address
  147. )
  148. ;
  149. EFI_STATUS
  150. EFIAPI
  151. FvbProtocolGetBlockSize (
  152. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  153. IN EFI_LBA Lba,
  154. OUT UINTN *BlockSize,
  155. OUT UINTN *NumOfBlocks
  156. )
  157. ;
  158. EFI_STATUS
  159. EFIAPI
  160. FvbProtocolRead (
  161. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  162. IN EFI_LBA Lba,
  163. IN UINTN Offset,
  164. IN OUT UINTN *NumBytes,
  165. IN UINT8 *Buffer
  166. )
  167. ;
  168. EFI_STATUS
  169. EFIAPI
  170. FvbProtocolWrite (
  171. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  172. IN EFI_LBA Lba,
  173. IN UINTN Offset,
  174. IN OUT UINTN *NumBytes,
  175. IN UINT8 *Buffer
  176. )
  177. ;
  178. EFI_STATUS
  179. EFIAPI
  180. FvbProtocolEraseBlocks (
  181. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  182. ...
  183. )
  184. ;
  185. #endif