1
2
3
4
5
6
7 #ifndef __ARM64_KERNEL_IMAGE_H
8 #define __ARM64_KERNEL_IMAGE_H
9
10 #ifndef LINKER_SCRIPT
11 #error This file should only be included in vmlinux.lds.S
12 #endif
13
14 #include <asm/image.h>
15
16
17
18
19
20
21
22
23
24
25
26
27 #ifdef CONFIG_CPU_BIG_ENDIAN
28 #define DATA_LE32(data) \
29 ((((data) & 0x000000ff) << 24) | \
30 (((data) & 0x0000ff00) << 8) | \
31 (((data) & 0x00ff0000) >> 8) | \
32 (((data) & 0xff000000) >> 24))
33 #else
34 #define DATA_LE32(data) ((data) & 0xffffffff)
35 #endif
36
37 #define DEFINE_IMAGE_LE64(sym, data) \
38 sym##_lo32 = DATA_LE32((data) & 0xffffffff); \
39 sym##_hi32 = DATA_LE32((data) >> 32)
40
41 #define __HEAD_FLAG(field) (__HEAD_FLAG_##field << \
42 ARM64_IMAGE_FLAG_##field##_SHIFT)
43
44 #ifdef CONFIG_CPU_BIG_ENDIAN
45 #define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_BE
46 #else
47 #define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_LE
48 #endif
49
50 #define __HEAD_FLAG_PAGE_SIZE ((PAGE_SHIFT - 10) / 2)
51
52 #define __HEAD_FLAG_PHYS_BASE 1
53
54 #define __HEAD_FLAGS (__HEAD_FLAG(BE) | \
55 __HEAD_FLAG(PAGE_SIZE) | \
56 __HEAD_FLAG(PHYS_BASE))
57
58
59
60
61
62
63 #define HEAD_SYMBOLS \
64 DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \
65 DEFINE_IMAGE_LE64(_kernel_offset_le, TEXT_OFFSET); \
66 DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS);
67
68 #endif