Lines Matching refs:info
69 static void place_modules(struct kernel_info *info, in place_modules() argument
73 const struct bootmodule *mod = info->initrd_bootmodule; in place_modules()
75 const paddr_t dtb_len = ROUNDUP(fdt_totalsize(info->fdt), MB(2)); in place_modules()
79 const paddr_t rambase = info->mem.bank[0].start; in place_modules()
80 const paddr_t ramsize = info->mem.bank[0].size; in place_modules()
119 info->dtb_paddr = modbase; in place_modules()
120 info->initrd_paddr = info->dtb_paddr + dtb_len; in place_modules()
123 static paddr_t kernel_zimage_place(struct kernel_info *info) in kernel_zimage_place() argument
128 if ( info->type == DOMAIN_64BIT ) in kernel_zimage_place()
129 return info->mem.bank[0].start + info->zimage.text_offset; in kernel_zimage_place()
138 if ( info->zimage.start == 0 ) in kernel_zimage_place()
142 load_end = info->mem.bank[0].start + info->mem.bank[0].size; in kernel_zimage_place()
143 load_end = MIN(info->mem.bank[0].start + MB(128), load_end); in kernel_zimage_place()
145 load_addr = load_end - info->zimage.len; in kernel_zimage_place()
150 load_addr = info->zimage.start; in kernel_zimage_place()
155 static void kernel_zimage_load(struct kernel_info *info) in kernel_zimage_load() argument
157 paddr_t load_addr = kernel_zimage_place(info); in kernel_zimage_load()
158 paddr_t paddr = info->zimage.kernel_addr; in kernel_zimage_load()
159 paddr_t len = info->zimage.len; in kernel_zimage_load()
162 info->entry = load_addr; in kernel_zimage_load()
164 place_modules(info, load_addr, load_addr + len); in kernel_zimage_load()
202 static int kernel_uimage_probe(struct kernel_info *info, in kernel_uimage_probe() argument
235 info->zimage.kernel_addr = addr + sizeof(uimage); in kernel_uimage_probe()
236 info->zimage.len = len; in kernel_uimage_probe()
238 info->entry = info->zimage.start; in kernel_uimage_probe()
239 info->load = kernel_zimage_load; in kernel_uimage_probe()
245 info->type = DOMAIN_32BIT; in kernel_uimage_probe()
248 info->type = DOMAIN_64BIT; in kernel_uimage_probe()
330 static int kernel_zimage64_probe(struct kernel_info *info, in kernel_zimage64_probe() argument
369 info->zimage.kernel_addr = addr; in kernel_zimage64_probe()
370 info->zimage.len = end - start; in kernel_zimage64_probe()
371 info->zimage.text_offset = zimage.text_offset; in kernel_zimage64_probe()
373 info->load = kernel_zimage_load; in kernel_zimage64_probe()
375 info->type = DOMAIN_64BIT; in kernel_zimage64_probe()
384 static int kernel_zimage32_probe(struct kernel_info *info, in kernel_zimage32_probe() argument
419 info->zimage.kernel_addr = addr; in kernel_zimage32_probe()
421 info->zimage.start = start; in kernel_zimage32_probe()
422 info->zimage.len = end - start; in kernel_zimage32_probe()
424 info->load = kernel_zimage_load; in kernel_zimage32_probe()
427 info->type = DOMAIN_32BIT; in kernel_zimage32_probe()
433 static void kernel_elf_load(struct kernel_info *info) in kernel_elf_load() argument
439 info->entry = info->elf.parms.virt_entry; in kernel_elf_load()
441 place_modules(info, in kernel_elf_load()
442 info->elf.parms.virt_kstart, in kernel_elf_load()
443 info->elf.parms.virt_kend); in kernel_elf_load()
446 info->elf.elf.dest_base = (void*)(unsigned long)info->elf.parms.virt_kstart; in kernel_elf_load()
447 info->elf.elf.dest_size = in kernel_elf_load()
448 info->elf.parms.virt_kend - info->elf.parms.virt_kstart; in kernel_elf_load()
450 elf_load_binary(&info->elf.elf); in kernel_elf_load()
453 free_xenheap_pages(info->elf.kernel_img, info->elf.kernel_order); in kernel_elf_load()
456 static int kernel_elf_probe(struct kernel_info *info, in kernel_elf_probe() argument
461 memset(&info->elf.elf, 0, sizeof(info->elf.elf)); in kernel_elf_probe()
463 info->elf.kernel_order = get_order_from_bytes(size); in kernel_elf_probe()
464 info->elf.kernel_img = alloc_xenheap_pages(info->elf.kernel_order, 0); in kernel_elf_probe()
465 if ( info->elf.kernel_img == NULL ) in kernel_elf_probe()
468 copy_from_paddr(info->elf.kernel_img, addr, size); in kernel_elf_probe()
470 if ( (rc = elf_init(&info->elf.elf, info->elf.kernel_img, size )) != 0 ) in kernel_elf_probe()
473 elf_set_verbose(&info->elf.elf); in kernel_elf_probe()
475 elf_parse_binary(&info->elf.elf); in kernel_elf_probe()
476 if ( (rc = elf_xen_parse(&info->elf.elf, &info->elf.parms)) != 0 ) in kernel_elf_probe()
480 if ( elf_32bit(&info->elf.elf) ) in kernel_elf_probe()
481 info->type = DOMAIN_32BIT; in kernel_elf_probe()
482 else if ( elf_64bit(&info->elf.elf) ) in kernel_elf_probe()
483 info->type = DOMAIN_64BIT; in kernel_elf_probe()
492 info->load = kernel_elf_load; in kernel_elf_probe()
494 if ( elf_check_broken(&info->elf.elf) ) in kernel_elf_probe()
496 elf_check_broken(&info->elf.elf)); in kernel_elf_probe()
500 if ( elf_check_broken(&info->elf.elf) ) in kernel_elf_probe()
502 elf_check_broken(&info->elf.elf)); in kernel_elf_probe()
504 free_xenheap_pages(info->elf.kernel_img, info->elf.kernel_order); in kernel_elf_probe()
508 int kernel_probe(struct kernel_info *info) in kernel_probe() argument
519 info->kernel_bootmodule = mod; in kernel_probe()
523 info->initrd_bootmodule = boot_module_find_by_kind(BOOTMOD_RAMDISK); in kernel_probe()
524 if ( info->initrd_bootmodule ) in kernel_probe()
526 info->initrd_bootmodule->start); in kernel_probe()
534 rc = kernel_zimage64_probe(info, mod->start, mod->size); in kernel_probe()
537 rc = kernel_uimage_probe(info, mod->start, mod->size); in kernel_probe()
539 rc = kernel_zimage32_probe(info, mod->start, mod->size); in kernel_probe()
541 rc = kernel_elf_probe(info, mod->start, mod->size); in kernel_probe()
546 void kernel_load(struct kernel_info *info) in kernel_load() argument
548 info->load(info); in kernel_load()