mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 19:59:17 +00:00
Kernel/Graphics: Move all VGA related methods to GraphicsManagement
This helps solving an issue when we boot with text mode screen so the Kernel initializes an early text mode console, but even after disabling it, that console can still access VGA ports. This wouldn't be a problem for emulated hardware but bare metal hardware might have a "conflict", especially if the native driver explicitly request to disable the VGA emulation.
This commit is contained in:
parent
f9bed65130
commit
0ef1137e88
Notes:
sideshowbarker
2024-07-17 17:13:16 +09:00
Author: https://github.com/supercomputer7
Commit: 0ef1137e88
Pull-request: https://github.com/SerenityOS/serenity/pull/13091
Reviewed-by: https://github.com/bgianfo
Reviewed-by: https://github.com/linusg
4 changed files with 58 additions and 18 deletions
|
@ -51,6 +51,48 @@ bool GraphicsManagement::framebuffer_devices_console_only() const
|
|||
return kernel_command_line().are_framebuffer_devices_enabled() == CommandLine::FrameBufferDevices::ConsoleOnly;
|
||||
}
|
||||
|
||||
void GraphicsManagement::disable_vga_emulation_access_permanently()
|
||||
{
|
||||
SpinlockLocker locker(m_main_vga_lock);
|
||||
disable_vga_text_mode_console_cursor();
|
||||
IO::out8(0x3c4, 1);
|
||||
u8 sr1 = IO::in8(0x3c5);
|
||||
IO::out8(0x3c5, sr1 | 1 << 5);
|
||||
IO::delay(1000);
|
||||
m_vga_access_is_disabled = true;
|
||||
}
|
||||
|
||||
void GraphicsManagement::enable_vga_text_mode_console_cursor() const
|
||||
{
|
||||
SpinlockLocker locker(m_main_vga_lock);
|
||||
if (m_vga_access_is_disabled)
|
||||
return;
|
||||
IO::out8(0x3D4, 0xA);
|
||||
IO::out8(0x3D5, 0);
|
||||
}
|
||||
|
||||
void GraphicsManagement::disable_vga_text_mode_console_cursor() const
|
||||
{
|
||||
SpinlockLocker locker(m_main_vga_lock);
|
||||
if (m_vga_access_is_disabled)
|
||||
return;
|
||||
IO::out8(0x3D4, 0xA);
|
||||
IO::out8(0x3D5, 0x20);
|
||||
}
|
||||
|
||||
void GraphicsManagement::set_vga_text_mode_cursor(size_t console_width, size_t x, size_t y) const
|
||||
{
|
||||
SpinlockLocker locker(m_main_vga_lock);
|
||||
if (m_vga_access_is_disabled)
|
||||
return;
|
||||
enable_vga_text_mode_console_cursor();
|
||||
u16 value = y * console_width + x;
|
||||
IO::out8(0x3d4, 0x0e);
|
||||
IO::out8(0x3d5, MSB(value));
|
||||
IO::out8(0x3d4, 0x0f);
|
||||
IO::out8(0x3d5, LSB(value));
|
||||
}
|
||||
|
||||
void GraphicsManagement::deactivate_graphical_mode()
|
||||
{
|
||||
for (auto& graphics_device : m_graphics_devices) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue