* [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf @ 2023-11-09 2:49 duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c duntan ` (4 more replies) 0 siblings, 5 replies; 10+ messages in thread From: duntan @ 2023-11-09 2:49 UTC (permalink / raw) To: devel Simplify IoRead/WriteFifo implement in BaseIoLibIntrinsic by repeatedly calling IoRead/Write in 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. Also source files for IA32 and X64 are the same. Dun Tan (2): MdePkg: Change IoLibFifo.c to IoLibFifoCc.c MdePkg:simplify Fifo API in BaseIoLibIntrinsic MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++-------- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 ----------------------------------------------------------------------------------------------------------------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 59 +++++++++++++++++++++++++++++++---------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 ------------------------------------------------------------------------------------------------------------------------ 6 files changed, 251 insertions(+), 288 deletions(-) delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm create mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110938): https://edk2.groups.io/g/devel/message/110938 Mute This Topic: https://groups.io/mt/102478994/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 10+ messages in thread
* [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c 2023-11-09 2:49 [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf duntan @ 2023-11-09 2:49 ` duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic duntan ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: duntan @ 2023-11-09 2:49 UTC (permalink / raw) To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni Change IoLibFifo.c to IoLibFifoCc.c since the file is for Tdx and SEV in BaseIoLibIntrinsicSev. It's also to distinguish with a new incoming IoLibFifo.c for BaseIoLibIntrinsic. Signed-off-by: Dun Tan <dun.tan@intel.com> 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> --- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- MdePkg/Library/BaseIoLibIntrinsic/{IoLibFifo.c => IoLibFifoCc.c} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf index e1b8298ac4..8b62bd4e2a 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf @@ -45,7 +45,7 @@ IoLibMsc.c | MSFT IoLib.c IoLibInternalTdx.c - IoLibFifo.c + IoLibFifoCc.c X64/IoFifoSev.nasm [Packages] diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c similarity index 94% rename from MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c rename to MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c index 9a94bc6a05..0c85cf9426 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c @@ -1,7 +1,7 @@ /** @file IoFifo read/write routines. - Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2021 - 2023, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110939): https://edk2.groups.io/g/devel/message/110939 Mute This Topic: https://groups.io/mt/102478995/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic 2023-11-09 2:49 [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c duntan @ 2023-11-09 2:49 ` duntan 2023-11-09 5:56 ` [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf Ni, Ray ` (2 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: duntan @ 2023-11-09 2:49 UTC (permalink / raw) To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni 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. Signed-off-by: Dun Tan <dun.tan@intel.com> 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> --- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++-------- MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 ----------------------------------------------------------------------------------------------------------------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 ------------------------------------------------------------------------------------------------------------------------ 4 files changed, 222 insertions(+), 259 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf index aeb072ee95..b587e2cded 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf @@ -38,17 +38,11 @@ IoLibInternalTdxNull.c IoLibTdx.h -[Sources.IA32] +[Sources.IA32, Sources.X64] IoLibGcc.c | GCC IoLibMsc.c | MSFT IoLib.c - Ia32/IoFifo.nasm - -[Sources.X64] - IoLibGcc.c | GCC - IoLibMsc.c | MSFT - IoLib.c - X64/IoFifo.nasm + IoLibFifo.c [Sources.EBC] IoLibEbc.c diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm deleted file mode 100644 index a4ae1a0053..0000000000 --- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm +++ /dev/null @@ -1,131 +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 -; -;------------------------------------------------------------------------------ - - SECTION .text - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo8 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo8) -ASM_PFX(IoReadFifo8): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insb - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo16 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo16) -ASM_PFX(IoReadFifo16): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insw - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo32 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo32) -ASM_PFX(IoReadFifo32): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insd - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo8 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo8) -ASM_PFX(IoWriteFifo8): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsb - pop esi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo16 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo16) -ASM_PFX(IoWriteFifo16): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsw - pop esi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo32 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo32) -ASM_PFX(IoWriteFifo32): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsd - pop esi - ret - diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c new file mode 100644 index 0000000000..bd1d372d0f --- /dev/null +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c @@ -0,0 +1,220 @@ +/** @file + IoFifo read/write routines. + + Copyright (c) 2021 - 2023, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "BaseIoLibIntrinsicInternal.h" +#include <Uefi/UefiBaseType.h> + +/** + Reads an 8-bit I/O port fifo into a block of memory. + + Reads the 8-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead8 is invoked to read the I/O port fifo. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo8 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT8 *Buffer8; + + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + *Buffer8++ = IoRead8 (Port); + } +} + +/** + Writes a block of memory into an 8-bit I/O port fifo. + + Writes the 8-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite8 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo8 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT8 *Buffer8; + + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + IoWrite8 (Port, *Buffer8++); + } +} + +/** + Reads a 16-bit I/O port fifo into a block of memory. + + Reads the 16-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead16 is invoked to read data from the I/O port. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo16 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT16 *Buffer16; + + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + *Buffer16++ = IoRead16 (Port); + } +} + +/** + Writes a block of memory into a 16-bit I/O port fifo. + + Writes the 16-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite16 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo16 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT16 *Buffer16; + + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + IoWrite16 (Port, *Buffer16++); + } +} + +/** + Reads a 32-bit I/O port fifo into a block of memory. + + Reads the 32-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead32 is invoked to read data from the I/O port. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo32 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT32 *Buffer32; + + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + *Buffer32++ = IoRead32 (Port); + } +} + +/** + Writes a block of memory into a 32-bit I/O port fifo. + + Writes the 32-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite32 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo32 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT32 *Buffer32; + + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + IoWrite32 (Port, *Buffer32++); + } +} diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm deleted file mode 100644 index d459072f6e..0000000000 --- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm +++ /dev/null @@ -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 - -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110940): https://edk2.groups.io/g/devel/message/110940 Mute This Topic: https://groups.io/mt/102478996/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf 2023-11-09 2:49 [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic duntan @ 2023-11-09 5:56 ` Ni, Ray 2023-11-13 13:07 ` Laszlo Ersek [not found] ` <1795D4A7BE9E02F3.6123@groups.io> [not found] ` <1795D4A7D7819C64.15940@groups.io> 4 siblings, 1 reply; 10+ messages in thread From: Ni, Ray @ 2023-11-09 5:56 UTC (permalink / raw) To: devel@edk2.groups.io, Tan, Dun [-- Attachment #1: Type: text/plain, Size: 2527 bytes --] Reviewed-by: Ray Ni <ray.ni@intel.com> Thanks for providing the alternative solution that avoids impacting OVMF boot performance. Thanks, Ray ________________________________ From: devel@edk2.groups.io <devel@edk2.groups.io> on behalf of duntan <dun.tan@intel.com> Sent: Thursday, November 9, 2023 10:49 AM To: devel@edk2.groups.io <devel@edk2.groups.io> Subject: [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf Simplify IoRead/WriteFifo implement in BaseIoLibIntrinsic by repeatedly calling IoRead/Write in 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. Also source files for IA32 and X64 are the same. Dun Tan (2): MdePkg: Change IoLibFifo.c to IoLibFifoCc.c MdePkg:simplify Fifo API in BaseIoLibIntrinsic MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++-------- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 ----------------------------------------------------------------------------------------------------------------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 59 +++++++++++++++++++++++++++++++---------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 ------------------------------------------------------------------------------------------------------------------------ 6 files changed, 251 insertions(+), 288 deletions(-) delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm create mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110949): https://edk2.groups.io/g/devel/message/110949 Mute This Topic: https://groups.io/mt/102478994/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- [-- Attachment #2: Type: text/html, Size: 5055 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf 2023-11-09 5:56 ` [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf Ni, Ray @ 2023-11-13 13:07 ` Laszlo Ersek 2023-11-27 10:14 ` duntan 0 siblings, 1 reply; 10+ messages in thread From: Laszlo Ersek @ 2023-11-13 13:07 UTC (permalink / raw) To: devel, ray.ni, Tan, Dun On 11/9/23 06:56, Ni, Ray wrote: > Reviewed-by: Ray Ni <ray.ni@intel.com> > > Thanks for providing the alternative solution that avoids impacting OVMF > boot performance. This approach looks good to me. The IA32 and X64 OVMF platforms use "BaseIoLibIntrinsicSev.inf", and that library instance is left alone. The RISC-V OVMF platform uses "BaseIoLibIntrinsic.inf", but RISC-V already doesn't (can't) use the IA32/X64 NASM files. So, surprisingly, the "IoFifo.nasm" files are actually unused, pre-patch; IA32 and X64 OVMF only uses the "IoFifoSev.nasm" files. Acked-by: Laszlo Ersek <lersek@redhat.com> Thanks! Laszlo > > Thanks, > Ray > ------------------------------------------------------------------------ > *From:* devel@edk2.groups.io <devel@edk2.groups.io> on behalf of duntan > <dun.tan@intel.com> > *Sent:* Thursday, November 9, 2023 10:49 AM > *To:* devel@edk2.groups.io <devel@edk2.groups.io> > *Subject:* [edk2-devel] [PATCH 0/2] Remove string IO instruction in > BaseIoLibIntrinsic.inf > > Simplify IoRead/WriteFifo implement in BaseIoLibIntrinsic by repeatedly > calling > IoRead/Write in 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. Also > source files for IA32 and X64 are the same. > > Dun Tan (2): > MdePkg: Change IoLibFifo.c to IoLibFifoCc.c > MdePkg:simplify Fifo API in BaseIoLibIntrinsic > > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 > ++-------- > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 > ----------------------------------------------------------------------------------------------------------------------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 59 > +++++++++++++++++++++++++++++++---------------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c | 217 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 > ------------------------------------------------------------------------------------------------------------------------ > 6 files changed, 251 insertions(+), 288 deletions(-) > delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > create mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c > delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > > -- > 2.31.1.windows.1 > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111152): https://edk2.groups.io/g/devel/message/111152 Mute This Topic: https://groups.io/mt/102478994/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf 2023-11-13 13:07 ` Laszlo Ersek @ 2023-11-27 10:14 ` duntan 0 siblings, 0 replies; 10+ messages in thread From: duntan @ 2023-11-27 10:14 UTC (permalink / raw) To: devel@edk2.groups.io, Kinney, Michael D, Gao, Liming; +Cc: Ni, Ray Hi Mike and Liming, Could you help to review this patch set? It's to remove string IO instruction in BaseIoLibIntrinsic and simplify BaseIoLibIntrinsic. Thanks, Dun -----Original Message----- From: Laszlo Ersek <lersek@redhat.com> Sent: Monday, November 13, 2023 9:08 PM To: devel@edk2.groups.io; Ni, Ray <ray.ni@intel.com>; Tan, Dun <dun.tan@intel.com> Subject: Re: [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf On 11/9/23 06:56, Ni, Ray wrote: > Reviewed-by: Ray Ni <ray.ni@intel.com> > > Thanks for providing the alternative solution that avoids impacting > OVMF boot performance. This approach looks good to me. The IA32 and X64 OVMF platforms use "BaseIoLibIntrinsicSev.inf", and that library instance is left alone. The RISC-V OVMF platform uses "BaseIoLibIntrinsic.inf", but RISC-V already doesn't (can't) use the IA32/X64 NASM files. So, surprisingly, the "IoFifo.nasm" files are actually unused, pre-patch; IA32 and X64 OVMF only uses the "IoFifoSev.nasm" files. Acked-by: Laszlo Ersek <lersek@redhat.com> Thanks! Laszlo > > Thanks, > Ray > ---------------------------------------------------------------------- > -- > *From:* devel@edk2.groups.io <devel@edk2.groups.io> on behalf of > duntan <dun.tan@intel.com> > *Sent:* Thursday, November 9, 2023 10:49 AM > *To:* devel@edk2.groups.io <devel@edk2.groups.io> > *Subject:* [edk2-devel] [PATCH 0/2] Remove string IO instruction in > BaseIoLibIntrinsic.inf > > Simplify IoRead/WriteFifo implement in BaseIoLibIntrinsic by > repeatedly calling IoRead/Write in 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. > Also source files for IA32 and X64 are the same. > > Dun Tan (2): > MdePkg: Change IoLibFifo.c to IoLibFifoCc.c > MdePkg:simplify Fifo API in BaseIoLibIntrinsic > > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 > ++-------- > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 > ---------------------------------------------------------------------- > ------------------------------------------------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 59 > +++++++++++++++++++++++++++++++---------------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c | 217 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 > ---------------------------------------------------------------------- > -------------------------------------------------- > 6 files changed, 251 insertions(+), 288 deletions(-) > delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > create mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c > delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > > -- > 2.31.1.windows.1 > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#111734): https://edk2.groups.io/g/devel/message/111734 Mute This Topic: https://groups.io/mt/102478994/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 10+ messages in thread
[parent not found: <1795D4A7BE9E02F3.6123@groups.io>]
* Re: [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c [not found] ` <1795D4A7BE9E02F3.6123@groups.io> @ 2023-12-06 9:25 ` duntan 0 siblings, 0 replies; 10+ messages in thread From: duntan @ 2023-12-06 9:25 UTC (permalink / raw) To: devel@edk2.groups.io, Tan, Dun Cc: Kinney, Michael D, Gao, Liming, Liu, Zhiguang, Ni, Ray Hi Mike and Liming, Could you please help to review this patch? Thanks. Dun -----Original Message----- From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan Sent: Thursday, November 9, 2023 10:50 AM To: devel@edk2.groups.io Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, Ray <ray.ni@intel.com> Subject: [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c Change IoLibFifo.c to IoLibFifoCc.c since the file is for Tdx and SEV in BaseIoLibIntrinsicSev. It's also to distinguish with a new incoming IoLibFifo.c for BaseIoLibIntrinsic. Signed-off-by: Dun Tan <dun.tan@intel.com> 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> --- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf | 2 +- MdePkg/Library/BaseIoLibIntrinsic/{IoLibFifo.c => IoLibFifoCc.c} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf index e1b8298ac4..8b62bd4e2a 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf @@ -45,7 +45,7 @@ IoLibMsc.c | MSFT IoLib.c IoLibInternalTdx.c - IoLibFifo.c + IoLibFifoCc.c X64/IoFifoSev.nasm [Packages] diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c similarity index 94% rename from MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c rename to MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c index 9a94bc6a05..0c85cf9426 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifoCc.c @@ -1,7 +1,7 @@ /** @file IoFifo read/write routines. - Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2021 - 2023, Intel Corporation. All rights + reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112103): https://edk2.groups.io/g/devel/message/112103 Mute This Topic: https://groups.io/mt/103009909/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 10+ messages in thread
[parent not found: <1795D4A7D7819C64.15940@groups.io>]
* Re: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic [not found] ` <1795D4A7D7819C64.15940@groups.io> @ 2023-12-06 9:26 ` duntan 2023-12-11 17:34 ` Michael D Kinney 0 siblings, 1 reply; 10+ messages in thread From: duntan @ 2023-12-06 9:26 UTC (permalink / raw) To: devel@edk2.groups.io, Tan, Dun Cc: Kinney, Michael D, Gao, Liming, Liu, Zhiguang, Ni, Ray Hi Mike and Liming, Could you please help to review this patch? Thanks, Dun -----Original Message----- From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan Sent: Thursday, November 9, 2023 10:50 AM To: devel@edk2.groups.io Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, Ray <ray.ni@intel.com> Subject: [edk2-devel] [PATCH 2/2] 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. Signed-off-by: Dun Tan <dun.tan@intel.com> 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> --- MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++-------- MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 ----------------------------------------------------------------------------------------------------------------------------------- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 ------------------------------------------------------------------------------------------------------------------------ 4 files changed, 222 insertions(+), 259 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf index aeb072ee95..b587e2cded 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf @@ -38,17 +38,11 @@ IoLibInternalTdxNull.c IoLibTdx.h -[Sources.IA32] +[Sources.IA32, Sources.X64] IoLibGcc.c | GCC IoLibMsc.c | MSFT IoLib.c - Ia32/IoFifo.nasm - -[Sources.X64] - IoLibGcc.c | GCC - IoLibMsc.c | MSFT - IoLib.c - X64/IoFifo.nasm + IoLibFifo.c [Sources.EBC] IoLibEbc.c diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm deleted file mode 100644 index a4ae1a0053..0000000000 --- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm +++ /dev/null @@ -1,131 +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 -; -;------------------------------------------------------------------------------ - - SECTION .text - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo8 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo8) -ASM_PFX(IoReadFifo8): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insb - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo16 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo16) -ASM_PFX(IoReadFifo16): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insw - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoReadFifo32 ( -; IN UINTN Port, -; IN UINTN Size, -; OUT VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoReadFifo32) -ASM_PFX(IoReadFifo32): - push edi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov edi, [esp + 16] -rep insd - pop edi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo8 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo8) -ASM_PFX(IoWriteFifo8): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsb - pop esi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo16 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo16) -ASM_PFX(IoWriteFifo16): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsw - pop esi - ret - -;------------------------------------------------------------------------------ -; VOID -; EFIAPI -; IoWriteFifo32 ( -; IN UINTN Port, -; IN UINTN Size, -; IN VOID *Buffer -; ); -;------------------------------------------------------------------------------ -global ASM_PFX(IoWriteFifo32) -ASM_PFX(IoWriteFifo32): - push esi - cld - mov dx, [esp + 8] - mov ecx, [esp + 12] - mov esi, [esp + 16] -rep outsd - pop esi - ret - diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c new file mode 100644 index 0000000000..bd1d372d0f --- /dev/null +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c @@ -0,0 +1,220 @@ +/** @file + IoFifo read/write routines. + + Copyright (c) 2021 - 2023, Intel Corporation. All rights + reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "BaseIoLibIntrinsicInternal.h" +#include <Uefi/UefiBaseType.h> + +/** + Reads an 8-bit I/O port fifo into a block of memory. + + Reads the 8-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is stored in the + provided Buffer. + + This function must guarantee that all I/O read and write operations + are serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead8 is invoked to read the I/O port fifo. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo8 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT8 *Buffer8; + + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + *Buffer8++ = IoRead8 (Port); + } +} + +/** + Writes a block of memory into an 8-bit I/O port fifo. + + Writes the 8-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is retrieved + from the provided Buffer. + + This function must guarantee that all I/O write and write operations + are serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite8 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo8 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT8 *Buffer8; + + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + IoWrite8 (Port, *Buffer8++); + } +} + +/** + Reads a 16-bit I/O port fifo into a block of memory. + + Reads the 16-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is stored in the + provided Buffer. + + This function must guarantee that all I/O read and write operations + are serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead16 is invoked to read data from the I/O port. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo16 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT16 *Buffer16; + + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + *Buffer16++ = IoRead16 (Port); + } +} + +/** + Writes a block of memory into a 16-bit I/O port fifo. + + Writes the 16-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is retrieved + from the provided Buffer. + + This function must guarantee that all I/O write and write operations + are serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite16 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo16 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT16 *Buffer16; + + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + IoWrite16 (Port, *Buffer16++); + } +} + +/** + Reads a 32-bit I/O port fifo into a block of memory. + + Reads the 32-bit I/O fifo port specified by Port. + The port is read Count times, and the read data is stored in the + provided Buffer. + + This function must guarantee that all I/O read and write operations + are serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoRead32 is invoked to read data from the I/O port. + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo32 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ) +{ + UINT32 *Buffer32; + + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + *Buffer32++ = IoRead32 (Port); + } +} + +/** + Writes a block of memory into a 32-bit I/O port fifo. + + Writes the 32-bit I/O fifo port specified by Port. + The port is written Count times, and the write data is retrieved + from the provided Buffer. + + This function must guarantee that all I/O write and write operations + are serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + In TDX a serial of TdIoWrite32 is invoked to write data to the I/O port. + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to retrieve the write data from. + +**/ +VOID +EFIAPI +IoWriteFifo32 ( + IN UINTN Port, + IN UINTN Count, + IN VOID *Buffer + ) +{ + UINT32 *Buffer32; + + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + IoWrite32 (Port, *Buffer32++); + } +} diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm deleted file mode 100644 index d459072f6e..0000000000 --- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm +++ /dev/null @@ -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 - -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112104): https://edk2.groups.io/g/devel/message/112104 Mute This Topic: https://groups.io/mt/103009916/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic 2023-12-06 9:26 ` [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic duntan @ 2023-12-11 17:34 ` Michael D Kinney 2023-12-11 21:12 ` Michael D Kinney 0 siblings, 1 reply; 10+ messages in thread From: Michael D Kinney @ 2023-12-11 17:34 UTC (permalink / raw) To: Tan, Dun, devel@edk2.groups.io Cc: Gao, Liming, Liu, Zhiguang, Ni, Ray, Kinney, Michael D Acked-by: Michael D Kinney <michael.d.kinney@intel.com> Mike > -----Original Message----- > From: Tan, Dun <dun.tan@intel.com> > Sent: Wednesday, December 6, 2023 1:26 AM > To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com> > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming > <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, > Ray <ray.ni@intel.com> > Subject: RE: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in > BaseIoLibIntrinsic > > Hi Mike and Liming, > > Could you please help to review this patch? > > Thanks, > Dun > > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan > Sent: Thursday, November 9, 2023 10:50 AM > To: devel@edk2.groups.io > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming > <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, > Ray <ray.ni@intel.com> > Subject: [edk2-devel] [PATCH 2/2] 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. > > Signed-off-by: Dun Tan <dun.tan@intel.com> > 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> > --- > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++------ > -- > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 -------- > ------------------------------------------------------------------------ > --------------------------------------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 220 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > ++++ > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 -------- > ------------------------------------------------------------------------ > ---------------------------------------- > 4 files changed, 222 insertions(+), 259 deletions(-) > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > index aeb072ee95..b587e2cded 100644 > --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > @@ -38,17 +38,11 @@ > IoLibInternalTdxNull.c > IoLibTdx.h > > -[Sources.IA32] > +[Sources.IA32, Sources.X64] > IoLibGcc.c | GCC > IoLibMsc.c | MSFT > IoLib.c > - Ia32/IoFifo.nasm > - > -[Sources.X64] > - IoLibGcc.c | GCC > - IoLibMsc.c | MSFT > - IoLib.c > - X64/IoFifo.nasm > + IoLibFifo.c > > [Sources.EBC] > IoLibEbc.c > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > deleted file mode 100644 > index a4ae1a0053..0000000000 > --- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > +++ /dev/null > @@ -1,131 +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 -; > -;---------------------------------------------------------------------- > -------- > - > - SECTION .text > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoReadFifo8 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; OUT VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoReadFifo8) > -ASM_PFX(IoReadFifo8): > - push edi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov edi, [esp + 16] > -rep insb > - pop edi > - ret > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoReadFifo16 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; OUT VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoReadFifo16) > -ASM_PFX(IoReadFifo16): > - push edi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov edi, [esp + 16] > -rep insw > - pop edi > - ret > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoReadFifo32 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; OUT VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoReadFifo32) > -ASM_PFX(IoReadFifo32): > - push edi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov edi, [esp + 16] > -rep insd > - pop edi > - ret > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoWriteFifo8 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; IN VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoWriteFifo8) > -ASM_PFX(IoWriteFifo8): > - push esi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov esi, [esp + 16] > -rep outsb > - pop esi > - ret > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoWriteFifo16 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; IN VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoWriteFifo16) > -ASM_PFX(IoWriteFifo16): > - push esi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov esi, [esp + 16] > -rep outsw > - pop esi > - ret > - > -;---------------------------------------------------------------------- > -------- > -; VOID > -; EFIAPI > -; IoWriteFifo32 ( > -; IN UINTN Port, > -; IN UINTN Size, > -; IN VOID *Buffer > -; ); > -;---------------------------------------------------------------------- > -------- > -global ASM_PFX(IoWriteFifo32) > -ASM_PFX(IoWriteFifo32): > - push esi > - cld > - mov dx, [esp + 8] > - mov ecx, [esp + 12] > - mov esi, [esp + 16] > -rep outsd > - pop esi > - ret > - > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > new file mode 100644 > index 0000000000..bd1d372d0f > --- /dev/null > +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > @@ -0,0 +1,220 @@ > +/** @file > + IoFifo read/write routines. > + > + Copyright (c) 2021 - 2023, Intel Corporation. All rights > + reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "BaseIoLibIntrinsicInternal.h" > +#include <Uefi/UefiBaseType.h> > + > +/** > + Reads an 8-bit I/O port fifo into a block of memory. > + > + Reads the 8-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is stored in the > + provided Buffer. > + > + This function must guarantee that all I/O read and write operations > + are serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoRead8 is invoked to read the I/O port fifo. > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo8 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + UINT8 *Buffer8; > + > + Buffer8 = (UINT8 *)Buffer; > + while (Count-- > 0) { > + *Buffer8++ = IoRead8 (Port); > + } > +} > + > +/** > + Writes a block of memory into an 8-bit I/O port fifo. > + > + Writes the 8-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is retrieved > + from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations > + are serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoWrite8 is invoked to write data to the I/O > port. > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo8 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + UINT8 *Buffer8; > + > + Buffer8 = (UINT8 *)Buffer; > + while (Count-- > 0) { > + IoWrite8 (Port, *Buffer8++); > + } > +} > + > +/** > + Reads a 16-bit I/O port fifo into a block of memory. > + > + Reads the 16-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is stored in the > + provided Buffer. > + > + This function must guarantee that all I/O read and write operations > + are serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoRead16 is invoked to read data from the I/O > port. > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo16 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + UINT16 *Buffer16; > + > + Buffer16 = (UINT16 *)Buffer; > + while (Count-- > 0) { > + *Buffer16++ = IoRead16 (Port); > + } > +} > + > +/** > + Writes a block of memory into a 16-bit I/O port fifo. > + > + Writes the 16-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is retrieved > + from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations > + are serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoWrite16 is invoked to write data to the I/O > port. > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo16 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + UINT16 *Buffer16; > + > + Buffer16 = (UINT16 *)Buffer; > + while (Count-- > 0) { > + IoWrite16 (Port, *Buffer16++); > + } > +} > + > +/** > + Reads a 32-bit I/O port fifo into a block of memory. > + > + Reads the 32-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is stored in the > + provided Buffer. > + > + This function must guarantee that all I/O read and write operations > + are serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoRead32 is invoked to read data from the I/O > port. > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo32 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + UINT32 *Buffer32; > + > + Buffer32 = (UINT32 *)Buffer; > + while (Count-- > 0) { > + *Buffer32++ = IoRead32 (Port); > + } > +} > + > +/** > + Writes a block of memory into a 32-bit I/O port fifo. > + > + Writes the 32-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is retrieved > + from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations > + are serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + In TDX a serial of TdIoWrite32 is invoked to write data to the I/O > port. > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo32 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + UINT32 *Buffer32; > + > + Buffer32 = (UINT32 *)Buffer; > + while (Count-- > 0) { > + IoWrite32 (Port, *Buffer32++); > + } > +} > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > deleted file mode 100644 > index d459072f6e..0000000000 > --- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > +++ /dev/null > @@ -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 > - > -- > 2.31.1.windows.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112324): https://edk2.groups.io/g/devel/message/112324 Mute This Topic: https://groups.io/mt/103009916/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic 2023-12-11 17:34 ` Michael D Kinney @ 2023-12-11 21:12 ` Michael D Kinney 0 siblings, 0 replies; 10+ messages in thread From: Michael D Kinney @ 2023-12-11 21:12 UTC (permalink / raw) To: Tan, Dun, devel@edk2.groups.io Cc: Gao, Liming, Liu, Zhiguang, Ni, Ray, Kinney, Michael D Merged: https://github.com/tianocore/edk2/pull/5138 > -----Original Message----- > From: Kinney, Michael D <michael.d.kinney@intel.com> > Sent: Monday, December 11, 2023 9:34 AM > To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io > Cc: Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang > <zhiguang.liu@intel.com>; Ni, Ray <ray.ni@intel.com>; Kinney, Michael D > <michael.d.kinney@intel.com> > Subject: RE: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in > BaseIoLibIntrinsic > > Acked-by: Michael D Kinney <michael.d.kinney@intel.com> > > Mike > > > -----Original Message----- > > From: Tan, Dun <dun.tan@intel.com> > > Sent: Wednesday, December 6, 2023 1:26 AM > > To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com> > > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming > > <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; > Ni, > > Ray <ray.ni@intel.com> > > Subject: RE: [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in > > BaseIoLibIntrinsic > > > > Hi Mike and Liming, > > > > Could you please help to review this patch? > > > > Thanks, > > Dun > > > > -----Original Message----- > > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan > > Sent: Thursday, November 9, 2023 10:50 AM > > To: devel@edk2.groups.io > > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming > > <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; > Ni, > > Ray <ray.ni@intel.com> > > Subject: [edk2-devel] [PATCH 2/2] 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. > > > > Signed-off-by: Dun Tan <dun.tan@intel.com> > > 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> > > --- > > MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 ++---- > -- > > -- > > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm | 131 ------ > -- > > ---------------------------------------------------------------------- > -- > > --------------------------------------------------- > > MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 220 > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > ++++ > > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm | 120 ------ > -- > > ---------------------------------------------------------------------- > -- > > ---------------------------------------- > > 4 files changed, 222 insertions(+), 259 deletions(-) > > > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > > b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > > index aeb072ee95..b587e2cded 100644 > > --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > > +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > > @@ -38,17 +38,11 @@ > > IoLibInternalTdxNull.c > > IoLibTdx.h > > > > -[Sources.IA32] > > +[Sources.IA32, Sources.X64] > > IoLibGcc.c | GCC > > IoLibMsc.c | MSFT > > IoLib.c > > - Ia32/IoFifo.nasm > > - > > -[Sources.X64] > > - IoLibGcc.c | GCC > > - IoLibMsc.c | MSFT > > - IoLib.c > > - X64/IoFifo.nasm > > + IoLibFifo.c > > > > [Sources.EBC] > > IoLibEbc.c > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > > b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > > deleted file mode 100644 > > index a4ae1a0053..0000000000 > > --- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm > > +++ /dev/null > > @@ -1,131 +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 -; > > -;-------------------------------------------------------------------- > -- > > -------- > > - > > - SECTION .text > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoReadFifo8 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; OUT VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoReadFifo8) > > -ASM_PFX(IoReadFifo8): > > - push edi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov edi, [esp + 16] > > -rep insb > > - pop edi > > - ret > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoReadFifo16 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; OUT VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoReadFifo16) > > -ASM_PFX(IoReadFifo16): > > - push edi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov edi, [esp + 16] > > -rep insw > > - pop edi > > - ret > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoReadFifo32 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; OUT VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoReadFifo32) > > -ASM_PFX(IoReadFifo32): > > - push edi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov edi, [esp + 16] > > -rep insd > > - pop edi > > - ret > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoWriteFifo8 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; IN VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoWriteFifo8) > > -ASM_PFX(IoWriteFifo8): > > - push esi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov esi, [esp + 16] > > -rep outsb > > - pop esi > > - ret > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoWriteFifo16 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; IN VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoWriteFifo16) > > -ASM_PFX(IoWriteFifo16): > > - push esi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov esi, [esp + 16] > > -rep outsw > > - pop esi > > - ret > > - > > -;-------------------------------------------------------------------- > -- > > -------- > > -; VOID > > -; EFIAPI > > -; IoWriteFifo32 ( > > -; IN UINTN Port, > > -; IN UINTN Size, > > -; IN VOID *Buffer > > -; ); > > -;-------------------------------------------------------------------- > -- > > -------- > > -global ASM_PFX(IoWriteFifo32) > > -ASM_PFX(IoWriteFifo32): > > - push esi > > - cld > > - mov dx, [esp + 8] > > - mov ecx, [esp + 12] > > - mov esi, [esp + 16] > > -rep outsd > > - pop esi > > - ret > > - > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > > b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > > new file mode 100644 > > index 0000000000..bd1d372d0f > > --- /dev/null > > +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c > > @@ -0,0 +1,220 @@ > > +/** @file > > + IoFifo read/write routines. > > + > > + Copyright (c) 2021 - 2023, Intel Corporation. All rights > > + reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "BaseIoLibIntrinsicInternal.h" > > +#include <Uefi/UefiBaseType.h> > > + > > +/** > > + Reads an 8-bit I/O port fifo into a block of memory. > > + > > + Reads the 8-bit I/O fifo port specified by Port. > > + The port is read Count times, and the read data is stored in the > > + provided Buffer. > > + > > + This function must guarantee that all I/O read and write operations > > + are serialized. > > + > > + If 8-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoRead8 is invoked to read the I/O port fifo. > > + > > + @param Port The I/O port to read. > > + @param Count The number of times to read I/O port. > > + @param Buffer The buffer to store the read data into. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoReadFifo8 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + OUT VOID *Buffer > > + ) > > +{ > > + UINT8 *Buffer8; > > + > > + Buffer8 = (UINT8 *)Buffer; > > + while (Count-- > 0) { > > + *Buffer8++ = IoRead8 (Port); > > + } > > +} > > + > > +/** > > + Writes a block of memory into an 8-bit I/O port fifo. > > + > > + Writes the 8-bit I/O fifo port specified by Port. > > + The port is written Count times, and the write data is retrieved > > + from the provided Buffer. > > + > > + This function must guarantee that all I/O write and write > operations > > + are serialized. > > + > > + If 8-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoWrite8 is invoked to write data to the I/O > > port. > > + > > + @param Port The I/O port to write. > > + @param Count The number of times to write I/O port. > > + @param Buffer The buffer to retrieve the write data from. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoWriteFifo8 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + IN VOID *Buffer > > + ) > > +{ > > + UINT8 *Buffer8; > > + > > + Buffer8 = (UINT8 *)Buffer; > > + while (Count-- > 0) { > > + IoWrite8 (Port, *Buffer8++); > > + } > > +} > > + > > +/** > > + Reads a 16-bit I/O port fifo into a block of memory. > > + > > + Reads the 16-bit I/O fifo port specified by Port. > > + The port is read Count times, and the read data is stored in the > > + provided Buffer. > > + > > + This function must guarantee that all I/O read and write operations > > + are serialized. > > + > > + If 16-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoRead16 is invoked to read data from the I/O > > port. > > + > > + @param Port The I/O port to read. > > + @param Count The number of times to read I/O port. > > + @param Buffer The buffer to store the read data into. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoReadFifo16 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + OUT VOID *Buffer > > + ) > > +{ > > + UINT16 *Buffer16; > > + > > + Buffer16 = (UINT16 *)Buffer; > > + while (Count-- > 0) { > > + *Buffer16++ = IoRead16 (Port); > > + } > > +} > > + > > +/** > > + Writes a block of memory into a 16-bit I/O port fifo. > > + > > + Writes the 16-bit I/O fifo port specified by Port. > > + The port is written Count times, and the write data is retrieved > > + from the provided Buffer. > > + > > + This function must guarantee that all I/O write and write > operations > > + are serialized. > > + > > + If 16-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoWrite16 is invoked to write data to the I/O > > port. > > + > > + @param Port The I/O port to write. > > + @param Count The number of times to write I/O port. > > + @param Buffer The buffer to retrieve the write data from. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoWriteFifo16 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + IN VOID *Buffer > > + ) > > +{ > > + UINT16 *Buffer16; > > + > > + Buffer16 = (UINT16 *)Buffer; > > + while (Count-- > 0) { > > + IoWrite16 (Port, *Buffer16++); > > + } > > +} > > + > > +/** > > + Reads a 32-bit I/O port fifo into a block of memory. > > + > > + Reads the 32-bit I/O fifo port specified by Port. > > + The port is read Count times, and the read data is stored in the > > + provided Buffer. > > + > > + This function must guarantee that all I/O read and write operations > > + are serialized. > > + > > + If 32-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoRead32 is invoked to read data from the I/O > > port. > > + > > + @param Port The I/O port to read. > > + @param Count The number of times to read I/O port. > > + @param Buffer The buffer to store the read data into. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoReadFifo32 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + OUT VOID *Buffer > > + ) > > +{ > > + UINT32 *Buffer32; > > + > > + Buffer32 = (UINT32 *)Buffer; > > + while (Count-- > 0) { > > + *Buffer32++ = IoRead32 (Port); > > + } > > +} > > + > > +/** > > + Writes a block of memory into a 32-bit I/O port fifo. > > + > > + Writes the 32-bit I/O fifo port specified by Port. > > + The port is written Count times, and the write data is retrieved > > + from the provided Buffer. > > + > > + This function must guarantee that all I/O write and write > operations > > + are serialized. > > + > > + If 32-bit I/O port operations are not supported, then ASSERT(). > > + > > + In TDX a serial of TdIoWrite32 is invoked to write data to the I/O > > port. > > + > > + @param Port The I/O port to write. > > + @param Count The number of times to write I/O port. > > + @param Buffer The buffer to retrieve the write data from. > > + > > +**/ > > +VOID > > +EFIAPI > > +IoWriteFifo32 ( > > + IN UINTN Port, > > + IN UINTN Count, > > + IN VOID *Buffer > > + ) > > +{ > > + UINT32 *Buffer32; > > + > > + Buffer32 = (UINT32 *)Buffer; > > + while (Count-- > 0) { > > + IoWrite32 (Port, *Buffer32++); > > + } > > +} > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > > b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > > deleted file mode 100644 > > index d459072f6e..0000000000 > > --- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm > > +++ /dev/null > > @@ -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 > > - > > -- > > 2.31.1.windows.1 > > > > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112327): https://edk2.groups.io/g/devel/message/112327 Mute This Topic: https://groups.io/mt/103009916/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-12-11 21:12 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-11-09 2:49 [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c duntan 2023-11-09 2:49 ` [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic duntan 2023-11-09 5:56 ` [edk2-devel] [PATCH 0/2] Remove string IO instruction in BaseIoLibIntrinsic.inf Ni, Ray 2023-11-13 13:07 ` Laszlo Ersek 2023-11-27 10:14 ` duntan [not found] ` <1795D4A7BE9E02F3.6123@groups.io> 2023-12-06 9:25 ` [edk2-devel] [PATCH 1/2] MdePkg: Change IoLibFifo.c to IoLibFifoCc.c duntan [not found] ` <1795D4A7D7819C64.15940@groups.io> 2023-12-06 9:26 ` [edk2-devel] [PATCH 2/2] MdePkg:simplify Fifo API in BaseIoLibIntrinsic duntan 2023-12-11 17:34 ` Michael D Kinney 2023-12-11 21:12 ` Michael D Kinney
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox