DisplayPlane.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/Graphics/Intel/Plane/DisplayPlane.h>
  7. #include <Kernel/PhysicalAddress.h>
  8. namespace Kernel {
  9. IntelDisplayPlane::IntelDisplayPlane(Memory::TypedMapping<PlaneRegisters volatile> plane_registers_mapping)
  10. : m_plane_registers(move(plane_registers_mapping))
  11. {
  12. }
  13. IntelDisplayPlane::ShadowRegisters IntelDisplayPlane::shadow_registers() const
  14. {
  15. SpinlockLocker locker(m_access_lock);
  16. return m_shadow_registers;
  17. }
  18. ErrorOr<void> IntelDisplayPlane::enable(Badge<IntelDisplayConnectorGroup>)
  19. {
  20. SpinlockLocker locker(m_access_lock);
  21. // Note: We use the shadow register so we don't have the already set
  22. // settings being lost.
  23. m_plane_registers->control = m_shadow_registers.control | (1 << 31);
  24. m_shadow_registers.control |= (1 << 31);
  25. return {};
  26. }
  27. bool IntelDisplayPlane::is_enabled(Badge<IntelDisplayConnectorGroup>)
  28. {
  29. SpinlockLocker locker(m_access_lock);
  30. return m_shadow_registers.control & (1 << 31);
  31. }
  32. ErrorOr<void> IntelDisplayPlane::disable(Badge<IntelDisplayConnectorGroup>)
  33. {
  34. SpinlockLocker locker(m_access_lock);
  35. // Note: We use the shadow register so we don't have the already set
  36. // settings being lost.
  37. m_shadow_registers.control &= ~(1 << 31);
  38. m_plane_registers->control = m_shadow_registers.control;
  39. return {};
  40. }
  41. }