77 lines
2.2 KiB
C
77 lines
2.2 KiB
C
/**
|
|
* \file
|
|
* \brief Startup prototypes.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 2007, 2008, 2009, 2010, ETH Zurich.
|
|
* All rights reserved.
|
|
*
|
|
* This file is distributed under the terms in the attached LICENSE file.
|
|
* If you do not find this file, copies can be found by writing to:
|
|
* ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
|
|
*/
|
|
|
|
#ifndef __KERNEL_STARTUP_H
|
|
#define __KERNEL_STARTUP_H
|
|
|
|
struct capability;
|
|
struct mem_region;
|
|
struct bootinfo;
|
|
enum region_type;
|
|
|
|
struct spawn_state {
|
|
/// Init's cnodes
|
|
struct cte *taskcn, *segcn, *supercn, *physaddrcn, *modulecn,
|
|
*pagecn, *basepagecn, *earlycncn,
|
|
*slot_alloc_cn0, *slot_alloc_cn1, *slot_alloc_cn2;
|
|
|
|
/// Next slot in each cnode
|
|
cslot_t segcn_slot, supercn_slot, physaddrcn_slot, modulecn_slot;
|
|
|
|
/// Address of arguments page
|
|
lpaddr_t args_page;
|
|
};
|
|
|
|
errval_t create_caps_to_cnode(lpaddr_t base_addr, size_t size,
|
|
enum region_type type,
|
|
struct spawn_state *st, struct bootinfo *bootinfo);
|
|
|
|
/**
|
|
* \brief Linear physical memory allocator callback function.
|
|
*
|
|
* This function allocates a linear region of addresses of size 'size' from
|
|
* physical memory.
|
|
*
|
|
* \param size Number of bytes to allocate.
|
|
*
|
|
* \return Base physical address of memory region.
|
|
*/
|
|
typedef lpaddr_t (*alloc_phys_func)(size_t size);
|
|
|
|
/* As for alloc_phys_func, but aligned to size 'align'. */
|
|
typedef lpaddr_t (*alloc_phys_aligned_func)(size_t size, size_t align);
|
|
|
|
struct dcb *spawn_module(struct spawn_state *st,
|
|
const char *name, int argc, const char** argv,
|
|
lpaddr_t bootinfo, lvaddr_t args_base,
|
|
alloc_phys_func alloc_phys,
|
|
alloc_phys_aligned_func alloc_phys_aligned,
|
|
lvaddr_t *retparamaddr);
|
|
|
|
extern lpaddr_t app_alloc_phys_start;
|
|
|
|
extern lpaddr_t app_alloc_phys_end;
|
|
|
|
lpaddr_t app_alloc_phys(size_t size);
|
|
|
|
lpaddr_t app_alloc_phys_aligned(size_t size, size_t align);
|
|
|
|
extern lpaddr_t bsp_init_alloc_addr;
|
|
|
|
lpaddr_t bsp_alloc_phys(size_t size);
|
|
|
|
lpaddr_t bsp_alloc_phys_aligned(size_t size, size_t align);
|
|
|
|
#endif // __KERNEL_STARTUP_H
|