summaryrefslogtreecommitdiff
path: root/kc/boot
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-12-19 22:41:15 +0000
committerAda Christine <adachristine18@gmail.com>2021-12-19 22:41:15 +0000
commite303a03e7c96bc5bf7fa93f7b46ce63196893d7a (patch)
treef187b374feec85015d6df1f94db618a3f5cc893f /kc/boot
parentbff63a4337eb3388617d230970c5eb2684d6a215 (diff)
moving files around
Diffstat (limited to 'kc/boot')
-rw-r--r--kc/boot/Makefile37
-rw-r--r--kc/boot/kc_main.c73
2 files changed, 110 insertions, 0 deletions
diff --git a/kc/boot/Makefile b/kc/boot/Makefile
new file mode 100644
index 0000000..76bd4d4
--- /dev/null
+++ b/kc/boot/Makefile
@@ -0,0 +1,37 @@
+include ../../defaults.mk
+
+VPATH := ../../lib ../
+
+TARGET := efi.os
+.DEFAULT: $(TARGET)
+
+# EFI API for temporary things
+
+EFIAPIDIR := /usr/local/include/efi
+
+CPPFLAGS += -I../../api -I$(EFIAPIDIR) -I$(EFIAPIDIR)/$(ARCH) -I$(EFIAPIDIR)/protocol
+CFLAGS += -Wno-unused-const-variable -Wno-unused-function -fvisibility=hidden \
+ -g -fshort-wchar -mgeneral-regs-only
+
+LIBDIRS += -L$(dir $(shell $(CC) -print-libgcc-file-name))
+LDSCRIPT := ../component.ld
+LDFLAGS += -z max-page-size=4096 --export-dynamic -pic --no-dynamic-linker
+LOADLIBES := -lgcc
+
+OBJS := entry_x86_64.o reloc_x86_64.o kc_main.o elf64.o memcmp.o memcpy.o \
+ memmove.o memset.o
+$(OBJS): CFLAGS += -fPIC
+
+DEPS := $(patsubst %.o,%.d,$(OBJS))
+
+$(TARGET): $(LDSCRIPT) $(MAKEFILE_LIST)
+$(TARGET): $(OBJS)
+
+CLEANLIST := $(wildcard $(OBJS) $(TARGET))
+DCLEANLIST := $(wildcard $(DEPS))
+
+include ../../rules.mk
+-include $(DEPS)
+
+.DEFAULT: $(TARGET)
+
diff --git a/kc/boot/kc_main.c b/kc/boot/kc_main.c
new file mode 100644
index 0000000..1829616
--- /dev/null
+++ b/kc/boot/kc_main.c
@@ -0,0 +1,73 @@
+#include <loader/efi/shim.h>
+#include <kernel/memory/range.h>
+
+#include <stdbool.h>
+
+#include "../lib/elf.h"
+
+struct efi_memory_map
+{
+ struct memory_range buffer;
+ UINTN size;
+ UINTN key;
+ UINTN descsize;
+ UINT32 descver;
+};
+
+struct efi_video_data
+{
+ struct memory_range buffer;
+ UINT32 width;
+ UINT32 height;
+ UINT32 pitch;
+ EFI_GRAPHICS_PIXEL_FORMAT format;
+ EFI_PIXEL_BITMASK mask;
+};
+
+struct efi_boot_data
+{
+ struct efi_memory_map memory_map;
+ struct efi_video_data video_data;
+ void *acpi_rsdp;
+ unsigned long acpi_version;
+};
+
+struct efi_loader_image kernel_image =
+{
+ .path = L"\\adasoft\\sophia\\kernel.os"
+};
+
+static struct efi_boot_data boot_data;
+
+// TODO: split relocation code out into library
+
+EFI_STATUS kc_main(struct efi_loader_interface *interface)
+{
+ // 1. load kernel and boot modules into memory
+ // 2. generate page tables for kernel and boot modules
+ // 2. gather boot data, store as type SystemMemoryType
+ // 3. exit boot services
+ // 5. ???????????
+
+ EFI_STATUS status;
+
+ if (!interface)
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (!EFI_ERROR((status = interface->image_open(&kernel_image))) &&
+ !EFI_ERROR((status = interface->image_alloc(&kernel_image))) &&
+ !EFI_ERROR((status = interface->image_load(&kernel_image))))
+ {
+ (void)boot_data;
+ }
+
+ __asm__ volatile (
+ "cli\n\t"
+ "hlt\n\t"
+ );
+
+ return status;
+}
+