mirror of https://github.com/acidanthera/audk.git
MdePkg/BaseIoLibIntrinsic: fix SEV (=unrolled) variants of IoWriteFifoXX()
In commitb6d11d7c46
("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:
parent
aa9aa47e06
commit
98a4d04e8f
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue