Home | History | Annotate | Download | only in dri
      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