boot: use yboot2-proto instead of yboot2 itself
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[submodule "boot/yboot2-proto"]
|
||||
path = boot/yboot2-proto
|
||||
url = https://git.alnyan.me/yggdrasil/yboot2-proto
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <config.h>
|
||||
// For loader magic
|
||||
#include <yboot2/include/protocol.h>
|
||||
#include <yboot2-proto/include/protocol.h>
|
||||
|
||||
.section .text
|
||||
.global _entry_yboot
|
||||
|
||||
@@ -2,17 +2,26 @@
|
||||
|
||||
char yboot_memory_map_data[32768];
|
||||
|
||||
struct yboot_v1 yboot_data __attribute__((section(".data.boot, \"aw\", %progbits //"))) = {
|
||||
.header = {
|
||||
.kernel_magic = YB_KERNEL_MAGIC_V1
|
||||
struct yb_proto_v1 yboot_data __attribute__((section(".data.boot, \"aw\", %progbits //"))) = {
|
||||
.hdr = {
|
||||
.kernel_magic = YB_KERNEL_MAGIC_V1A
|
||||
},
|
||||
|
||||
.flags = 0
|
||||
#if defined(VESA_ENABLE)
|
||||
.video_width = VESA_WIDTH,
|
||||
.video_height = VESA_HEIGHT,
|
||||
.video_format = YB_VIDEO_FORMAT_BGR32,
|
||||
| YB_FLAG_VIDEO
|
||||
#endif
|
||||
| YB_FLAG_INITRD
|
||||
| YB_FLAG_UPPER,
|
||||
|
||||
.memory_map_data = (uint64_t) yboot_memory_map_data - 0xFFFFFF0000000000,
|
||||
.memory_map_size = sizeof(yboot_memory_map_data)
|
||||
.memory_map = {
|
||||
.address = (uint64_t) yboot_memory_map_data - 0xFFFFFF0000000000,
|
||||
.size = sizeof(yboot_memory_map_data)
|
||||
},
|
||||
#if defined(VESA_ENABLE)
|
||||
.video = {
|
||||
.width = VESA_WIDTH,
|
||||
.height = VESA_HEIGHT,
|
||||
.format = YB_LFB_BGR32,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
+10
-8
@@ -153,12 +153,12 @@ static void entry_yboot(void) {
|
||||
kinfo("Provided command line: \"%s\"\n", yboot_data.cmdline);
|
||||
kernel_set_cmdline(yboot_data.cmdline);
|
||||
|
||||
if (yboot_data.video_framebuffer) {
|
||||
boot_video_info.width = yboot_data.video_width;
|
||||
boot_video_info.height = yboot_data.video_height;
|
||||
if ((yboot_data.flags & YB_FLAG_VIDEO) && yboot_data.video.framebuffer) {
|
||||
boot_video_info.width = yboot_data.video.width;
|
||||
boot_video_info.height = yboot_data.video.height;
|
||||
boot_video_info.bpp = 32;
|
||||
boot_video_info.pitch = yboot_data.video_pitch;
|
||||
boot_video_info.framebuffer_phys = yboot_data.video_framebuffer;
|
||||
boot_video_info.pitch = yboot_data.video.pitch;
|
||||
boot_video_info.framebuffer_phys = yboot_data.video.framebuffer;
|
||||
}
|
||||
|
||||
if (yboot_data.initrd_base) {
|
||||
@@ -168,9 +168,11 @@ static void entry_yboot(void) {
|
||||
}
|
||||
|
||||
phys_memory_map.format = MM_PHYS_MMAP_FMT_YBOOT;
|
||||
phys_memory_map.address = (void *) MM_VIRTUALIZE(yboot_data.memory_map_data);
|
||||
phys_memory_map.entry_size = yboot_data.memory_map_entsize;
|
||||
phys_memory_map.entry_count = yboot_data.memory_map_size / yboot_data.memory_map_entsize;
|
||||
phys_memory_map.address = (void *) MM_VIRTUALIZE(yboot_data.memory_map.address);
|
||||
extern char yboot_memory_map_data[];
|
||||
_assert((void *) MM_VIRTUALIZE(yboot_data.memory_map.address) == yboot_memory_map_data);
|
||||
phys_memory_map.entry_size = yboot_data.memory_map.entsize;
|
||||
phys_memory_map.entry_count = yboot_data.memory_map.size / yboot_data.memory_map.entsize;
|
||||
}
|
||||
|
||||
void kernel_early_init(uint64_t entry_method) {
|
||||
|
||||
Submodule
+1
Submodule boot/yboot2-proto added at f9c0ad12f7
@@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#include <yboot2/include/protocol.h>
|
||||
#include <yboot2-proto/include/protocol.h>
|
||||
|
||||
extern struct yboot_v1 yboot_data;
|
||||
extern struct yb_proto_v1 yboot_data;
|
||||
|
||||
Reference in New Issue
Block a user