1 /** 2 * \internal 3 * \file 4 * Kernel Interface Page (KIP). 5 * \ingroup l4_kip_api 6 */ 7 /* 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 * Martin Pohlack <mp26@os.inf.tu-dresden.de>, 14 * Lars Reuther <reuther@os.inf.tu-dresden.de> 15 * economic rights: Technische Universität Dresden (Germany) 16 * 17 * This file is part of TUD:OS and distributed under the terms of the 18 * GNU General Public License 2. 19 * Please see the COPYING-GPL-2 file for details. 20 * 21 * As a special exception, you may use this file as part of a free software 22 * library without restriction. Specifically, if other files instantiate 23 * templates or use macros or inline functions from this file, or you compile 24 * this file and link it with other files to produce an executable, this 25 * file does not by itself cause the resulting executable to be covered by 26 * the GNU General Public License. This exception does not however 27 * invalidate any other reasons why the executable file might be covered by 28 * the GNU General Public License. 29 */ 30 #pragma once 31 32 #include <l4/sys/types.h> 33 34 /** 35 * L4 Kernel Interface Page. 36 * \ingroup l4_kip_api 37 */ 38 typedef struct l4_kernel_info_t 39 { 40 /* offset 0x00 */ 41 l4_uint32_t magic; /**< Kernel Info Page 42 ** identifier ("L4µK"). 43 **/ 44 l4_uint32_t version; ///< Kernel version 45 l4_uint8_t offset_version_strings; ///< offset to version string 46 l4_uint8_t fill0[3]; ///< reserved \internal 47 l4_uint8_t kip_sys_calls; ///< pointer to system calls 48 l4_uint8_t fill1[3]; ///< reserved \internal 49 50 /* the following stuff is undocumented; we assume that the kernel 51 info page is located at offset 0x1000 into the L4 kernel boot 52 image so that these declarations are consistent with section 2.9 53 of the L4 Reference Manual */ 54 55 /* offset 0x10 */ 56 /* Kernel debugger */ 57 l4_umword_t scheduler_granularity; ///< for rounding time slices 58 l4_umword_t _res00[3]; ///< default_kdebug_end 59 60 /* offset 0x20 */ 61 /* Sigma0 */ 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 65 66 /* offset 0x30 */ 67 /* Sigma1 */ 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 71 72 /* offset 0x40 */ 73 /* Root task */ 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 77 78 /* offset 0x50 */ 79 /* L4 configuration */ 80 l4_umword_t _res50[1]; ///< reserved \internal 81 l4_umword_t mem_info; ///< memory information 82 l4_umword_t _res58[2]; ///< reserved \internal 83 84 /* offset 0x60 */ 85 l4_umword_t _res04[16]; ///< reserved \internal 86 87 /* offset 0xA0 */ 88 volatile l4_cpu_time_t _clock_val; ///< \internal 89 l4_umword_t _res05[2]; ///< reserved \internal 90 91 /* offset 0xB0 */ 92 l4_umword_t frequency_cpu; ///< CPU frequency in kHz 93 l4_umword_t frequency_bus; ///< Bus frequency 94 95 /* offset 0xB8 */ 96 l4_umword_t _res06[10]; ///< reserved \internal 97 98 /* offset 0xE0 */ 99 l4_umword_t user_ptr; ///< user_ptr 100 l4_umword_t vhw_offset; ///< offset to vhw structure 101 l4_umword_t _res07[2]; 102 103 /* offset 0xF0 */ 104 struct l4_kip_platform_info platform_info; 105 } l4_kernel_info_t; 106