1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/gfx/ozone/dri/dri_wrapper.h" 6 7 #include <fcntl.h> 8 #include <unistd.h> 9 #include <xf86drmMode.h> 10 11 #include "base/logging.h" 12 13 namespace gfx { 14 15 DriWrapper::DriWrapper(const char* device_path) { 16 fd_ = open(device_path, O_RDWR | O_CLOEXEC); 17 } 18 19 DriWrapper::~DriWrapper() { 20 if (fd_ >= 0) 21 close(fd_); 22 } 23 24 drmModeCrtc* DriWrapper::GetCrtc(uint32_t crtc_id) { 25 CHECK(fd_ >= 0); 26 return drmModeGetCrtc(fd_, crtc_id); 27 } 28 29 void DriWrapper::FreeCrtc(drmModeCrtc* crtc) { 30 drmModeFreeCrtc(crtc); 31 } 32 33 bool DriWrapper::SetCrtc(uint32_t crtc_id, 34 uint32_t framebuffer, 35 uint32_t* connectors, 36 drmModeModeInfo* mode) { 37 CHECK(fd_ >= 0); 38 return !drmModeSetCrtc(fd_, crtc_id, framebuffer, 0, 0, connectors, 1, mode); 39 } 40 41 bool DriWrapper::SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) { 42 CHECK(fd_ >= 0); 43 return !drmModeSetCrtc(fd_, 44 crtc->crtc_id, 45 crtc->buffer_id, 46 crtc->x, 47 crtc->y, 48 connectors, 49 1, 50 &crtc->mode); 51 } 52 53 bool DriWrapper::AddFramebuffer(const drmModeModeInfo& mode, 54 uint8_t depth, 55 uint8_t bpp, 56 uint32_t stride, 57 uint32_t handle, 58 uint32_t* framebuffer) { 59 CHECK(fd_ >= 0); 60 return !drmModeAddFB(fd_, 61 mode.hdisplay, 62 mode.vdisplay, 63 depth, 64 bpp, 65 stride, 66 handle, 67 framebuffer); 68 } 69 70 bool DriWrapper::RemoveFramebuffer(uint32_t framebuffer) { 71 CHECK(fd_ >= 0); 72 return !drmModeRmFB(fd_, framebuffer); 73 } 74 75 bool DriWrapper::PageFlip(uint32_t crtc_id, 76 uint32_t framebuffer, 77 void* data) { 78 CHECK(fd_ >= 0); 79 return !drmModePageFlip(fd_, 80 crtc_id, 81 framebuffer, 82 DRM_MODE_PAGE_FLIP_EVENT, 83 data); 84 } 85 86 bool DriWrapper::ConnectorSetProperty(uint32_t connector_id, 87 uint32_t property_id, 88 uint64_t value) { 89 CHECK(fd_ >= 0); 90 return !drmModeConnectorSetProperty(fd_, connector_id, property_id, value); 91 } 92 93 } // namespace gfx 94