Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/x86/kernel/head32.c
10818 views
1
/*
2
* linux/arch/i386/kernel/head32.c -- prepare to run common code
3
*
4
* Copyright (C) 2000 Andrea Arcangeli <[email protected]> SuSE
5
* Copyright (C) 2007 Eric Biederman <[email protected]>
6
*/
7
8
#include <linux/init.h>
9
#include <linux/start_kernel.h>
10
#include <linux/mm.h>
11
#include <linux/memblock.h>
12
13
#include <asm/setup.h>
14
#include <asm/sections.h>
15
#include <asm/e820.h>
16
#include <asm/page.h>
17
#include <asm/trampoline.h>
18
#include <asm/apic.h>
19
#include <asm/io_apic.h>
20
#include <asm/bios_ebda.h>
21
#include <asm/tlbflush.h>
22
23
static void __init i386_default_early_setup(void)
24
{
25
/* Initialize 32bit specific setup functions */
26
x86_init.resources.reserve_resources = i386_reserve_resources;
27
x86_init.mpparse.setup_ioapic_ids = setup_ioapic_ids_from_mpc;
28
29
reserve_ebda_region();
30
}
31
32
void __init i386_start_kernel(void)
33
{
34
memblock_init();
35
36
memblock_x86_reserve_range(__pa_symbol(&_text), __pa_symbol(&__bss_stop), "TEXT DATA BSS");
37
38
#ifdef CONFIG_BLK_DEV_INITRD
39
/* Reserve INITRD */
40
if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) {
41
/* Assume only end is not page aligned */
42
u64 ramdisk_image = boot_params.hdr.ramdisk_image;
43
u64 ramdisk_size = boot_params.hdr.ramdisk_size;
44
u64 ramdisk_end = PAGE_ALIGN(ramdisk_image + ramdisk_size);
45
memblock_x86_reserve_range(ramdisk_image, ramdisk_end, "RAMDISK");
46
}
47
#endif
48
49
/* Call the subarch specific early setup function */
50
switch (boot_params.hdr.hardware_subarch) {
51
case X86_SUBARCH_MRST:
52
x86_mrst_early_setup();
53
break;
54
case X86_SUBARCH_CE4100:
55
x86_ce4100_early_setup();
56
break;
57
default:
58
i386_default_early_setup();
59
break;
60
}
61
62
/*
63
* At this point everything still needed from the boot loader
64
* or BIOS or kernel text should be early reserved or marked not
65
* RAM in e820. All other memory is free game.
66
*/
67
68
start_kernel();
69
}
70
71