Simplify IoRead/WriteFifo implement in IoLibFifo.c by repeatedly calling IoRead/Write API in C code. This can avoid calling assembly code to use string I/O instructions and avoid checking if sev feature is enabled. Then the code flow is simplified.
Signed-off-by: Dun Tan <dun....@intel.com> Cc: Michael D Kinney <michael.d.kin...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang....@intel.com> Cc: Ray Ni <ray...@intel.com> --- MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c index 9a94bc6a05..adce1040f6 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.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 **/ @@ -39,10 +39,15 @@ IoReadFifo8 ( OUT VOID *Buffer ) { + UINT8 *Buffer8; + if (IsTdxGuest ()) { TdIoReadFifo8 (Port, Count, Buffer); } else { - SevIoReadFifo8 (Port, Count, Buffer); + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + *Buffer8++ = IoRead8 (Port); + } } } @@ -73,10 +78,15 @@ IoWriteFifo8 ( IN VOID *Buffer ) { + UINT8 *Buffer8; + if (IsTdxGuest ()) { TdIoWriteFifo8 (Port, Count, Buffer); } else { - SevIoWriteFifo8 (Port, Count, Buffer); + Buffer8 = (UINT8 *)Buffer; + while (Count-- > 0) { + IoWrite8 (Port, *Buffer8++); + } } } @@ -107,10 +117,15 @@ IoReadFifo16 ( OUT VOID *Buffer ) { + UINT16 *Buffer16; + if (IsTdxGuest ()) { TdIoReadFifo16 (Port, Count, Buffer); } else { - SevIoReadFifo16 (Port, Count, Buffer); + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + *Buffer16++ = IoRead16 (Port); + } } } @@ -141,10 +156,15 @@ IoWriteFifo16 ( IN VOID *Buffer ) { + UINT16 *Buffer16; + if (IsTdxGuest ()) { TdIoWriteFifo16 (Port, Count, Buffer); } else { - SevIoWriteFifo16 (Port, Count, Buffer); + Buffer16 = (UINT16 *)Buffer; + while (Count-- > 0) { + IoWrite16 (Port, *Buffer16++); + } } } @@ -175,10 +195,15 @@ IoReadFifo32 ( OUT VOID *Buffer ) { + UINT32 *Buffer32; + if (IsTdxGuest ()) { TdIoReadFifo32 (Port, Count, Buffer); } else { - SevIoReadFifo32 (Port, Count, Buffer); + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + *Buffer32++ = IoRead32 (Port); + } } } @@ -209,9 +234,14 @@ IoWriteFifo32 ( IN VOID *Buffer ) { + UINT32 *Buffer32; + if (IsTdxGuest ()) { TdIoWriteFifo32 (Port, Count, Buffer); } else { - SevIoWriteFifo32 (Port, Count, Buffer); + Buffer32 = (UINT32 *)Buffer; + while (Count-- > 0) { + IoWrite32 (Port, *Buffer32++); + } } } -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110184): https://edk2.groups.io/g/devel/message/110184 Mute This Topic: https://groups.io/mt/102215664/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-