static void init_timer_caps(env_t env) { /* get the timer irq cap */ seL4_CPtr cap; UNUSED int error = vka_cspace_alloc(&env->vka, &cap); assert(error == 0); vka_cspace_make_path(&env->vka, cap, &env->irq_path); error = simple_get_IRQ_control(&env->simple, DEFAULT_TIMER_INTERRUPT, env->irq_path); assert(error == 0); #ifdef CONFIG_ARCH_ARM /* get the timer frame cap */ error = vka_cspace_alloc(&env->vka, &cap); assert(error == 0); vka_cspace_make_path(&env->vka, cap, &env->frame_path); error = simple_get_frame_cap(&env->simple, (void *) DEFAULT_TIMER_PADDR, PAGE_BITS_4K, &env->frame_path); assert(error == 0); #elif CONFIG_ARCH_IA32 env->io_port_cap = simple_get_IOPort_cap(&env->simple, PIT_IO_PORT_MIN, PIT_IO_PORT_MAX); assert(env->io_port_cap != 0); #else #error "Unknown architecture" #endif }
static void map_unity_ram(vm_t* vm) { /* Dimensions of physical memory that we'll use. Note that we do not map the entirety of RAM. */ static const uintptr_t paddr_start = RAM_BASE; static const uintptr_t paddr_end = 0x60000000; int err; uintptr_t start; reservation_t res; unsigned int bits = 21; res = vspace_reserve_range_at(&vm->vm_vspace, (void*)paddr_start, paddr_end - paddr_start, seL4_AllRights, 1); assert(res.res); for (start = paddr_start;; start += BIT(bits)) { cspacepath_t frame; err = vka_cspace_alloc_path(vm->vka, &frame); assert(!err); err = simple_get_frame_cap(vm->simple, (void*)start, bits, &frame); if (err) { vka_cspace_free(vm->vka, frame.capPtr); break; } err = vspace_map_pages_at_vaddr(&vm->vm_vspace, &frame.capPtr, &bits, (void*)start, 1, bits, res); assert(!err); } }
static seL4_CPtr _platsupport_find_device_cap(seL4_Word paddr, seL4_Word page_bits, simple_t *simple, vka_t *vka) { int UNUSED error; cspacepath_t path; error = vka_cspace_alloc_path(vka, &path); assert(!error); error = simple_get_frame_cap(simple,(void *) paddr, page_bits, &path); assert(error == seL4_NoError); return path.capPtr; }
static void map_unity_ram(vm_t* vm) { int err; uintptr_t start; reservation_t res; unsigned int bits = 21; res = vspace_reserve_range_at(&vm->vm_vspace, (void*)RAM_START, RAM_END - RAM_START, seL4_AllRights, 1); assert(res.res); for (start = RAM_START;; start += BIT(bits)) { cspacepath_t frame; err = vka_cspace_alloc_path(vm->vka, &frame); assert(!err); err = simple_get_frame_cap(vm->simple, (void*)start, bits, &frame); if (err) { vka_cspace_free(vm->vka, frame.capPtr); break; } err = vspace_map_pages_at_vaddr(&vm->vm_vspace, &frame.capPtr, &bits, (void*)start, 1, bits, res); assert(!err); } }