1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
#
# 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
|