MdePkg:simplify Fifo API in BaseIoLibIntrinsic
Simplify IoRead/WriteFifo implement by repeatedly calling IoRead/Write in the C code. This can avoid calling assembly code to use string I/O instructions. With this change Ia32/IoFifo.nasm and X64/IoFifo.nasm can be removed. Then the source files for IA32 and X64 are the same. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang.liu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Dun Tan <dun.tan@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
@@ -1,120 +0,0 @@
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
|
||||
;
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
DEFAULT REL
|
||||
SECTION .text
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoReadFifo8 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; OUT VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoReadFifo8)
|
||||
ASM_PFX(IoReadFifo8):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rdi, r8 ; rdi: buffer address; r8: save rdi
|
||||
rep insb
|
||||
mov rdi, r8 ; restore rdi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoReadFifo16 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; OUT VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoReadFifo16)
|
||||
ASM_PFX(IoReadFifo16):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rdi, r8 ; rdi: buffer address; r8: save rdi
|
||||
rep insw
|
||||
mov rdi, r8 ; restore rdi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoReadFifo32 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; OUT VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoReadFifo32)
|
||||
ASM_PFX(IoReadFifo32):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rdi, r8 ; rdi: buffer address; r8: save rdi
|
||||
rep insd
|
||||
mov rdi, r8 ; restore rdi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoWriteFifo8 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; IN VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoWriteFifo8)
|
||||
ASM_PFX(IoWriteFifo8):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rsi, r8 ; rsi: buffer address; r8: save rsi
|
||||
rep outsb
|
||||
mov rsi, r8 ; restore rsi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoWriteFifo16 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; IN VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoWriteFifo16)
|
||||
ASM_PFX(IoWriteFifo16):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rsi, r8 ; rsi: buffer address; r8: save rsi
|
||||
rep outsw
|
||||
mov rsi, r8 ; restore rsi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoWriteFifo32 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; IN VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(IoWriteFifo32)
|
||||
ASM_PFX(IoWriteFifo32):
|
||||
cld
|
||||
xchg rcx, rdx
|
||||
xchg rsi, r8 ; rsi: buffer address; r8: save rsi
|
||||
rep outsd
|
||||
mov rsi, r8 ; restore rsi
|
||||
ret
|
||||
|
Reference in New Issue
Block a user