audk/EmulatorPkg
Doug Cook (WINDOWS) 9098efdf0d EmulatorPkg: BlockIo2 APIs do not signal event
BlockIo2 Read/Write/Flush APIs should signal the token's event when the
I/O operation completes, but the Emulator APIs do not. As a result, any
code that tries to implement async I/O will hang on emulator.

Both Windows and Unix emulator hosts work the same way:

- All I/O is completed synchronously.
- All I/O implementations contain the comment:
  `// Caller is responsible for signaling EFI Event`

However, the protocol implementations do not signal the event, so the
event is never signalled.

Fix is to signal the event in the appropriate protocol implementations.

- If the host API returns success then the I/O is complete since it's
  always synchronous.
- If there is a Token and Token->Event is not null and the I/O is
  successful then the event should be signalled.

Signed-off-by: Doug Cook <idigdoug@gmail.com>
2024-12-02 02:23:31 +00:00
..
Application/RedfishPlatformConfig EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
AutoScanPei EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
BootModePei EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
CpuRuntimeDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
EmuBlockIoDxe EmulatorPkg: BlockIo2 APIs do not signal event 2024-12-02 02:23:31 +00:00
EmuBusDriverDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
EmuGopDxe EmulatorPkg: Update the comments of ReadKeyStroke and ReadKeyStrokeEx 2024-04-03 10:25:06 +08:00
EmuSimpleFileSystemDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
EmuSnpDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
EmuThunkDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
FirmwareVolumePei EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
FlashMapPei EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
FvbServicesRuntimeDxe EmulatorPkg: Format with Uncrustify 73.0.8 2023-11-27 20:14:59 +00:00
Include Add EFI_STATUS return to EMU_THUNK_PROTOCOL.SetTime() 2024-01-05 20:32:08 +00:00
Library EmulatorPkg: RedfishPlatformHostInterfaceLib: get rid of unused variable 2023-12-27 00:09:49 +00:00
PlatformCI EmulatorPkg: CI: use ubuntu-22.04 vm_image (Linux only) 2023-01-17 19:06:32 +00:00
PlatformSmbiosDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
RealTimeClockRuntimeDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
ResetRuntimeDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Sec EmulatorPkg: auto-generate SEC ProcessLibraryConstructorList() decl 2024-03-08 09:09:22 +00:00
ThunkPpiToProtocolPei EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
TimerDxe EmulatorPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
Unix EmulatorPkg: fix X64 Unix/Host segfault with GCC toolchain profile 2024-09-05 01:50:41 +00:00
Win EmulatorPkg WinThunk: Use Win32 API to get Performance Frequency and Count 2024-11-14 02:15:43 +00:00
EmulatorPkg.ci.yaml EmulatorPkg/EmulatorPkg.ci.yaml: Add PrEval CI config 2024-09-02 23:20:35 +00:00
EmulatorPkg.dec EmulatorPkg: fix typo. PcdRedfishServie -> PcdRedfishService 2023-12-27 00:09:49 +00:00
EmulatorPkg.dsc MdePkg: MdeLibs.dsc.inc: Apply StackCheckLibNull to All Module Types 2024-11-13 21:01:46 +00:00
EmulatorPkg.fdf EmulatorPkg: Add Hash2DxeCrypto to EmulatorPkg 2024-05-24 15:48:52 +00:00
Readme.md EmulatorPkg: strip trailing whitespace 2019-10-04 11:18:32 +01:00
build.sh EmulatorPkg: Fix XCODE5 lldb issues 2019-08-19 09:57:25 -07:00

Readme.md

Overview

EmulatorPkg provides an environment where a UEFI environment can be emulated under an environment where a full UEFI compatible environment is not possible. (For example, running under an OS where an OS process hosts the UEFI emulation environment.)

https://github.com/tianocore/tianocore.github.io/wiki/EmulatorPkg

Status

  • Builds and runs under
    • a posix-like environment with X windows
      • Linux
      • OS X
    • Windows environment
      • Win10 (verified)
      • Win8 (not verified)

How to Build & Run

You can use the following command to build.

  • 32bit emulator in Windows:

    build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a IA32

  • 64bit emulator in Windows:

    build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a X64

  • 32bit emulator in Linux:

    build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a IA32

  • 64bit emulator in Linux:

    build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a X64

You can start/run the emulator using the following command:

  • 32bit emulator in Windows:

    cd Build\EmulatorIA32\DEBUG_VS2017\IA32\ && WinHost.exe

  • 64bit emulator in Windows:

    cd Build\EmulatorX64\DEBUG_VS2017\X64\ && WinHost.exe

  • 32bit emulator in Linux:

    cd Build/EmulatorIA32/DEBUG_GCC5/IA32/ && ./Host

  • 64bit emulator in Linux:

    cd Build/EmulatorX64/DEBUG_GCC5/X64/ && ./Host

On posix-like environment with the bash shell you can use EmulatorPkg/build.sh to simplify building and running emulator.

For example, to build + run:

$ EmulatorPkg/build.sh $ EmulatorPkg/build.sh run

The build architecture will match your host machine's architecture.

On X64 host machines, you can build + run IA32 mode as well:

$ EmulatorPkg/build.sh -a IA32 $ EmulatorPkg/build.sh -a IA32 run