• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**@file
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 // BugBug: Add documentation here for data structure!!!!
27 //
28 #define FVB_PHYSICAL  0
29 #define FVB_VIRTUAL   1
30 
31 typedef struct {
32   EFI_LOCK                    FvbDevLock;
33   UINTN                       FvBase[2];
34   UINTN                       NumOfBlocks;
35   EFI_FIRMWARE_VOLUME_HEADER  VolumeHeader;
36 } EFI_FW_VOL_INSTANCE;
37 
38 typedef struct {
39   UINT32              NumFv;
40   EFI_FW_VOL_INSTANCE *FvInstance[2];
41   UINT8               *FvbScratchSpace[2];
42 } ESAL_FWB_GLOBAL;
43 
44 //
45 // Fvb Protocol instance data
46 //
47 #define FVB_DEVICE_FROM_THIS(a)         CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
48 #define FVB_EXTEND_DEVICE_FROM_THIS(a)  CR (a, EFI_FW_VOL_BLOCK_DEVICE, FvbExtension, FVB_DEVICE_SIGNATURE)
49 #define FVB_DEVICE_SIGNATURE            SIGNATURE_32 ('F', 'V', 'B', 'N')
50 
51 typedef struct {
52   MEDIA_FW_VOL_DEVICE_PATH  FvDevPath;
53   EFI_DEVICE_PATH_PROTOCOL  EndDevPath;
54 } FV_PIWG_DEVICE_PATH;
55 
56 typedef struct {
57   MEMMAP_DEVICE_PATH          MemMapDevPath;
58   EFI_DEVICE_PATH_PROTOCOL    EndDevPath;
59 } FV_MEMMAP_DEVICE_PATH;
60 
61 typedef struct {
62   UINTN                               Signature;
63   EFI_DEVICE_PATH_PROTOCOL            *DevicePath;
64   UINTN                               Instance;
65   EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  FwVolBlockInstance;
66 } EFI_FW_VOL_BLOCK_DEVICE;
67 
68 EFI_STATUS
69 GetFvbInfo (
70   IN  UINT64                            FvLength,
71   OUT EFI_FIRMWARE_VOLUME_HEADER        **FvbInfo
72   );
73 
74 EFI_STATUS
75 FvbReadBlock (
76   IN UINTN                                Instance,
77   IN EFI_LBA                              Lba,
78   IN UINTN                                BlockOffset,
79   IN OUT UINTN                            *NumBytes,
80   IN UINT8                                *Buffer,
81   IN ESAL_FWB_GLOBAL                      *Global,
82   IN BOOLEAN                              Virtual
83   );
84 
85 EFI_STATUS
86 FvbWriteBlock (
87   IN UINTN                                Instance,
88   IN CONST EFI_LBA                              Lba,
89   IN CONST UINTN                                BlockOffset,
90   IN OUT UINTN                            *NumBytes,
91   IN CONST UINT8                                *Buffer,
92   IN ESAL_FWB_GLOBAL                      *Global,
93   IN BOOLEAN                              Virtual
94   );
95 
96 EFI_STATUS
97 FvbEraseBlock (
98   IN UINTN                                Instance,
99   IN EFI_LBA                              Lba,
100   IN ESAL_FWB_GLOBAL                      *Global,
101   IN BOOLEAN                              Virtual
102   );
103 
104 EFI_STATUS
105 FvbSetVolumeAttributes (
106   IN UINTN                                Instance,
107   IN OUT EFI_FVB_ATTRIBUTES_2             *Attributes,
108   IN ESAL_FWB_GLOBAL                      *Global,
109   IN BOOLEAN                              Virtual
110   );
111 
112 EFI_STATUS
113 FvbGetVolumeAttributes (
114   IN UINTN                                Instance,
115   OUT EFI_FVB_ATTRIBUTES_2                *Attributes,
116   IN ESAL_FWB_GLOBAL                      *Global,
117   IN BOOLEAN                              Virtual
118   );
119 
120 EFI_STATUS
121 FvbGetPhysicalAddress (
122   IN UINTN                                Instance,
123   OUT EFI_PHYSICAL_ADDRESS                *Address,
124   IN ESAL_FWB_GLOBAL                      *Global,
125   IN BOOLEAN                              Virtual
126   );
127 
128 EFI_STATUS
129 EFIAPI
130 FvbInitialize (
131   IN EFI_HANDLE         ImageHandle,
132   IN EFI_SYSTEM_TABLE   *SystemTable
133   );
134 
135 
136 VOID
137 EFIAPI
138 FvbClassAddressChangeEvent (
139   IN EFI_EVENT        Event,
140   IN VOID             *Context
141   );
142 
143 EFI_STATUS
144 FvbGetLbaAddress (
145   IN  UINTN                               Instance,
146   IN  EFI_LBA                             Lba,
147   OUT UINTN                               *LbaAddress,
148   OUT UINTN                               *LbaLength,
149   OUT UINTN                               *NumOfBlocks,
150   IN  ESAL_FWB_GLOBAL                     *Global,
151   IN  BOOLEAN                             Virtual
152   );
153 
154 //
155 // Protocol APIs
156 //
157 EFI_STATUS
158 EFIAPI
159 FvbProtocolGetAttributes (
160   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
161   OUT EFI_FVB_ATTRIBUTES_2                              *Attributes
162   );
163 
164 EFI_STATUS
165 EFIAPI
166 FvbProtocolSetAttributes (
167   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
168   IN OUT EFI_FVB_ATTRIBUTES_2                           *Attributes
169   );
170 
171 EFI_STATUS
172 EFIAPI
173 FvbProtocolGetPhysicalAddress (
174   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
175   OUT EFI_PHYSICAL_ADDRESS                        *Address
176   );
177 
178 EFI_STATUS
179 EFIAPI
180 FvbProtocolGetBlockSize (
181   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
182   IN CONST EFI_LBA                                     Lba,
183   OUT UINTN                                       *BlockSize,
184   OUT UINTN                                       *NumOfBlocks
185   );
186 
187 EFI_STATUS
188 EFIAPI
189 FvbProtocolRead (
190   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
191   IN CONST EFI_LBA                                      Lba,
192   IN CONST UINTN                                        Offset,
193   IN OUT UINTN                                    *NumBytes,
194   IN UINT8                                        *Buffer
195   );
196 
197 EFI_STATUS
198 EFIAPI
199 FvbProtocolWrite (
200   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL           *This,
201   IN       EFI_LBA                                      Lba,
202   IN       UINTN                                        Offset,
203   IN OUT   UINTN                                        *NumBytes,
204   IN       UINT8                                        *Buffer
205   );
206 
207 EFI_STATUS
208 EFIAPI
209 FvbProtocolEraseBlocks (
210   IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,
211   ...
212   );
213 
214 #endif
215