diff options
Diffstat (limited to 'src/kernel/main.c')
-rw-r--r-- | src/kernel/main.c | 118 |
1 files changed, 26 insertions, 92 deletions
diff --git a/src/kernel/main.c b/src/kernel/main.c index b34f816..26cc5e4 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -1,7 +1,8 @@ #include <stdint.h> +#include "paging.h" #include "serial.h" +#include "window.h" #include "panic.h" -#include "paging.h" #include "boot.h" #include "util.h" #include "fat.h" @@ -12,57 +13,19 @@ #include "pci.h" #include "elf.h" #include "log.h" -#include "vga.h" #include "kbd.h" void _start_user_mode() __attribute__ ((noreturn)); __attribute__ ((noreturn)) void main() { - char nbuf[11]; - init_pagemap(); init_paging(); init_tasks(); init_serial(); - set_log_mode(LOG_SYSTEM); - vga_blank(); - - logsz("Portland v0.0.11\n\n"); pci_init(); -/* - u16_dec(n_pci_devices, nbuf); - logsz(nbuf); - logsz(" PCI device(s) found:\n"); - - for (uint16_t n = 0; n < n_pci_devices; ++n) { - struct pci_device *pd = nth_pci_device(n); - - u16_hex(pd->number, nbuf); - logsz(" "); - logsz(nbuf); - logsz(": "); - - u16_hex(pd->id_vendor, nbuf); - nbuf[4] = '.'; - u16_hex(pd->id_device, nbuf + 5); - logsz(nbuf); - - u8_hex(pd->class, nbuf); - nbuf[2] = '.'; - u8_hex(pd->subclass, nbuf + 3); - nbuf[5] = '.'; - u8_hex(pd->iface, nbuf + 6); - logsz(" ("); - logsz(nbuf); - logsz(")\n"); - } - - logch('\n'); -*/ - init_fat(); //other fs drivers @@ -71,65 +34,36 @@ void main() { init_ide(); //other drive drivers -/* - u8_dec(n_drives, nbuf); - logsz(nbuf); - logsz(" drive(s) found:\n"); - - for (uint8_t n = 0; n < n_drives; ++n) { - struct drive *d = drives + n; - - u8_dec(n, nbuf); - logsz(" sd"); - logsz(nbuf); - logsz(" ("); - logsz(d->drive_type); - logsz(", "); - - u32_dec(d->n_sectors / 2, nbuf); - logsz(nbuf); - if (d->n_sectors % 2) - logsz(".5"); - logsz("k): "); - - logsz(d->fs_type); - - uint32_t free_sectors = d->get_free_sectors(d); - if (free_sectors != -1) { - u32_dec(free_sectors / 2, nbuf); - logsz(", "); - logsz(nbuf); - if (free_sectors % 2) - logsz(".5"); - logsz("k free"); - } - - logsz(".\n"); - } + init_log(); - logch('\n'); -*/ + init_kbd(); + init_idt(); + + paint_bg(); + + logf(LOG_INFO, "Kernel initialization done."); + logf(LOG_INFO, "Available kernel memory: %dk", kernel_pages_left * 4); + logf(LOG_INFO, "Available user memory: %dk", user_pages_left * 4); + + logf(LOG_INFO, "PCI devices:"); + for (uint16_t i = 0; i < n_pci_devices; ++i) { + const struct pci_device *dev = nth_pci_device(i); + logf(LOG_INFO, " %hw:%hw (%hb:%hb)", dev->id_vendor, dev->id_device, dev->class, dev->subclass); + } - if (BOOT_INFO->support_flags & BIS_PAE) - logsz("Processor supports PAE (but Portland OS does not yet).\n"); - else - logsz("Processor does not support PAE.\n"); + logf(LOG_INFO, "Drives:"); + for (uint8_t i = 0; i < n_drives; ++i) { + const struct drive *d = &drives[i]; + const uint32_t free = d->get_free_sectors(d); + logf(LOG_INFO, " %s: %d%sk, %s (%d%sk free)", d->drive_type, d->n_sectors / 2, d->n_sectors % 2 ? ".5" : "", d->fs_type, free / 2, free % 2 ? ".5" : ""); + } - logsz("Kernel dynamic area size: "); - u32_dec(max_kernel_pages * 4, nbuf); - logsz(nbuf); - logsz("k\nUserspace area size: "); - u32_dec(max_user_pages * 4, nbuf); - logsz(nbuf); - logsz("k\n\n"); + logf(LOG_INFO, "Loading init program."); - if (!try_elf_run(drives, "bin/init", "")) + if (!try_elf_run(drives, "bin/init", "", 0)) PANIC("Failed to load init program."); - init_kbd(); - init_idt(); + logf(LOG_INFO, "Switching to init task."); - logsz("Switching to init task.\n"); - set_log_mode(LOG_USER); _start_user_mode(); }
\ No newline at end of file |