xref: /openbmc/linux/arch/um/kernel/initrd.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
10d1fb0a4SAlex Dewar // SPDX-License-Identifier: GPL-2.0
29b67a3c4SJeff Dike /*
30983a88bSJeff Dike  * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
49b67a3c4SJeff Dike  */
59b67a3c4SJeff Dike 
637185b33SAl Viro #include <linux/init.h>
757c8a661SMike Rapoport #include <linux/memblock.h>
837185b33SAl Viro #include <linux/initrd.h>
937185b33SAl Viro #include <asm/types.h>
1037185b33SAl Viro #include <init.h>
1137185b33SAl Viro #include <os.h>
129b67a3c4SJeff Dike 
13*361640b4SVincent Whitchurch #include "um_arch.h"
14*361640b4SVincent Whitchurch 
159b67a3c4SJeff Dike /* Changed by uml_initrd_setup, which is a setup */
169b67a3c4SJeff Dike static char *initrd __initdata = NULL;
179b67a3c4SJeff Dike 
read_initrd(void)185b4236e1SMasami Hiramatsu int __init read_initrd(void)
199b67a3c4SJeff Dike {
20*361640b4SVincent Whitchurch 	unsigned long long size;
219b67a3c4SJeff Dike 	void *area;
229b67a3c4SJeff Dike 
23*361640b4SVincent Whitchurch 	if (!initrd)
24dc764e50SJeff Dike 		return 0;
25dc764e50SJeff Dike 
26*361640b4SVincent Whitchurch 	area = uml_load_file(initrd, &size);
278a7f97b9SMike Rapoport 	if (!area)
28dc764e50SJeff Dike 		return 0;
29dc764e50SJeff Dike 
309b67a3c4SJeff Dike 	initrd_start = (unsigned long) area;
319b67a3c4SJeff Dike 	initrd_end = initrd_start + size;
329b67a3c4SJeff Dike 	return 0;
339b67a3c4SJeff Dike }
349b67a3c4SJeff Dike 
uml_initrd_setup(char * line,int * add)359b67a3c4SJeff Dike static int __init uml_initrd_setup(char *line, int *add)
369b67a3c4SJeff Dike {
379b67a3c4SJeff Dike 	initrd = line;
389b67a3c4SJeff Dike 	return 0;
399b67a3c4SJeff Dike }
409b67a3c4SJeff Dike 
419b67a3c4SJeff Dike __uml_setup("initrd=", uml_initrd_setup,
429b67a3c4SJeff Dike "initrd=<initrd image>\n"
439b67a3c4SJeff Dike "    This is used to boot UML from an initrd image.  The argument is the\n"
449b67a3c4SJeff Dike "    name of the file containing the image.\n\n"
459b67a3c4SJeff Dike );
46