Serenity Operating System
at master 70 lines 2.2 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#include <Kernel/Graphics/Intel/Plane/DisplayPlane.h> 8#include <Kernel/PhysicalAddress.h> 9 10namespace Kernel { 11 12IntelDisplayPlane::IntelDisplayPlane(Memory::TypedMapping<PlaneRegisters volatile> plane_registers_mapping) 13 : m_plane_registers(move(plane_registers_mapping)) 14{ 15} 16 17IntelDisplayPlane::ShadowRegisters IntelDisplayPlane::shadow_registers() const 18{ 19 SpinlockLocker locker(m_access_lock); 20 return m_shadow_registers; 21} 22 23ErrorOr<void> IntelDisplayPlane::set_horizontal_active_pixels_count(Badge<IntelDisplayConnectorGroup>, size_t horizontal_active_pixels_count) 24{ 25 SpinlockLocker locker(m_access_lock); 26 m_horizontal_active_pixels_count = horizontal_active_pixels_count; 27 return {}; 28} 29ErrorOr<void> IntelDisplayPlane::set_vertical_active_pixels_count(Badge<IntelDisplayConnectorGroup>, size_t vertical_active_pixels_count) 30{ 31 SpinlockLocker locker(m_access_lock); 32 m_vertical_active_pixels_count = vertical_active_pixels_count; 33 return {}; 34} 35ErrorOr<void> IntelDisplayPlane::set_horizontal_stride(Badge<IntelDisplayConnectorGroup>, size_t horizontal_stride) 36{ 37 SpinlockLocker locker(m_access_lock); 38 m_horizontal_stride = horizontal_stride; 39 return {}; 40} 41ErrorOr<void> IntelDisplayPlane::set_aperture_base(Badge<IntelDisplayConnectorGroup>, PhysicalAddress aperture_start) 42{ 43 SpinlockLocker locker(m_access_lock); 44 m_aperture_start.set(aperture_start.get()); 45 return {}; 46} 47ErrorOr<void> IntelDisplayPlane::set_pipe(Badge<IntelDisplayConnectorGroup>, PipeSelect pipe_select) 48{ 49 SpinlockLocker locker(m_access_lock); 50 m_pipe_select = pipe_select; 51 return {}; 52} 53 54bool IntelDisplayPlane::is_enabled(Badge<IntelDisplayConnectorGroup>) 55{ 56 SpinlockLocker locker(m_access_lock); 57 return m_shadow_registers.control & (1 << 31); 58} 59 60ErrorOr<void> IntelDisplayPlane::disable(Badge<IntelDisplayConnectorGroup>) 61{ 62 SpinlockLocker locker(m_access_lock); 63 // Note: We use the shadow register so we don't have the already set 64 // settings being lost. 65 m_shadow_registers.control &= ~(1 << 31); 66 m_plane_registers->control = m_shadow_registers.control; 67 return {}; 68} 69 70}