ContiguousFramebufferConsole.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2021, Sahan Fernando <sahan.h.fernando@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/Graphics/Console/ContiguousFramebufferConsole.h>
  7. #include <Kernel/TTY/ConsoleManagement.h>
  8. namespace Kernel::Graphics {
  9. NonnullRefPtr<ContiguousFramebufferConsole> ContiguousFramebufferConsole::initialize(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch)
  10. {
  11. return adopt_ref(*new ContiguousFramebufferConsole(framebuffer_address, width, height, pitch));
  12. }
  13. ContiguousFramebufferConsole::ContiguousFramebufferConsole(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch)
  14. : GenericFramebufferConsole(width, height, pitch)
  15. , m_framebuffer_address(framebuffer_address)
  16. {
  17. set_resolution(width, height, pitch);
  18. }
  19. void ContiguousFramebufferConsole::set_resolution(size_t width, size_t height, size_t pitch)
  20. {
  21. m_width = width;
  22. m_height = height;
  23. m_pitch = pitch;
  24. dbgln("Framebuffer Console: taking {} bytes", Memory::page_round_up(pitch * height));
  25. m_framebuffer_region = MM.allocate_kernel_region(m_framebuffer_address, Memory::page_round_up(pitch * height), "Framebuffer Console", Memory::Region::Access::ReadWrite, Memory::Region::Cacheable::Yes);
  26. VERIFY(m_framebuffer_region);
  27. // Just to start cleanly, we clean the entire framebuffer
  28. memset(m_framebuffer_region->vaddr().as_ptr(), 0, pitch * height);
  29. ConsoleManagement::the().resolution_was_changed();
  30. }
  31. }