/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace Kernel { IntelDisplayPlane::IntelDisplayPlane(Memory::TypedMapping plane_registers_mapping) : m_plane_registers(move(plane_registers_mapping)) { } IntelDisplayPlane::ShadowRegisters IntelDisplayPlane::shadow_registers() const { SpinlockLocker locker(m_access_lock); return m_shadow_registers; } ErrorOr IntelDisplayPlane::set_horizontal_active_pixels_count(Badge, size_t horizontal_active_pixels_count) { SpinlockLocker locker(m_access_lock); m_horizontal_active_pixels_count = horizontal_active_pixels_count; return {}; } ErrorOr IntelDisplayPlane::set_vertical_active_pixels_count(Badge, size_t vertical_active_pixels_count) { SpinlockLocker locker(m_access_lock); m_vertical_active_pixels_count = vertical_active_pixels_count; return {}; } ErrorOr IntelDisplayPlane::set_horizontal_stride(Badge, size_t horizontal_stride) { SpinlockLocker locker(m_access_lock); m_horizontal_stride = horizontal_stride; return {}; } ErrorOr IntelDisplayPlane::set_aperture_base(Badge, PhysicalAddress aperture_start) { SpinlockLocker locker(m_access_lock); m_aperture_start.set(aperture_start.get()); return {}; } ErrorOr IntelDisplayPlane::set_pipe(Badge, PipeSelect pipe_select) { SpinlockLocker locker(m_access_lock); m_pipe_select = pipe_select; return {}; } bool IntelDisplayPlane::is_enabled(Badge) { SpinlockLocker locker(m_access_lock); return m_shadow_registers.control & (1 << 31); } ErrorOr IntelDisplayPlane::disable(Badge) { SpinlockLocker locker(m_access_lock); // Note: We use the shadow register so we don't have the already set // settings being lost. m_shadow_registers.control &= ~(1 << 31); m_plane_registers->control = m_shadow_registers.control; return {}; } }