1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 08:17:35 +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);
}

View file

@ -23,14 +23,24 @@ public:
virtual void flush(size_t, size_t, size_t, size_t) override { }
virtual void set_resolution(size_t, size_t, size_t) override { }
// FIXME: Port MemoryManager to aarch64
#if ARCH(AARCH64)
BootFramebufferConsole(u8* framebuffer_addr, size_t width, size_t height, size_t pitch);
#else
BootFramebufferConsole(PhysicalAddress framebuffer_addr, size_t width, size_t height, size_t pitch);
#endif
protected:
virtual void clear_glyph(size_t x, size_t y) override;
virtual u8* framebuffer_data() override;
// FIXME: Port MemoryManager to aarch64
#if ARCH(AARCH64)
u8* m_framebuffer;
#else
OwnPtr<Memory::Region> m_framebuffer;
#endif
u8* m_framebuffer_data {};
mutable Spinlock m_lock;
};