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