**/\r
\r
#include "BaseIoLibIntrinsicInternal.h"\r
+#include "IoLibTdx.h"\r
\r
/**\r
Reads a 64-bit I/O port.\r
\r
If 8-bit MMIO register operations are not supported, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
@param Address The MMIO register to read.\r
\r
@return The value read.\r
Flag = FilterBeforeMmIoRead (FilterWidth8, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- Value = *(volatile UINT8 *)Address;\r
+\r
+ if (IsTdxGuest ()) {\r
+ Value = TdMmioRead8 (Address);\r
+ } else {\r
+ Value = *(volatile UINT8 *)Address;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
\r
If 8-bit MMIO register operations are not supported, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to write MMIO registers.\r
+\r
@param Address The MMIO register to write.\r
@param Value The value to write to the MMIO register.\r
\r
Flag = FilterBeforeMmIoWrite (FilterWidth8, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- *(volatile UINT8 *)Address = Value;\r
+\r
+ if (IsTdxGuest ()) {\r
+ TdMmioWrite8 (Address, Value);\r
+ } else {\r
+ *(volatile UINT8 *)Address = Value;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 16-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
@param Address The MMIO register to read.\r
\r
@return The value read.\r
Flag = FilterBeforeMmIoRead (FilterWidth16, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- Value = *(volatile UINT16 *)Address;\r
+\r
+ if (IsTdxGuest ()) {\r
+ Value = TdMmioRead16 (Address);\r
+ } else {\r
+ Value = *(volatile UINT16 *)Address;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 16-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to write MMIO registers.\r
+\r
@param Address The MMIO register to write.\r
@param Value The value to write to the MMIO register.\r
\r
Flag = FilterBeforeMmIoWrite (FilterWidth16, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- *(volatile UINT16 *)Address = Value;\r
+\r
+ if (IsTdxGuest ()) {\r
+ TdMmioWrite16 (Address, Value);\r
+ } else {\r
+ *(volatile UINT16 *)Address = Value;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 32-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 32-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
@param Address The MMIO register to read.\r
\r
@return The value read.\r
Flag = FilterBeforeMmIoRead (FilterWidth32, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- Value = *(volatile UINT32 *)Address;\r
+\r
+ if (IsTdxGuest ()) {\r
+ Value = TdMmioRead32 (Address);\r
+ } else {\r
+ Value = *(volatile UINT32 *)Address;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 32-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 32-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to write MMIO registers.\r
+\r
@param Address The MMIO register to write.\r
@param Value The value to write to the MMIO register.\r
\r
Flag = FilterBeforeMmIoWrite (FilterWidth32, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- *(volatile UINT32 *)Address = Value;\r
+\r
+ if (IsTdxGuest ()) {\r
+ TdMmioWrite32 (Address, Value);\r
+ } else {\r
+ *(volatile UINT32 *)Address = Value;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 64-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 64-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
@param Address The MMIO register to read.\r
\r
@return The value read.\r
Flag = FilterBeforeMmIoRead (FilterWidth64, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- Value = *(volatile UINT64 *)Address;\r
+\r
+ if (IsTdxGuest ()) {\r
+ Value = TdMmioRead64 (Address);\r
+ } else {\r
+ Value = *(volatile UINT64 *)Address;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r
If 64-bit MMIO register operations are not supported, then ASSERT().\r
If Address is not aligned on a 64-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_MMIO is invoked to write MMIO registers.\r
+\r
@param Address The MMIO register to write.\r
@param Value The value to write to the MMIO register.\r
\r
Flag = FilterBeforeMmIoWrite (FilterWidth64, Address, &Value);\r
if (Flag) {\r
MemoryFence ();\r
- *(volatile UINT64 *)Address = Value;\r
+\r
+ if (IsTdxGuest ()) {\r
+ TdMmioWrite64 (Address, Value);\r
+ } else {\r
+ *(volatile UINT64 *)Address = Value;\r
+ }\r
+\r
MemoryFence ();\r
}\r
\r