On Mon, Oct 28, 2019 at 09:58:47 +0800, Abner Chang wrote: > RISC-V MMIO library instance.
Need to remember to fix subject and description. Something like "MdePkg/BaseIoLibIntrinsic: rename IoLibArm.c => IoLibNoIo.c" and "IoLibArm.c in fact implements a generic Mmio-only (and ANSI C compliant), so rename it to better reflect this." > > Signed-off-by: Abner Chang <abner.ch...@hpe.com> > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Cc: Leif Lindholm <leif.lindh...@linaro.org> > Cc: Gilbert Chen <gilbert.c...@hpe.com> > --- > .../BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 12 +- > MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c | 593 > --------------------- > MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c | 593 > +++++++++++++++++++++ > 3 files changed, 601 insertions(+), 597 deletions(-) > delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c > create mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c > > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > index 457cce9..db349c2 100644 > --- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > +++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > @@ -4,11 +4,12 @@ > # I/O Library that uses compiler intrinsics to perform IN and OUT > instructions > # for IA-32 and x64. On IPF, I/O port requests are translated into MMIO > requests. > # MMIO requests are forwarded directly to memory. For EBC, I/O port > requests > -# ASSERT(). > +# ASSERT(). For ARM and RISC-V, I/O library only provides non I/O read and > write. The ARM and RISC-V bit is beside the point, please drop that and start with "I/O library..." / Leif > # > # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> > # Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> > # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> > +# Portinos Copyright (c) 2016, Hewlett Packard Enterprise Development LP. > All rights reserved.<BR> > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -25,7 +26,7 @@ > > > # > -# VALID_ARCHITECTURES = IA32 X64 EBC ARM AARCH64 > +# VALID_ARCHITECTURES = IA32 X64 EBC ARM AARCH64 RISCV64 > # > > [Sources] > @@ -50,10 +51,13 @@ > IoLib.c > > [Sources.ARM] > - IoLibArm.c > + IoLibNoIo.c > > [Sources.AARCH64] > - IoLibArm.c > + IoLibNoIo.c > + > +[Sources.RISCV64] > + IoLibNoIo.c > > [Packages] > MdePkg/MdePkg.dec > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c > b/MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c > deleted file mode 100644 > index c6b8224..0000000 > --- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c > +++ /dev/null > @@ -1,593 +0,0 @@ > -/** @file > - I/O Library for ARM. > - > - Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > - Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> > - Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> > - > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > - > -// > -// Include common header file for this module. > -// > -#include "BaseIoLibIntrinsicInternal.h" > - > -/** > - Reads an 8-bit I/O port. > - > - Reads the 8-bit I/O port specified by Port. The 8-bit read value is > returned. > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 8-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - > - @return The value read. > - > -**/ > -UINT8 > -EFIAPI > -IoRead8 ( > - IN UINTN Port > - ) > -{ > - ASSERT (FALSE); > - return 0; > -} > - > -/** > - Writes an 8-bit I/O port. > - > - Writes the 8-bit I/O port specified by Port with the value specified by > Value > - and returns Value. This function must guarantee that all I/O read and write > - operations are serialized. > - > - If 8-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Value The value to write to the I/O port. > - > - @return The value written the I/O port. > - > -**/ > -UINT8 > -EFIAPI > -IoWrite8 ( > - IN UINTN Port, > - IN UINT8 Value > - ) > -{ > - ASSERT (FALSE); > - return Value; > -} > - > -/** > - Reads a 16-bit I/O port. > - > - Reads the 16-bit I/O port specified by Port. The 16-bit read value is > returned. > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 16-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - > - @return The value read. > - > -**/ > -UINT16 > -EFIAPI > -IoRead16 ( > - IN UINTN Port > - ) > -{ > - ASSERT (FALSE); > - return 0; > -} > - > -/** > - Writes a 16-bit I/O port. > - > - Writes the 16-bit I/O port specified by Port with the value specified by > Value > - and returns Value. This function must guarantee that all I/O read and write > - operations are serialized. > - > - If 16-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Value The value to write to the I/O port. > - > - @return The value written the I/O port. > - > -**/ > -UINT16 > -EFIAPI > -IoWrite16 ( > - IN UINTN Port, > - IN UINT16 Value > - ) > -{ > - ASSERT (FALSE); > - return Value; > -} > - > -/** > - Reads a 32-bit I/O port. > - > - Reads the 32-bit I/O port specified by Port. The 32-bit read value is > returned. > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 32-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - > - @return The value read. > - > -**/ > -UINT32 > -EFIAPI > -IoRead32 ( > - IN UINTN Port > - ) > -{ > - ASSERT (FALSE); > - return 0; > -} > - > -/** > - Writes a 32-bit I/O port. > - > - Writes the 32-bit I/O port specified by Port with the value specified by > Value > - and returns Value. This function must guarantee that all I/O read and write > - operations are serialized. > - > - If 32-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Value The value to write to the I/O port. > - > - @return The value written the I/O port. > - > -**/ > -UINT32 > -EFIAPI > -IoWrite32 ( > - IN UINTN Port, > - IN UINT32 Value > - ) > -{ > - ASSERT (FALSE); > - return Value; > -} > - > -/** > - Reads a 64-bit I/O port. > - > - Reads the 64-bit I/O port specified by Port. The 64-bit read value is > returned. > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 64-bit I/O port operations are not supported, then ASSERT(). > - If Port is not aligned on a 64-bit boundary, then ASSERT(). > - > - @param Port The I/O port to read. > - > - @return The value read. > - > -**/ > -UINT64 > -EFIAPI > -IoRead64 ( > - IN UINTN Port > - ) > -{ > - ASSERT (FALSE); > - return 0; > -} > - > -/** > - Writes a 64-bit I/O port. > - > - Writes the 64-bit I/O port specified by Port with the value specified by > Value > - and returns Value. This function must guarantee that all I/O read and write > - operations are serialized. > - > - If 64-bit I/O port operations are not supported, then ASSERT(). > - If Port is not aligned on a 64-bit boundary, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Value The value to write to the I/O port. > - > - @return The value written to the I/O port. > - > -**/ > -UINT64 > -EFIAPI > -IoWrite64 ( > - IN UINTN Port, > - IN UINT64 Value > - ) > -{ > - ASSERT (FALSE); > - return 0; > -} > - > -/** > - Reads an 8-bit I/O port fifo into a block of memory. > - > - Reads the 8-bit I/O fifo port specified by Port. > - The port is read Count times, and the read data is > - stored in the provided Buffer. > - > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 8-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - @param Count The number of times to read I/O port. > - @param Buffer The buffer to store the read data into. > - > -**/ > -VOID > -EFIAPI > -IoReadFifo8 ( > - IN UINTN Port, > - IN UINTN Count, > - OUT VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Writes a block of memory into an 8-bit I/O port fifo. > - > - Writes the 8-bit I/O fifo port specified by Port. > - The port is written Count times, and the write data is > - retrieved from the provided Buffer. > - > - This function must guarantee that all I/O write and write operations are > - serialized. > - > - If 8-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Count The number of times to write I/O port. > - @param Buffer The buffer to retrieve the write data from. > - > -**/ > -VOID > -EFIAPI > -IoWriteFifo8 ( > - IN UINTN Port, > - IN UINTN Count, > - IN VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Reads a 16-bit I/O port fifo into a block of memory. > - > - Reads the 16-bit I/O fifo port specified by Port. > - The port is read Count times, and the read data is > - stored in the provided Buffer. > - > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 16-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - @param Count The number of times to read I/O port. > - @param Buffer The buffer to store the read data into. > - > -**/ > -VOID > -EFIAPI > -IoReadFifo16 ( > - IN UINTN Port, > - IN UINTN Count, > - OUT VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Writes a block of memory into a 16-bit I/O port fifo. > - > - Writes the 16-bit I/O fifo port specified by Port. > - The port is written Count times, and the write data is > - retrieved from the provided Buffer. > - > - This function must guarantee that all I/O write and write operations are > - serialized. > - > - If 16-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Count The number of times to write I/O port. > - @param Buffer The buffer to retrieve the write data from. > - > -**/ > -VOID > -EFIAPI > -IoWriteFifo16 ( > - IN UINTN Port, > - IN UINTN Count, > - IN VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Reads a 32-bit I/O port fifo into a block of memory. > - > - Reads the 32-bit I/O fifo port specified by Port. > - The port is read Count times, and the read data is > - stored in the provided Buffer. > - > - This function must guarantee that all I/O read and write operations are > - serialized. > - > - If 32-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to read. > - @param Count The number of times to read I/O port. > - @param Buffer The buffer to store the read data into. > - > -**/ > -VOID > -EFIAPI > -IoReadFifo32 ( > - IN UINTN Port, > - IN UINTN Count, > - OUT VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Writes a block of memory into a 32-bit I/O port fifo. > - > - Writes the 32-bit I/O fifo port specified by Port. > - The port is written Count times, and the write data is > - retrieved from the provided Buffer. > - > - This function must guarantee that all I/O write and write operations are > - serialized. > - > - If 32-bit I/O port operations are not supported, then ASSERT(). > - > - @param Port The I/O port to write. > - @param Count The number of times to write I/O port. > - @param Buffer The buffer to retrieve the write data from. > - > -**/ > -VOID > -EFIAPI > -IoWriteFifo32 ( > - IN UINTN Port, > - IN UINTN Count, > - IN VOID *Buffer > - ) > -{ > - ASSERT (FALSE); > -} > - > -/** > - Reads an 8-bit MMIO register. > - > - Reads the 8-bit MMIO register specified by Address. The 8-bit read value is > - returned. This function must guarantee that all MMIO read and write > - operations are serialized. > - > - If 8-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to read. > - > - @return The value read. > - > -**/ > -UINT8 > -EFIAPI > -MmioRead8 ( > - IN UINTN Address > - ) > -{ > - UINT8 Value; > - > - Value = *(volatile UINT8*)Address; > - return Value; > -} > - > -/** > - Writes an 8-bit MMIO register. > - > - Writes the 8-bit MMIO register specified by Address with the value > specified > - by Value and returns Value. This function must guarantee that all MMIO read > - and write operations are serialized. > - > - If 8-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to write. > - @param Value The value to write to the MMIO register. > - > -**/ > -UINT8 > -EFIAPI > -MmioWrite8 ( > - IN UINTN Address, > - IN UINT8 Value > - ) > -{ > - *(volatile UINT8*)Address = Value; > - return Value; > -} > - > -/** > - Reads a 16-bit MMIO register. > - > - Reads the 16-bit MMIO register specified by Address. The 16-bit read value > is > - returned. This function must guarantee that all MMIO read and write > - operations are serialized. > - > - If 16-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to read. > - > - @return The value read. > - > -**/ > -UINT16 > -EFIAPI > -MmioRead16 ( > - IN UINTN Address > - ) > -{ > - UINT16 Value; > - > - ASSERT ((Address & 1) == 0); > - Value = *(volatile UINT16*)Address; > - return Value; > -} > - > -/** > - Writes a 16-bit MMIO register. > - > - Writes the 16-bit MMIO register specified by Address with the value > specified > - by Value and returns Value. This function must guarantee that all MMIO read > - and write operations are serialized. > - > - If 16-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to write. > - @param Value The value to write to the MMIO register. > - > -**/ > -UINT16 > -EFIAPI > -MmioWrite16 ( > - IN UINTN Address, > - IN UINT16 Value > - ) > -{ > - ASSERT ((Address & 1) == 0); > - *(volatile UINT16*)Address = Value; > - return Value; > -} > - > -/** > - Reads a 32-bit MMIO register. > - > - Reads the 32-bit MMIO register specified by Address. The 32-bit read value > is > - returned. This function must guarantee that all MMIO read and write > - operations are serialized. > - > - If 32-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to read. > - > - @return The value read. > - > -**/ > -UINT32 > -EFIAPI > -MmioRead32 ( > - IN UINTN Address > - ) > -{ > - UINT32 Value; > - > - ASSERT ((Address & 3) == 0); > - Value = *(volatile UINT32*)Address; > - return Value; > -} > - > -/** > - Writes a 32-bit MMIO register. > - > - Writes the 32-bit MMIO register specified by Address with the value > specified > - by Value and returns Value. This function must guarantee that all MMIO read > - and write operations are serialized. > - > - If 32-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to write. > - @param Value The value to write to the MMIO register. > - > -**/ > -UINT32 > -EFIAPI > -MmioWrite32 ( > - IN UINTN Address, > - IN UINT32 Value > - ) > -{ > - ASSERT ((Address & 3) == 0); > - *(volatile UINT32*)Address = Value; > - return Value; > -} > - > -/** > - Reads a 64-bit MMIO register. > - > - Reads the 64-bit MMIO register specified by Address. The 64-bit read value > is > - returned. This function must guarantee that all MMIO read and write > - operations are serialized. > - > - If 64-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to read. > - > - @return The value read. > - > -**/ > -UINT64 > -EFIAPI > -MmioRead64 ( > - IN UINTN Address > - ) > -{ > - UINT64 Value; > - > - ASSERT ((Address & 7) == 0); > - Value = *(volatile UINT64*)Address; > - return Value; > -} > - > -/** > - Writes a 64-bit MMIO register. > - > - Writes the 64-bit MMIO register specified by Address with the value > specified > - by Value and returns Value. This function must guarantee that all MMIO read > - and write operations are serialized. > - > - If 64-bit MMIO register operations are not supported, then ASSERT(). > - > - @param Address The MMIO register to write. > - @param Value The value to write to the MMIO register. > - > -**/ > -UINT64 > -EFIAPI > -MmioWrite64 ( > - IN UINTN Address, > - IN UINT64 Value > - ) > -{ > - ASSERT ((Address & 7) == 0); > - *(volatile UINT64*)Address = Value; > - return Value; > -} > - > diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c > b/MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c > new file mode 100644 > index 0000000..c6b8224 > --- /dev/null > +++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c > @@ -0,0 +1,593 @@ > +/** @file > + I/O Library for ARM. > + > + Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > + Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> > + Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > +// > +// Include common header file for this module. > +// > +#include "BaseIoLibIntrinsicInternal.h" > + > +/** > + Reads an 8-bit I/O port. > + > + Reads the 8-bit I/O port specified by Port. The 8-bit read value is > returned. > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + > + @return The value read. > + > +**/ > +UINT8 > +EFIAPI > +IoRead8 ( > + IN UINTN Port > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Writes an 8-bit I/O port. > + > + Writes the 8-bit I/O port specified by Port with the value specified by > Value > + and returns Value. This function must guarantee that all I/O read and write > + operations are serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Value The value to write to the I/O port. > + > + @return The value written the I/O port. > + > +**/ > +UINT8 > +EFIAPI > +IoWrite8 ( > + IN UINTN Port, > + IN UINT8 Value > + ) > +{ > + ASSERT (FALSE); > + return Value; > +} > + > +/** > + Reads a 16-bit I/O port. > + > + Reads the 16-bit I/O port specified by Port. The 16-bit read value is > returned. > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + > + @return The value read. > + > +**/ > +UINT16 > +EFIAPI > +IoRead16 ( > + IN UINTN Port > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Writes a 16-bit I/O port. > + > + Writes the 16-bit I/O port specified by Port with the value specified by > Value > + and returns Value. This function must guarantee that all I/O read and write > + operations are serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Value The value to write to the I/O port. > + > + @return The value written the I/O port. > + > +**/ > +UINT16 > +EFIAPI > +IoWrite16 ( > + IN UINTN Port, > + IN UINT16 Value > + ) > +{ > + ASSERT (FALSE); > + return Value; > +} > + > +/** > + Reads a 32-bit I/O port. > + > + Reads the 32-bit I/O port specified by Port. The 32-bit read value is > returned. > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + > + @return The value read. > + > +**/ > +UINT32 > +EFIAPI > +IoRead32 ( > + IN UINTN Port > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Writes a 32-bit I/O port. > + > + Writes the 32-bit I/O port specified by Port with the value specified by > Value > + and returns Value. This function must guarantee that all I/O read and write > + operations are serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Value The value to write to the I/O port. > + > + @return The value written the I/O port. > + > +**/ > +UINT32 > +EFIAPI > +IoWrite32 ( > + IN UINTN Port, > + IN UINT32 Value > + ) > +{ > + ASSERT (FALSE); > + return Value; > +} > + > +/** > + Reads a 64-bit I/O port. > + > + Reads the 64-bit I/O port specified by Port. The 64-bit read value is > returned. > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 64-bit I/O port operations are not supported, then ASSERT(). > + If Port is not aligned on a 64-bit boundary, then ASSERT(). > + > + @param Port The I/O port to read. > + > + @return The value read. > + > +**/ > +UINT64 > +EFIAPI > +IoRead64 ( > + IN UINTN Port > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Writes a 64-bit I/O port. > + > + Writes the 64-bit I/O port specified by Port with the value specified by > Value > + and returns Value. This function must guarantee that all I/O read and write > + operations are serialized. > + > + If 64-bit I/O port operations are not supported, then ASSERT(). > + If Port is not aligned on a 64-bit boundary, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Value The value to write to the I/O port. > + > + @return The value written to the I/O port. > + > +**/ > +UINT64 > +EFIAPI > +IoWrite64 ( > + IN UINTN Port, > + IN UINT64 Value > + ) > +{ > + ASSERT (FALSE); > + return 0; > +} > + > +/** > + Reads an 8-bit I/O port fifo into a block of memory. > + > + Reads the 8-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is > + stored in the provided Buffer. > + > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo8 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Writes a block of memory into an 8-bit I/O port fifo. > + > + Writes the 8-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is > + retrieved from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations are > + serialized. > + > + If 8-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo8 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Reads a 16-bit I/O port fifo into a block of memory. > + > + Reads the 16-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is > + stored in the provided Buffer. > + > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo16 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Writes a block of memory into a 16-bit I/O port fifo. > + > + Writes the 16-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is > + retrieved from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations are > + serialized. > + > + If 16-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo16 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Reads a 32-bit I/O port fifo into a block of memory. > + > + Reads the 32-bit I/O fifo port specified by Port. > + The port is read Count times, and the read data is > + stored in the provided Buffer. > + > + This function must guarantee that all I/O read and write operations are > + serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to read. > + @param Count The number of times to read I/O port. > + @param Buffer The buffer to store the read data into. > + > +**/ > +VOID > +EFIAPI > +IoReadFifo32 ( > + IN UINTN Port, > + IN UINTN Count, > + OUT VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Writes a block of memory into a 32-bit I/O port fifo. > + > + Writes the 32-bit I/O fifo port specified by Port. > + The port is written Count times, and the write data is > + retrieved from the provided Buffer. > + > + This function must guarantee that all I/O write and write operations are > + serialized. > + > + If 32-bit I/O port operations are not supported, then ASSERT(). > + > + @param Port The I/O port to write. > + @param Count The number of times to write I/O port. > + @param Buffer The buffer to retrieve the write data from. > + > +**/ > +VOID > +EFIAPI > +IoWriteFifo32 ( > + IN UINTN Port, > + IN UINTN Count, > + IN VOID *Buffer > + ) > +{ > + ASSERT (FALSE); > +} > + > +/** > + Reads an 8-bit MMIO register. > + > + Reads the 8-bit MMIO register specified by Address. The 8-bit read value is > + returned. This function must guarantee that all MMIO read and write > + operations are serialized. > + > + If 8-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to read. > + > + @return The value read. > + > +**/ > +UINT8 > +EFIAPI > +MmioRead8 ( > + IN UINTN Address > + ) > +{ > + UINT8 Value; > + > + Value = *(volatile UINT8*)Address; > + return Value; > +} > + > +/** > + Writes an 8-bit MMIO register. > + > + Writes the 8-bit MMIO register specified by Address with the value > specified > + by Value and returns Value. This function must guarantee that all MMIO read > + and write operations are serialized. > + > + If 8-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > +**/ > +UINT8 > +EFIAPI > +MmioWrite8 ( > + IN UINTN Address, > + IN UINT8 Value > + ) > +{ > + *(volatile UINT8*)Address = Value; > + return Value; > +} > + > +/** > + Reads a 16-bit MMIO register. > + > + Reads the 16-bit MMIO register specified by Address. The 16-bit read value > is > + returned. This function must guarantee that all MMIO read and write > + operations are serialized. > + > + If 16-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to read. > + > + @return The value read. > + > +**/ > +UINT16 > +EFIAPI > +MmioRead16 ( > + IN UINTN Address > + ) > +{ > + UINT16 Value; > + > + ASSERT ((Address & 1) == 0); > + Value = *(volatile UINT16*)Address; > + return Value; > +} > + > +/** > + Writes a 16-bit MMIO register. > + > + Writes the 16-bit MMIO register specified by Address with the value > specified > + by Value and returns Value. This function must guarantee that all MMIO read > + and write operations are serialized. > + > + If 16-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > +**/ > +UINT16 > +EFIAPI > +MmioWrite16 ( > + IN UINTN Address, > + IN UINT16 Value > + ) > +{ > + ASSERT ((Address & 1) == 0); > + *(volatile UINT16*)Address = Value; > + return Value; > +} > + > +/** > + Reads a 32-bit MMIO register. > + > + Reads the 32-bit MMIO register specified by Address. The 32-bit read value > is > + returned. This function must guarantee that all MMIO read and write > + operations are serialized. > + > + If 32-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to read. > + > + @return The value read. > + > +**/ > +UINT32 > +EFIAPI > +MmioRead32 ( > + IN UINTN Address > + ) > +{ > + UINT32 Value; > + > + ASSERT ((Address & 3) == 0); > + Value = *(volatile UINT32*)Address; > + return Value; > +} > + > +/** > + Writes a 32-bit MMIO register. > + > + Writes the 32-bit MMIO register specified by Address with the value > specified > + by Value and returns Value. This function must guarantee that all MMIO read > + and write operations are serialized. > + > + If 32-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > +**/ > +UINT32 > +EFIAPI > +MmioWrite32 ( > + IN UINTN Address, > + IN UINT32 Value > + ) > +{ > + ASSERT ((Address & 3) == 0); > + *(volatile UINT32*)Address = Value; > + return Value; > +} > + > +/** > + Reads a 64-bit MMIO register. > + > + Reads the 64-bit MMIO register specified by Address. The 64-bit read value > is > + returned. This function must guarantee that all MMIO read and write > + operations are serialized. > + > + If 64-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to read. > + > + @return The value read. > + > +**/ > +UINT64 > +EFIAPI > +MmioRead64 ( > + IN UINTN Address > + ) > +{ > + UINT64 Value; > + > + ASSERT ((Address & 7) == 0); > + Value = *(volatile UINT64*)Address; > + return Value; > +} > + > +/** > + Writes a 64-bit MMIO register. > + > + Writes the 64-bit MMIO register specified by Address with the value > specified > + by Value and returns Value. This function must guarantee that all MMIO read > + and write operations are serialized. > + > + If 64-bit MMIO register operations are not supported, then ASSERT(). > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > +**/ > +UINT64 > +EFIAPI > +MmioWrite64 ( > + IN UINTN Address, > + IN UINT64 Value > + ) > +{ > + ASSERT ((Address & 7) == 0); > + *(volatile UINT64*)Address = Value; > + return Value; > +} > + > -- > 2.7.4 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51095): https://edk2.groups.io/g/devel/message/51095 Mute This Topic: https://groups.io/mt/38757509/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-