Added: New architecture to targets / arch folders and hake files
[barrelfish] / kernel / include / arch / k1om / offsets.h
1 /**
2  * \file
3  * \brief
4  */
5
6 /*
7  * Copyright (c) 2010, ETH Zurich.
8  * All rights reserved.
9  *
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.
13  */
14
15 #ifndef OFFSETS_ARCH_H
16 #define OFFSETS_ARCH_H
17
18 #include <target/x86_64/offsets_target.h>
19
20 #define PADDR_SPACE_SIZE          X86_64_PADDR_SPACE_SIZE
21 #define PADDR_SPACE_LIMIT         X86_64_PADDR_SPACE_LIMIT
22
23 #define REAL_MODE_LINEAR_OFFSET   X86_64_REAL_MODE_LINEAR_OFFSET
24 #define REAL_MODE_SEGMENT         X86_64_REAL_MODE_SEGMENT
25 #define REAL_MODE_OFFSET          X86_64_REAL_MODE_OFFSET
26
27 #define REAL_MODE_SEGMENT_TO_REAL_MODE_PAGE(seg)      X86_64_REAL_MODE_SEGMENT_TO_REAL_MODE_PAGE(seg)
28 #define REAL_MODE_ADDR_TO_REAL_MODE_VECTOR(seg,off)   X86_64_REAL_MODE_ADDR_TO_REAL_MODE_VECTOR(seg,off)
29
30 #ifndef __ASSEMBLER__
31
32 /**
33  * Takes absolute physical address addr and returns corresponding
34  * "physical memory address space" address.
35  *
36  * \param addr  Absolute physical address
37  *
38  * \return Corresponding "physical memory address space" address.
39  */
40 static inline lvaddr_t local_phys_to_mem(lpaddr_t addr)
41 {
42     assert(addr < X86_64_PADDR_SPACE_LIMIT);
43     return (lvaddr_t)(addr + (lvaddr_t)X86_64_MEMORY_OFFSET);
44 }
45
46 /**
47  * Takes "physical memory address space" address and returns
48  * corresponding physical address.
49  *
50  * \param addr  Absolute physical address
51  *
52  * \return Corresponding "physical memory address space" address.
53  */
54 static inline lpaddr_t mem_to_local_phys(lvaddr_t addr)
55 {
56     assert(addr >= X86_64_MEMORY_OFFSET);
57     return (lpaddr_t)(addr - (lpaddr_t)X86_64_MEMORY_OFFSET);
58 }
59
60 static inline lpaddr_t gen_phys_to_local_phys(genpaddr_t addr)
61 {
62     return (lpaddr_t)addr;
63 }
64
65 static inline genpaddr_t local_phys_to_gen_phys(lpaddr_t addr)
66 {
67     return (genpaddr_t)addr;
68 }
69
70 /**
71  * Symbol: Start of kernel image. This symbol points to the start
72  * address of the kernel image.
73  */
74 extern char _start_kernel;
75
76 /**
77  * Symbol: End of kernel image. This symbol points to the end address
78  * of the kernel image.
79  */
80 extern char _end_kernel;
81
82 /**
83  * The size of the whole kernel image.
84  */
85 #define SIZE_KERNEL_IMAGE       \
86     (size_t)(&_end_kernel - &_start_kernel)
87
88 #endif // __ASSEMBLER__
89
90 #endif // OFFSETS_ARCH_H