Subversion Repositories Kolibri OS

Rev

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

  1. /**************************************************************************
  2.  *
  3.  * Copyright © 2009 VMware, Inc., Palo Alto, CA., USA
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20.  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  21.  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
  22.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  23.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  24.  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. #ifndef VMWGFX_KMS_H_
  29. #define VMWGFX_KMS_H_
  30.  
  31. #include <drm/drmP.h>
  32. #include <drm/drm_crtc_helper.h>
  33. #include "vmwgfx_drv.h"
  34.  
  35. #define VMWGFX_NUM_DISPLAY_UNITS 1
  36.  
  37.  
  38. #define vmw_framebuffer_to_vfb(x) \
  39.         container_of(x, struct vmw_framebuffer, base)
  40.  
  41. /**
  42.  * Base class for framebuffers
  43.  *
  44.  * @pin is called the when ever a crtc uses this framebuffer
  45.  * @unpin is called
  46.  */
  47. struct vmw_framebuffer {
  48.         struct drm_framebuffer base;
  49.         int (*pin)(struct vmw_framebuffer *fb);
  50.         int (*unpin)(struct vmw_framebuffer *fb);
  51.         bool dmabuf;
  52.         struct ttm_base_object *user_obj;
  53.         uint32_t user_handle;
  54. };
  55.  
  56.  
  57. #define vmw_crtc_to_du(x) \
  58.         container_of(x, struct vmw_display_unit, crtc)
  59.  
  60. /*
  61.  * Basic cursor manipulation
  62.  */
  63. int vmw_cursor_update_image(struct vmw_private *dev_priv,
  64.                             u32 *image, u32 width, u32 height,
  65.                             u32 hotspotX, u32 hotspotY);
  66. int vmw_cursor_update_dmabuf(struct vmw_private *dev_priv,
  67.                              struct vmw_dma_buffer *dmabuf,
  68.                              u32 width, u32 height,
  69.                              u32 hotspotX, u32 hotspotY);
  70. void vmw_cursor_update_position(struct vmw_private *dev_priv,
  71.                                 bool show, int x, int y);
  72.  
  73.  
  74. /**
  75.  * Base class display unit.
  76.  *
  77.  * Since the SVGA hw doesn't have a concept of a crtc, encoder or connector
  78.  * so the display unit is all of them at the same time. This is true for both
  79.  * legacy multimon and screen objects.
  80.  */
  81. struct vmw_display_unit {
  82.         struct drm_crtc crtc;
  83.         struct drm_encoder encoder;
  84.         struct drm_connector connector;
  85.  
  86.         struct vmw_surface *cursor_surface;
  87.         struct vmw_dma_buffer *cursor_dmabuf;
  88.         size_t cursor_age;
  89.  
  90.         int cursor_x;
  91.         int cursor_y;
  92.  
  93.         int hotspot_x;
  94.         int hotspot_y;
  95.  
  96.         unsigned unit;
  97.  
  98.         /*
  99.          * Prefered mode tracking.
  100.          */
  101.         unsigned pref_width;
  102.         unsigned pref_height;
  103.         bool pref_active;
  104.         struct drm_display_mode *pref_mode;
  105.  
  106.         /*
  107.          * Gui positioning
  108.          */
  109.         int gui_x;
  110.         int gui_y;
  111.         bool is_implicit;
  112. };
  113.  
  114. #define vmw_crtc_to_du(x) \
  115.         container_of(x, struct vmw_display_unit, crtc)
  116. #define vmw_connector_to_du(x) \
  117.         container_of(x, struct vmw_display_unit, connector)
  118.  
  119.  
  120. /*
  121.  * Shared display unit functions - vmwgfx_kms.c
  122.  */
  123. void vmw_display_unit_cleanup(struct vmw_display_unit *du);
  124. int vmw_du_page_flip(struct drm_crtc *crtc,
  125.                      struct drm_framebuffer *fb,
  126.                      struct drm_pending_vblank_event *event,
  127.                      uint32_t page_flip_flags);
  128. void vmw_du_crtc_save(struct drm_crtc *crtc);
  129. void vmw_du_crtc_restore(struct drm_crtc *crtc);
  130. void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
  131.                            u16 *r, u16 *g, u16 *b,
  132.                            uint32_t start, uint32_t size);
  133. int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
  134.                            uint32_t handle, uint32_t width, uint32_t height);
  135. int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
  136. void vmw_du_connector_dpms(struct drm_connector *connector, int mode);
  137. void vmw_du_connector_save(struct drm_connector *connector);
  138. void vmw_du_connector_restore(struct drm_connector *connector);
  139. enum drm_connector_status
  140. vmw_du_connector_detect(struct drm_connector *connector, bool force);
  141. int vmw_du_connector_fill_modes(struct drm_connector *connector,
  142.                                 uint32_t max_width, uint32_t max_height);
  143. int vmw_du_connector_set_property(struct drm_connector *connector,
  144.                                   struct drm_property *property,
  145.                                   uint64_t val);
  146.  
  147.  
  148. /*
  149.  * Legacy display unit functions - vmwgfx_ldu.c
  150.  */
  151. int vmw_kms_init_legacy_display_system(struct vmw_private *dev_priv);
  152. int vmw_kms_close_legacy_display_system(struct vmw_private *dev_priv);
  153.  
  154. /*
  155.  * Screen Objects display functions - vmwgfx_scrn.c
  156.  */
  157. int vmw_kms_init_screen_object_display(struct vmw_private *dev_priv);
  158. int vmw_kms_close_screen_object_display(struct vmw_private *dev_priv);
  159. int vmw_kms_sou_update_layout(struct vmw_private *dev_priv, unsigned num,
  160.                               struct drm_vmw_rect *rects);
  161. bool vmw_kms_screen_object_flippable(struct vmw_private *dev_priv,
  162.                                      struct drm_crtc *crtc);
  163. void vmw_kms_screen_object_update_implicit_fb(struct vmw_private *dev_priv,
  164.                                               struct drm_crtc *crtc);
  165.  
  166.  
  167. #endif
  168.