Deleted Added
full compact
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