d40ef135b90532a4f26645428714b7fbe1455022
[barrelfish] / kernel / include / startup.h
1 /**
2  * \file
3  * \brief Startup prototypes.
4  */
5
6 /*
7  * Copyright (c) 2007, 2008, 2009, 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 __KERNEL_STARTUP_H
16 #define __KERNEL_STARTUP_H
17
18 struct capability;
19 struct mem_region;
20 struct bootinfo;
21 enum region_type;
22
23 struct spawn_state {
24     /// Init's cnodes
25     struct cte *taskcn, *segcn,*supercn0,*supercn1, *physaddrcn, *modulecn,
26                *pagecn, *basepagecn,
27                *slot_alloc_cn0, *slot_alloc_cn1, *slot_alloc_cn2;
28
29     /// Next slot in each cnode
30     cslot_t segcn_slot, supercn0_slot, supercn1_slot, physaddrcn_slot, modulecn_slot;
31
32     /// Address of arguments page
33     lpaddr_t args_page;
34 };
35
36 errval_t create_caps_to_cnode(lpaddr_t base_addr, size_t size,
37                               enum region_type type,
38                               struct spawn_state *st, struct bootinfo *bootinfo);
39
40 /**
41  * \brief Linear physical memory allocator callback function.
42  *
43  * This function allocates a linear region of addresses of size 'size' from
44  * physical memory.
45  *
46  * \param size  Number of bytes to allocate.
47  *
48  * \return Base physical address of memory region.
49  */
50 typedef lpaddr_t (*alloc_phys_func)(size_t size);
51
52 struct dcb *spawn_module(struct spawn_state *st,
53                          const char *name, int argc, const char** argv,
54                          lpaddr_t bootinfo, lvaddr_t args_base,
55                          alloc_phys_func alloc_phys, lvaddr_t *retparamaddr);
56
57 #endif // __KERNEL_STARTUP_H