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 Hiramatsuint __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 Dikestatic 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