mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:47:46 +00:00
Kernel/Graphics: Move GenericDisplayConnector code to a new sub-folder
In the same fashion like in the Linux kernel, we support pre-initialized framebuffers that were set up by either the BIOS or the bootloader. These framebuffers can be backed by any kind of video hardware, and are not tied to VGA hardware at all. Therefore, this code should be in a separate sub-folder in the Graphics subsystem to indicate this.
This commit is contained in:
parent
5b86698bb8
commit
cd115270fc
4 changed files with 7 additions and 4 deletions
|
@ -1,64 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <Kernel/Arch/x86/IO.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/Devices/DeviceManagement.h>
|
||||
#include <Kernel/Graphics/Console/ContiguousFramebufferConsole.h>
|
||||
#include <Kernel/Graphics/GraphicsManagement.h>
|
||||
#include <Kernel/Graphics/VGA/DisplayConnector.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
NonnullRefPtr<GenericDisplayConnector> GenericDisplayConnector::must_create_with_preset_resolution(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch)
|
||||
{
|
||||
auto device_or_error = DeviceManagement::try_create_device<GenericDisplayConnector>(framebuffer_address, width, height, pitch);
|
||||
VERIFY(!device_or_error.is_error());
|
||||
auto connector = device_or_error.release_value();
|
||||
MUST(connector->create_attached_framebuffer_console());
|
||||
MUST(connector->initialize_edid_for_generic_monitor({}));
|
||||
return connector;
|
||||
}
|
||||
|
||||
GenericDisplayConnector::GenericDisplayConnector(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch)
|
||||
: DisplayConnector(framebuffer_address, height * pitch, true)
|
||||
{
|
||||
m_current_mode_setting.horizontal_active = width;
|
||||
m_current_mode_setting.vertical_active = height;
|
||||
m_current_mode_setting.horizontal_stride = pitch;
|
||||
}
|
||||
|
||||
ErrorOr<void> GenericDisplayConnector::create_attached_framebuffer_console()
|
||||
{
|
||||
auto width = m_current_mode_setting.horizontal_active;
|
||||
auto height = m_current_mode_setting.vertical_active;
|
||||
auto pitch = m_current_mode_setting.horizontal_stride;
|
||||
|
||||
m_framebuffer_console = Graphics::ContiguousFramebufferConsole::initialize(m_framebuffer_address.value(), width, height, pitch);
|
||||
GraphicsManagement::the().set_console(*m_framebuffer_console);
|
||||
return {};
|
||||
}
|
||||
|
||||
void GenericDisplayConnector::enable_console()
|
||||
{
|
||||
VERIFY(m_control_lock.is_locked());
|
||||
VERIFY(m_framebuffer_console);
|
||||
m_framebuffer_console->enable();
|
||||
}
|
||||
|
||||
void GenericDisplayConnector::disable_console()
|
||||
{
|
||||
VERIFY(m_control_lock.is_locked());
|
||||
VERIFY(m_framebuffer_console);
|
||||
m_framebuffer_console->disable();
|
||||
}
|
||||
|
||||
ErrorOr<void> GenericDisplayConnector::flush_first_surface()
|
||||
{
|
||||
return Error::from_errno(ENOTSUP);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/RefPtr.h>
|
||||
#include <AK/Try.h>
|
||||
#include <Kernel/Graphics/Console/GenericFramebufferConsole.h>
|
||||
#include <Kernel/Graphics/DisplayConnector.h>
|
||||
#include <Kernel/Locking/Spinlock.h>
|
||||
#include <Kernel/Memory/TypedMapping.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
class GenericDisplayConnector
|
||||
: public DisplayConnector {
|
||||
friend class DeviceManagement;
|
||||
|
||||
public:
|
||||
static NonnullRefPtr<GenericDisplayConnector> must_create_with_preset_resolution(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch);
|
||||
|
||||
protected:
|
||||
ErrorOr<void> create_attached_framebuffer_console();
|
||||
|
||||
GenericDisplayConnector(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch);
|
||||
|
||||
virtual bool mutable_mode_setting_capable() const override final { return false; }
|
||||
virtual bool double_framebuffering_capable() const override { return false; }
|
||||
virtual ErrorOr<void> set_mode_setting(ModeSetting const&) override { return Error::from_errno(ENOTSUP); }
|
||||
virtual ErrorOr<void> set_safe_mode_setting() override { return {}; }
|
||||
virtual ErrorOr<void> set_y_offset(size_t) override { return Error::from_errno(ENOTSUP); }
|
||||
virtual ErrorOr<void> unblank() override { return Error::from_errno(ENOTSUP); }
|
||||
|
||||
virtual bool partial_flush_support() const override final { return false; }
|
||||
virtual bool flush_support() const override final { return false; }
|
||||
// Note: This is possibly a paravirtualized hardware, but since we don't know, we assume there's no refresh rate...
|
||||
virtual bool refresh_rate_support() const override final { return false; }
|
||||
|
||||
virtual ErrorOr<void> flush_first_surface() override final;
|
||||
|
||||
virtual void enable_console() override final;
|
||||
virtual void disable_console() override final;
|
||||
|
||||
RefPtr<Graphics::GenericFramebufferConsole> m_framebuffer_console;
|
||||
};
|
||||
}
|
|
@ -9,8 +9,8 @@
|
|||
#include <AK/Types.h>
|
||||
#include <Kernel/Bus/PCI/Device.h>
|
||||
#include <Kernel/Graphics/Console/Console.h>
|
||||
#include <Kernel/Graphics/Generic/DisplayConnector.h>
|
||||
#include <Kernel/Graphics/GenericGraphicsAdapter.h>
|
||||
#include <Kernel/Graphics/VGA/DisplayConnector.h>
|
||||
#include <Kernel/PhysicalAddress.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue