BOOT_CODE static bool_t create_untypeds(cap_t root_cnode_cap, region_t boot_mem_reuse_reg) { seL4_SlotPos slot_pos_before; seL4_SlotPos slot_pos_after; region_t dev_reg; word_t i; slot_pos_before = ndks_boot.slot_pos_cur; create_kernel_untypeds(root_cnode_cap, boot_mem_reuse_reg, slot_pos_before); UNUSED paddr_t current_region_pos = 0; for (i = 0; i < get_num_dev_p_regs(); i++) { /* It is required that untyped regions are non-overlapping. * We assume that hardware regions are defined in ascending order to make * overlapping checks simpler */ assert(get_dev_p_reg(i).start >= current_region_pos); current_region_pos = get_dev_p_reg(i).end; dev_reg = paddr_to_pptr_reg(get_dev_p_reg(i)); if (!create_untypeds_for_region(root_cnode_cap, true, dev_reg, slot_pos_before)) { return false; } } slot_pos_after = ndks_boot.slot_pos_cur; ndks_boot.bi_frame->untyped = (seL4_SlotRegion) { slot_pos_before, slot_pos_after }; return true; }
BOOT_CODE static bool_t create_untypeds( cap_t root_cnode_cap, region_t boot_mem_reuse_reg) { seL4_SlotPos slot_pos_before; seL4_SlotPos slot_pos_after; word_t i; paddr_t start = 0; slot_pos_before = ndks_boot.slot_pos_cur; create_kernel_untypeds(root_cnode_cap, boot_mem_reuse_reg, slot_pos_before); for (i = 0; i < allocated_p_regions.cur_pos; i++) { if (start != allocated_p_regions.regs[i].start) { if (!create_untypeds_for_region(root_cnode_cap, true, paddr_to_pptr_reg((p_region_t) { start, allocated_p_regions.regs[i].start }), slot_pos_before)) { return false; } } start = allocated_p_regions.regs[i].end; } if (start != PADDR_USER_DEVICE_TOP) { if (!create_untypeds_for_region(root_cnode_cap, true, paddr_to_pptr_reg((p_region_t) { start, PADDR_USER_DEVICE_TOP }), slot_pos_before)) { return false; } } slot_pos_after = ndks_boot.slot_pos_cur; ndks_boot.bi_frame->untyped = (seL4_SlotRegion) { slot_pos_before, slot_pos_after }; return true; }