blob: f623104ef2445e5ce09cf152dd92ca6a1594855b [file] [log] [blame]
limin.tian79bf2b12023-02-24 10:28:26 +00001 /*
2 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
Ao Xu6747bbd2020-09-28 20:02:09 +08003 *
limin.tian79bf2b12023-02-24 10:28:26 +00004 * This source code is subject to the terms and conditions defined in the
5 * file 'LICENSE' which is part of this source code package.
6 *
7 * Description:
Ao Xu6747bbd2020-09-28 20:02:09 +08008 */
9
10#ifndef _MESON_DRM_UTIL_H_
11#define _MESON_DRM_UTIL_H_
12
13#include <stdio.h>
14#include <stdint.h>
15#include <stdlib.h>
16#include <string.h>
17#include <errno.h>
18#include <unistd.h>
19
20#include <xf86drmMode.h>
21#include "meson_drmif.h"
22
23struct drm_buf {
24 uint32_t fourcc;
25 uint32_t width;
26 uint32_t height;
27 uint32_t flags;
28 uint32_t size;
29 int bpp;
30 int nbo;
31 struct meson_bo *bos[4];
32 uint32_t pitches[4];
33 uint32_t offsets[4];
34 uint32_t fb_id;
35 int fd[4];
36 int fence_fd;
37
38 uint32_t src_x, src_y, src_w, src_h;
Ao Xu70554242020-10-15 15:19:48 +080039 int crtc_x, crtc_y;
40 uint32_t crtc_w, crtc_h;
Ao Xu6747bbd2020-09-28 20:02:09 +080041 uint32_t zpos;
42
43 struct drm_display *disp;
44 int commit_to_video;
45};
46
47struct drm_buf_metadata {
48 uint32_t fourcc;
49 uint32_t width;
50 uint32_t height;
51 uint32_t flags;
52};
53
Ao Xu70554242020-10-15 15:19:48 +080054struct drm_buf_import {
55 uint32_t fourcc;
56 uint32_t width;
57 uint32_t height;
58 uint32_t flags;
59 int fd[4];
60};
61
Ao Xu6747bbd2020-09-28 20:02:09 +080062struct drm_display {
63 int drm_fd;
64 uint32_t width, height;
65 uint32_t vrefresh;
66 struct meson_device *dev;
67
68 size_t nbuf;
69 struct drm_buf *bufs;
wenlong.zhang7d32ed92023-04-12 06:08:17 +000070 int alloc_only;
71 int freeze;
Ao Xu6747bbd2020-09-28 20:02:09 +080072
73 void (*destroy_display)(struct drm_display *disp);
74 int (*alloc_bufs)(struct drm_display *disp, int num, struct drm_buf_metadata *info);
75 int (*free_bufs)(struct drm_display *disp);
76
77 struct drm_buf *(*alloc_buf)(struct drm_display *disp, struct drm_buf_metadata *info);
Ao Xu70554242020-10-15 15:19:48 +080078 struct drm_buf *(*import_buf)(struct drm_display *disp, struct drm_buf_import *info);
Ao Xu6747bbd2020-09-28 20:02:09 +080079 int (*free_buf)(struct drm_buf *buf);
80 int (*post_buf)(struct drm_display *disp, struct drm_buf *buf);
81
82 void (*display_done_callback)(void *priv);
83 void *priv;
84
85 void (*resolution_change_callback)(void *priv);
86 void *reso_priv;
87};
88
89struct drm_display *drm_display_init(void);
90void drm_destroy_display(struct drm_display *disp);
91void drm_display_register_done_cb(struct drm_display *disp, void *func, void *priv);
92void drm_display_register_res_cb(struct drm_display *disp, void *func, void *priv);
wenlong.zhang4c011d42022-06-09 10:59:38 +080093/*for non-root process, the renderD128 can used to do some ioctl, except display related ioctl*/
94int drm_set_alloc_only_flag(struct drm_display *disp, int flag);
Ao Xu6747bbd2020-09-28 20:02:09 +080095
96int drm_alloc_bufs(struct drm_display *disp, int num, struct drm_buf_metadata *info);
97int drm_free_bufs(struct drm_display *disp);
98
99struct drm_buf *drm_alloc_buf(struct drm_display *disp, struct drm_buf_metadata *info);
Ao Xu70554242020-10-15 15:19:48 +0800100struct drm_buf *drm_import_buf(struct drm_display *disp, struct drm_buf_import *info);
Ao Xu6747bbd2020-09-28 20:02:09 +0800101int drm_free_buf(struct drm_buf *buf);
102int drm_post_buf(struct drm_display *disp, struct drm_buf *buf);
103
sky zhouf05ca462020-10-29 18:07:40 +0800104int drmModeAsyncAtomicCommit(int fd, drmModeAtomicReqPtr req,
105 uint32_t flags, void *user_data);
106
wenlong.zhange389b372021-12-16 16:42:08 +0800107int drm_waitvideoFence( int dmabuffd);
108
Ao Xu6747bbd2020-09-28 20:02:09 +0800109#endif