]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h
OvmfPkg/EmuVariableFvbRuntimeDxe: stop using PcdVariableStoreSize
[mirror_edk2.git] / OvmfPkg / EmuVariableFvbRuntimeDxe / Fvb.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 FwBlockService.h
15
16 Abstract:
17
18 Firmware volume block driver for Intel Firmware Hub (FWH) device
19
20 --*/
21
22 #ifndef _FW_BLOCK_SERVICE_H
23 #define _FW_BLOCK_SERVICE_H
24
25 //
26 // Fvb Protocol instance data
27 //
28 #define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
29 #define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N')
30
31 #pragma pack (1)
32
33 typedef struct {
34
35 EFI_FIRMWARE_VOLUME_HEADER FvHdr;
36 EFI_FV_BLOCK_MAP_ENTRY EndBlockMap;
37 VARIABLE_STORE_HEADER VarHdr;
38
39 } FVB_FV_HDR_AND_VARS_TEMPLATE;
40
41 typedef struct {
42 MEMMAP_DEVICE_PATH MemMapDevPath;
43 EFI_DEVICE_PATH_PROTOCOL EndDevPath;
44 } FV_DEVICE_PATH;
45
46 #pragma pack ()
47
48 typedef struct {
49 UINTN Signature;
50 FV_DEVICE_PATH DevicePath;
51 VOID *BufferPtr;
52 UINTN BlockSize;
53 UINTN Size;
54 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance;
55 } EFI_FW_VOL_BLOCK_DEVICE;
56
57
58 //
59 // Constants
60 //
61 #define EMU_FVB_BLOCK_SIZE \
62 EFI_PAGE_SIZE
63 #define EMU_FVB_NUM_SPARE_BLOCKS \
64 EFI_SIZE_TO_PAGES ((UINTN)FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize))
65 #define EMU_FVB_NUM_TOTAL_BLOCKS \
66 (2 * EMU_FVB_NUM_SPARE_BLOCKS)
67 #define EMU_FVB_SIZE \
68 (EMU_FVB_NUM_TOTAL_BLOCKS * EMU_FVB_BLOCK_SIZE)
69 #define FTW_WRITE_QUEUE_SIZE \
70 (FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) - \
71 sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER))
72 #define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr)
73
74 #define NOT_ERASED_BIT 0
75 #define ERASED_BIT 1
76 #define ERASED_UINT8 0xff
77 #define ERASED_UINT32 0xffffffff
78
79 //
80 // Protocol APIs
81 //
82 EFI_STATUS
83 EFIAPI
84 FvbProtocolGetAttributes (
85 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
86 OUT EFI_FVB_ATTRIBUTES_2 *Attributes
87 )
88 ;
89
90 EFI_STATUS
91 EFIAPI
92 FvbProtocolSetAttributes (
93 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
94 IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes
95 )
96 ;
97
98 EFI_STATUS
99 EFIAPI
100 FvbProtocolGetPhysicalAddress (
101 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
102 OUT EFI_PHYSICAL_ADDRESS *Address
103 )
104 ;
105
106 EFI_STATUS
107 EFIAPI
108 FvbProtocolGetBlockSize (
109 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
110 IN EFI_LBA Lba,
111 OUT UINTN *BlockSize,
112 OUT UINTN *NumberOfBlocks
113 )
114 ;
115
116 EFI_STATUS
117 EFIAPI
118 FvbProtocolRead (
119 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
120 IN EFI_LBA Lba,
121 IN UINTN Offset,
122 IN OUT UINTN *NumBytes,
123 IN OUT UINT8 *Buffer
124 )
125 ;
126
127 EFI_STATUS
128 EFIAPI
129 FvbProtocolWrite (
130 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
131 IN EFI_LBA Lba,
132 IN UINTN Offset,
133 IN OUT UINTN *NumBytes,
134 IN UINT8 *Buffer
135 )
136 ;
137
138 EFI_STATUS
139 EFIAPI
140 FvbProtocolEraseBlocks (
141 IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This,
142 ...
143 )
144 ;
145
146 #endif