; | |
; Copyright (c) 2014-2018, Linaro Limited. All rights reserved. | |
; | |
; SPDX-License-Identifier: BSD-2-Clause-Patent | |
; | |
AREA IoLibMmio, CODE, READONLY | |
EXPORT MmioRead8Internal | |
EXPORT MmioWrite8Internal | |
EXPORT MmioRead16Internal | |
EXPORT MmioWrite16Internal | |
EXPORT MmioRead32Internal | |
EXPORT MmioWrite32Internal | |
EXPORT MmioRead64Internal | |
EXPORT MmioWrite64Internal | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to read. | |
; | |
; @return The value read. | |
; | |
MmioRead8Internal | |
ldrb r0, [r0] | |
dmb | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to write. | |
; @param Value The value to write to the MMIO register. | |
; | |
MmioWrite8Internal | |
dmb st | |
strb r1, [r0] | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to read. | |
; | |
; @return The value read. | |
; | |
MmioRead16Internal | |
ldrh r0, [r0] | |
dmb | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to write. | |
; @param Value The value to write to the MMIO register. | |
; | |
MmioWrite16Internal | |
dmb st | |
strh r1, [r0] | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to read. | |
; | |
; @return The value read. | |
; | |
MmioRead32Internal | |
ldr r0, [r0] | |
dmb | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to write. | |
; @param Value The value to write to the MMIO register. | |
; | |
MmioWrite32Internal | |
dmb st | |
str r1, [r0] | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to read. | |
; | |
; @return The value read. | |
; | |
MmioRead64Internal | |
ldr r1, [r0, #4] | |
ldr r0, [r0] | |
dmb | |
bx lr | |
; | |
; 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. | |
; | |
; @param Address The MMIO register to write. | |
; @param Value The value to write to the MMIO register. | |
; | |
MmioWrite64Internal | |
dmb st | |
str r2, [r0] | |
str r3, [r0, #4] | |
bx lr | |
END |