3 * \brief Paging definitions for arm_v5.
7 * Copyright (c) 2010, ETH Zurich.
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
15 #ifndef TARGET_ARM_BARRELFISH_KPI_PAGING_ARM_V5_H
16 #define TARGET_ARM_BARRELFISH_KPI_PAGING_ARM_V5_H
18 /* Default page size is 4K */
19 #define BASE_PAGE_BITS 12
20 #define BASE_PAGE_SIZE (1u << BASE_PAGE_BITS)
21 #define BASE_PAGE_MASK (BASE_PAGE_SIZE - 1)
22 #define BASE_PAGE_OFFSET(a) ((a) & BASE_PAGE_MASK)
25 #define LARGE_PAGE_BITS 20
26 #define LARGE_PAGE_SIZE (1u << LARGE_PAGE_BITS)
27 #define LARGE_PAGE_MASK (LARGE_PAGE_SIZE - 1)
28 #define LARGE_PAGE_OFFSET(a) ((a) & LARGE_PAGE_MASK)
30 #define ARM_L1_OFFSET(addr) ((((uintptr_t)addr) >> 20) & 0xfff) // 12 bits
31 #define ARM_L2_OFFSET(addr) ((((uintptr_t)addr) >> 12) & 0xff) // 8 bits
32 #define ARM_PAGE_OFFSET(addr) ((uintptr_t)addr & 0xfff) // 12 bits
34 // L1 Alignment determined by TTBR register (bits 13:0 ignored by hardware)
35 #define ARM_L1_ALIGN 16384u
37 #define ARM_L1_MAX_ENTRIES 4096u
38 #define ARM_L1_BYTES_PER_ENTRY 4u
39 #define ARM_L1_SECTION_BYTES (1024u * 1024u)
40 #define ARM_L1_TABLE_BYTES (ARM_L1_MAX_ENTRIES * ARM_L1_BYTES_PER_ENTRY)
42 #define ARM_L2_ALIGN 1024u
43 #define ARM_L2_MAX_ENTRIES 256u
44 #define ARM_L2_BYTES_PER_ENTRY 4u
45 #define ARM_L2_TABLE_BYTES ARM_L2_ALIGN
47 /* Page type independent page options */
48 #define KPI_PAGING_FLAGS_READ 0x01
49 #define KPI_PAGING_FLAGS_WRITE 0x02
50 #define KPI_PAGING_FLAGS_EXECUTE 0x04
51 #define KPI_PAGING_FLAGS_NOCACHE 0x08
52 #define KPI_PAGING_FLAGS_MASK 0x0f
54 #endif // TARGET_ARM_BARRELFISH_KPI_PAGING_ARM_V5_H