**/\r
\r
#include "BaseIoLibIntrinsicInternal.h"\r
+#include "IoLibTdx.h"\r
\r
//\r
// Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics.\r
\r
If 8-bit I/O port operations are not supported, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to read I/O port.\r
+\r
@param Port The I/O port to read.\r
\r
@return The value read.\r
\r
Flag = FilterBeforeIoRead (FilterWidth8, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- Value = (UINT8)_inp ((UINT16)Port);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ Value = TdIoRead8 (Port);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ Value = (UINT8)_inp ((UINT16)Port);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterAfterIoRead (FilterWidth8, Port, &Value);\r
\r
If 8-bit I/O port operations are not supported, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to write I/O port.\r
+\r
@param Port The I/O port to write.\r
@param Value The value to write to the I/O port.\r
\r
\r
Flag = FilterBeforeIoWrite (FilterWidth8, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- (UINT8)_outp ((UINT16)Port, Value);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ TdIoWrite8 (Port, Value);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ (UINT8)_outp ((UINT16)Port, Value);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterAfterIoWrite (FilterWidth8, Port, &Value);\r
If 16-bit I/O port operations are not supported, then ASSERT().\r
If Port is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to read I/O port.\r
+\r
@param Port The I/O port to read.\r
\r
@return The value read.\r
\r
Flag = FilterBeforeIoRead (FilterWidth16, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- Value = _inpw ((UINT16)Port);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ Value = TdIoRead16 (Port);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ Value = _inpw ((UINT16)Port);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterBeforeIoRead (FilterWidth16, Port, &Value);\r
If 16-bit I/O port operations are not supported, then ASSERT().\r
If Port is not aligned on a 16-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to write I/O port.\r
+\r
@param Port The I/O port to write.\r
@param Value The value to write to the I/O port.\r
\r
\r
Flag = FilterBeforeIoWrite (FilterWidth16, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- _outpw ((UINT16)Port, Value);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ TdIoWrite16 (Port, Value);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ _outpw ((UINT16)Port, Value);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterAfterIoWrite (FilterWidth16, Port, &Value);\r
If 32-bit I/O port operations are not supported, then ASSERT().\r
If Port is not aligned on a 32-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to read I/O port.\r
+\r
@param Port The I/O port to read.\r
\r
@return The value read.\r
\r
Flag = FilterBeforeIoRead (FilterWidth32, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- Value = _inpd ((UINT16)Port);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ Value = TdIoRead32 (Port);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ Value = _inpd ((UINT16)Port);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterAfterIoRead (FilterWidth32, Port, &Value);\r
If 32-bit I/O port operations are not supported, then ASSERT().\r
If Port is not aligned on a 32-bit boundary, then ASSERT().\r
\r
+ For Td guest TDVMCALL_IO is invoked to write I/O port.\r
+\r
@param Port The I/O port to write.\r
@param Value The value to write to the I/O port.\r
\r
\r
Flag = FilterBeforeIoWrite (FilterWidth32, Port, &Value);\r
if (Flag) {\r
- _ReadWriteBarrier ();\r
- _outpd ((UINT16)Port, Value);\r
- _ReadWriteBarrier ();\r
+ if (IsTdxGuest ()) {\r
+ TdIoWrite32 (Port, Value);\r
+ } else {\r
+ _ReadWriteBarrier ();\r
+ _outpd ((UINT16)Port, Value);\r
+ _ReadWriteBarrier ();\r
+ }\r
}\r
\r
FilterAfterIoWrite (FilterWidth32, Port, &Value);\r