1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9/* This file contains useful macros for assembly code. */
10
11#ifdef __ASSEMBLER__
12
13#define      SCTLR(reg)    p15, 0, reg, c1, c0, 0
14#define      CLIDR(reg)    p15, 1, reg, c0, c0, 1
15#define      TTBR0(reg)    p15, 0, reg, c2, c0, 0
16#define      TTBCR(reg)    p15, 0, reg, c2, c0, 2
17#define       DACR(reg)    p15, 0, reg, c3, c0, 0
18#define      IIALL(reg)    p15, 0, reg, c7, c5, 0
19#define     BPIALL(reg)    p15, 0, reg, c7, c5, 6
20#define   DTLBIALL(reg)    p15, 0, reg, c8, c6, 0
21#define    TLBIALL(reg)    p15, 0, reg, c8, c7, 0
22#define  DTLBIASID(reg)    p15, 0, reg, c8, c6, 2
23#define   TLBIASID(reg)    p15, 0, reg, c8, c7, 2
24#define CONTEXTIDR(reg)    p15, 0, reg, c13, c0, 1
25
26/* Processor mode encodings */
27#define PMODE_USER          0x10
28#define PMODE_FIQ           0x11
29#define PMODE_IRQ           0x12
30#define PMODE_SUPERVISOR    0x13
31#define PMODE_ABORT         0x17
32#define PMODE_UNDEFINED     0x1b
33#define PMODE_SYSTEM        0x1f
34
35/* Processor exception mask bits */
36#define PMASK_ASYNC_ABORT   (1 << 8)
37#define PMASK_IRQ           (1 << 7)
38#define PMASK_FIRQ          (1 << 6)
39
40#define CPSR_SUPERVISOR     ( PMASK_FIRQ         \
41                            | PMASK_IRQ          \
42                            | PMASK_ASYNC_ABORT  \
43                            | PMODE_SUPERVISOR   )
44
45#else /* !__ASSEMBLER__ */
46#warning "Including assembly-specific header in C code"
47#endif
48
49