Serenity Operating System
at master 72 lines 2.3 kB view raw
1/* 2 * Copyright (c) 2021-2022, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/NonnullOwnPtr.h> 10#include <AK/Platform.h> 11#include <AK/Types.h> 12#if ARCH(X86_64) 13# include <Kernel/Arch/x86_64/VGA/IOArbiter.h> 14#endif 15#include <Kernel/Bus/PCI/Definitions.h> 16#include <Kernel/Graphics/Console/Console.h> 17#include <Kernel/Graphics/DisplayConnector.h> 18#include <Kernel/Graphics/Generic/DisplayConnector.h> 19#include <Kernel/Graphics/GenericGraphicsAdapter.h> 20#include <Kernel/Graphics/VirtIOGPU/GraphicsAdapter.h> 21#include <Kernel/Library/NonnullLockRefPtr.h> 22#include <Kernel/Memory/Region.h> 23 24namespace Kernel { 25 26class GraphicsManagement { 27 28public: 29 static GraphicsManagement& the(); 30 static bool is_initialized(); 31 bool initialize(); 32 33 unsigned allocate_minor_device_number() { return m_current_minor_number++; }; 34 GraphicsManagement(); 35 36 void attach_new_display_connector(Badge<DisplayConnector>, DisplayConnector&); 37 void detach_display_connector(Badge<DisplayConnector>, DisplayConnector&); 38 39 void set_vga_text_mode_cursor(size_t console_width, size_t x, size_t y); 40 void disable_vga_text_mode_console_cursor(); 41 void disable_vga_emulation_access_permanently(); 42 43 LockRefPtr<Graphics::Console> console() const { return m_console; } 44 void set_console(Graphics::Console&); 45 46 void deactivate_graphical_mode(); 47 void activate_graphical_mode(); 48 49private: 50 void enable_vga_text_mode_console_cursor(); 51 52 ErrorOr<void> determine_and_initialize_graphics_device(PCI::DeviceIdentifier const&); 53 54 void initialize_preset_resolution_generic_display_connector(); 55 56 Vector<NonnullLockRefPtr<GenericGraphicsAdapter>> m_graphics_devices; 57 LockRefPtr<Graphics::Console> m_console; 58 59 // Note: This is only used when booting with kernel commandline that includes "graphics_subsystem_mode=limited" 60 LockRefPtr<GenericDisplayConnector> m_preset_resolution_generic_display_connector; 61 62 LockRefPtr<DisplayConnector> m_platform_board_specific_display_connector; 63 64 unsigned m_current_minor_number { 0 }; 65 66 SpinlockProtected<IntrusiveList<&DisplayConnector::m_list_node>, LockRank::None> m_display_connector_nodes {}; 67#if ARCH(X86_64) 68 OwnPtr<VGAIOArbiter> m_vga_arbiter; 69#endif 70}; 71 72}