/* See the end of this file for copyright and license terms. */ #include #include #include #include extern void _image_start_phys; extern void _image_end_phys; /* these are initialized by pages_init() */ void *kheap_start; void *kheap_end; int kmalloc_init(uintptr_t _phys_start, uintptr_t _phys_end) { phys_start = _phys_start; phys_end = _phys_end; /* * The kernel image is very likely gonna be within the physical memory * range, so we're gonna need to do some cropping in order to not hand * out pages that actually contain kernel code. * Furthermore, somebody should probably clean up this mess somehow. */ uintptr_t image_start_phys = (uintptr_t)&_image_start_phys; uintptr_t image_end_phys = (uintptr_t)&_image_end_phys; if (phys_start < image_start_phys && phys_end > image_start_phys) { if (image_start_phys - phys_start > phys_end - image_start_phys) phys_end = image_start_phys; else phys_start = image_end_phys; } if (phys_start < image_end_phys && _phys_end > image_end_phys) { if (image_end_phys - phys_start > phys_end - image_end_phys) phys_end = image_start_phys; else phys_start = image_end_phys; } phys_start = align_ceil(phys_start, HUGEPAGE_SIZE); /* * This is intentionally not aligned to hugepages, because __early_get_page() * shrinks it in single PAGE_SIZE steps whenever it is called anyway. * I know, this is a terrible hack, but it will be aligned to a hugepage * from within pages_init(), right after the entire physical memory has * been mapped to the direct area (which is the only reason we need to * be able to allocate pages before the page frame allocator is set up * in the first place). */ phys_end = align_floor(phys_end, PAGE_SIZE); int err = pages_init(); if (err) return err; slab_init(); return 0; } /* * This file is part of GayBSD. * Copyright (c) 2021 fef . * * GayBSD is nonviolent software: you may only use, redistribute, and/or * modify it under the terms of the Cooperative Nonviolent Public License * (CNPL) as found in the LICENSE file in the source code root directory * or at ; either version 7 * of the license, or (at your option) any later version. * * GayBSD comes with ABSOLUTELY NO WARRANTY, to the extent * permitted by applicable law. See the CNPL for details. */