]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseIoLibIntrinsic/IoLibTdx.h
MdePkg: Add helper functions for Tdx guest in BaseIoLibIntrinsic
[mirror_edk2.git] / MdePkg / Library / BaseIoLibIntrinsic / IoLibTdx.h
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibTdx.h b/MdePkg/Library/BaseIoLibIntrinsic/IoLibTdx.h
new file mode 100644 (file)
index 0000000..ab2fa77
--- /dev/null
@@ -0,0 +1,410 @@
+/** @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