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