metadata.c (276331) | metadata.c (276506) |
---|---|
1/*- 2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * from: FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.6 27 */ 28 29#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 13 unchanged lines hidden (view full) --- 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * from: FreeBSD: src/sys/boot/sparc64/loader/metadata.c,v 1.6 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: user/nwhitehorn/kboot/powerpc/kboot/metadata.c 276331 2014-12-28 16:56:52Z nwhitehorn $"); | 30__FBSDID("$FreeBSD: user/nwhitehorn/kboot/powerpc/kboot/metadata.c 276506 2015-01-01 18:07:56Z nwhitehorn $"); |
31 32#include <stand.h> 33#include <sys/param.h> 34#include <sys/reboot.h> 35#include <sys/linker.h> 36#include <sys/boot.h> 37 38#include <machine/metadata.h> --- 198 unchanged lines hidden (view full) --- 237 * Load the information expected by a powerpc kernel. 238 * 239 * - The 'boothowto' argument is constructed 240 * - The 'bootdev' argument is constructed 241 * - The kernel environment is copied into kernel space. 242 * - Module metadata are formatted and placed in kernel space. 243 */ 244int | 31 32#include <stand.h> 33#include <sys/param.h> 34#include <sys/reboot.h> 35#include <sys/linker.h> 36#include <sys/boot.h> 37 38#include <machine/metadata.h> --- 198 unchanged lines hidden (view full) --- 237 * Load the information expected by a powerpc kernel. 238 * 239 * - The 'boothowto' argument is constructed 240 * - The 'bootdev' argument is constructed 241 * - The kernel environment is copied into kernel space. 242 * - Module metadata are formatted and placed in kernel space. 243 */ 244int |
245md_load_dual(char *args, vm_offset_t *modulep, int kern64) | 245md_load_dual(char *args, vm_offset_t *modulep, vm_offset_t *dtb, int kern64) |
246{ 247 struct preloaded_file *kfp; 248 struct preloaded_file *xp; 249 struct file_metadata *md; 250 vm_offset_t kernend; 251 vm_offset_t addr; 252 vm_offset_t envp; | 246{ 247 struct preloaded_file *kfp; 248 struct preloaded_file *xp; 249 struct file_metadata *md; 250 vm_offset_t kernend; 251 vm_offset_t addr; 252 vm_offset_t envp; |
253 vm_offset_t fdtp; |
|
253 vm_offset_t size; 254 uint64_t scratch64; 255 char *rootdevname; 256 int howto; 257 258 align = kern64 ? 8 : 4; 259 howto = md_getboothowto(args); 260 --- 19 unchanged lines hidden (view full) --- 280 281 /* copy our environment */ 282 envp = addr; 283 addr = md_copyenv(addr); 284 285 /* pad to a page boundary */ 286 addr = roundup(addr, PAGE_SIZE); 287 | 254 vm_offset_t size; 255 uint64_t scratch64; 256 char *rootdevname; 257 int howto; 258 259 align = kern64 ? 8 : 4; 260 howto = md_getboothowto(args); 261 --- 19 unchanged lines hidden (view full) --- 281 282 /* copy our environment */ 283 envp = addr; 284 addr = md_copyenv(addr); 285 286 /* pad to a page boundary */ 287 addr = roundup(addr, PAGE_SIZE); 288 |
289 /* Copy out FDT */ 290 size = fdt_copy(addr); 291 *dtb = fdtp = addr; 292 addr = roundup(addr + size, PAGE_SIZE); 293 |
|
288 kernend = 0; 289 kfp = file_findfile(NULL, kern64 ? "elf64 kernel" : "elf32 kernel"); 290 if (kfp == NULL) 291 kfp = file_findfile(NULL, "elf kernel"); 292 if (kfp == NULL) 293 panic("can't find kernel file"); 294 file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof howto, &howto); 295 if (kern64) { 296 scratch64 = envp; 297 file_addmetadata(kfp, MODINFOMD_ENVP, sizeof scratch64, &scratch64); | 294 kernend = 0; 295 kfp = file_findfile(NULL, kern64 ? "elf64 kernel" : "elf32 kernel"); 296 if (kfp == NULL) 297 kfp = file_findfile(NULL, "elf kernel"); 298 if (kfp == NULL) 299 panic("can't find kernel file"); 300 file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof howto, &howto); 301 if (kern64) { 302 scratch64 = envp; 303 file_addmetadata(kfp, MODINFOMD_ENVP, sizeof scratch64, &scratch64); |
304 scratch64 = fdtp; 305 file_addmetadata(kfp, MODINFOMD_DTBP, sizeof scratch64, &scratch64); |
|
298 scratch64 = kernend; 299 file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof scratch64, &scratch64); 300 } else { 301 file_addmetadata(kfp, MODINFOMD_ENVP, sizeof envp, &envp); | 306 scratch64 = kernend; 307 file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof scratch64, &scratch64); 308 } else { 309 file_addmetadata(kfp, MODINFOMD_ENVP, sizeof envp, &envp); |
310 file_addmetadata(kfp, MODINFOMD_DTBP, sizeof fdtp, &fdtp); |
|
302 file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); 303 } 304 305 *modulep = addr; 306 size = md_copymodules(0, kern64); 307 kernend = roundup(addr + size, PAGE_SIZE); 308 309 md = file_findmetadata(kfp, MODINFOMD_KERNEND); --- 5 unchanged lines hidden (view full) --- 315 } 316 317 (void)md_copymodules(addr, kern64); 318 319 return(0); 320} 321 322int | 311 file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend); 312 } 313 314 *modulep = addr; 315 size = md_copymodules(0, kern64); 316 kernend = roundup(addr + size, PAGE_SIZE); 317 318 md = file_findmetadata(kfp, MODINFOMD_KERNEND); --- 5 unchanged lines hidden (view full) --- 324 } 325 326 (void)md_copymodules(addr, kern64); 327 328 return(0); 329} 330 331int |
323md_load(char *args, vm_offset_t *modulep) | 332md_load(char *args, vm_offset_t *modulep, vm_offset_t *dtb) |
324{ | 333{ |
325 return (md_load_dual(args, modulep, 0)); | 334 return (md_load_dual(args, modulep, dtb, 0)); |
326} 327 328int | 335} 336 337int |
329md_load64(char *args, vm_offset_t *modulep) | 338md_load64(char *args, vm_offset_t *modulep, vm_offset_t *dtb) |
330{ | 339{ |
331 return (md_load_dual(args, modulep, 1)); | 340 return (md_load_dual(args, modulep, dtb, 1)); |
332} 333 | 341} 342 |