mirror of https://github.com/acidanthera/audk.git
Update IoLib to add MemoryFence for x86 Mmio function.
Correct IoLibGCC function comments. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7082 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
ca08e40b90
commit
9de780dcd6
|
@ -66,3 +66,252 @@ IoWrite64 (
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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;
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
Value = *(volatile UINT8*)Address;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
@return Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
MmioWrite8 (
|
||||||
|
IN UINTN Address,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
MemoryFence ();
|
||||||
|
*(volatile UINT8*)Address = Value;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 16-bit boundary, 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);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
Value = *(volatile UINT16*)Address;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Address The MMIO register to write.
|
||||||
|
@param Value The value to write to the MMIO register.
|
||||||
|
|
||||||
|
@return Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
MmioWrite16 (
|
||||||
|
IN UINTN Address,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT ((Address & 1) == 0);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
*(volatile UINT16*)Address = Value;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 32-bit boundary, 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);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
Value = *(volatile UINT32*)Address;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Address The MMIO register to write.
|
||||||
|
@param Value The value to write to the MMIO register.
|
||||||
|
|
||||||
|
@return Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT32
|
||||||
|
EFIAPI
|
||||||
|
MmioWrite32 (
|
||||||
|
IN UINTN Address,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT ((Address & 3) == 0);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
*(volatile UINT32*)Address = Value;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 64-bit boundary, 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);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
Value = *(volatile UINT64*)Address;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
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().
|
||||||
|
If Address is not aligned on a 64-bit boundary, 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);
|
||||||
|
|
||||||
|
MemoryFence ();
|
||||||
|
*(volatile UINT64*)Address = Value;
|
||||||
|
MemoryFence ();
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,210 +24,6 @@
|
||||||
|
|
||||||
#include "BaseIoLibIntrinsicInternal.h"
|
#include "BaseIoLibIntrinsicInternal.h"
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return *(volatile UINT8*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT8
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite8 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT8 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return *(volatile UINT8*)Address = 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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT16
|
|
||||||
EFIAPI
|
|
||||||
MmioRead16 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 1) == 0);
|
|
||||||
return *(volatile UINT16*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT16
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite16 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT16 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 1) == 0);
|
|
||||||
return *(volatile UINT16*)Address = 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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
MmioRead32 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 3) == 0);
|
|
||||||
return *(volatile UINT32*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite32 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT32 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 3) == 0);
|
|
||||||
return *(volatile UINT32*)Address = 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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT64
|
|
||||||
EFIAPI
|
|
||||||
MmioRead64 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 7) == 0);
|
|
||||||
return *(volatile UINT64*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, 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);
|
|
||||||
return *(volatile UINT64*)Address = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reads an 8-bit I/O port.
|
Reads an 8-bit I/O port.
|
||||||
|
|
||||||
|
@ -239,24 +35,10 @@ MmioWrite64 (
|
||||||
|
|
||||||
@param Port The I/O port to read.
|
@param Port The I/O port to read.
|
||||||
|
|
||||||
@return The value read from Port.
|
@return The value read.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
__inline__
|
__inline__
|
||||||
/**
|
|
||||||
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
|
UINT8
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoRead8 (
|
IoRead8 (
|
||||||
|
@ -269,24 +51,6 @@ IoRead8 (
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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 to the I/O port. It equals to the
|
|
||||||
input Value instead of the actual value read back from
|
|
||||||
the I/O port.
|
|
||||||
|
|
||||||
**/
|
|
||||||
__inline__
|
|
||||||
/**
|
/**
|
||||||
Writes an 8-bit I/O port.
|
Writes an 8-bit I/O port.
|
||||||
|
|
||||||
|
@ -302,6 +66,7 @@ __inline__
|
||||||
@return The value written the I/O port.
|
@return The value written the I/O port.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
__inline__
|
||||||
UINT8
|
UINT8
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoWrite8 (
|
IoWrite8 (
|
||||||
|
@ -313,21 +78,6 @@ IoWrite8 (
|
||||||
return Value;;
|
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 from Port.
|
|
||||||
|
|
||||||
**/
|
|
||||||
__inline__
|
|
||||||
/**
|
/**
|
||||||
Reads a 16-bit I/O port.
|
Reads a 16-bit I/O port.
|
||||||
|
|
||||||
|
@ -343,6 +93,7 @@ __inline__
|
||||||
@return The value read.
|
@return The value read.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
__inline__
|
||||||
UINT16
|
UINT16
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoRead16 (
|
IoRead16 (
|
||||||
|
@ -356,24 +107,6 @@ IoRead16 (
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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 to the I/O port. It equals to the
|
|
||||||
input Value instead of the actual value read back from
|
|
||||||
the I/O port.
|
|
||||||
|
|
||||||
**/
|
|
||||||
__inline__
|
|
||||||
/**
|
/**
|
||||||
Writes a 16-bit I/O port.
|
Writes a 16-bit I/O port.
|
||||||
|
|
||||||
|
@ -390,6 +123,7 @@ __inline__
|
||||||
@return The value written the I/O port.
|
@return The value written the I/O port.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
__inline__
|
||||||
UINT16
|
UINT16
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoWrite16 (
|
IoWrite16 (
|
||||||
|
@ -402,21 +136,6 @@ IoWrite16 (
|
||||||
return Value;;
|
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 from Port.
|
|
||||||
|
|
||||||
**/
|
|
||||||
__inline__
|
|
||||||
/**
|
/**
|
||||||
Reads a 32-bit I/O port.
|
Reads a 32-bit I/O port.
|
||||||
|
|
||||||
|
@ -432,6 +151,7 @@ __inline__
|
||||||
@return The value read.
|
@return The value read.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
__inline__
|
||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoRead32 (
|
IoRead32 (
|
||||||
|
@ -445,24 +165,6 @@ IoRead32 (
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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 to the I/O port. It equals to the
|
|
||||||
input Value instead of the actual value read back from
|
|
||||||
the I/O port.
|
|
||||||
|
|
||||||
**/
|
|
||||||
__inline__
|
|
||||||
/**
|
/**
|
||||||
Writes a 32-bit I/O port.
|
Writes a 32-bit I/O port.
|
||||||
|
|
||||||
|
@ -479,6 +181,7 @@ __inline__
|
||||||
@return The value written the I/O port.
|
@return The value written the I/O port.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
__inline__
|
||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IoWrite32 (
|
IoWrite32 (
|
||||||
|
|
|
@ -15,210 +15,6 @@
|
||||||
|
|
||||||
#include "BaseIoLibIntrinsicInternal.h"
|
#include "BaseIoLibIntrinsicInternal.h"
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return *(volatile UINT8*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT8
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite8 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT8 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return *(volatile UINT8*)Address = 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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT16
|
|
||||||
EFIAPI
|
|
||||||
MmioRead16 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 1) == 0);
|
|
||||||
return *(volatile UINT16*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT16
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite16 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT16 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 1) == 0);
|
|
||||||
return *(volatile UINT16*)Address = 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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
MmioRead32 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 3) == 0);
|
|
||||||
return *(volatile UINT32*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite32 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT32 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 3) == 0);
|
|
||||||
return *(volatile UINT32*)Address = 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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to read.
|
|
||||||
|
|
||||||
@return The value read.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT64
|
|
||||||
EFIAPI
|
|
||||||
MmioRead64 (
|
|
||||||
IN UINTN Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 7) == 0);
|
|
||||||
return *(volatile UINT64*)Address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, 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);
|
|
||||||
return *(volatile UINT64*)Address = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reads an 8-bit I/O port.
|
Reads an 8-bit I/O port.
|
||||||
|
|
||||||
|
|
|
@ -226,219 +226,3 @@ IoWrite32 (
|
||||||
_ReadWriteBarrier ();
|
_ReadWriteBarrier ();
|
||||||
return Value;
|
return Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
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.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT8
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite8 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT8 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return *(volatile UINT8*)Address = 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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, 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().
|
|
||||||
If Address is not aligned on a 16-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT16
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite16 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT16 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 1) == 0);
|
|
||||||
return *(volatile UINT16*)Address = 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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, 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().
|
|
||||||
If Address is not aligned on a 32-bit boundary, then ASSERT().
|
|
||||||
|
|
||||||
@param Address The MMIO register to write.
|
|
||||||
@param Value The value to write to the MMIO register.
|
|
||||||
|
|
||||||
@return Value.
|
|
||||||
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
MmioWrite32 (
|
|
||||||
IN UINTN Address,
|
|
||||||
IN UINT32 Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Address & 3) == 0);
|
|
||||||
return *(volatile UINT32*)Address = 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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, 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().
|
|
||||||
If Address is not aligned on a 64-bit boundary, 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);
|
|
||||||
return *(volatile UINT64*)Address = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue