From 7ab36488147a2137d7c1dcf99eff4b47ea8ece49 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Mon, 25 Jul 2016 07:55:38 +0200 Subject: [PATCH] map physical memory address of the graphic adapter --- hermit/arch/x86/kernel/entry.asm | 17 ++++++++++++++++- hermit/mm/vma.c | 5 +++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/hermit/arch/x86/kernel/entry.asm b/hermit/arch/x86/kernel/entry.asm index d346fed8c..c610cd8e4 100644 --- a/hermit/arch/x86/kernel/entry.asm +++ b/hermit/arch/x86/kernel/entry.asm @@ -85,6 +85,7 @@ align 4 heap_start_address dq 0 header_start_address dq 0 disable_x2apic dd 1 + single_kernel dd 1 ; Bootstrap page tables are used during the initialization. align 4096 @@ -122,8 +123,8 @@ start64: mov rax, kernel_end sub rax, kernel_start mov QWORD [image_size], rax - xor rax, rax + xor rax, rax mov eax, DWORD [cpu_online] cmp eax, 0 jne Lno_pml4_init @@ -162,6 +163,15 @@ start64: add rax, [base] mov QWORD [rdi+511*8], rax + ; map vga 1:1 + mov rax, VIDEO_MEM_ADDR ; map vga + and rax, ~0xFFF ; page align lower half + mov rdi, rax + shr rdi, 9 ; (edi >> 12) * 8 (index for boot_pgt) + add rdi, boot_pgt + or rax, 0x113 ; set present, global, writable and cache disable bits + mov QWORD [rdi], rax + ; remap kernel mov rdi, kernel_start shr rdi, 18 ; (edi >> 21) * 8 (index for boot_pgd) @@ -640,6 +650,11 @@ Lgo3: add rsp, 16 iretq +global is_single_kernel +is_single_kernel + mov eax, DWORD [single_kernel] + ret + SECTION .data align 4096 diff --git a/hermit/mm/vma.c b/hermit/mm/vma.c index 726a268bd..2774fb738 100644 --- a/hermit/mm/vma.c +++ b/hermit/mm/vma.c @@ -69,6 +69,11 @@ int vma_init(void) if (BUILTIN_EXPECT(ret, 0)) goto out; + // 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; + out: return ret; }