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>