Subversion Repositories Kolibri OS

Rev

Rev 6082 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (C) 2014 Red Hat
  3.  * Copyright (C) 2014 Intel Corp.
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a
  6.  * copy of this software and associated documentation files (the "Software"),
  7.  * to deal in the Software without restriction, including without limitation
  8.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9.  * and/or sell copies of the Software, and to permit persons to whom the
  10.  * Software is furnished to do so, subject to the following conditions:
  11.  *
  12.  * The above copyright notice and this permission notice shall be included in
  13.  * all copies or substantial portions of the Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  19.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  20.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  21.  * OTHER DEALINGS IN THE SOFTWARE.
  22.  *
  23.  * Authors:
  24.  * Rob Clark <robdclark@gmail.com>
  25.  * Daniel Vetter <daniel.vetter@ffwll.ch>
  26.  */
  27.  
  28. #ifndef DRM_ATOMIC_HELPER_H_
  29. #define DRM_ATOMIC_HELPER_H_
  30.  
  31. #include <drm/drm_crtc.h>
  32.  
  33. int drm_atomic_helper_check(struct drm_device *dev,
  34.                             struct drm_atomic_state *state);
  35. int drm_atomic_helper_commit(struct drm_device *dev,
  36.                              struct drm_atomic_state *state,
  37.                              bool async);
  38.  
  39. void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
  40.                                         struct drm_atomic_state *old_state);
  41.  
  42. void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
  43.                                          struct drm_atomic_state *state);
  44. void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
  45.                                           struct drm_atomic_state *old_state);
  46.  
  47. int drm_atomic_helper_prepare_planes(struct drm_device *dev,
  48.                                      struct drm_atomic_state *state);
  49. void drm_atomic_helper_commit_planes(struct drm_device *dev,
  50.                                      struct drm_atomic_state *state);
  51. void drm_atomic_helper_cleanup_planes(struct drm_device *dev,
  52.                                       struct drm_atomic_state *old_state);
  53.  
  54. void drm_atomic_helper_swap_state(struct drm_device *dev,
  55.                                   struct drm_atomic_state *state);
  56.  
  57. /* implementations for legacy interfaces */
  58. int drm_atomic_helper_update_plane(struct drm_plane *plane,
  59.                                    struct drm_crtc *crtc,
  60.                                    struct drm_framebuffer *fb,
  61.                                    int crtc_x, int crtc_y,
  62.                                    unsigned int crtc_w, unsigned int crtc_h,
  63.                                    uint32_t src_x, uint32_t src_y,
  64.                                    uint32_t src_w, uint32_t src_h);
  65. int drm_atomic_helper_disable_plane(struct drm_plane *plane);
  66. int drm_atomic_helper_set_config(struct drm_mode_set *set);
  67.  
  68. int drm_atomic_helper_crtc_set_property(struct drm_crtc *crtc,
  69.                                         struct drm_property *property,
  70.                                         uint64_t val);
  71. int drm_atomic_helper_plane_set_property(struct drm_plane *plane,
  72.                                         struct drm_property *property,
  73.                                         uint64_t val);
  74. int drm_atomic_helper_connector_set_property(struct drm_connector *connector,
  75.                                         struct drm_property *property,
  76.                                         uint64_t val);
  77. int drm_atomic_helper_page_flip(struct drm_crtc *crtc,
  78.                                 struct drm_framebuffer *fb,
  79.                                 struct drm_pending_vblank_event *event,
  80.                                 uint32_t flags);
  81.  
  82. /* default implementations for state handling */
  83. void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc);
  84. struct drm_crtc_state *
  85. drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc);
  86. void drm_atomic_helper_crtc_destroy_state(struct drm_crtc *crtc,
  87.                                           struct drm_crtc_state *state);
  88.  
  89. void drm_atomic_helper_plane_reset(struct drm_plane *plane);
  90. struct drm_plane_state *
  91. drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane);
  92. void drm_atomic_helper_plane_destroy_state(struct drm_plane *plane,
  93.                                           struct drm_plane_state *state);
  94.  
  95. void drm_atomic_helper_connector_reset(struct drm_connector *connector);
  96. struct drm_connector_state *
  97. drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector);
  98. void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
  99.                                           struct drm_connector_state *state);
  100.  
  101. /**
  102.  * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
  103.  * @plane: the loop cursor
  104.  * @crtc:  the crtc whose planes are iterated
  105.  *
  106.  * This iterates over the current state, useful (for example) when applying
  107.  * atomic state after it has been checked and swapped.  To iterate over the
  108.  * planes which *will* be attached (for ->atomic_check()) see
  109.  * drm_crtc_for_each_pending_plane()
  110.  */
  111. #define drm_atomic_crtc_for_each_plane(plane, crtc) \
  112.         drm_for_each_plane_mask(plane, (crtc)->dev, (crtc)->state->plane_mask)
  113.  
  114. /**
  115.  * drm_crtc_atomic_state_for_each_plane - iterate over attached planes in new state
  116.  * @plane: the loop cursor
  117.  * @crtc_state: the incoming crtc-state
  118.  *
  119.  * Similar to drm_crtc_for_each_plane(), but iterates the planes that will be
  120.  * attached if the specified state is applied.  Useful during (for example)
  121.  * ->atomic_check() operations, to validate the incoming state
  122.  */
  123. #define drm_atomic_crtc_state_for_each_plane(plane, crtc_state) \
  124.         drm_for_each_plane_mask(plane, (crtc_state)->state->dev, (crtc_state)->plane_mask)
  125.  
  126. #endif /* DRM_ATOMIC_HELPER_H_ */
  127.