MdePkg/BaseIoLibIntrinsic: fix SEV (=unrolled) variants of IoWriteFifoXX()

In commit b6d11d7c46 ("MdePkg: BaseIoLibIntrinsic (IoLib class)
library", 2017-04-12), the MOV instructions in the write loops were
probably copied from the read loops. However, the operand order was not
adjusted.

As a result, the IoWriteFifoXX() routines, when invoked in SEV guests, now
overwrite the source buffer with value 0x01 / 0x0001 / 0x00000001 -- the
SevNoRepIo() function returns value 1 in EAX, in SEV guests --, and write
the same value to the target IO port.

Fix this by putting the target operand (AL / AX / EAX) first, and the
source operand (BYTE / WORD / DWORD [ESI/RSI]) second.

Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Fixes: b6d11d7c46
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Brijesh Singh <brijesh.singh@amd.com>
This commit is contained in:
Laszlo Ersek 2017-09-04 17:09:18 +02:00
parent aa9aa47e06
commit 98a4d04e8f
2 changed files with 6 additions and 6 deletions

View File

@ -212,7 +212,7 @@ ASM_PFX(IoWriteFifo8):
jecxz @IoWriteFifo8_Done
@IoWriteFifo8_Loop:
mov byte [esi], al
mov al, byte [esi]
out dx, al
inc esi
loop @IoWriteFifo8_Loop
@ -250,7 +250,7 @@ ASM_PFX(IoWriteFifo16):
jecxz @IoWriteFifo16_Done
@IoWriteFifo16_Loop:
mov word [esi], ax
mov ax, word [esi]
out dx, ax
add esi, 2
loop @IoWriteFifo16_Loop
@ -288,7 +288,7 @@ ASM_PFX(IoWriteFifo32):
jecxz @IoWriteFifo32_Done
@IoWriteFifo32_Loop:
mov dword [esi], eax
mov eax, dword [esi]
out dx, eax
add esi, 4
loop @IoWriteFifo32_Loop

View File

@ -205,7 +205,7 @@ ASM_PFX(IoWriteFifo8):
jrcxz @IoWriteFifo8_Done
@IoWriteFifo8_Loop:
mov byte [rsi], al
mov al, byte [rsi]
out dx, al
inc rsi
loop @IoWriteFifo8_Loop
@ -241,7 +241,7 @@ ASM_PFX(IoWriteFifo16):
jrcxz @IoWriteFifo16_Done
@IoWriteFifo16_Loop:
mov word [rsi], ax
mov ax, word [rsi]
out dx, ax
add rsi, 2
loop @IoWriteFifo16_Loop
@ -277,7 +277,7 @@ ASM_PFX(IoWriteFifo32):
jrcxz @IoWriteFifo32_Done
@IoWriteFifo32_Loop:
mov dword [rsi], eax
mov eax, dword [rsi]
out dx, eax
add rsi, 4
loop @IoWriteFifo32_Loop