2
* Copyright © 2013 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
19
#ifndef MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_
20
#define MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_
22
#include "kms_output.h"
23
#include "drm_mode_resources.h"
37
class RealKMSOutput : public KMSOutput
40
RealKMSOutput(int drm_fd, uint32_t connector_id,
41
std::shared_ptr<PageFlipper> const& page_flipper);
45
void configure(geometry::Displacement fb_offset, size_t kms_mode_index);
46
geometry::Size size() const;
48
bool set_crtc(uint32_t fb_id);
50
bool schedule_page_flip(uint32_t fb_id);
51
void wait_for_page_flip();
53
void set_cursor(gbm_bo* buffer);
54
void move_cursor(geometry::Point destination);
56
bool has_cursor() const;
58
void set_power_mode(MirPowerMode mode);
62
void restore_saved_crtc();
65
uint32_t const connector_id;
66
std::shared_ptr<PageFlipper> const page_flipper;
68
DRMModeConnectorUPtr connector;
70
geometry::Displacement fb_offset;
71
DRMModeCrtcUPtr current_crtc;
72
drmModeCrtc saved_crtc;
73
bool using_saved_crtc;
76
MirPowerMode power_mode;
79
std::mutex power_mutex;
86
#endif /* MIR_GRAPHICS_GBM_REAL_KMS_OUTPUT_H_ */