drmmode_display.h revision de2362d3
1de2362d3Smrg/*
2de2362d3Smrg * Copyright © 2007 Red Hat, Inc.
3de2362d3Smrg *
4de2362d3Smrg * Permission is hereby granted, free of charge, to any person obtaining a
5de2362d3Smrg * copy of this software and associated documentation files (the "Software"),
6de2362d3Smrg * to deal in the Software without restriction, including without limitation
7de2362d3Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8de2362d3Smrg * and/or sell copies of the Software, and to permit persons to whom the
9de2362d3Smrg * Software is furnished to do so, subject to the following conditions:
10de2362d3Smrg *
11de2362d3Smrg * The above copyright notice and this permission notice (including the next
12de2362d3Smrg * paragraph) shall be included in all copies or substantial portions of the
13de2362d3Smrg * Software.
14de2362d3Smrg *
15de2362d3Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16de2362d3Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17de2362d3Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18de2362d3Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19de2362d3Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20de2362d3Smrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21de2362d3Smrg * SOFTWARE.
22de2362d3Smrg *
23de2362d3Smrg * Authors:
24de2362d3Smrg *     Dave Airlie <airlied@redhat.com>
25de2362d3Smrg *
26de2362d3Smrg */
27de2362d3Smrg#ifndef DRMMODE_DISPLAY_H
28de2362d3Smrg#define DRMMODE_DISPLAY_H
29de2362d3Smrg
30de2362d3Smrg#include "xf86drmMode.h"
31de2362d3Smrg#ifdef HAVE_LIBUDEV
32de2362d3Smrg#include "libudev.h"
33de2362d3Smrg#endif
34de2362d3Smrg
35de2362d3Smrg#include "radeon_probe.h"
36de2362d3Smrg
37de2362d3Smrg#ifndef DRM_CAP_TIMESTAMP_MONOTONIC
38de2362d3Smrg#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
39de2362d3Smrg#endif
40de2362d3Smrg
41de2362d3Smrgtypedef struct {
42de2362d3Smrg  int fd;
43de2362d3Smrg  unsigned fb_id;
44de2362d3Smrg  drmModeResPtr mode_res;
45de2362d3Smrg  drmModeFBPtr mode_fb;
46de2362d3Smrg  int cpp;
47de2362d3Smrg  struct radeon_bo_manager *bufmgr;
48de2362d3Smrg  ScrnInfoPtr scrn;
49de2362d3Smrg#ifdef HAVE_LIBUDEV
50de2362d3Smrg  struct udev_monitor *uevent_monitor;
51de2362d3Smrg  InputHandlerProc uevent_handler;
52de2362d3Smrg#endif
53de2362d3Smrg  drmEventContext event_context;
54de2362d3Smrg} drmmode_rec, *drmmode_ptr;
55de2362d3Smrg
56de2362d3Smrgtypedef struct {
57de2362d3Smrg  drmmode_ptr drmmode;
58de2362d3Smrg  unsigned old_fb_id;
59de2362d3Smrg  int flip_count;
60de2362d3Smrg  void *event_data;
61de2362d3Smrg  unsigned int fe_frame;
62de2362d3Smrg  unsigned int fe_tv_sec;
63de2362d3Smrg  unsigned int fe_tv_usec;
64de2362d3Smrg} drmmode_flipdata_rec, *drmmode_flipdata_ptr;
65de2362d3Smrg
66de2362d3Smrgtypedef struct {
67de2362d3Smrg  drmmode_flipdata_ptr flipdata;
68de2362d3Smrg  Bool dispatch_me;
69de2362d3Smrg} drmmode_flipevtcarrier_rec, *drmmode_flipevtcarrier_ptr;
70de2362d3Smrg
71de2362d3Smrgtypedef struct {
72de2362d3Smrg    drmmode_ptr drmmode;
73de2362d3Smrg    drmModeCrtcPtr mode_crtc;
74de2362d3Smrg    int hw_id;
75de2362d3Smrg    struct radeon_bo *cursor_bo;
76de2362d3Smrg    struct radeon_bo *rotate_bo;
77de2362d3Smrg    unsigned rotate_fb_id;
78de2362d3Smrg    int dpms_mode;
79de2362d3Smrg    CARD64 dpms_last_ust;
80de2362d3Smrg    uint32_t dpms_last_seq;
81de2362d3Smrg    int dpms_last_fps;
82de2362d3Smrg    uint32_t interpolated_vblanks;
83de2362d3Smrg    uint16_t lut_r[256], lut_g[256], lut_b[256];
84de2362d3Smrg    int scanout_pixmap_x;
85de2362d3Smrg} drmmode_crtc_private_rec, *drmmode_crtc_private_ptr;
86de2362d3Smrg
87de2362d3Smrgtypedef struct {
88de2362d3Smrg    drmModePropertyPtr mode_prop;
89de2362d3Smrg    uint64_t value;
90de2362d3Smrg    int num_atoms; /* if range prop, num_atoms == 1; if enum prop, num_atoms == num_enums + 1 */
91de2362d3Smrg    Atom *atoms;
92de2362d3Smrg} drmmode_prop_rec, *drmmode_prop_ptr;
93de2362d3Smrg
94de2362d3Smrg
95de2362d3Smrgtypedef struct {
96de2362d3Smrg    drmmode_ptr drmmode;
97de2362d3Smrg    int output_id;
98de2362d3Smrg    drmModeConnectorPtr mode_output;
99de2362d3Smrg    drmModeEncoderPtr *mode_encoders;
100de2362d3Smrg    drmModePropertyBlobPtr edid_blob;
101de2362d3Smrg    int dpms_enum_id;
102de2362d3Smrg    int num_props;
103de2362d3Smrg    drmmode_prop_ptr props;
104de2362d3Smrg    int enc_mask;
105de2362d3Smrg    int enc_clone_mask;
106de2362d3Smrg} drmmode_output_private_rec, *drmmode_output_private_ptr;
107de2362d3Smrg
108de2362d3Smrg
109de2362d3Smrgextern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp);
110de2362d3Smrgextern void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
111de2362d3Smrgextern void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
112de2362d3Smrgextern Bool drmmode_set_bufmgr(ScrnInfoPtr pScrn, drmmode_ptr drmmode, struct radeon_bo_manager *bufmgr);
113de2362d3Smrgextern void drmmode_set_cursor(ScrnInfoPtr scrn, drmmode_ptr drmmode, int id, struct radeon_bo *bo);
114de2362d3Smrgvoid drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y);
115de2362d3Smrgextern Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
116de2362d3Smrgextern void drmmode_copy_fb(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
117de2362d3Smrgextern Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn);
118de2362d3Smrg
119de2362d3Smrgextern void drmmode_uevent_init(ScrnInfoPtr scrn, drmmode_ptr drmmode);
120de2362d3Smrgextern void drmmode_uevent_fini(ScrnInfoPtr scrn, drmmode_ptr drmmode);
121de2362d3Smrg
122de2362d3Smrgextern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling);
123de2362d3Smrgextern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
124de2362d3Smrgextern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling);
125de2362d3Smrg
126de2362d3SmrgBool radeon_do_pageflip(ScrnInfoPtr scrn, struct radeon_bo *new_front, void *data, int ref_crtc_hw_id);
127de2362d3Smrgint drmmode_get_current_ust(int drm_fd, CARD64 *ust);
128de2362d3Smrg
129de2362d3Smrg#endif
130de2362d3Smrg
131