hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * Copyright (c) 2022 Rockchip Electronics Co., Ltd.
 * Author: Sandy Huang <hjc@rock-chips.com>
 */
 
#ifndef ROCKCHIP_DRM_DIRECT_SHOW_H
#define ROCKCHIP_DRM_DIRECT_SHOW_H
 
#include <linux/dma-direction.h>
#include <linux/memblock.h>
#include <drm/drm_atomic_uapi.h>
#include <drm/drm_drv.h>
#include <drm/drm_gem_cma_helper.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h>
 
#include "rockchip_drm_drv.h"
#include "rockchip_drm_fb.h"
#include "rockchip_drm_gem.h"
 
struct rockchip_drm_direct_show_buffer {
   /* input */
   u32 width;
   u32 height;
   u32 pixel_format;
   u32 flag; /* default 0 is scattered buffer, set ROCKCHIP_BO_CONTIG is continue CMA buffer */
 
   /* output */
   u32 bpp;        /* bits num per pixel */
   u32 pitch[3];        /* byte num for each line */
   void *vir_addr[3];    /* kernel virtual address, default use vir_addr[0] for RGB format */
   dma_addr_t phy_addr[3];    /* physical address when alloc continue cma buffer or secure buffer */
   struct rockchip_gem_object *rk_gem_obj;
   struct drm_framebuffer *fb;
   int dmabuf_fd;        /* export dmabuf_fd used by other module */
};
 
struct rockchip_drm_direct_show_commit_info {
   struct drm_crtc *crtc;
   struct drm_plane *plane;
   struct rockchip_drm_direct_show_buffer *buffer;
   u32 src_x;
   u32 src_y;
   u32 src_w;
   u32 src_h;
   u32 dst_x;
   u32 dst_y;
   u32 dst_w;
   u32 dst_h;
   bool top_zpos;
};
 
struct drm_device *rockchip_drm_get_dev(void);
int rockchip_drm_direct_show_alloc_buffer(struct drm_device *drm,
                     struct rockchip_drm_direct_show_buffer *buffer);
void rockchip_drm_direct_show_free_buffer(struct drm_device *drm,
                     struct rockchip_drm_direct_show_buffer *buffer);
struct drm_crtc *rockchip_drm_direct_show_get_crtc(struct drm_device *drm, const char *name);
struct drm_plane *rockchip_drm_direct_show_get_plane(struct drm_device *drm, const char *name);
int rockchip_drm_direct_show_commit(struct drm_device *drm,
                   struct rockchip_drm_direct_show_commit_info *commit_info);
int rockchip_drm_direct_show_disable_plane(struct drm_device *drm, struct drm_plane *plane);
int rockchip_drm_direct_show_buf_begin_cpu_access(struct rockchip_drm_direct_show_buffer *buffer);
int rockchip_drm_direct_show_buf_end_cpu_access(struct rockchip_drm_direct_show_buffer *buffer);
 
#endif