[fix] Serial & PFPrint
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// 存放各类参数定义,后续给CI用
|
// 存放各类参数定义,后续给CI用
|
||||||
|
|
||||||
#define ENABLE_SERIAL_PRINTS true
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
#include <memory/heap.h>
|
#include <memory/heap.h>
|
||||||
#include <memory/pmm.h>
|
#include <memory/pmm.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <BUILD_INFOS.h>
|
|
||||||
|
|
||||||
struct heap_block {
|
struct heap_block {
|
||||||
UINTN size; // includes header; bit 0 = 1 used, 0 free
|
UINTN size; // includes header; bit 0 = 1 used, 0 free
|
||||||
@@ -67,12 +66,10 @@ static void heap_expand(UINTN min_size) {
|
|||||||
g_heap_end = (UINT8*)new_block + BLOCK_SIZE(new_block);
|
g_heap_end = (UINT8*)new_block + BLOCK_SIZE(new_block);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("HEAP: expanded by ");
|
serial_write("HEAP: expanded by ");
|
||||||
serial_write_hex(pages * PAGE_SIZE);
|
serial_write_hex(pages * PAGE_SIZE);
|
||||||
serial_write(" bytes\n");
|
serial_write(" bytes\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void init_heap() {
|
void init_heap() {
|
||||||
void* mem = pmm_alloc_pages(HEAP_INIT_PAGES);
|
void* mem = pmm_alloc_pages(HEAP_INIT_PAGES);
|
||||||
@@ -89,14 +86,12 @@ void init_heap() {
|
|||||||
initial->next = NULL;
|
initial->next = NULL;
|
||||||
g_heap_free_list = initial;
|
g_heap_free_list = initial;
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("HEAP: init OK, ");
|
serial_write("HEAP: init OK, ");
|
||||||
serial_write_hex(HEAP_INIT_PAGES * PAGE_SIZE);
|
serial_write_hex(HEAP_INIT_PAGES * PAGE_SIZE);
|
||||||
serial_write(" bytes @ ");
|
serial_write(" bytes @ ");
|
||||||
serial_write_hex((UINTN)mem);
|
serial_write_hex((UINTN)mem);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void* kmalloc(UINTN size) {
|
void* kmalloc(UINTN size) {
|
||||||
if (size == 0) return NULL;
|
if (size == 0) return NULL;
|
||||||
@@ -125,7 +120,7 @@ void* kmalloc(UINTN size) {
|
|||||||
block->size = block_sz | 1; // mark used
|
block->size = block_sz | 1; // mark used
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS && size > 1024) {
|
if (size > 1024) {
|
||||||
serial_write("HEAP: kmalloc ");
|
serial_write("HEAP: kmalloc ");
|
||||||
serial_write_hex(size);
|
serial_write_hex(size);
|
||||||
serial_write(" -> ");
|
serial_write(" -> ");
|
||||||
@@ -180,12 +175,10 @@ void kfree(void* ptr) {
|
|||||||
block->next = *prev;
|
block->next = *prev;
|
||||||
*prev = block;
|
*prev = block;
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("HEAP: kfree @ ");
|
serial_write("HEAP: kfree @ ");
|
||||||
serial_write_hex((UINTN)ptr);
|
serial_write_hex((UINTN)ptr);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void* kcalloc(UINTN num, UINTN size) {
|
void* kcalloc(UINTN num, UINTN size) {
|
||||||
UINTN total = num * size;
|
UINTN total = num * size;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include <memory/pmm.h>
|
#include <memory/pmm.h>
|
||||||
#include <efilib.h>
|
#include <efilib.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <BUILD_INFOS.h>
|
|
||||||
|
|
||||||
pmm_t g_pmm;
|
pmm_t g_pmm;
|
||||||
|
|
||||||
@@ -158,7 +157,6 @@ EFI_STATUS pmm_init() {
|
|||||||
|
|
||||||
uefi_call_wrapper((void*)ST->BootServices->FreePool, 1, mem_map);
|
uefi_call_wrapper((void*)ST->BootServices->FreePool, 1, mem_map);
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("PMM: init OK, total ");
|
serial_write("PMM: init OK, total ");
|
||||||
serial_write_hex(total_pages);
|
serial_write_hex(total_pages);
|
||||||
serial_write(" pages (");
|
serial_write(" pages (");
|
||||||
@@ -168,7 +166,6 @@ EFI_STATUS pmm_init() {
|
|||||||
serial_write(" pages @ ");
|
serial_write(" pages @ ");
|
||||||
serial_write_hex(bitmap_addr);
|
serial_write_hex(bitmap_addr);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -191,11 +188,9 @@ void* pmm_alloc_pages(UINTN n) {
|
|||||||
bitmap_set(idx);
|
bitmap_set(idx);
|
||||||
g_pmm.free_pages--;
|
g_pmm.free_pages--;
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("PMM: alloc 1 page @ ");
|
serial_write("PMM: alloc 1 page @ ");
|
||||||
serial_write_hex((UINTN)page);
|
serial_write_hex((UINTN)page);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,13 +209,11 @@ void* pmm_alloc_pages(UINTN n) {
|
|||||||
}
|
}
|
||||||
g_pmm.free_pages -= n;
|
g_pmm.free_pages -= n;
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("PMM: alloc ");
|
serial_write("PMM: alloc ");
|
||||||
serial_write_hex(n);
|
serial_write_hex(n);
|
||||||
serial_write(" pages @ ");
|
serial_write(" pages @ ");
|
||||||
serial_write_hex((UINTN)base);
|
serial_write_hex((UINTN)base);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -247,14 +240,13 @@ void pmm_free_pages(void* addr, UINTN n) {
|
|||||||
g_pmm.free_list_head = page;
|
g_pmm.free_list_head = page;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ENABLE_SERIAL_PRINTS) {
|
|
||||||
serial_write("PMM: free ");
|
serial_write("PMM: free ");
|
||||||
serial_write_hex(n);
|
serial_write_hex(n);
|
||||||
serial_write(" pages @ ");
|
serial_write(" pages @ ");
|
||||||
serial_write_hex((UINTN)addr);
|
serial_write_hex((UINTN)addr);
|
||||||
serial_write("\n");
|
serial_write("\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
UINTN pmm_get_free_count() {
|
UINTN pmm_get_free_count() {
|
||||||
return g_pmm.free_pages;
|
return g_pmm.free_pages;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <efilib.h>
|
#include <efilib.h>
|
||||||
#include <fonts/pixel_font.h>
|
|
||||||
#include <BUILD_INFOS.h>
|
|
||||||
|
|
||||||
serial_context g_serial;
|
serial_context g_serial;
|
||||||
|
|
||||||
@@ -11,14 +9,12 @@ void serial_init(EFI_SERIAL_IO_PROTOCOL *SerialIo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void serial_write_char(char c) {
|
void serial_write_char(char c) {
|
||||||
// 不要直接调用,ENABLE_SERIAL_PRINTS有问题,因此不会打印DEBUG
|
|
||||||
if (!g_serial.SerialIo) {
|
if (!g_serial.SerialIo) {
|
||||||
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
|
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
UINTN size = 1;
|
UINTN size = 1;
|
||||||
EFI_STATUS status = uefi_call_wrapper((void*)g_serial.SerialIo->Write, 3, g_serial.SerialIo, &size, &c);
|
EFI_STATUS status = uefi_call_wrapper((void*)g_serial.SerialIo->Write, 3, g_serial.SerialIo, &size, &c);
|
||||||
// if (ENABLE_SERIAL_PRINTS) pf_print((const char*) c);
|
|
||||||
if (status != EFI_SUCCESS) {
|
if (status != EFI_SUCCESS) {
|
||||||
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: write failed\n");
|
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: write failed\n");
|
||||||
}
|
}
|
||||||
@@ -29,7 +25,6 @@ void serial_write(const char *str) {
|
|||||||
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
|
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ENABLE_SERIAL_PRINTS) pf_print(str);
|
|
||||||
while (*str) {
|
while (*str) {
|
||||||
serial_write_char(*str++);
|
serial_write_char(*str++);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user