Line data Source code
1 0 : /*
2 : * Copyright (c) 2019 Intel Corporation
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_ARCH_X86_MULTIBOOT_H_
8 : #define ZEPHYR_INCLUDE_ARCH_X86_MULTIBOOT_H_
9 :
10 : #ifndef _ASMLANGUAGE
11 :
12 : #include "multiboot_info.h"
13 :
14 0 : extern struct multiboot_info multiboot_info;
15 :
16 : #ifdef CONFIG_MULTIBOOT_INFO
17 :
18 : void z_multiboot_init(struct multiboot_info *info_pa);
19 :
20 : #else
21 :
22 : inline void z_multiboot_init(struct multiboot_info *info_pa)
23 : {
24 : ARG_UNUSED(info_pa);
25 : }
26 :
27 : #endif /* CONFIG_MULTIBOOT_INFO */
28 :
29 : /*
30 : * the mmap_addr field points to a series of entries of the following form.
31 : */
32 :
33 0 : struct multiboot_mmap {
34 0 : uint32_t size;
35 0 : uint64_t base;
36 0 : uint64_t length;
37 0 : uint32_t type;
38 : } __packed;
39 :
40 : #endif /* _ASMLANGUAGE */
41 :
42 : /* Boot type value (see prep_c.c) */
43 0 : #define MULTIBOOT_BOOT_TYPE 1
44 :
45 : /*
46 : * Possible values for multiboot_mmap.type field.
47 : * Other values should be assumed to be unusable ranges.
48 : */
49 :
50 0 : #define MULTIBOOT_MMAP_RAM 1 /* available RAM */
51 0 : #define MULTIBOOT_MMAP_ACPI 3 /* reserved for ACPI */
52 0 : #define MULTIBOOT_MMAP_NVS 4 /* ACPI non-volatile */
53 0 : #define MULTIBOOT_MMAP_DEFECTIVE 5 /* defective RAM module */
54 :
55 : /*
56 : * Magic numbers: the kernel multiboot header (see crt0.S) begins with
57 : * MULTIBOOT_HEADER_MAGIC to signal to the booter that it supports
58 : * multiboot. On kernel entry, EAX is set to MULTIBOOT_EAX_MAGIC to
59 : * signal that the boot loader is multiboot compliant.
60 : */
61 :
62 0 : #define MULTIBOOT_HEADER_MAGIC 0x1BADB002
63 0 : #define MULTIBOOT_EAX_MAGIC 0x2BADB002
64 :
65 : /*
66 : * Typically, we put no flags in the multiboot header, as it exists solely
67 : * to reassure the loader that we're a valid binary. The exception to this
68 : * is when we want the loader to configure the framebuffer for us.
69 : */
70 :
71 0 : #define MULTIBOOT_HEADER_FLAG_MEM BIT(1) /* want mem_/mmap_* info */
72 0 : #define MULTIBOOT_HEADER_FLAG_FB BIT(2) /* want fb_* info */
73 :
74 : #ifdef CONFIG_INTEL_MULTIBOOTFB_DISPLAY
75 : #define MULTIBOOT_HEADER_FLAGS \
76 : (MULTIBOOT_HEADER_FLAG_FB | MULTIBOOT_HEADER_FLAG_MEM)
77 : #else
78 0 : #define MULTIBOOT_HEADER_FLAGS MULTIBOOT_HEADER_FLAG_MEM
79 : #endif
80 :
81 : /* The flags in the boot info structure tell us which fields are valid. */
82 :
83 0 : #define MULTIBOOT_INFO_FLAGS_MEM BIT(0) /* mem_* valid */
84 0 : #define MULTIBOOT_INFO_FLAGS_CMDLINE BIT(2) /* cmdline* valid */
85 0 : #define MULTIBOOT_INFO_FLAGS_MMAP BIT(6) /* mmap_* valid */
86 0 : #define MULTIBOOT_INFO_FLAGS_FB BIT(12) /* fb_* valid */
87 :
88 : /* The only fb_type we support is RGB. No text modes and no color palettes. */
89 :
90 0 : #define MULTIBOOT_INFO_FB_TYPE_RGB 1
91 :
92 : #endif /* ZEPHYR_INCLUDE_ARCH_X86_MULTIBOOT_H_ */
|