void pre_init(void) { morecore_area = core_buf; morecore_size = SERVER_CORE_SIZE; serial_lock(); // Initialize the serial port set_dlab(0); // we always assume the dlab is 0 unless we explicitly change it disable_interrupt(); disable_fifo(); reset_lcr(); reset_mcr(); clear_iir(); set_baud_rate(BAUD_RATE); reset_state(); enable_fifo(); enable_interrupt(); clear_iir(); // all done init_colours(); /* query what getchar clients exist */ num_getchar_clients = getchar_num_badges(); getchar_clients = calloc(num_getchar_clients, sizeof(getchar_client_t)); for (int i = 0; i < num_getchar_clients; i++) { unsigned int badge = getchar_enumerate_badge(i); assert(badge <= num_getchar_clients); getchar_clients[badge].client_id = badge; getchar_clients[badge].buf = getchar_buf(badge); getchar_clients[badge].last_head = -1; } set_putchar(serial_putchar); serial_irq_reg_callback(serial_irq, 0); /* Start regular heartbeat of 500ms */ timeout_periodic(0, 500000000); serial_unlock(); }
void pre_init(void) { int error; set_putchar(putchar_putchar); /* Camkes adds nothing to our address space, so this array is empty */ void *existing_frames[] = { NULL }; camkes_make_simple(&camkes_simple); camkes_simple.IOPort_cap = simple_ioport_wrapper; camkes_simple.frame_cap = simple_frame_cap_wrapper; /* Initialize allocator */ allocman = bootstrap_use_current_1level( simple_get_cnode(&camkes_simple), simple_get_cnode_size_bits(&camkes_simple), simple_last_valid_cap(&camkes_simple) + 1, BIT(simple_get_cnode_size_bits(&camkes_simple)), sizeof(allocator_mempool), allocator_mempool ); assert(allocman); error = allocman_add_simple_untypeds(allocman, &camkes_simple); make_proxy_vka(&vka, allocman); /* Initialize the vspace */ error = sel4utils_bootstrap_vspace(&vspace, &vspace_data, simple_get_init_cap(&camkes_simple, seL4_CapInitThreadPD), &vka, NULL, NULL, existing_frames); assert(!error); /* Create temporary mapping reservation, and map in a frame to * create any book keeping */ reservation_t reservation; reservation.res = allocman_mspace_alloc(allocman, sizeof(sel4utils_res_t), &error); assert(reservation.res); void *reservation_vaddr; error = sel4utils_reserve_range_no_alloc(&vspace, reservation.res, PAGE_SIZE_4K, seL4_AllRights, 1, &reservation_vaddr); assert(!error); error = vspace_new_pages_at_vaddr(&vspace, reservation_vaddr, 1, seL4_PageBits, reservation); assert(!error); vspace_unmap_pages(&vspace, reservation_vaddr, 1, seL4_PageBits, VSPACE_FREE); proxy_give_vspace(&vka, &vspace, reservation_vaddr, reservation); sel4utils_reserve_range_no_alloc(&vspace, &muslc_brk_reservation_memory, BRK_VIRTUAL_SIZE, seL4_AllRights, 1, &muslc_brk_reservation_start); muslc_this_vspace = &vspace; muslc_brk_reservation = (reservation_t){.res = &muslc_brk_reservation_memory}; }
void pre_init(void) { set_putchar(putchar_putchar); }