diff --git a/hermit/Makefile b/hermit/Makefile index 1558c9f86..d5e5880d8 100644 --- a/hermit/Makefile +++ b/hermit/Makefile @@ -139,7 +139,6 @@ include/hermit/config.inc: include/hermit/config.h @awk '/^#define MAX_CORES/{ print "%define MAX_CORES", $$3 }' include/hermit/config.h >> include/hermit/config.inc @awk '/^#define KERNEL_STACK_SIZE/{ print "%define KERNEL_STACK_SIZE", $$3 }' include/hermit/config.h >> include/hermit/config.inc @awk '/^#define VIDEO_MEM_ADDR/{ print "%define VIDEO_MEM_ADDR", $$3 }' include/hermit/config.h >> include/hermit/config.inc - @awk '/^#define CONFIG_VGA/{ print "%define CONFIG_VGA" }' include/hermit/config.h >> include/hermit/config.inc %.o : %.asm include/hermit/config.inc @echo [ASM] $@ diff --git a/hermit/arch/x86/include/asm/multiboot.h b/hermit/arch/x86/include/asm/multiboot.h deleted file mode 100644 index c6bc13558..000000000 --- a/hermit/arch/x86/include/asm/multiboot.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2010, Stefan Lankes, RWTH Aachen University - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @author Stefan Lankes - * @file arch/x86/include/asm/multiboot.h - * @brief Structures related to the Multiboot interface - * - * HermitCore is able to use Multiboot (http://www.gnu.org/software/grub/manual/multiboot/), - * which specifies an interface between a boot loader and a operating system.\n - * \n - * This file contains several structures needed to match the interface. - */ - -#ifndef __ARCH_MULTIBOOT_H__ -#define __ARCH_MULTIBOOT_H__ - -#include - -/// Does the bootloader provide mem_* fields? -#define MULTIBOOT_INFO_MEM (1 << 0) -/// Does the bootloader provide the command-line? -#define MULTIBOOT_INFO_CMDLINE (1 << 2) -/// Does the bootloader provide a list of modules? -#define MULTIBOOT_INFO_MODS (1 << 3) -/// Does the bootloader provide a full memory map? -#define MULTIBOOT_INFO_MEM_MAP (1 << 6) - -typedef uint16_t multiboot_uint16_t; -typedef uint32_t multiboot_uint32_t; -typedef uint64_t multiboot_uint64_t; - -/* The symbol table for a.out. */ -struct multiboot_aout_symbol_table -{ - multiboot_uint32_t tabsize; - multiboot_uint32_t strsize; - multiboot_uint32_t addr; - multiboot_uint32_t reserved; -}; -typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t; - -/* The section header table for ELF. */ -struct multiboot_elf_section_header_table -{ - multiboot_uint32_t num; - multiboot_uint32_t size; - multiboot_uint32_t addr; - multiboot_uint32_t shndx; -}; -typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t; - -struct multiboot_info -{ - /** Multiboot info version number */ - multiboot_uint32_t flags; - - /** Available memory from BIOS */ - multiboot_uint32_t mem_lower; - multiboot_uint32_t mem_upper; - - /** "root" partition */ - multiboot_uint32_t boot_device; - - /** Kernel command line */ - multiboot_uint32_t cmdline; - - /** Boot-Module list */ - multiboot_uint32_t mods_count; - multiboot_uint32_t mods_addr; - - union - { - multiboot_aout_symbol_table_t aout_sym; - multiboot_elf_section_header_table_t elf_sec; - } u; - - /** Memory Mapping buffer */ - multiboot_uint32_t mmap_length; - multiboot_uint32_t mmap_addr; - - /** Drive Info buffer */ - multiboot_uint32_t drives_length; - multiboot_uint32_t drives_addr; - - /** ROM configuration table */ - multiboot_uint32_t config_table; - - /** Boot Loader Name */ - multiboot_uint32_t boot_loader_name; - - /** APM table */ - multiboot_uint32_t apm_table; - - /** Video */ - multiboot_uint32_t vbe_control_info; - multiboot_uint32_t vbe_mode_info; - multiboot_uint16_t vbe_mode; - multiboot_uint16_t vbe_interface_seg; - multiboot_uint16_t vbe_interface_off; - multiboot_uint16_t vbe_interface_len; -}; - -typedef struct multiboot_info multiboot_info_t; - -struct multiboot_mmap_entry -{ - multiboot_uint32_t size; - multiboot_uint64_t addr; - multiboot_uint64_t len; -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 - multiboot_uint32_t type; -} __attribute__((packed)); -typedef struct multiboot_mmap_entry multiboot_memory_map_t; - -struct multiboot_mod_list -{ - /** the memory used goes from bytes ’mod start’ to ’mod end-1’ inclusive */ - multiboot_uint32_t mod_start; - multiboot_uint32_t mod_end; - - /** Module command line */ - multiboot_uint32_t cmdline; - - /** padding to take it to 16 bytes (must be zero) */ - multiboot_uint32_t pad; -}; -typedef struct multiboot_mod_list multiboot_module_t; - -/// Pointer to multiboot structure -/// This pointer is declared at set by entry.asm -extern multiboot_info_t* mb_info; - -#endif diff --git a/hermit/arch/x86/include/asm/vga.h b/hermit/arch/x86/include/asm/vga.h deleted file mode 100644 index 4f7926c38..000000000 --- a/hermit/arch/x86/include/asm/vga.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2010, Stefan Lankes, RWTH Aachen University - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @author Stefan Lankes - * @file arch/x86/include/asm/vga.h - * @brief VGA output related code - */ - -#ifndef __ARCH_VGA_H__ -#define __ARCH_VGA_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @brief Initialize VGA output and clear the screen */ -void vga_init(void); - -/** @brief Simple string output on screen. - * - * If you want a new line you will have to "\\n". - * - * @return Length of output in bytes - */ -int vga_puts(const char *text); - -/** @brief Simple character output on screen. - * - * @return The original input character casted to int - */ -int vga_putchar(unsigned char c); - -/** @brief Clear the screen */ -void vga_cls(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/hermit/arch/x86/kernel/Makefile b/hermit/arch/x86/kernel/Makefile index 8c02a5042..e78518aa2 100644 --- a/hermit/arch/x86/kernel/Makefile +++ b/hermit/arch/x86/kernel/Makefile @@ -1,4 +1,4 @@ -C_source := irq.c idt.c isrs.c gdt.c processor.c timer.c tasks.c vga.c apic.c +C_source := irq.c idt.c isrs.c gdt.c processor.c timer.c tasks.c apic.c ASM_source := entry.asm string.asm MODULE := arch_x86_kernel diff --git a/hermit/arch/x86/kernel/apic.c b/hermit/arch/x86/kernel/apic.c index e01891269..abac78958 100644 --- a/hermit/arch/x86/kernel/apic.c +++ b/hermit/arch/x86/kernel/apic.c @@ -41,7 +41,6 @@ #include #include #include -#include /* * Note that linker symbols are not variables, they have no memory allocated for diff --git a/hermit/arch/x86/kernel/entry.asm b/hermit/arch/x86/kernel/entry.asm index 2f6f8dbe2..ced258ee0 100644 --- a/hermit/arch/x86/kernel/entry.asm +++ b/hermit/arch/x86/kernel/entry.asm @@ -488,11 +488,6 @@ kernel_space2: SECTION .data -global mb_info: -align 16 -mb_info: - DQ 0 - align 4096 global boot_stack boot_stack: diff --git a/hermit/arch/x86/kernel/vga.c b/hermit/arch/x86/kernel/vga.c deleted file mode 100644 index 098b172d3..000000000 --- a/hermit/arch/x86/kernel/vga.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c) 2010, Stefan Lankes, RWTH Aachen University - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include - -#ifdef CONFIG_VGA - -/* - * These define our textpointer, our background and foreground - * colors (attributes), and x and y cursor coordinates - */ -static unsigned short *textmemptr; -static int attrib = 0x0F; -static int csr_x = 0, csr_y = 0; - -inline static unsigned short *memsetw(unsigned short *dest, unsigned short val, size_t count) -{ - size_t i; - - if (BUILTIN_EXPECT(!dest, 0)) - return dest; - - for (i = 0; i < count; i++) - dest[i] = val; - - return dest; -} - -/* Scrolls the screen */ -static void scroll(void) -{ - unsigned blank, temp; - - /* - * A blank is defined as a space... we need to give it - * backcolor too - */ - blank = 0x20 | (attrib << 8); - - /* Row 25 is the end, this means we need to scroll up */ - if (csr_y >= 25) { - - /* - * Move the current text chunk that makes up the screen - * - * back in the buffer by one line - */ - temp = csr_y - 25 + 1; - memcpy(textmemptr, textmemptr + temp * 80, - (25 - temp) * 80 * 2); - - /* - * Finally, we set the chunk of memory that occupies - * the last line of text to our 'blank' character - */ - memsetw(textmemptr + (25 - temp) * 80, blank, 80); - csr_y = 25 - 1; - } -} - -/* - * Updates the hardware cursor: the little blinking line - * on the screen under the last character pressed! - */ -static void move_csr(void) -{ - unsigned temp; - - /* - * The equation for finding the index in a linear - * chunk of memory can be represented by: - * Index = [(y * width) + x] */ - temp = csr_y * 80 + csr_x; - - /* - * This sends a command to indicies 14 and 15 in the - * CRT Control Register of the VGA controller. These - * are the high and low bytes of the index that show - * where the hardware cursor is to be 'blinking'. To - * learn more, you should look up some VGA specific - * programming documents. A great start to graphics: - * http://www.brackeen.com/home/vga - */ - outportb(0x3D4, 14); - outportb(0x3D5, temp >> 8); - outportb(0x3D4, 15); - outportb(0x3D5, temp); -} - -/* Clears the screen */ -void vga_clear(void) -{ - unsigned blank; - int i; - - /* - * Again, we need the 'short' that will be used to - * represent a space with color - */ - blank = 0x20 | (attrib << 8); - - /* - * Fills the entire screen with spaces in our current - * color - **/ - for (i = 0; i < 25; i++) - memsetw(textmemptr + i * 80, blank, 80); - - /* - * Update out virtual cursor, and then move the - * hardware cursor - */ - csr_x = 0; - csr_y = 0; - move_csr(); -} - -/* Puts a single character on the screen */ -int vga_putchar(unsigned char c) -{ - unsigned short *where; - unsigned att = attrib << 8; - - /* Handle a backspace by moving the cursor back one space */ - if (c == 0x08) { - if (csr_x != 0) - csr_x--; - } - - /* - * Handles a tab by incrementing the cursor's x, but only - * to a point that will make it divisible by 8 - */ - else if (c == 0x09) { - csr_x = (csr_x + 8) & ~(8 - 1); - } - - /* - * Handles a 'Carriage Return', which simply brings the - * cursor back to the margin - */ - else if (c == '\r') { - csr_x = 0; - } - - /* - * We handle our newlines the way DOS and BIOS do: we - * treat it as if a 'CR' was there also, so we bring the - * cursor to the margin and increment the 'y' value - */ - else if (c == '\n') { - csr_x = 0; - csr_y++; - } - - /* - * Any character greater than and including the space is a - * printable character. The equation for finding the index - * in a linear chunk of memory can be represented by: - * Index = [(y * width) + x] - */ - else if (c >= ' ') { - where = textmemptr + (csr_y * 80 + csr_x); - *where = c | att; /* Character AND attributes: color */ - csr_x++; - } - - /* - * If the cursor has reached the edge of the screen's width, we - * insert a new line in there - */ - if (csr_x >= 80) { - csr_x = 0; - csr_y++; - } - - /* Scroll the screen if needed, and finally move the cursor */ - scroll(); - move_csr(); - - return (int) c; -} - -/* Uses the routine above to output a string... */ -int vga_puts(const char *text) -{ - size_t i; - - for (i = 0; i < strlen(text); i++) - vga_putchar(text[i]); - - return i-1; -} - -/* Sets the forecolor and backcolor we will use */ -//void settextcolor(unsigned char forecolor, unsigned char backcolor) -//{ - - /* - * Top 4 bytes are the background, bottom 4 bytes - * are the foreground color - */ -// attrib = (backcolor << 4) | (forecolor & 0x0F); -//} - -/* Sets our text-mode VGA pointer, then clears the screen for us */ -void vga_init(void) -{ - textmemptr = (unsigned short *)VIDEO_MEM_ADDR; - vga_clear(); -} - -#endif diff --git a/hermit/arch/x86/mm/page.c b/hermit/arch/x86/mm/page.c index 57f118475..c984f56c3 100644 --- a/hermit/arch/x86/mm/page.c +++ b/hermit/arch/x86/mm/page.c @@ -43,7 +43,6 @@ #include #include -#include /* Note that linker symbols are not variables, they have no memory * allocated for maintaining a value, rather their address is their value. */ @@ -320,35 +319,9 @@ default_handler: int page_init(void) { - size_t addr, npages; - int i; - /* Replace default pagefault handler */ irq_uninstall_handler(14); irq_install_handler(14, page_fault_handler); - /* Map multiboot information and modules */ - if (mb_info) { - // already mapped => entry.asm - //addr = (size_t) mb_info & PAGE_MASK; - //npages = PAGE_FLOOR(sizeof(*mb_info)) >> PAGE_BITS; - //page_map(addr, addr, npages, PG_GLOBAL); - - if (mb_info->flags & MULTIBOOT_INFO_MODS) { - addr = mb_info->mods_addr; - npages = PAGE_FLOOR(mb_info->mods_count*sizeof(multiboot_module_t)) >> PAGE_BITS; - page_map(addr, addr, npages, PG_GLOBAL); - kprintf("Map module info at 0x%lx\n", addr); - - multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr); - for(i=0; imods_count; i++) { - addr = mmodule[i].mod_start; - npages = PAGE_FLOOR(mmodule[i].mod_end - mmodule[i].mod_start) >> PAGE_BITS; - page_map(addr, addr, npages, PG_GLOBAL); - kprintf("Map modules at 0x%lx\n", addr); - } - } - } - return 0; } diff --git a/hermit/fs/initrd.c b/hermit/fs/initrd.c index 2460fdbb1..098cf6345 100644 --- a/hermit/fs/initrd.c +++ b/hermit/fs/initrd.c @@ -31,7 +31,6 @@ #include #include #include -#include #include static vfs_node_t initrd_root; diff --git a/hermit/include/hermit/config.h b/hermit/include/hermit/config.h index d24da5910..4398ea96e 100644 --- a/hermit/include/hermit/config.h +++ b/hermit/include/hermit/config.h @@ -49,7 +49,6 @@ extern "C" { #define BYTE_ORDER LITTLE_ENDIAN //#define CONFIG_TICKLESS -//#define CONFIG_VGA #define BUILTIN_EXPECT(exp, b) __builtin_expect((exp), (b)) //#define BUILTIN_EXPECT(exp, b) (exp) diff --git a/hermit/include/hermit/vma.h b/hermit/include/hermit/vma.h index 9f903683b..981f8fee2 100644 --- a/hermit/include/hermit/vma.h +++ b/hermit/include/hermit/vma.h @@ -89,13 +89,8 @@ typedef struct vma { /** @brief Initalize the kernelspace VMA list * * Reserves several system-relevant virtual memory regions: - * - SMP boot page (SMP_SETUP_ADDR) - * - VGA video memory (VIDEO_MEM_ADDR) * - The kernel (kernel_start - kernel_end) - * - Multiboot structure (mb_info) - * - Multiboot mmap (mb_info->mmap_*) - * - Multiboot modules (mb_info->mods_*) - * - Init Ramdisk + * - Init Ramdisk * * @return * - 0 on success diff --git a/hermit/libkern/stdio.c b/hermit/libkern/stdio.c index 20b5d2fcf..dd5c0b31a 100644 --- a/hermit/libkern/stdio.c +++ b/hermit/libkern/stdio.c @@ -32,19 +32,11 @@ #include #include #include -#include -#ifdef CONFIG_VGA -#include -#endif #define NO_EARLY_PRINT 0x00 #define VGA_EARLY_PRINT 0x01 -#ifdef CONFIG_VGA -static uint32_t early_print = VGA_EARLY_PRINT; -#else static uint32_t early_print = NO_EARLY_PRINT; -#endif static spinlock_irqsave_t olock = SPINLOCK_IRQSAVE_INIT; static atomic_int32_t kmsg_counter = ATOMIC_INIT(-1); @@ -55,10 +47,6 @@ static atomic_int32_t kmsg_counter = ATOMIC_INIT(-1); int koutput_init(void) { -#ifdef CONFIG_VGA - vga_init(); -#endif - return 0; } @@ -76,11 +64,6 @@ int kputchar(int c) pos = atomic_int32_inc(&kmsg_counter); kmessages[pos % KMSG_SIZE] = (unsigned char) c; -#ifdef CONFIG_VGA - if (early_print & VGA_EARLY_PRINT) - vga_putchar(c); -#endif - if (early_print != NO_EARLY_PRINT) spinlock_irqsave_unlock(&olock); @@ -97,10 +80,6 @@ int kputs(const char *str) for(i=0; i #include -#include #include extern uint32_t base; @@ -186,7 +185,6 @@ int copy_page(size_t pdest, size_t psrc) int memory_init(void) { - unsigned int i; size_t addr; int ret = 0; @@ -200,120 +198,25 @@ int memory_init(void) return ret; } - // parse multiboot information for available memory - if (mb_info) { - if (mb_info->flags & MULTIBOOT_INFO_MEM_MAP) { - size_t end_addr; - multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) ((size_t) mb_info->mmap_addr); - multiboot_memory_map_t* mmap_end = (void*) ((size_t) mb_info->mmap_addr + mb_info->mmap_length); + //kprintf("base 0x%lx, limit 0x%lx\n", base, limit); - // mark available memory as free - while (mmap < mmap_end) { - if (mmap->type == MULTIBOOT_MEMORY_AVAILABLE) { - /* set the available memory as "unused" */ - addr = mmap->addr; - end_addr = addr + mmap->len; - - while ((addr < end_addr) && (addr < (BITMAP_SIZE*8*PAGE_SIZE))) { - if (page_marked(addr >> PAGE_BITS)) { - page_clear_mark(addr >> PAGE_BITS); - atomic_int32_inc(&total_pages); - atomic_int32_inc(&total_available_pages); - } - addr += PAGE_SIZE; - } - } - mmap = (multiboot_memory_map_t*) ((size_t) mmap + sizeof(uint32_t) + mmap->size); - } - } else if (mb_info->flags & MULTIBOOT_INFO_MEM) { - size_t page; - size_t pages_lower = mb_info->mem_lower >> 2; /* KiB to page number */ - size_t pages_upper = mb_info->mem_upper >> 2; - - for (page=0; page BITMAP_SIZE*8-256) - pages_upper = BITMAP_SIZE*8-256; - - for (page=0; page> PAGE_BITS)) { + page_clear_mark(addr >> PAGE_BITS); + atomic_int32_inc(&total_pages); + atomic_int32_inc(&total_available_pages); } - - // mark mb_info as used - page_set_mark((size_t) mb_info >> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); - - - if (mb_info->flags & MULTIBOOT_INFO_MODS) { - // mark modules list as used - for(addr=mb_info->mods_addr; addrmods_addr+mb_info->mods_count*sizeof(multiboot_module_t); addr+=PAGE_SIZE) { - page_set_mark(addr >> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); - } - - // mark modules as used - multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr); - for(i=0; imods_count; i++) { - for(addr=mmodule[i].mod_start; addr> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); - } - } - } - - // mark kernel as used, we use 2MB pages to map the kernel - for(addr=(size_t) &kernel_start; addr<(((size_t) &kernel_end + 0x200000ULL) & 0xFFFFFFFFFFE00000ULL); addr+=PAGE_SIZE) { - page_set_mark(addr >> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); - } - - } else { - //kprintf("base 0x%lx, limit 0x%lx\n", base, limit); - - // mark available memory as free - for(addr=base+0x200000ULL; (addr> PAGE_BITS)) { - page_clear_mark(addr >> PAGE_BITS); - atomic_int32_inc(&total_pages); - atomic_int32_inc(&total_available_pages); - } - } - - atomic_int32_add(&total_allocated_pages, 0x200000 / PAGE_SIZE); - atomic_int32_add(&total_pages, 0x200000 / PAGE_SIZE); } + atomic_int32_add(&total_allocated_pages, 0x200000 / PAGE_SIZE); + atomic_int32_add(&total_pages, 0x200000 / PAGE_SIZE); + ret = vma_init(); if (BUILTIN_EXPECT(ret, 0)) { kprintf("Failed to initialize VMA regions: %d\n", ret); return ret; } - /* - * Modules like the init ram disk are already loaded. - * Therefore, we set these pages as used. - */ - if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MODS)) { - multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr); - for(i=0; imods_count; i++) { - for(addr=mmodule[i].mod_start; addr> PAGE_BITS); - atomic_int32_inc(&total_allocated_pages); - atomic_int32_dec(&total_available_pages); - } - } - } - return ret; } diff --git a/hermit/mm/vma.c b/hermit/mm/vma.c index d01c2e6c7..77897641d 100644 --- a/hermit/mm/vma.c +++ b/hermit/mm/vma.c @@ -31,7 +31,6 @@ #include #include #include -#include /* * Note that linker symbols are not variables, they have no memory allocated for @@ -63,42 +62,6 @@ int vma_init(void) if (BUILTIN_EXPECT(ret, 0)) goto out; -#ifdef CONFIG_VGA - // add VGA video memory - ret = vma_add(VIDEO_MEM_ADDR, VIDEO_MEM_ADDR + PAGE_SIZE, VMA_READ|VMA_WRITE); - if (BUILTIN_EXPECT(ret, 0)) - goto out; -#endif - - // add Multiboot structures as modules - if (mb_info) { - ret = vma_add(PAGE_CEIL((size_t) mb_info), - PAGE_FLOOR((size_t) mb_info + sizeof(multiboot_info_t)), - VMA_READ|VMA_CACHEABLE); - if (BUILTIN_EXPECT(ret, 0)) - goto out; - - if (mb_info->flags & MULTIBOOT_INFO_MODS) { - multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr); - - ret = vma_add(PAGE_CEIL((size_t) mb_info->mods_addr), - PAGE_FLOOR((size_t) mb_info->mods_addr + mb_info->mods_count*sizeof(multiboot_module_t)), - VMA_READ|VMA_CACHEABLE); - - //TODO: Why do we get error code -22 (-EINVAL); - ret = 0; // TODO: Remove workaround - - int i; - for(i=0; imods_count; i++) { - ret = vma_add(PAGE_CEIL(mmodule[i].mod_start), - PAGE_FLOOR(mmodule[i].mod_end), - VMA_READ|VMA_WRITE|VMA_CACHEABLE); - if (BUILTIN_EXPECT(ret, 0)) - goto out; - } - } - } - out: return ret; }