Fvb.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*++
  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. //
  12. // Fvb Protocol instance data
  13. //
  14. #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
  15. #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
  16. #pragma pack (1)
  17. typedef struct {
  18. EFI_FIRMWARE_VOLUME_HEADER FvHdr;
  19. EFI_FV_BLOCK_MAP_ENTRY EndBlockMap;
  20. VARIABLE_STORE_HEADER VarHdr;
  21. } FVB_FV_HDR_AND_VARS_TEMPLATE;
  22. typedef struct {
  23. MEMMAP_DEVICE_PATH MemMapDevPath;
  24. EFI_DEVICE_PATH_PROTOCOL EndDevPath;
  25. } FV_DEVICE_PATH;
  26. #pragma pack ()
  27. typedef struct {
  28. UINTN Signature;
  29. FV_DEVICE_PATH DevicePath;
  30. VOID *BufferPtr;
  31. UINTN BlockSize;
  32. UINTN Size;
  33. EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
  34. } EFI_FW_VOL_BLOCK_DEVICE;
  35. //
  36. // Constants
  37. //
  38. #define EMU_FVB_BLOCK_SIZE \
  39. EFI_PAGE_SIZE
  40. #define EMU_FVB_NUM_SPARE_BLOCKS \
  41. EFI_SIZE_TO_PAGES ((UINTN)FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize))
  42. #define EMU_FVB_NUM_TOTAL_BLOCKS \
  43. (2 * EMU_FVB_NUM_SPARE_BLOCKS)
  44. #define EMU_FVB_SIZE \
  45. (EMU_FVB_NUM_TOTAL_BLOCKS * EMU_FVB_BLOCK_SIZE)
  46. #define FTW_WRITE_QUEUE_SIZE \
  47. (FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) - \
  48. sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER))
  49. #define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr)
  50. #define NOT_ERASED_BIT 0
  51. #define ERASED_BIT 1
  52. #define ERASED_UINT8 0xff
  53. #define ERASED_UINT32 0xffffffff
  54. //
  55. // Protocol APIs
  56. //
  57. EFI_STATUS
  58. EFIAPI
  59. FvbProtocolGetAttributes (
  60. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  61. OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  62. )
  63. ;
  64. EFI_STATUS
  65. EFIAPI
  66. FvbProtocolSetAttributes (
  67. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  68. IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
  69. )
  70. ;
  71. EFI_STATUS
  72. EFIAPI
  73. FvbProtocolGetPhysicalAddress (
  74. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  75. OUT EFI_PHYSICAL_ADDRESS *Address
  76. )
  77. ;
  78. EFI_STATUS
  79. EFIAPI
  80. FvbProtocolGetBlockSize (
  81. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  82. IN EFI_LBA Lba,
  83. OUT UINTN *BlockSize,
  84. OUT UINTN *NumberOfBlocks
  85. )
  86. ;
  87. EFI_STATUS
  88. EFIAPI
  89. FvbProtocolRead (
  90. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  91. IN EFI_LBA Lba,
  92. IN UINTN Offset,
  93. IN OUT UINTN *NumBytes,
  94. IN OUT UINT8 *Buffer
  95. )
  96. ;
  97. EFI_STATUS
  98. EFIAPI
  99. FvbProtocolWrite (
  100. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  101. IN EFI_LBA Lba,
  102. IN UINTN Offset,
  103. IN OUT UINTN *NumBytes,
  104. IN UINT8 *Buffer
  105. )
  106. ;
  107. EFI_STATUS
  108. EFIAPI
  109. FvbProtocolEraseBlocks (
  110. IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
  111. ...
  112. )
  113. ;
  114. #endif