mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-23 21:54:27 +02:00
Add ARM support to BaseIoLibIntrinsic
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9107 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
229fe3a229
commit
9314970a95
@ -5,7 +5,8 @@
|
|||||||
# for IA-32 and x64. On IPF, I/O port requests are translated into MMIO requests.
|
# for IA-32 and x64. On IPF, I/O port requests are translated into MMIO requests.
|
||||||
# MMIO requests are forwarded directly to memory.
|
# MMIO requests are forwarded directly to memory.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2008, Intel Corporation.
|
# Copyright (c) 2007 - 2008, Intel Corporation.<BR>
|
||||||
|
# Portions Copyright (c) 2008-2009 Apple Inc.<BR>
|
||||||
#
|
#
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -27,7 +28,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# VALID_ARCHITECTURES = IA32 X64 IPF
|
# VALID_ARCHITECTURES = IA32 X64 IPF ARM
|
||||||
#
|
#
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
@ -35,7 +36,7 @@
|
|||||||
BaseIoLibIntrinsicInternal.h
|
BaseIoLibIntrinsicInternal.h
|
||||||
IoHighLevel.c
|
IoHighLevel.c
|
||||||
|
|
||||||
[Sources.Ia32]
|
[Sources.IA32]
|
||||||
IoLibGcc.c | GCC
|
IoLibGcc.c | GCC
|
||||||
IoLibMsc.c | MSFT
|
IoLibMsc.c | MSFT
|
||||||
IoLibIcc.c | INTEL
|
IoLibIcc.c | INTEL
|
||||||
@ -50,6 +51,9 @@
|
|||||||
[Sources.IPF]
|
[Sources.IPF]
|
||||||
IoLibIpf.c
|
IoLibIpf.c
|
||||||
|
|
||||||
|
[Sources.ARM]
|
||||||
|
IoLibArm.c
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
|
||||||
|
430
MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c
Normal file
430
MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c
Normal file
@ -0,0 +1,430 @@
|
|||||||
|
/** @file
|
||||||
|
I/O Library for ARM.
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2009, Intel Corporation<BR>
|
||||||
|
Portions copyright (c) 2008-2009 Apple Inc.<BR>
|
||||||
|
All rights reserved. This program and the accompanying materials
|
||||||
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
http://opensource.org/licenses/bsd-license.php
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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 the I/O port.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT64
|
||||||
|
EFIAPI
|
||||||
|
IoWrite64 (
|
||||||
|
IN UINTN Port,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (FALSE);
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user