1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 04:17:34 +00:00

Kernel: Move TrapFrame into its own header on aarch64

This commit is contained in:
Filiph Sandström 2022-08-06 04:16:24 +02:00 committed by Sam Atkins
parent 4aaf38e4f7
commit 99ae4fa161
7 changed files with 88 additions and 20 deletions

View file

@ -6,18 +6,34 @@
#include <Kernel/Graphics/Console/BootFramebufferConsole.h>
#include <Kernel/Locking/Spinlock.h>
#include <Kernel/Memory/MemoryManager.h>
// FIXME: Port MemoryManager to aarch64
#if !ARCH(AARCH64)
# include <Kernel/Memory/MemoryManager.h>
#endif
namespace Kernel::Graphics {
// FIXME: Port MemoryManager to aarch64
#if ARCH(AARCH64)
BootFramebufferConsole::BootFramebufferConsole(u8* framebuffer_addr, size_t width, size_t height, size_t pitch)
: GenericFramebufferConsoleImpl(width, height, pitch)
, m_framebuffer(framebuffer_addr)
#else
BootFramebufferConsole::BootFramebufferConsole(PhysicalAddress framebuffer_addr, size_t width, size_t height, size_t pitch)
: GenericFramebufferConsoleImpl(width, height, pitch)
#endif
{
// FIXME: Port MemoryManager to aarch64
#if ARCH(AARCH64)
m_framebuffer_data = framebuffer_addr;
#else
// NOTE: We're very early in the boot process, memory allocations shouldn't really fail
auto framebuffer_end = Memory::page_round_up(framebuffer_addr.offset(height * pitch * sizeof(u32)).get()).release_value();
m_framebuffer = MM.allocate_kernel_region(framebuffer_addr.page_base(), framebuffer_end - framebuffer_addr.page_base().get(), "Boot Framebuffer"sv, Memory::Region::Access::ReadWrite).release_value();
[[maybe_unused]] auto result = m_framebuffer->set_write_combine(true);
m_framebuffer_data = m_framebuffer->vaddr().offset(framebuffer_addr.offset_in_page()).as_ptr();
#endif
memset(m_framebuffer_data, 0, height * pitch * sizeof(u32));
}
@ -30,6 +46,7 @@ void BootFramebufferConsole::clear(size_t x, size_t y, size_t length)
void BootFramebufferConsole::clear_glyph(size_t x, size_t y)
{
VERIFY(m_lock.is_locked());
GenericFramebufferConsoleImpl::clear_glyph(x, y);
}