Serenity Operating System
at master 80 lines 3.0 kB view raw
1/* 2 * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Try.h> 10#include <Kernel/Graphics/Console/GenericFramebufferConsole.h> 11#include <Kernel/Graphics/Definitions.h> 12#include <Kernel/Graphics/DisplayConnector.h> 13#include <Kernel/Graphics/Intel/Auxiliary/GMBusConnector.h> 14#include <Kernel/Library/LockRefPtr.h> 15#include <Kernel/Memory/TypedMapping.h> 16 17namespace Kernel { 18 19class IntelDisplayConnectorGroup; 20class IntelNativeDisplayConnector final 21 : public DisplayConnector { 22 friend class IntelDisplayConnectorGroup; 23 friend class DeviceManagement; 24 25public: 26 enum class Type { 27 Invalid, 28 Analog, 29 DVO, 30 LVDS, 31 TVOut, 32 HDMI, 33 DisplayPort, 34 EmbeddedDisplayPort, 35 }; 36 37 enum class ConnectorIndex : size_t { 38 PortA = 0, 39 PortB = 1, 40 PortC = 2, 41 PortD = 3, 42 PortE = 4, 43 PortF = 5, 44 PortH = 6, 45 PortG = 7, 46 PortI = 8, 47 }; 48 49 static ErrorOr<NonnullLockRefPtr<IntelNativeDisplayConnector>> try_create_with_display_connector_group(IntelDisplayConnectorGroup const&, ConnectorIndex, Type, PhysicalAddress framebuffer_address, size_t framebuffer_resource_size); 50 51 void set_edid_bytes(Badge<IntelDisplayConnectorGroup>, Array<u8, 128> const& edid_bytes); 52 ErrorOr<void> create_attached_framebuffer_console(Badge<IntelDisplayConnectorGroup>); 53 54 ConnectorIndex connector_index() const { return m_connector_index; } 55 56private: 57 // ^DisplayConnector 58 // FIXME: Implement modesetting capabilities in runtime from userland... 59 virtual bool mutable_mode_setting_capable() const override { return false; } 60 // FIXME: Implement double buffering capabilities in runtime from userland... 61 virtual bool double_framebuffering_capable() const override { return false; } 62 virtual ErrorOr<void> set_mode_setting(ModeSetting const&) override; 63 virtual ErrorOr<void> set_safe_mode_setting() override; 64 virtual ErrorOr<void> set_y_offset(size_t y) override; 65 virtual ErrorOr<void> unblank() override; 66 virtual ErrorOr<void> flush_first_surface() override final; 67 virtual void enable_console() override; 68 virtual void disable_console() override; 69 virtual bool partial_flush_support() const override { return false; } 70 virtual bool flush_support() const override { return false; } 71 // Note: Paravirtualized hardware doesn't require a defined refresh rate for modesetting. 72 virtual bool refresh_rate_support() const override { return true; } 73 74 IntelNativeDisplayConnector(IntelDisplayConnectorGroup const&, ConnectorIndex connector_index, Type, PhysicalAddress framebuffer_address, size_t framebuffer_resource_size); 75 Type const m_type { Type::Analog }; 76 ConnectorIndex const m_connector_index { 0 }; 77 NonnullLockRefPtr<IntelDisplayConnectorGroup> m_parent_connector_group; 78 LockRefPtr<Graphics::GenericFramebufferConsole> m_framebuffer_console; 79}; 80}