diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-12-19 22:41:15 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-12-19 22:41:15 +0000 |
| commit | e303a03e7c96bc5bf7fa93f7b46ce63196893d7a (patch) | |
| tree | f187b374feec85015d6df1f94db618a3f5cc893f /kc/boot | |
| parent | bff63a4337eb3388617d230970c5eb2684d6a215 (diff) | |
moving files around
Diffstat (limited to 'kc/boot')
| -rw-r--r-- | kc/boot/Makefile | 37 | ||||
| -rw-r--r-- | kc/boot/kc_main.c | 73 |
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; +} + |
