/* SPDX-License-Identifier: MIT */ #include "drm++/drm.hpp" #include "drm++/helper/ioctl.hpp" #include "drm++/helper/types.hpp" #include #include #include using namespace drm; Device::Device(int fd) : m_fd(fd) { if (this->m_fd < 0) { throw std::invalid_argument("invalid file descriptor"); } drm_auth args{ }; ioctl::perform(this->m_fd, DRM_IOCTL_GET_MAGIC, args); this->m_magic = args.magic; } void Device::acquireMaster() const { ioctl::perform(this->m_fd, DRM_IOCTL_SET_MASTER); } void Device::releaseMaster() const { ioctl::perform(this->m_fd, DRM_IOCTL_DROP_MASTER); } void Device::authenticate(u32 magic) const { drm_auth args{ .magic = magic }; ioctl::perform(this->m_fd, DRM_IOCTL_AUTH_MAGIC, args); } void Device::destruct() noexcept { if (this->m_fd < 0) { return; } ::close(this->m_fd); this->m_fd = -1; }