FwBlockService.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /**@file
  2. Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. Module Name:
  5. FwBlockService.h
  6. Abstract:
  7. Firmware volume block driver for Intel Firmware Hub (FWH) device
  8. **/
  9. #ifndef _FW_BLOCK_SERVICE_H
  10. #define _FW_BLOCK_SERVICE_H
  11. typedef struct {
  12. UINTN FvBase;
  13. UINTN NumOfBlocks;
  14. EFI_FIRMWARE_VOLUME_HEADER VolumeHeader;
  15. } EFI_FW_VOL_INSTANCE;
  16. typedef struct {
  17. UINT32 NumFv;
  18. EFI_FW_VOL_INSTANCE *FvInstance;
  19. } ESAL_FWB_GLOBAL;
  20. extern ESAL_FWB_GLOBAL *mFvbModuleGlobal;
  21. //
  22. // Fvb Protocol instance data
  23. //
  24. #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\
  25. FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
  26. #define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\
  27. FvbExtension, FVB_DEVICE_SIGNATURE)
  28. #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
  29. typedef struct {
  30. MEDIA_FW_VOL_DEVICE_PATH FvDevPath;
  31. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  32. } FV_PIWG_DEVICE_PATH;
  33. typedef struct {
  34. MEMMAP_DEVICE_PATH MemMapDevPath;
  35. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  36. } FV_MEMMAP_DEVICE_PATH;
  37. typedef struct {
  38. UINTN Signature;
  39. EFI_DEVICE_PATH_PROTOCOL *DevicePath;
  40. UINTN Instance;
  41. EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
  42. } EFI_FW_VOL_BLOCK_DEVICE;
  43. EFI_STATUS
  44. GetFvbInfo (
  45. IN UINT64 FvLength,
  46. OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo
  47. );
  48. EFI_STATUS
  49. FvbSetVolumeAttributes (
  50. IN UINTN Instance,
  51. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
  52. IN ESAL_FWB_GLOBAL *Global
  53. );
  54. EFI_STATUS
  55. FvbGetVolumeAttributes (
  56. IN UINTN Instance,
  57. OUT EFI_FVB_ATTRIBUTES_2 *Attributes,
  58. IN ESAL_FWB_GLOBAL *Global
  59. );
  60. EFI_STATUS
  61. FvbGetPhysicalAddress (
  62. IN UINTN Instance,
  63. OUT EFI_PHYSICAL_ADDRESS *Address,
  64. IN ESAL_FWB_GLOBAL *Global
  65. );
  66. EFI_STATUS
  67. EFIAPI
  68. FvbInitialize (
  69. IN EFI_HANDLE ImageHandle,
  70. IN EFI_SYSTEM_TABLE *SystemTable
  71. );
  72. VOID
  73. EFIAPI
  74. FvbClassAddressChangeEvent (
  75. IN EFI_EVENT Event,
  76. IN VOID *Context
  77. );
  78. EFI_STATUS
  79. FvbGetLbaAddress (
  80. IN UINTN Instance,
  81. IN EFI_LBA Lba,
  82. OUT UINTN *LbaAddress,
  83. OUT UINTN *LbaLength,
  84. OUT UINTN *NumOfBlocks,
  85. IN ESAL_FWB_GLOBAL *Global
  86. );
  87. //
  88. // Protocol APIs
  89. //
  90. EFI_STATUS
  91. EFIAPI
  92. FvbProtocolGetAttributes (
  93. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  94. OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  95. );
  96. EFI_STATUS
  97. EFIAPI
  98. FvbProtocolSetAttributes (
  99. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  100. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  101. );
  102. EFI_STATUS
  103. EFIAPI
  104. FvbProtocolGetPhysicalAddress (
  105. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  106. OUT EFI_PHYSICAL_ADDRESS *Address
  107. );
  108. EFI_STATUS
  109. EFIAPI
  110. FvbProtocolGetBlockSize (
  111. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  112. IN CONST EFI_LBA Lba,
  113. OUT UINTN *BlockSize,
  114. OUT UINTN *NumOfBlocks
  115. );
  116. EFI_STATUS
  117. EFIAPI
  118. FvbProtocolRead (
  119. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  120. IN CONST EFI_LBA Lba,
  121. IN CONST UINTN Offset,
  122. IN OUT UINTN *NumBytes,
  123. IN UINT8 *Buffer
  124. );
  125. EFI_STATUS
  126. EFIAPI
  127. FvbProtocolWrite (
  128. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  129. IN EFI_LBA Lba,
  130. IN UINTN Offset,
  131. IN OUT UINTN *NumBytes,
  132. IN UINT8 *Buffer
  133. );
  134. EFI_STATUS
  135. EFIAPI
  136. FvbProtocolEraseBlocks (
  137. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  138. ...
  139. );
  140. //
  141. // The following functions have different implementations dependent on the
  142. // module type chosen for building this driver.
  143. //
  144. VOID
  145. InstallProtocolInterfaces (
  146. IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice
  147. );
  148. VOID
  149. InstallVirtualAddressChangeHandler (
  150. VOID
  151. );
  152. EFI_STATUS
  153. MarkIoMemoryRangeForRuntimeAccess (
  154. IN EFI_PHYSICAL_ADDRESS BaseAddress,
  155. IN UINTN Length
  156. );
  157. VOID
  158. SetPcdFlashNvStorageBaseAddresses (
  159. VOID
  160. );
  161. #endif