linux/include/drm/drm_gem_atomic_helper.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2
   3#ifndef __DRM_GEM_ATOMIC_HELPER_H__
   4#define __DRM_GEM_ATOMIC_HELPER_H__
   5
   6#include <linux/dma-buf-map.h>
   7
   8#include <drm/drm_plane.h>
   9
  10struct drm_simple_display_pipe;
  11
  12/*
  13 * Plane Helpers
  14 */
  15
  16int drm_gem_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state);
  17int drm_gem_simple_display_pipe_prepare_fb(struct drm_simple_display_pipe *pipe,
  18                                           struct drm_plane_state *plane_state);
  19
  20/*
  21 * Helpers for planes with shadow buffers
  22 */
  23
  24/**
  25 * struct drm_shadow_plane_state - plane state for planes with shadow buffers
  26 *
  27 * For planes that use a shadow buffer, struct drm_shadow_plane_state
  28 * provides the regular plane state plus mappings of the shadow buffer
  29 * into kernel address space.
  30 */
  31struct drm_shadow_plane_state {
  32        /** @base: plane state */
  33        struct drm_plane_state base;
  34
  35        /* Transitional state - do not export or duplicate */
  36
  37        /**
  38         * @map: Mappings of the plane's framebuffer BOs in to kernel address space
  39         *
  40         * The memory mappings stored in map should be established in the plane's
  41         * prepare_fb callback and removed in the cleanup_fb callback.
  42         */
  43        struct dma_buf_map map[4];
  44};
  45
  46/**
  47 * to_drm_shadow_plane_state - upcasts from struct drm_plane_state
  48 * @state: the plane state
  49 */
  50static inline struct drm_shadow_plane_state *
  51to_drm_shadow_plane_state(struct drm_plane_state *state)
  52{
  53        return container_of(state, struct drm_shadow_plane_state, base);
  54}
  55
  56void drm_gem_reset_shadow_plane(struct drm_plane *plane);
  57struct drm_plane_state *drm_gem_duplicate_shadow_plane_state(struct drm_plane *plane);
  58void drm_gem_destroy_shadow_plane_state(struct drm_plane *plane,
  59                                        struct drm_plane_state *plane_state);
  60
  61/**
  62 * DRM_GEM_SHADOW_PLANE_FUNCS -
  63 *      Initializes struct drm_plane_funcs for shadow-buffered planes
  64 *
  65 * Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This
  66 * macro initializes struct drm_plane_funcs to use the rsp helper functions.
  67 */
  68#define DRM_GEM_SHADOW_PLANE_FUNCS \
  69        .reset = drm_gem_reset_shadow_plane, \
  70        .atomic_duplicate_state = drm_gem_duplicate_shadow_plane_state, \
  71        .atomic_destroy_state = drm_gem_destroy_shadow_plane_state
  72
  73int drm_gem_prepare_shadow_fb(struct drm_plane *plane, struct drm_plane_state *plane_state);
  74void drm_gem_cleanup_shadow_fb(struct drm_plane *plane, struct drm_plane_state *plane_state);
  75
  76/**
  77 * DRM_GEM_SHADOW_PLANE_HELPER_FUNCS -
  78 *      Initializes struct drm_plane_helper_funcs for shadow-buffered planes
  79 *
  80 * Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This
  81 * macro initializes struct drm_plane_helper_funcs to use the rsp helper
  82 * functions.
  83 */
  84#define DRM_GEM_SHADOW_PLANE_HELPER_FUNCS \
  85        .prepare_fb = drm_gem_prepare_shadow_fb, \
  86        .cleanup_fb = drm_gem_cleanup_shadow_fb
  87
  88int drm_gem_simple_kms_prepare_shadow_fb(struct drm_simple_display_pipe *pipe,
  89                                         struct drm_plane_state *plane_state);
  90void drm_gem_simple_kms_cleanup_shadow_fb(struct drm_simple_display_pipe *pipe,
  91                                          struct drm_plane_state *plane_state);
  92void drm_gem_simple_kms_reset_shadow_plane(struct drm_simple_display_pipe *pipe);
  93struct drm_plane_state *
  94drm_gem_simple_kms_duplicate_shadow_plane_state(struct drm_simple_display_pipe *pipe);
  95void drm_gem_simple_kms_destroy_shadow_plane_state(struct drm_simple_display_pipe *pipe,
  96                                                   struct drm_plane_state *plane_state);
  97
  98/**
  99 * DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS -
 100 *      Initializes struct drm_simple_display_pipe_funcs for shadow-buffered planes
 101 *
 102 * Drivers may use GEM BOs as shadow buffers over the framebuffer memory. This
 103 * macro initializes struct drm_simple_display_pipe_funcs to use the rsp helper
 104 * functions.
 105 */
 106#define DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS \
 107        .prepare_fb = drm_gem_simple_kms_prepare_shadow_fb, \
 108        .cleanup_fb = drm_gem_simple_kms_cleanup_shadow_fb, \
 109        .reset_plane = drm_gem_simple_kms_reset_shadow_plane, \
 110        .duplicate_plane_state = drm_gem_simple_kms_duplicate_shadow_plane_state, \
 111        .destroy_plane_state = drm_gem_simple_kms_destroy_shadow_plane_state
 112
 113#endif /* __DRM_GEM_ATOMIC_HELPER_H__ */
 114