diff --git a/second/bootx.c b/second/bootx.c index 7af70a2..4a0f4ad 100644 --- a/second/bootx.c +++ b/second/bootx.c @@ -5,10 +5,55 @@ * */ - +#include "vga.h" +#include "bank.h" #include "bootx.h" +struct boot_infos bootx_infos; + +extern unsigned long machine_id; +extern unsigned long arch_type; + void bootx_init(char* command_line, char* ramdisk_start, unsigned long ramdisk_size) { + int i; + + //bootx_infos.version = BOOT_INFO_VERSION; + bootx_infos.version = 4; + bootx_infos.compatible_version = BOOT_INFO_COMPATIBLE_VERSION; + + bootx_infos.logicalDisplayBase = (u_int8_t*)vga_get_video(); + bootx_infos.machineID = machine_id; + bootx_infos.architecture = arch_type; + + bootx_infos.deviceTreeOffset = 0; + bootx_infos.deviceTreeSize = 0; + + bootx_infos.dispDeviceRect[0] = 0; /* left */ + bootx_infos.dispDeviceRect[1] = 0; /* top */ + bootx_infos.dispDeviceRect[2] = vga_get_width(); /* right */ + bootx_infos.dispDeviceRect[3] = vga_get_height(); /* bottom */ + bootx_infos.dispDeviceDepth = vga_get_depth(); + bootx_infos.dispDeviceBase = (u_int8_t*)vga_get_videobase(); + bootx_infos.dispDeviceRowBytes = vga_get_row_bytes(); + bootx_infos.dispDeviceColorsOffset = 0; + + bootx_infos.dispDeviceRegEntryOffset = 0; + + bootx_infos.ramDisk = (u_int32_t)ramdisk_start; + bootx_infos.ramDiskSize = ramdisk_size; + + bootx_infos.kernelParamsOffset = (long)command_line - (long)&bootx_infos; + + for (i = 0; i < memory_map.bank_number; i++) + { + bootx_infos.physMemoryMap[i].physAddr = memory_map.bank[i].physAddr; + bootx_infos.physMemoryMap[i].size = memory_map.bank[i].size; + } + + bootx_infos.physMemoryMapSize = i; + + bootx_infos.frameBufferSize = 0; + //bootx_infos.totalParamsSize }