--- /dev/null
+/** @file\r
+ Header file for Tdx IO library.\r
+\r
+ Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+**/\r
+\r
+#ifndef IOLIB_TDX_H_\r
+#define IOLIB_TDX_H_\r
+\r
+/**\r
+ Check if it is Tdx guest.\r
+\r
+ @return TRUE It is Tdx guest\r
+ @return FALSE It is not Tdx guest\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsTdxGuest (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Reads an 8-bit I/O port.\r
+\r
+ 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
+**/\r
+UINT8\r
+EFIAPI\r
+TdIoRead8 (\r
+ IN UINTN Port\r
+ );\r
+\r
+/**\r
+ Reads a 16-bit I/O port.\r
+\r
+ TDVMCALL_IO is invoked to write I/O port.\r
+\r
+ @param Port The I/O port to read.\r
+\r
+ @return The value read.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+TdIoRead16 (\r
+ IN UINTN Port\r
+ );\r
+\r
+/**\r
+ Reads a 32-bit I/O port.\r
+\r
+ 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
+**/\r
+UINT32\r
+EFIAPI\r
+TdIoRead32 (\r
+ IN UINTN Port\r
+ );\r
+\r
+/**\r
+ Writes an 8-bit I/O port.\r
+\r
+ 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
+ @return The value written the I/O port.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+TdIoWrite8 (\r
+ IN UINTN Port,\r
+ IN UINT8 Value\r
+ );\r
+\r
+/**\r
+ Writes a 16-bit I/O port.\r
+\r
+ 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
+ @return The value written the I/O port.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+TdIoWrite16 (\r
+ IN UINTN Port,\r
+ IN UINT16 Value\r
+ );\r
+\r
+/**\r
+ Writes a 32-bit I/O port.\r
+\r
+ 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
+ @return The value written the I/O port.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+TdIoWrite32 (\r
+ IN UINTN Port,\r
+ IN UINT32 Value\r
+ );\r
+\r
+/**\r
+ Reads an 8-bit MMIO register.\r
+\r
+ TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
+ @param Address The MMIO register to read.\r
+\r
+ @return The value read.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+TdMmioRead8 (\r
+ IN UINTN Address\r
+ );\r
+\r
+/**\r
+ Writes an 8-bit MMIO register.\r
+\r
+ TDVMCALL_MMIO is invoked to read write registers.\r
+\r
+ @param Address The MMIO register to write.\r
+ @param Value The value to write to the MMIO register.\r
+\r
+ @return Value.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+TdMmioWrite8 (\r
+ IN UINTN Address,\r
+ IN UINT8 Val\r
+ );\r
+\r
+/**\r
+ Reads a 16-bit MMIO register.\r
+\r
+ TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
+ @param Address The MMIO register to read.\r
+\r
+ @return The value read.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+TdMmioRead16 (\r
+ IN UINTN Address\r
+ );\r
+\r
+/**\r
+ Writes a 16-bit MMIO register.\r
+\r
+ 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
+ @return Value.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+TdMmioWrite16 (\r
+ IN UINTN Address,\r
+ IN UINT16 Val\r
+ );\r
+\r
+/**\r
+ Reads a 32-bit MMIO register.\r
+\r
+ TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
+ @param Address The MMIO register to read.\r
+\r
+ @return The value read.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+TdMmioRead32 (\r
+ IN UINTN Address\r
+ );\r
+\r
+/**\r
+ Writes a 32-bit MMIO register.\r
+\r
+ 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
+ @return Value.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+TdMmioWrite32 (\r
+ IN UINTN Address,\r
+ IN UINT32 Val\r
+ );\r
+\r
+/**\r
+ Reads a 64-bit MMIO register.\r
+\r
+ TDVMCALL_MMIO is invoked to read MMIO registers.\r
+\r
+ @param Address The MMIO register to read.\r
+\r
+ @return The value read.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+TdMmioRead64 (\r
+ IN UINTN Address\r
+ );\r
+\r
+/**\r
+ Writes a 64-bit MMIO register.\r
+\r
+ 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
+**/\r
+UINT64\r
+EFIAPI\r
+TdMmioWrite64 (\r
+ IN UINTN Address,\r
+ IN UINT64 Value\r
+ );\r
+\r
+/**\r
+ Reads an 8-bit I/O port fifo into a block of memory in Tdx.\r
+\r
+ Reads the 8-bit I/O fifo port specified by Port.\r
+ The port is read Count times, and the read data is\r
+ stored in the provided Buffer.\r
+\r
+ This function must guarantee that all I/O read and write operations are\r
+ serialized.\r
+\r
+ If 8-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to read.\r
+ @param Count The number of times to read I/O port.\r
+ @param Buffer The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoReadFifo8 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ OUT VOID *Buffer\r
+ );\r
+\r
+/**\r
+ Writes a block of memory into an 8-bit I/O port fifo in Tdx.\r
+\r
+ Writes the 8-bit I/O fifo port specified by Port.\r
+ The port is written Count times, and the write data is\r
+ retrieved from the provided Buffer.\r
+\r
+ This function must guarantee that all I/O write and write operations are\r
+ serialized.\r
+\r
+ If 8-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to write.\r
+ @param Count The number of times to write I/O port.\r
+ @param Buffer The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoWriteFifo8 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ IN VOID *Buffer\r
+ );\r
+\r
+/**\r
+ Reads a 16-bit I/O port fifo into a block of memory in Tdx.\r
+\r
+ Reads the 16-bit I/O fifo port specified by Port.\r
+ The port is read Count times, and the read data is\r
+ stored in the provided Buffer.\r
+\r
+ This function must guarantee that all I/O read and write operations are\r
+ serialized.\r
+\r
+ If 16-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to read.\r
+ @param Count The number of times to read I/O port.\r
+ @param Buffer The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoReadFifo16 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ OUT VOID *Buffer\r
+ );\r
+\r
+/**\r
+ Writes a block of memory into a 16-bit I/O port fifo in Tdx.\r
+\r
+ Writes the 16-bit I/O fifo port specified by Port.\r
+ The port is written Count times, and the write data is\r
+ retrieved from the provided Buffer.\r
+\r
+ This function must guarantee that all I/O write and write operations are\r
+ serialized.\r
+\r
+ If 16-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to write.\r
+ @param Count The number of times to write I/O port.\r
+ @param Buffer The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoWriteFifo16 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ IN VOID *Buffer\r
+ );\r
+\r
+/**\r
+ Reads a 32-bit I/O port fifo into a block of memory in Tdx.\r
+\r
+ Reads the 32-bit I/O fifo port specified by Port.\r
+ The port is read Count times, and the read data is\r
+ stored in the provided Buffer.\r
+\r
+ This function must guarantee that all I/O read and write operations are\r
+ serialized.\r
+\r
+ If 32-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to read.\r
+ @param Count The number of times to read I/O port.\r
+ @param Buffer The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoReadFifo32 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ OUT VOID *Buffer\r
+ );\r
+\r
+/**\r
+ Writes a block of memory into a 32-bit I/O port fifo in Tdx.\r
+\r
+ Writes the 32-bit I/O fifo port specified by Port.\r
+ The port is written Count times, and the write data is\r
+ retrieved from the provided Buffer.\r
+\r
+ This function must guarantee that all I/O write and write operations are\r
+ serialized.\r
+\r
+ If 32-bit I/O port operations are not supported, then ASSERT().\r
+\r
+ @param Port The I/O port to write.\r
+ @param Count The number of times to write I/O port.\r
+ @param Buffer The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+TdIoWriteFifo32 (\r
+ IN UINTN Port,\r
+ IN UINTN Count,\r
+ IN VOID *Buffer\r
+ );\r
+\r
+#endif\r