ReactOS 0.4.17-dev-1343-g8fe3cee
intrin_i.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: ARM64 system register access
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10#define ARM64_MIDR_EL1 ARM64_SYSREG(3, 0, 0, 0, 0)
11#define ARM64_MPIDR_EL1 ARM64_SYSREG(3, 0, 0, 0, 5)
12#define ARM64_ID_AA64PFR0_EL1 ARM64_SYSREG(3, 0, 0, 4, 0)
13#define ARM64_ID_AA64DFR0_EL1 ARM64_SYSREG(3, 0, 0, 5, 0)
14#define ARM64_ID_AA64ISAR0_EL1 ARM64_SYSREG(3, 0, 0, 6, 0)
15#define ARM64_ID_AA64MMFR0_EL1 ARM64_SYSREG(3, 0, 0, 7, 0)
16#define ARM64_CTR_EL0 ARM64_SYSREG(3, 3, 0, 0, 1)
17#define ARM64_SCTLR_EL1 ARM64_SYSREG(3, 0, 1, 0, 0)
18#define ARM64_CPACR_EL1 ARM64_SYSREG(3, 0, 1, 0, 2)
19#define ARM64_TTBR0_EL1 ARM64_SYSREG(3, 0, 2, 0, 0)
20#define ARM64_TTBR1_EL1 ARM64_SYSREG(3, 0, 2, 0, 1)
21#define ARM64_TCR_EL1 ARM64_SYSREG(3, 0, 2, 0, 2)
22#define ARM64_DAIF ARM64_SYSREG(3, 3, 4, 2, 1)
23#define ARM64_ESR_EL1 ARM64_SYSREG(3, 0, 5, 2, 0)
24#define ARM64_FAR_EL1 ARM64_SYSREG(3, 0, 6, 0, 0)
25#define ARM64_PAR_EL1 ARM64_SYSREG(3, 0, 7, 4, 0)
26#define ARM64_MAIR_EL1 ARM64_SYSREG(3, 0, 10, 2, 0)
27#define ARM64_VBAR_EL1 ARM64_SYSREG(3, 0, 12, 0, 0)
28#define ARM64_CONTEXTIDR_EL1 ARM64_SYSREG(3, 0, 13, 0, 1)
29#define ARM64_TPIDR_EL1 ARM64_SYSREG(3, 0, 13, 0, 4)
30#define ARM64_TPIDRRO_EL0_REG ARM64_SYSREG(3, 3, 13, 0, 3)
31#define ARM64_CNTFRQ_EL0 ARM64_SYSREG(3, 3, 14, 0, 0)
32#define ARM64_CNTV_TVAL_EL0 ARM64_SYSREG(3, 3, 14, 3, 0)
33#define ARM64_CNTV_CTL_EL0 ARM64_SYSREG(3, 3, 14, 3, 1)
34#define ARM64_CNTV_CVAL_EL0 ARM64_SYSREG(3, 3, 14, 3, 2)
35#define ARM64_CNTKCTL_EL1 ARM64_SYSREG(3, 0, 14, 1, 0)
36
37/* DAIF and SPSR mask bits */
38#define ARM64_PSR_F 0x40
39#define ARM64_PSR_I 0x80
40#define ARM64_PSR_A 0x100
41#define ARM64_PSR_D 0x200
42#define ARM64_PSR_MODE_MASK 0xF
43#define ARM64_PSR_MODE_EL0T 0x0
44#define ARM64_PSR_MODE_EL1H 0x5
45
46#define KeArm64ReadRegister(Register) ((ULONG64)_ReadStatusReg(Register))
47#define KeArm64WriteRegister(Register, Value) _WriteStatusReg((Register), (__int64)(Value))
48
50VOID
53{
54 KeGetPcr()->CurrentIrql = Irql;
55}
56
57/* Implemented in ke/arm64/cpu.s */
58VOID
62
63VOID
66
67VOID
72
73VOID
78
79VOID
FORCEINLINE VOID KeSetCurrentIrql(KIRQL Irql)
Definition: intrin_i.h:6
VOID NTAPI KeArm64FlushTbEntry(_In_ PVOID Address)
VOID NTAPI KeArm64SweepIcacheRange(_In_ PVOID BaseAddress, _In_ SIZE_T Length)
VOID NTAPI KeArm64WaitForInterrupt(VOID)
VOID NTAPI KeArm64FlushTbAll(VOID)
VOID NTAPI KeArm64SweepDcacheRange(_In_ PVOID BaseAddress, _In_ SIZE_T Length)
_Out_ PKIRQL Irql
Definition: csq.h:179
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeGetPcr()
Definition: ketypes.h:81
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID * BaseAddress
Definition: mmfuncs.h:408
#define _In_
Definition: no_sal2.h:158
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
static WCHAR Address[46]
Definition: ping.c:68
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define FORCEINLINE
Definition: wdftypes.h:67