mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-21 18:42:53 +00:00
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.
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
/*
|
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/RefCounted.h>
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Graphics/Console/VGAConsole.h>
|
|
#include <Kernel/Locking/Spinlock.h>
|
|
|
|
namespace Kernel::Graphics {
|
|
class TextModeConsole final : public VGAConsole {
|
|
public:
|
|
static NonnullRefPtr<TextModeConsole> initialize();
|
|
virtual size_t chars_per_line() const override { return width(); };
|
|
|
|
virtual bool has_hardware_cursor() const override { return true; }
|
|
virtual bool is_hardware_paged_capable() const override { return true; }
|
|
|
|
virtual size_t bytes_per_base_glyph() const override { return 2; }
|
|
virtual void set_cursor(size_t x, size_t y) override;
|
|
virtual void hide_cursor() override;
|
|
virtual void show_cursor() override;
|
|
virtual void clear(size_t x, size_t y, size_t length) override;
|
|
virtual void write(size_t x, size_t y, char ch, bool critical = false) override;
|
|
virtual void write(size_t x, size_t y, char ch, Color background, Color foreground, bool critical = false) override;
|
|
virtual void write(char ch, bool critical = false) override;
|
|
virtual void flush(size_t, size_t, size_t, size_t) override { }
|
|
|
|
virtual void enable() override { }
|
|
virtual void disable() override { }
|
|
|
|
private:
|
|
void clear_vga_row(u16 row);
|
|
|
|
TextModeConsole();
|
|
|
|
mutable Spinlock m_vga_lock;
|
|
size_t m_cursor_x { 0 };
|
|
size_t m_cursor_y { 0 };
|
|
|
|
VirtualAddress m_current_vga_window;
|
|
};
|
|
|
|
}
|