diff options
Diffstat (limited to 'include/asm-mips/sn/mapped_kernel.h')
-rw-r--r-- | include/asm-mips/sn/mapped_kernel.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/include/asm-mips/sn/mapped_kernel.h b/include/asm-mips/sn/mapped_kernel.h new file mode 100644 index 000000000000..3a17846df849 --- /dev/null +++ b/include/asm-mips/sn/mapped_kernel.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | * File created by Kanoj Sarcar 06/06/00. | ||
3 | * Copyright 2000 Silicon Graphics, Inc. | ||
4 | */ | ||
5 | #ifndef __ASM_SN_MAPPED_KERNEL_H | ||
6 | #define __ASM_SN_MAPPED_KERNEL_H | ||
7 | |||
8 | /* | ||
9 | * Note on how mapped kernels work: the text and data section is | ||
10 | * compiled at cksseg segment (LOADADDR = 0xc001c000), and the | ||
11 | * init/setup/data section gets a 16M virtual address bump in the | ||
12 | * ld.script file (so that tlblo0 and tlblo1 maps the sections). | ||
13 | * The vmlinux.64 section addresses are put in the xkseg range | ||
14 | * using the change-addresses makefile option. Use elfdump -of | ||
15 | * on IRIX to see where the sections go. The Origin loader loads | ||
16 | * the two sections contiguously in physical memory. The loader | ||
17 | * sets the entry point into kernel_entry using a xkphys address, | ||
18 | * but instead of using 0xa800000001160000, it uses the address | ||
19 | * 0xa800000000160000, which is where it physically loaded that | ||
20 | * code. So no jumps can be done before we have switched to using | ||
21 | * cksseg addresses. | ||
22 | */ | ||
23 | #include <linux/config.h> | ||
24 | #include <asm/addrspace.h> | ||
25 | |||
26 | #ifdef CONFIG_BUILD_ELF64 | ||
27 | #define REP_BASE CAC_BASE | ||
28 | #else | ||
29 | #define REP_BASE CKSEG0 | ||
30 | #endif | ||
31 | |||
32 | #ifdef CONFIG_MAPPED_KERNEL | ||
33 | |||
34 | #define MAPPED_ADDR_RO_TO_PHYS(x) (x - REP_BASE) | ||
35 | #define MAPPED_ADDR_RW_TO_PHYS(x) (x - REP_BASE - 16777216) | ||
36 | |||
37 | #define MAPPED_KERN_RO_PHYSBASE(n) \ | ||
38 | (PLAT_NODE_DATA(n)->kern_vars.kv_ro_baseaddr) | ||
39 | #define MAPPED_KERN_RW_PHYSBASE(n) \ | ||
40 | (PLAT_NODE_DATA(n)->kern_vars.kv_rw_baseaddr) | ||
41 | |||
42 | #define MAPPED_KERN_RO_TO_PHYS(x) \ | ||
43 | ((unsigned long)MAPPED_ADDR_RO_TO_PHYS(x) | \ | ||
44 | MAPPED_KERN_RO_PHYSBASE(get_compact_nodeid())) | ||
45 | #define MAPPED_KERN_RW_TO_PHYS(x) \ | ||
46 | ((unsigned long)MAPPED_ADDR_RW_TO_PHYS(x) | \ | ||
47 | MAPPED_KERN_RW_PHYSBASE(get_compact_nodeid())) | ||
48 | |||
49 | #else /* CONFIG_MAPPED_KERNEL */ | ||
50 | |||
51 | #define MAPPED_KERN_RO_TO_PHYS(x) (x - REP_BASE) | ||
52 | #define MAPPED_KERN_RW_TO_PHYS(x) (x - REP_BASE) | ||
53 | |||
54 | #endif /* CONFIG_MAPPED_KERNEL */ | ||
55 | |||
56 | #define MAPPED_KERN_RO_TO_K0(x) PHYS_TO_K0(MAPPED_KERN_RO_TO_PHYS(x)) | ||
57 | #define MAPPED_KERN_RW_TO_K0(x) PHYS_TO_K0(MAPPED_KERN_RW_TO_PHYS(x)) | ||
58 | |||
59 | #endif /* __ASM_SN_MAPPED_KERNEL_H */ | ||