1  /*
2   * Copyright (c) 2016 Intel Corporation
3   *
4   * Permission to use, copy, modify, distribute, and sell this software and its
5   * documentation for any purpose is hereby granted without fee, provided that
6   * the above copyright notice appear in all copies and that both that copyright
7   * notice and this permission notice appear in supporting documentation, and
8   * that the name of the copyright holders not be used in advertising or
9   * publicity pertaining to distribution of the software without specific,
10   * written prior permission.  The copyright holders make no representations
11   * about the suitability of this software for any purpose.  It is provided "as
12   * is" without express or implied warranty.
13   *
14   * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15   * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16   * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17   * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18   * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20   * OF THIS SOFTWARE.
21   */
22  
23  #ifndef __DRM_BLEND_H__
24  #define __DRM_BLEND_H__
25  
26  #include <linux/list.h>
27  #include <linux/ctype.h>
28  #include <drm/drm_mode.h>
29  
30  #define DRM_MODE_BLEND_PREMULTI		0
31  #define DRM_MODE_BLEND_COVERAGE		1
32  #define DRM_MODE_BLEND_PIXEL_NONE	2
33  
34  struct drm_device;
35  struct drm_atomic_state;
36  struct drm_plane;
37  
drm_rotation_90_or_270(unsigned int rotation)38  static inline bool drm_rotation_90_or_270(unsigned int rotation)
39  {
40  	return rotation & (DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270);
41  }
42  
43  #define DRM_BLEND_ALPHA_OPAQUE		0xffff
44  
45  int drm_plane_create_alpha_property(struct drm_plane *plane);
46  int drm_plane_create_rotation_property(struct drm_plane *plane,
47  				       unsigned int rotation,
48  				       unsigned int supported_rotations);
49  unsigned int drm_rotation_simplify(unsigned int rotation,
50  				   unsigned int supported_rotations);
51  
52  int drm_plane_create_zpos_property(struct drm_plane *plane,
53  				   unsigned int zpos,
54  				   unsigned int min, unsigned int max);
55  int drm_plane_create_zpos_immutable_property(struct drm_plane *plane,
56  					     unsigned int zpos);
57  int drm_atomic_normalize_zpos(struct drm_device *dev,
58  			      struct drm_atomic_state *state);
59  int drm_plane_create_blend_mode_property(struct drm_plane *plane,
60  					 unsigned int supported_modes);
61  #endif
62