kinfo_t *pre_init(u32_t magic, u32_t ebx) { /* Clear BSS */ memset(&_edata, 0, (u32_t)&_end - (u32_t)&_edata); omap3_ser_init(); /* Get our own copy boot params pointed to by ebx. * Here we find out whether we should do serial output. */ get_parameters(ebx, &kinfo); /* Make and load a pagetable that will map the kernel * to where it should be; but first a 1:1 mapping so * this code stays where it should be. */ dcache_clean(); /* clean the caches */ pg_clear(); pg_identity(&kinfo); kinfo.freepde_start = pg_mapkernel(); pg_load(); vm_enable_paging(); /* Done, return boot info so it can be passed to kmain(). */ return &kinfo; }
static int libexec_pg_alloc(struct exec_info *execi, vir_bytes vaddr, size_t len) { pg_map(PG_ALLOCATEME, vaddr, vaddr+len, &kinfo); pg_load(); memset((char *) vaddr, 0, len); alloc_for_vm += len; return OK; }
void prot_init() { write_vbar((reg_t)&exc_vector_table); /* Set up a new post-relocate bootstrap pagetable so that * we can map in VM, and we no longer rely on pre-relocated * data. */ pg_clear(); pg_identity(&kinfo); /* Still need 1:1 for device memory . */ pg_mapkernel(); pg_load(); prot_init_done = 1; }
kinfo_t *pre_init(u32_t magic, u32_t ebx) { /* Get our own copy boot params pointed to by ebx. * Here we find out whether we should do serial output. */ get_parameters(ebx, &kinfo); assert(magic == MULTIBOOT_BOOTLOADER_MAGIC); /* Make and load a pagetable that will map the kernel * to where it should be; but first a 1:1 mapping so * this code stays where it should be. */ pg_clear(); pg_identity(&kinfo); kinfo.freepde_start = pg_mapkernel(); pg_load(); vm_enable_paging(); /* Done, return boot info so it can be passed to kmain(). */ return &kinfo; }