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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to