| # | |
| # Copyright (c) 2014-2018, Linaro Limited. All rights reserved. | |
| # | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent | |
| # | |
| # | |
| .text | |
| .align 3 | |
| GCC_ASM_EXPORT(MmioRead8Internal) | |
| GCC_ASM_EXPORT(MmioWrite8Internal) | |
| GCC_ASM_EXPORT(MmioRead16Internal) | |
| GCC_ASM_EXPORT(MmioWrite16Internal) | |
| GCC_ASM_EXPORT(MmioRead32Internal) | |
| GCC_ASM_EXPORT(MmioWrite32Internal) | |
| GCC_ASM_EXPORT(MmioRead64Internal) | |
| GCC_ASM_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. | |
| // | |
| ASM_PFX(MmioRead8Internal): | |
| AARCH64_BTI(c) | |
| ldrb w0, [x0] | |
| dmb ld | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioWrite8Internal): | |
| AARCH64_BTI(c) | |
| dmb st | |
| strb w1, [x0] | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioRead16Internal): | |
| AARCH64_BTI(c) | |
| ldrh w0, [x0] | |
| dmb ld | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioWrite16Internal): | |
| AARCH64_BTI(c) | |
| dmb st | |
| strh w1, [x0] | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioRead32Internal): | |
| AARCH64_BTI(c) | |
| ldr w0, [x0] | |
| dmb ld | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioWrite32Internal): | |
| AARCH64_BTI(c) | |
| dmb st | |
| str w1, [x0] | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioRead64Internal): | |
| AARCH64_BTI(c) | |
| ldr x0, [x0] | |
| dmb ld | |
| ret | |
| // | |
| // 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. | |
| // | |
| ASM_PFX(MmioWrite64Internal): | |
| AARCH64_BTI(c) | |
| dmb st | |
| str x1, [x0] | |
| ret |