/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Kernel { class VMWareFramebufferConsole; class VMWareDisplayConnector : public DisplayConnector { friend class VMWareGraphicsAdapter; friend class VMWareFramebufferConsole; friend class DeviceManagement; public: static NonnullLockRefPtr must_create(VMWareGraphicsAdapter const& parent_adapter, PhysicalAddress framebuffer_address, size_t framebuffer_resource_size); private: VMWareDisplayConnector(VMWareGraphicsAdapter const& parent_adapter, PhysicalAddress framebuffer_address, size_t framebuffer_resource_size); ErrorOr create_attached_framebuffer_console(); virtual bool mutable_mode_setting_capable() const override { return true; } virtual bool double_framebuffering_capable() const override { return false; } virtual ErrorOr set_mode_setting(ModeSetting const&) override; virtual ErrorOr set_safe_mode_setting() override; virtual ErrorOr set_y_offset(size_t y) override; virtual ErrorOr unblank() override; virtual bool partial_flush_support() const override { return true; } virtual bool flush_support() const override { return true; } // Note: Paravirtualized hardware doesn't require a defined refresh rate for modesetting. virtual bool refresh_rate_support() const override { return false; } virtual ErrorOr flush_first_surface() override; virtual ErrorOr flush_rectangle(size_t buffer_index, FBRect const& rect) override; virtual void enable_console() override; virtual void disable_console() override; private: NonnullLockRefPtr m_parent_adapter; LockRefPtr m_framebuffer_console; }; }