mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
053a832fac
We use a switch-case statements to ensure we try to find the best suitable driver for a specific graphics card. In case we don't find such, we use the default statement to initialize the graphics card as a generic VGA adapter, if the adapter is VGA compatible. If we couldn't initialize the driver, we don't touch this adapter anymore. Also, GraphicsDevice should not be tied to a PCI::Address member, as it can be theortically be used with other buses (e.g. ISA cards).
83 lines
3.1 KiB
C++
83 lines
3.1 KiB
C++
/*
|
|
* Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <Kernel/Graphics/Console/ContiguousFramebufferConsole.h>
|
|
#include <Kernel/Graphics/Console/TextModeConsole.h>
|
|
#include <Kernel/Graphics/GraphicsManagement.h>
|
|
#include <Kernel/Graphics/VGACompatibleAdapter.h>
|
|
#include <Kernel/IO.h>
|
|
#include <Kernel/Sections.h>
|
|
|
|
namespace Kernel {
|
|
|
|
UNMAP_AFTER_INIT NonnullRefPtr<VGACompatibleAdapter> VGACompatibleAdapter::initialize_with_preset_resolution(PCI::Address address, PhysicalAddress m_framebuffer_address, size_t framebuffer_width, size_t framebuffer_height, size_t framebuffer_pitch)
|
|
{
|
|
return adopt_ref(*new VGACompatibleAdapter(address, m_framebuffer_address, framebuffer_width, framebuffer_height, framebuffer_pitch));
|
|
}
|
|
|
|
UNMAP_AFTER_INIT NonnullRefPtr<VGACompatibleAdapter> VGACompatibleAdapter::initialize(PCI::Address address)
|
|
{
|
|
return adopt_ref(*new VGACompatibleAdapter(address));
|
|
}
|
|
|
|
UNMAP_AFTER_INIT void VGACompatibleAdapter::initialize_framebuffer_devices()
|
|
{
|
|
// We might not have any pre-set framebuffer, so if that's the case - don't try to initialize one.
|
|
if (m_framebuffer_address.is_null())
|
|
return;
|
|
VERIFY(m_framebuffer_width);
|
|
VERIFY(m_framebuffer_width != 0);
|
|
VERIFY(m_framebuffer_height != 0);
|
|
VERIFY(m_framebuffer_pitch != 0);
|
|
m_framebuffer_device = FramebufferDevice::create(*this, 0, m_framebuffer_address, m_framebuffer_width, m_framebuffer_height, m_framebuffer_pitch);
|
|
m_framebuffer_device->initialize();
|
|
}
|
|
|
|
UNMAP_AFTER_INIT VGACompatibleAdapter::VGACompatibleAdapter(PCI::Address address)
|
|
: PCI::DeviceController(address)
|
|
{
|
|
m_framebuffer_console = Graphics::TextModeConsole::initialize(*this);
|
|
// FIXME: This is a very wrong way to do this...
|
|
GraphicsManagement::the().m_console = m_framebuffer_console;
|
|
}
|
|
|
|
UNMAP_AFTER_INIT VGACompatibleAdapter::VGACompatibleAdapter(PCI::Address address, PhysicalAddress framebuffer_address, size_t framebuffer_width, size_t framebuffer_height, size_t framebuffer_pitch)
|
|
: PCI::DeviceController(address)
|
|
, m_framebuffer_address(framebuffer_address)
|
|
, m_framebuffer_width(framebuffer_width)
|
|
, m_framebuffer_height(framebuffer_height)
|
|
, m_framebuffer_pitch(framebuffer_pitch)
|
|
{
|
|
m_framebuffer_console = Graphics::ContiguousFramebufferConsole::initialize(framebuffer_address, framebuffer_width, framebuffer_height, framebuffer_pitch);
|
|
// FIXME: This is a very wrong way to do this...
|
|
GraphicsManagement::the().m_console = m_framebuffer_console;
|
|
}
|
|
|
|
void VGACompatibleAdapter::enable_consoles()
|
|
{
|
|
VERIFY(m_framebuffer_console);
|
|
if (m_framebuffer_device)
|
|
m_framebuffer_device->deactivate_writes();
|
|
m_framebuffer_console->enable();
|
|
}
|
|
void VGACompatibleAdapter::disable_consoles()
|
|
{
|
|
VERIFY(m_framebuffer_device);
|
|
VERIFY(m_framebuffer_console);
|
|
m_framebuffer_console->disable();
|
|
m_framebuffer_device->activate_writes();
|
|
}
|
|
|
|
bool VGACompatibleAdapter::try_to_set_resolution(size_t, size_t, size_t)
|
|
{
|
|
return false;
|
|
}
|
|
bool VGACompatibleAdapter::set_y_offset(size_t, size_t)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|