4 * \brief Kernel Interface Page (KIP).
8 * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
9 * Alexander Warg <warg@os.inf.tu-dresden.de>,
10 * Björn Döbel <doebel@os.inf.tu-dresden.de>,
11 * Frank Mehnert <fm3@os.inf.tu-dresden.de>,
12 * Torsten Frenzel <frenzel@os.inf.tu-dresden.de>
13 * economic rights: Technische Universität Dresden (Germany)
15 * This file is part of TUD:OS and distributed under the terms of the
16 * GNU General Public License 2.
17 * Please see the COPYING-GPL-2 file for details.
19 * As a special exception, you may use this file as part of a free software
20 * library without restriction. Specifically, if other files instantiate
21 * templates or use macros or inline functions from this file, or you compile
22 * this file and link it with other files to produce an executable, this
23 * file does not by itself cause the resulting executable to be covered by
24 * the GNU General Public License. This exception does not however
25 * invalidate any other reasons why the executable file might be covered by
26 * the GNU General Public License.
30 #include <l4/sys/types.h>
33 * \brief L4 Kernel Interface Page.
36 typedef struct l4_kernel_info_t
39 l4_uint64_t magic; /**< Kernel Info Page
40 ** identifier ("L4µK").
42 l4_uint64_t version; ///< Kernel version
43 l4_uint8_t offset_version_strings; ///< offset to version string
44 l4_uint8_t fill2[7]; ///< reserved \internal
45 l4_uint8_t kip_sys_calls; ///< pointer to system calls
46 l4_uint8_t fill3[7]; ///< reserved \internal
48 /* the following stuff is undocumented; we assume that the kernel
49 info page is located at offset 0x1000 into the L4 kernel boot
50 image so that these declarations are consistent with section 2.9
51 of the L4 Reference Manual */
55 l4_umword_t init_default_kdebug; ///< Kdebug init function
56 l4_umword_t default_kdebug_exception; ///< Kdebug exception handler
57 l4_umword_t scheduler_granularity; ///< for rounding time slices
58 l4_umword_t default_kdebug_end; ///< default_kdebug_end
62 l4_umword_t sigma0_esp; ///< Sigma0 start stack pointer
63 l4_umword_t sigma0_eip; ///< Sigma0 instruction pointer
64 l4_umword_t _res01[2]; ///< reserved \internal
68 l4_umword_t sigma1_esp; ///< Sigma1 start stack pointer
69 l4_umword_t sigma1_eip; ///< Sigma1 instruction pointer
70 l4_umword_t _res02[2]; ///< reserved \internal
74 l4_umword_t root_esp; ///< Root task stack pointer
75 l4_umword_t root_eip; ///< Root task instruction pointer
76 l4_umword_t _res03[2]; ///< reserved \internal
79 /* L4 configuration */
80 l4_umword_t l4_config; /**< L4 kernel configuration.
83 ** - bits 0-7: set the number
84 ** of page table entries to
86 ** - bits 8-15: set the number
89 l4_umword_t mem_info; ///< memory information
90 l4_umword_t kdebug_config; /**< Kernel debugger config.
93 ** - bits 0-7: set the number
94 ** of pages to allocate for
96 ** - bit 8: if set to 1, the
97 ** kernel enters kdebug
98 ** before starting the root
100 ** - bits 16-19: set the port
101 ** speed to use with serial
102 ** line (1..115.2KBd,
103 ** 2..57.6KBd, 3..38.4KBd,
104 ** 6..19.2KBd, 12..9.6KBD)
105 ** - bits 20-31: set the I/O
106 ** port to use with serial
107 ** line, 0 indicates that no
108 ** serial output should be
111 l4_umword_t kdebug_permission; /**< Kernel debugger permissions.
114 ** - bits 0-7: if 0 all tasks
115 ** can enter the kernel
116 ** debugger, otherwise only
117 ** tasks with a number lower
118 ** the set value can enter
119 ** kdebug, other tasks will be
121 ** - bit 8: if set, kdebug may
123 ** - bit 9: if set, kdebug may
124 ** display user registers
125 ** - bit 10: if set, kdebug may
126 ** display user memory
127 ** - bit 11: if set, kdebug may
128 ** modify memory, registers,
130 ** - bit 12: if set, kdebug may
131 ** read/write I/O ports
132 ** - bit 13: if set, kdebug may
133 ** protocol page faults and
138 l4_umword_t total_ram; ///< Size of RAM in bytes
139 l4_umword_t processor_info; ///< CPU info
140 l4_umword_t _res04[14]; ///< reserved \internal
143 volatile l4_cpu_time_t clock; ///< L4 system clock (µs)
144 volatile l4_cpu_time_t switch_time; /**< timestamp of last l4 thread
147 ** FINE_GRAINED_CPU_TIME is
152 l4_umword_t frequency_cpu; ///< CPU frequency in kHz
153 l4_umword_t frequency_bus; ///< Bus frequency
154 volatile l4_cpu_time_t thread_time; /**< accumulated thread time for
155 ** currently running thread at
156 ** last l4 thread switch (in
159 ** FINE_GRAINED_CPU_TIME is
164 l4_umword_t _res05[4]; ///< reserved \internal
167 l4_umword_t _res06[4]; ///< reserved \internal
170 l4_umword_t user_ptr; ///< user_ptr
171 l4_umword_t vhw_offset; ///< offset to vhw structure
172 l4_umword_t __res06[2];
175 struct l4_kip_kernel_uart_info kernel_uart_info;
176 struct l4_kip_platform_info platform_info;