123c98c9417908188207408afa3f6901b8aca826aqhuang/** @file
2022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  Firmware Volume Block protocol functions.
323c98c9417908188207408afa3f6901b8aca826aqhuang  Consumes FV hobs and creates appropriate block protocols.
423c98c9417908188207408afa3f6901b8aca826aqhuang
50c3a1db40f982d243b8e2c67ee4e8109a0737d34lzengCopyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
6cd5ebaa06dca3e6ef3c464081e6defe00d358c69hhtianThis program and the accompanying materials
723c98c9417908188207408afa3f6901b8aca826aqhuangare licensed and made available under the terms and conditions of the BSD License
823c98c9417908188207408afa3f6901b8aca826aqhuangwhich accompanies this distribution.  The full text of the license may be found at
923c98c9417908188207408afa3f6901b8aca826aqhuanghttp://opensource.org/licenses/bsd-license.php
1023c98c9417908188207408afa3f6901b8aca826aqhuang
1123c98c9417908188207408afa3f6901b8aca826aqhuangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
1223c98c9417908188207408afa3f6901b8aca826aqhuangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
1328a00297189c323096aae8e2975de94e8549613cyshang
14504214c4870e9183418014634268ce630eb5332algao**/
1528a00297189c323096aae8e2975de94e8549613cyshang
1628a00297189c323096aae8e2975de94e8549613cyshang#ifndef _FWVOL_BLOCK_H_
1728a00297189c323096aae8e2975de94e8549613cyshang#define _FWVOL_BLOCK_H_
1828a00297189c323096aae8e2975de94e8549613cyshang
1928a00297189c323096aae8e2975de94e8549613cyshang
20f3f2e05db8c89628498ec4efdb16184747824c63qhuang#define FVB_DEVICE_SIGNATURE       SIGNATURE_32('_','F','V','B')
2128a00297189c323096aae8e2975de94e8549613cyshang
22ec90508b3d3ff22a698a0446cb09d551d7466045eric_tian
2328a00297189c323096aae8e2975de94e8549613cyshangtypedef struct {
2428a00297189c323096aae8e2975de94e8549613cyshang  UINTN                       Base;
2528a00297189c323096aae8e2975de94e8549613cyshang  UINTN                       Length;
2628a00297189c323096aae8e2975de94e8549613cyshang} LBA_CACHE;
2728a00297189c323096aae8e2975de94e8549613cyshang
2828a00297189c323096aae8e2975de94e8549613cyshangtypedef struct {
2928a00297189c323096aae8e2975de94e8549613cyshang  MEMMAP_DEVICE_PATH          MemMapDevPath;
3028a00297189c323096aae8e2975de94e8549613cyshang  EFI_DEVICE_PATH_PROTOCOL    EndDevPath;
3184266565f5957184483515157987168e2c930a60klu} FV_MEMMAP_DEVICE_PATH;
3228a00297189c323096aae8e2975de94e8549613cyshang
3384266565f5957184483515157987168e2c930a60klu//
3484266565f5957184483515157987168e2c930a60klu// UEFI Specification define FV device path format if FV provide name guid in extension header
3584266565f5957184483515157987168e2c930a60klu//
3684266565f5957184483515157987168e2c930a60klutypedef struct {
3784266565f5957184483515157987168e2c930a60klu  MEDIA_FW_VOL_DEVICE_PATH    FvDevPath;
3884266565f5957184483515157987168e2c930a60klu  EFI_DEVICE_PATH_PROTOCOL    EndDevPath;
3984266565f5957184483515157987168e2c930a60klu} FV_PIWG_DEVICE_PATH;
4028a00297189c323096aae8e2975de94e8549613cyshang
4128a00297189c323096aae8e2975de94e8549613cyshangtypedef struct {
4228a00297189c323096aae8e2975de94e8549613cyshang  UINTN                                 Signature;
4328a00297189c323096aae8e2975de94e8549613cyshang  EFI_HANDLE                            Handle;
4484266565f5957184483515157987168e2c930a60klu  EFI_DEVICE_PATH_PROTOCOL              *DevicePath;
4528a00297189c323096aae8e2975de94e8549613cyshang  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    FwVolBlockInstance;
4628a00297189c323096aae8e2975de94e8549613cyshang  UINTN                                 NumBlocks;
4728a00297189c323096aae8e2975de94e8549613cyshang  LBA_CACHE                             *LbaCache;
4828a00297189c323096aae8e2975de94e8549613cyshang  UINT32                                FvbAttributes;
4928a00297189c323096aae8e2975de94e8549613cyshang  EFI_PHYSICAL_ADDRESS                  BaseAddress;
500c3a1db40f982d243b8e2c67ee4e8109a0737d34lzeng  UINT32                                AuthenticationStatus;
5128a00297189c323096aae8e2975de94e8549613cyshang} EFI_FW_VOL_BLOCK_DEVICE;
5228a00297189c323096aae8e2975de94e8549613cyshang
53ec90508b3d3ff22a698a0446cb09d551d7466045eric_tian
5428a00297189c323096aae8e2975de94e8549613cyshang#define FVB_DEVICE_FROM_THIS(a) \
5528a00297189c323096aae8e2975de94e8549613cyshang  CR(a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE)
5628a00297189c323096aae8e2975de94e8549613cyshang
5728a00297189c323096aae8e2975de94e8549613cyshang
58162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
59162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Retrieves Volume attributes.  No polarity translations are done.
60162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
61022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Calling context
62022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Attributes             output buffer which contains attributes
63162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
64162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_SUCCESS            The firmware volume attributes were returned.
65162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
66162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
6728a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
6828a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
6928a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockGetAttributes (
7028a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
718ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff  OUT       EFI_FVB_ATTRIBUTES_2                *Attributes
7223c98c9417908188207408afa3f6901b8aca826aqhuang  );
7328a00297189c323096aae8e2975de94e8549613cyshang
7428a00297189c323096aae8e2975de94e8549613cyshang
7528a00297189c323096aae8e2975de94e8549613cyshang
76162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
77162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Modifies the current settings of the firmware volume according to the input parameter.
7828a00297189c323096aae8e2975de94e8549613cyshang
79022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Calling context
80022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Attributes             input buffer which contains attributes
8128a00297189c323096aae8e2975de94e8549613cyshang
82022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            The firmware volume attributes were returned.
83022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_INVALID_PARAMETER  The attributes requested are in conflict with
84022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 the capabilities as declared in the firmware
85022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 volume header.
86162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_UNSUPPORTED        Not supported.
8728a00297189c323096aae8e2975de94e8549613cyshang
88162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
8928a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
9028a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
9128a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockSetAttributes (
9228a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
938ee3a1990874ae94da24e8c2a97e941fdfcf74a6vanjeff  IN CONST  EFI_FVB_ATTRIBUTES_2                *Attributes
9423c98c9417908188207408afa3f6901b8aca826aqhuang  );
9528a00297189c323096aae8e2975de94e8549613cyshang
9628a00297189c323096aae8e2975de94e8549613cyshang
9728a00297189c323096aae8e2975de94e8549613cyshang
98162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
99162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  The EraseBlock() function erases one or more blocks as denoted by the
100162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  variable argument list. The entire parameter list of blocks must be verified
101162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  prior to erasing any blocks.  If a block is requested that does not exist
102162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  within the associated firmware volume (it has a larger index than the last
103162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  block of the firmware volume), the EraseBlock() function must return
104162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  EFI_INVALID_PARAMETER without modifying the contents of the firmware volume.
105162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
106022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Calling context
107022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  ...                    Starting LBA followed by Number of Lba to erase.
108022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 a -1 to terminate the list.
109022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
110022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            The erase request was successfully completed.
111022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_ACCESS_DENIED      The firmware volume is in the WriteDisabled
112022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 state.
113022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_DEVICE_ERROR       The block device is not functioning correctly
114022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 and could not be written. The firmware device
115022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 may have been partially erased.
116022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_INVALID_PARAMETER  One or more of the LBAs listed in the variable
117022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 argument list do
118162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_UNSUPPORTED        Not supported.
11928a00297189c323096aae8e2975de94e8549613cyshang
120162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
12128a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
12228a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
12328a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockEraseBlock (
12428a00297189c323096aae8e2975de94e8549613cyshang  IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,
12528a00297189c323096aae8e2975de94e8549613cyshang  ...
12623c98c9417908188207408afa3f6901b8aca826aqhuang  );
12728a00297189c323096aae8e2975de94e8549613cyshang
12828a00297189c323096aae8e2975de94e8549613cyshang
129162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
130162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
131162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Read the specified number of bytes from the block to the input buffer.
132162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
133022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Indicates the calling context.
134022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Lba                    The starting logical block index to read.
135022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Offset                 Offset into the block at which to begin reading.
136022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  NumBytes               Pointer to a UINT32. At entry, *NumBytes
137022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 contains the total size of the buffer. At exit,
138022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 *NumBytes contains the total number of bytes
139022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 actually read.
140022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Buffer                 Pinter to a caller-allocated buffer that
141022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 contains the destine for the read.
142022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
143022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            The firmware volume was read successfully.
144022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_BAD_BUFFER_SIZE    The read was attempted across an LBA boundary.
145022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_ACCESS_DENIED      Access denied.
146022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_DEVICE_ERROR       The block device is malfunctioning and could not
147162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang                                 be read.
148162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
149162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
15028a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
15128a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
15228a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockReadBlock (
15328a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
15428a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_LBA                              Lba,
15528a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  UINTN                                Offset,
15628a00297189c323096aae8e2975de94e8549613cyshang  IN OUT    UINTN                                *NumBytes,
15728a00297189c323096aae8e2975de94e8549613cyshang  IN OUT    UINT8                                *Buffer
15823c98c9417908188207408afa3f6901b8aca826aqhuang  );
15928a00297189c323096aae8e2975de94e8549613cyshang
160022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
161162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
162162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
163162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Writes the specified number of bytes from the input buffer to the block.
164162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
165022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Indicates the calling context.
166022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Lba                    The starting logical block index to write to.
167022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Offset                 Offset into the block at which to begin writing.
168022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  NumBytes               Pointer to a UINT32. At entry, *NumBytes
169022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 contains the total size of the buffer. At exit,
170022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 *NumBytes contains the total number of bytes
171022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 actually written.
172022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Buffer                 Pinter to a caller-allocated buffer that
173022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 contains the source for the write.
174022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
175022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            The firmware volume was written successfully.
176022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_BAD_BUFFER_SIZE    The write was attempted across an LBA boundary.
177022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 On output, NumBytes contains the total number of
178022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 bytes actually written.
179022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_ACCESS_DENIED      The firmware volume is in the WriteDisabled
180022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 state.
181022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_DEVICE_ERROR       The block device is malfunctioning and could not
182022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 be written.
183162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_UNSUPPORTED        Not supported.
184162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
185162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
18628a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
18728a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
18828a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockWriteBlock (
18923c98c9417908188207408afa3f6901b8aca826aqhuang  IN     EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
19023c98c9417908188207408afa3f6901b8aca826aqhuang  IN     EFI_LBA                              Lba,
19123c98c9417908188207408afa3f6901b8aca826aqhuang  IN     UINTN                                Offset,
19223c98c9417908188207408afa3f6901b8aca826aqhuang  IN OUT UINTN                                *NumBytes,
19323c98c9417908188207408afa3f6901b8aca826aqhuang  IN     UINT8                                *Buffer
19423c98c9417908188207408afa3f6901b8aca826aqhuang  );
19528a00297189c323096aae8e2975de94e8549613cyshang
196022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
197162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
198162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
199162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Get Fvb's base address.
200162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
201022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Indicates the calling context.
202022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Address                Fvb device base address.
203162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
204022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            Successfully got Fvb's base address.
205162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_UNSUPPORTED        Not supported.
206162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
207162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
20828a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
20928a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
21028a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockGetPhysicalAddress (
21123c98c9417908188207408afa3f6901b8aca826aqhuang  IN CONST  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
21223c98c9417908188207408afa3f6901b8aca826aqhuang  OUT       EFI_PHYSICAL_ADDRESS                *Address
21323c98c9417908188207408afa3f6901b8aca826aqhuang  );
21428a00297189c323096aae8e2975de94e8549613cyshang
21528a00297189c323096aae8e2975de94e8549613cyshang
21628a00297189c323096aae8e2975de94e8549613cyshang
217162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang/**
218162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  Retrieves the size in bytes of a specific block within a firmware volume.
219162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang
220022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  This                   Indicates the calling context.
221022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  Lba                    Indicates the block for which to return the
222022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 size.
223022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  BlockSize              Pointer to a caller-allocated UINTN in which the
224022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 size of the block is returned.
225022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @param  NumberOfBlocks         Pointer to a caller-allocated UINTN in which the
226022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 number of consecutive blocks starting with Lba
227022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 is returned. All blocks in this range have a
228022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang                                 size of BlockSize.
229022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang
230022c6d45ef78605c173023f53984e4dfaf7b11f4qhuang  @retval EFI_SUCCESS            The firmware volume base address is returned.
231162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang  @retval EFI_INVALID_PARAMETER  The requested LBA is out of range.
23228a00297189c323096aae8e2975de94e8549613cyshang
233162ed594438ab8d39f89b43e6d645ca24e1e1e65qhuang**/
23428a00297189c323096aae8e2975de94e8549613cyshangEFI_STATUS
23528a00297189c323096aae8e2975de94e8549613cyshangEFIAPI
23628a00297189c323096aae8e2975de94e8549613cyshangFwVolBlockGetBlockSize (
23728a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
23828a00297189c323096aae8e2975de94e8549613cyshang  IN CONST  EFI_LBA                             Lba,
23923c98c9417908188207408afa3f6901b8aca826aqhuang  IN OUT    UINTN                               *BlockSize,
24023c98c9417908188207408afa3f6901b8aca826aqhuang  IN OUT    UINTN                               *NumberOfBlocks
24123c98c9417908188207408afa3f6901b8aca826aqhuang  );
24228a00297189c323096aae8e2975de94e8549613cyshang
24328a00297189c323096aae8e2975de94e8549613cyshang
24428a00297189c323096aae8e2975de94e8549613cyshang#endif
245