/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Kernel { struct BochsDisplayMMIORegisters; class QEMUDisplayConnector final : public BochsDisplayConnector { friend class BochsGraphicsAdapter; friend class DeviceManagement; public: static NonnullRefPtr must_create(PhysicalAddress framebuffer_address, Memory::TypedMapping); virtual IndexID index_id() const override; private: ErrorOr fetch_and_initialize_edid(); QEMUDisplayConnector(PhysicalAddress framebuffer_address, Memory::TypedMapping); virtual bool double_framebuffering_capable() const override { return true; } virtual ErrorOr set_mode_setting(ModeSetting const&) override; virtual ErrorOr set_y_offset(size_t y) override; virtual ErrorOr unblank() override; void set_framebuffer_to_big_endian_format(); void set_framebuffer_to_little_endian_format(); private: Memory::TypedMapping m_registers; }; }