Home | History | Annotate | Line # | Download | only in drm
drm_plane_helper.h revision 1.2.30.1
      1 /*	$NetBSD: drm_plane_helper.h,v 1.2.30.1 2018/09/06 06:56:35 pgoyette Exp $	*/
      2 
      3 /*
      4  * Copyright (C) 2011-2013 Intel Corporation
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the next
     14  * paragraph) shall be included in all copies or substantial portions of the
     15  * Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     23  * SOFTWARE.
     24  */
     25 
     26 #ifndef DRM_PLANE_HELPER_H
     27 #define DRM_PLANE_HELPER_H
     28 
     29 #include <drm/drm_rect.h>
     30 #include <drm/drm_crtc.h>
     31 
     32 /*
     33  * Drivers that don't allow primary plane scaling may pass this macro in place
     34  * of the min/max scale parameters of the update checker function.
     35  *
     36  * Due to src being in 16.16 fixed point and dest being in integer pixels,
     37  * 1<<16 represents no scaling.
     38  */
     39 #define DRM_PLANE_HELPER_NO_SCALING (1<<16)
     40 
     41 /**
     42  * DOC: plane helpers
     43  *
     44  * Helper functions to assist with creation and handling of CRTC primary
     45  * planes.
     46  */
     47 
     48 int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
     49 		  const struct drm_crtc_funcs *funcs);
     50 
     51 /**
     52  * drm_plane_helper_funcs - helper operations for CRTCs
     53  * @prepare_fb: prepare a framebuffer for use by the plane
     54  * @cleanup_fb: cleanup a framebuffer when it's no longer used by the plane
     55  * @atomic_check: check that a given atomic state is valid and can be applied
     56  * @atomic_update: apply an atomic state to the plane (mandatory)
     57  * @atomic_disable: disable the plane
     58  *
     59  * The helper operations are called by the mid-layer CRTC helper.
     60  */
     61 struct drm_plane_helper_funcs {
     62 	int (*prepare_fb)(struct drm_plane *plane,
     63 			  const struct drm_plane_state *new_state);
     64 	void (*cleanup_fb)(struct drm_plane *plane,
     65 			   const struct drm_plane_state *old_state);
     66 
     67 	int (*atomic_check)(struct drm_plane *plane,
     68 			    struct drm_plane_state *state);
     69 	void (*atomic_update)(struct drm_plane *plane,
     70 			      struct drm_plane_state *old_state);
     71 	void (*atomic_disable)(struct drm_plane *plane,
     72 			       struct drm_plane_state *old_state);
     73 };
     74 
     75 static inline void drm_plane_helper_add(struct drm_plane *plane,
     76 					const struct drm_plane_helper_funcs *funcs)
     77 {
     78 	plane->helper_private = funcs;
     79 }
     80 
     81 int drm_plane_helper_check_update(struct drm_plane *plane,
     82 				  struct drm_crtc *crtc,
     83 				  struct drm_framebuffer *fb,
     84 				  struct drm_rect *src,
     85 				  struct drm_rect *dest,
     86 				  const struct drm_rect *clip,
     87 				  int min_scale,
     88 				  int max_scale,
     89 				  bool can_position,
     90 				  bool can_update_disabled,
     91 				  bool *visible);
     92 int drm_primary_helper_update(struct drm_plane *plane,
     93 			      struct drm_crtc *crtc,
     94 			      struct drm_framebuffer *fb,
     95 			      int crtc_x, int crtc_y,
     96 			      unsigned int crtc_w, unsigned int crtc_h,
     97 			      uint32_t src_x, uint32_t src_y,
     98 			      uint32_t src_w, uint32_t src_h);
     99 int drm_primary_helper_disable(struct drm_plane *plane);
    100 void drm_primary_helper_destroy(struct drm_plane *plane);
    101 extern const struct drm_plane_funcs drm_primary_helper_funcs;
    102 
    103 int drm_plane_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
    104 			    struct drm_framebuffer *fb,
    105 			    int crtc_x, int crtc_y,
    106 			    unsigned int crtc_w, unsigned int crtc_h,
    107 			    uint32_t src_x, uint32_t src_y,
    108 			    uint32_t src_w, uint32_t src_h);
    109 int drm_plane_helper_disable(struct drm_plane *plane);
    110 
    111 /* For use by drm_crtc_helper.c */
    112 int drm_plane_helper_commit(struct drm_plane *plane,
    113 			    struct drm_plane_state *plane_state,
    114 			    struct drm_framebuffer *old_fb);
    115 #endif
    116