]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / EmuVariableFvbRuntimeDxe / Fvb.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
5
6 Module Name:
7
8 FwBlockService.h
9
10 Abstract:
11
12 Firmware volume block driver for Intel Firmware Hub (FWH) device
13
14 --*/
15
16 #ifndef _FW_BLOCK_SERVICE_H
17 #define _FW_BLOCK_SERVICE_H
18
19 //
20 // Fvb Protocol instance data
21 //
22 #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
23 #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
24
25 #pragma pack (1)
26
27 typedef struct {
28 EFI_FIRMWARE_VOLUME_HEADER FvHdr;
29 EFI_FV_BLOCK_MAP_ENTRY EndBlockMap;
30 VARIABLE_STORE_HEADER VarHdr;
31 } FVB_FV_HDR_AND_VARS_TEMPLATE;
32
33 typedef struct {
34 MEMMAP_DEVICE_PATH MemMapDevPath;
35 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
36 } FV_DEVICE_PATH;
37
38 #pragma pack ()
39
40 typedef struct {
41 UINTN Signature;
42 FV_DEVICE_PATH DevicePath;
43 VOID *BufferPtr;
44 UINTN BlockSize;
45 UINTN Size;
46 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
47 } EFI_FW_VOL_BLOCK_DEVICE;
48
49 //
50 // Constants
51 //
52 #define EMU_FVB_BLOCK_SIZE \
53 EFI_PAGE_SIZE
54 #define EMU_FVB_NUM_SPARE_BLOCKS \
55 EFI_SIZE_TO_PAGES ((UINTN)FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize))
56 #define EMU_FVB_NUM_TOTAL_BLOCKS \
57 (2 * EMU_FVB_NUM_SPARE_BLOCKS)
58 #define EMU_FVB_SIZE \
59 (EMU_FVB_NUM_TOTAL_BLOCKS * EMU_FVB_BLOCK_SIZE)
60 #define FTW_WRITE_QUEUE_SIZE \
61 (FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) - \
62 sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER))
63 #define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr)
64
65 #define NOT_ERASED_BIT 0
66 #define ERASED_BIT 1
67 #define ERASED_UINT8 0xff
68 #define ERASED_UINT32 0xffffffff
69
70 //
71 // Protocol APIs
72 //
73 EFI_STATUS
74 EFIAPI
75 FvbProtocolGetAttributes (
76 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
77 OUT EFI_FVB_ATTRIBUTES_2 *Attributes
78 )
79 ;
80
81 EFI_STATUS
82 EFIAPI
83 FvbProtocolSetAttributes (
84 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
85 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
86 )
87 ;
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 ;
96
97 EFI_STATUS
98 EFIAPI
99 FvbProtocolGetBlockSize (
100 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
101 IN EFI_LBA Lba,
102 OUT UINTN *BlockSize,
103 OUT UINTN *NumberOfBlocks
104 )
105 ;
106
107 EFI_STATUS
108 EFIAPI
109 FvbProtocolRead (
110 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
111 IN EFI_LBA Lba,
112 IN UINTN Offset,
113 IN OUT UINTN *NumBytes,
114 IN OUT UINT8 *Buffer
115 )
116 ;
117
118 EFI_STATUS
119 EFIAPI
120 FvbProtocolWrite (
121 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
122 IN EFI_LBA Lba,
123 IN UINTN Offset,
124 IN OUT UINTN *NumBytes,
125 IN UINT8 *Buffer
126 )
127 ;
128
129 EFI_STATUS
130 EFIAPI
131 FvbProtocolEraseBlocks (
132 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
133 ...
134 )
135 ;
136
137 #endif