TianoCore EDK2 master
Loading...
Searching...
No Matches
WinBlockIo.c File Reference
#include "WinHost.h"

Go to the source code of this file.

Data Structures

struct  WIN_NT_BLOCK_IO_PRIVATE
 

Macros

#define WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE   SIGNATURE_32 ('N', 'T', 'b', 'k')
 
#define WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a)    CR(a, WIN_NT_BLOCK_IO_PRIVATE, EmuBlockIo, WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE)
 

Functions

EFI_STATUS WinNtBlockIoReset (IN EMU_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
 
EFI_STATUS SetFilePointer64 (IN WIN_NT_BLOCK_IO_PRIVATE *Private, IN INT64 DistanceToMove, OUT UINT64 *NewFilePointer, IN DWORD MoveMethod)
 
EFI_STATUS WinNtBlockIoOpenDevice (IN WIN_NT_BLOCK_IO_PRIVATE *Private, IN EFI_BLOCK_IO_MEDIA *Media)
 
EFI_STATUS EFIAPI WinNtBlockIoCreateMapping (IN EMU_BLOCK_IO_PROTOCOL *This, IN EFI_BLOCK_IO_MEDIA *Media)
 
EFI_STATUS WinNtBlockIoError (IN WIN_NT_BLOCK_IO_PRIVATE *Private)
 
EFI_STATUS WinNtSignalToken (IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN EFI_STATUS Status)
 
EFI_STATUS WinNtBlockIoReadBlocks (IN EMU_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, OUT VOID *Buffer)
 
EFI_STATUS WinNtBlockIoWriteBlocks (IN EMU_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, IN VOID *Buffer)
 
EFI_STATUS WinNtBlockIoFlushBlocks (IN EMU_BLOCK_IO_PROTOCOL *This, IN OUT EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS EFIAPI WinNtBlockIoThunkOpen (IN EMU_IO_THUNK_PROTOCOL *This)
 
EFI_STATUS EFIAPI WinNtBlockIoThunkClose (IN EMU_IO_THUNK_PROTOCOL *This)
 

Variables

EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol
 
EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo
 

Detailed Description

Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file WinBlockIo.c.

Macro Definition Documentation

◆ WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS

#define WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (   a)     CR(a, WIN_NT_BLOCK_IO_PRIVATE, EmuBlockIo, WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE)

Definition at line 27 of file WinBlockIo.c.

◆ WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE

#define WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE   SIGNATURE_32 ('N', 'T', 'b', 'k')

Definition at line 10 of file WinBlockIo.c.

Function Documentation

◆ SetFilePointer64()

EFI_STATUS SetFilePointer64 ( IN WIN_NT_BLOCK_IO_PRIVATE Private,
IN INT64  DistanceToMove,
OUT UINT64 *  NewFilePointer,
IN DWORD  MoveMethod 
)

Definition at line 37 of file WinBlockIo.c.

◆ WinNtBlockIoCreateMapping()

EFI_STATUS EFIAPI WinNtBlockIoCreateMapping ( IN EMU_BLOCK_IO_PROTOCOL This,
IN EFI_BLOCK_IO_MEDIA Media 
)

Definition at line 138 of file WinBlockIo.c.

◆ WinNtBlockIoError()

EFI_STATUS WinNtBlockIoError ( IN WIN_NT_BLOCK_IO_PRIVATE Private)

Definition at line 172 of file WinBlockIo.c.

◆ WinNtBlockIoFlushBlocks()

EFI_STATUS WinNtBlockIoFlushBlocks ( IN EMU_BLOCK_IO_PROTOCOL This,
IN OUT EFI_BLOCK_IO2_TOKEN Token 
)

Flush the Block Device.

If EFI_DEVICE_ERROR, EFI_NO_MEDIA,_EFI_WRITE_PROTECTED or EFI_MEDIA_CHANGED is returned and non-blocking I/O is being used, the Event associated with this request will not be signaled.

Parameters
[in]ThisIndicates a pointer to the calling context.
[in,out]TokenA pointer to the token associated with the transaction
Return values
EFI_SUCCESSThe flush request was queued if Event is not NULL. All outstanding data was written correctly to the device if the Event is NULL.
EFI_DEVICE_ERRORThe device reported an error while writing back the data.
EFI_WRITE_PROTECTEDThe device cannot be written to.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.

Definition at line 414 of file WinBlockIo.c.

◆ WinNtBlockIoOpenDevice()

EFI_STATUS WinNtBlockIoOpenDevice ( IN WIN_NT_BLOCK_IO_PRIVATE Private,
IN EFI_BLOCK_IO_MEDIA Media 
)

Definition at line 75 of file WinBlockIo.c.

◆ WinNtBlockIoReadBlocks()

EFI_STATUS WinNtBlockIoReadBlocks ( IN EMU_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN OUT EFI_BLOCK_IO2_TOKEN Token,
IN UINTN  BufferSize,
OUT VOID *  Buffer 
)

Read BufferSize bytes from Lba into Buffer.

This function reads the requested number of blocks from the device. All the blocks are read, or an error is returned. If EFI_DEVICE_ERROR, EFI_NO_MEDIA,_or EFI_MEDIA_CHANGED is returned and non-blocking I/O is being used, the Event associated with this request will not be signaled.

Parameters
[in]ThisIndicates a pointer to the calling context.
[in]MediaIdId of the media, changes every time the media is replaced.
[in]LbaThe starting Logical Block Address to read from.
[in,out]TokenA pointer to the token associated with the transaction.
[in]BufferSizeSize of Buffer, must be a multiple of device block size.
[out]BufferA pointer to the destination buffer for the data. The caller is responsible for either having implicit or explicit ownership of the buffer.
Return values
EFI_SUCCESSThe read request was queued if Token->Event is not NULL.The data was read correctly from the device if the Token->Event is NULL.
EFI_DEVICE_ERRORThe device reported an error while performing the read.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_BAD_BUFFER_SIZEThe BufferSize parameter is not a multiple of the intrinsic block size of the device.
EFI_INVALID_PARAMETERThe read request contains LBAs that are not valid, or the buffer is not on proper alignment.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.

Definition at line 279 of file WinBlockIo.c.

◆ WinNtBlockIoReset()

EFI_STATUS WinNtBlockIoReset ( IN EMU_BLOCK_IO_PROTOCOL This,
IN BOOLEAN  ExtendedVerification 
)

Reset the block device hardware.

Parameters
[in]ThisIndicates a pointer to the calling context.
[in]ExtendedVerificationIndicates that the driver may perform a more exhausive verfication operation of the device during reset.
Return values
EFI_SUCCESSThe device was reset.
EFI_DEVICE_ERRORThe device is not functioning properly and could not be reset.

Definition at line 436 of file WinBlockIo.c.

◆ WinNtBlockIoThunkClose()

EFI_STATUS EFIAPI WinNtBlockIoThunkClose ( IN EMU_IO_THUNK_PROTOCOL This)

Definition at line 518 of file WinBlockIo.c.

◆ WinNtBlockIoThunkOpen()

EFI_STATUS EFIAPI WinNtBlockIoThunkOpen ( IN EMU_IO_THUNK_PROTOCOL This)

Definition at line 463 of file WinBlockIo.c.

◆ WinNtBlockIoWriteBlocks()

EFI_STATUS WinNtBlockIoWriteBlocks ( IN EMU_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN OUT EFI_BLOCK_IO2_TOKEN Token,
IN UINTN  BufferSize,
IN VOID *  Buffer 
)

Write BufferSize bytes from Lba into Buffer.

This function writes the requested number of blocks to the device. All blocks are written, or an error is returned.If EFI_DEVICE_ERROR, EFI_NO_MEDIA, EFI_WRITE_PROTECTED or EFI_MEDIA_CHANGED is returned and non-blocking I/O is being used, the Event associated with this request will not be signaled.

Parameters
[in]ThisIndicates a pointer to the calling context.
[in]MediaIdThe media ID that the write request is for.
[in]LbaThe starting logical block address to be written. The caller is responsible for writing to only legitimate locations.
[in,out]TokenA pointer to the token associated with the transaction.
[in]BufferSizeSize of Buffer, must be a multiple of device block size.
[in]BufferA pointer to the source buffer for the data.
Return values
EFI_SUCCESSThe write request was queued if Event is not NULL. The data was written correctly to the device if the Event is NULL.
EFI_WRITE_PROTECTEDThe device can not be written to.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId does not match the current device.
EFI_DEVICE_ERRORThe device reported an error while performing the write.
EFI_BAD_BUFFER_SIZEThe Buffer was not a multiple of the block size of the device.
EFI_INVALID_PARAMETERThe write request contains LBAs that are not valid, or the buffer is not on proper alignment.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.

Definition at line 349 of file WinBlockIo.c.

◆ WinNtSignalToken()

EFI_STATUS WinNtSignalToken ( IN OUT EFI_BLOCK_IO2_TOKEN Token,
IN EFI_STATUS  Status 
)

Definition at line 229 of file WinBlockIo.c.

Variable Documentation

◆ gEmuBlockIoProtocol

EMU_BLOCK_IO_PROTOCOL gEmuBlockIoProtocol
Initial value:
= {
WinNtBlockIoCreateMapping
}
EFI_STATUS WinNtBlockIoFlushBlocks(IN EMU_BLOCK_IO_PROTOCOL *This, IN OUT EFI_BLOCK_IO2_TOKEN *Token)
Definition: WinBlockIo.c:414
EFI_STATUS WinNtBlockIoWriteBlocks(IN EMU_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, IN VOID *Buffer)
Definition: WinBlockIo.c:349
EFI_STATUS WinNtBlockIoReset(IN EMU_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
Definition: WinBlockIo.c:436
EFI_STATUS WinNtBlockIoReadBlocks(IN EMU_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, OUT VOID *Buffer)
Definition: WinBlockIo.c:279

Definition at line 453 of file WinBlockIo.c.

◆ mWinNtBlockIoThunkIo

EMU_IO_THUNK_PROTOCOL mWinNtBlockIoThunkIo
Initial value:
= {
&gEmuBlockIoProtocolGuid,
0,
WinNtBlockIoThunkOpen,
WinNtBlockIoThunkClose,
}
#define NULL
Definition: Base.h:319

Definition at line 537 of file WinBlockIo.c.