2009-12-10 00:19:58 +00:00
/**************************************************************************
*
* Copyright © 2009 VMware , Inc . , Palo Alto , CA . , USA
* All Rights Reserved .
*
* Permission is hereby granted , free of charge , to any person obtaining a
* copy of this software and associated documentation files ( the
* " Software " ) , to deal in the Software without restriction , including
* without limitation the rights to use , copy , modify , merge , publish ,
* distribute , sub license , and / or sell copies of the Software , and to
* permit persons to whom the Software is furnished to do so , subject to
* the following conditions :
*
* The above copyright notice and this permission notice ( including the
* next paragraph ) shall be included in all copies or substantial portions
* of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NON - INFRINGEMENT . IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS , AUTHORS AND / OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM ,
* DAMAGES OR OTHER LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR
* OTHERWISE , ARISING FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef VMWGFX_KMS_H_
# define VMWGFX_KMS_H_
2012-10-02 18:01:07 +01:00
# include <drm/drmP.h>
# include <drm/drm_crtc_helper.h>
2009-12-10 00:19:58 +00:00
# include "vmwgfx_drv.h"
2011-10-04 20:13:22 +02:00
# define VMWGFX_NUM_DISPLAY_UNITS 8
2009-12-10 00:19:58 +00:00
# define vmw_framebuffer_to_vfb(x) \
container_of ( x , struct vmw_framebuffer , base )
/**
* Base class for framebuffers
*
* @ pin is called the when ever a crtc uses this framebuffer
* @ unpin is called
*/
struct vmw_framebuffer {
struct drm_framebuffer base ;
int ( * pin ) ( struct vmw_framebuffer * fb ) ;
int ( * unpin ) ( struct vmw_framebuffer * fb ) ;
2011-10-04 20:13:26 +02:00
bool dmabuf ;
2011-10-04 20:13:32 +02:00
struct ttm_base_object * user_obj ;
uint32_t user_handle ;
2009-12-10 00:19:58 +00:00
} ;
# define vmw_crtc_to_du(x) \
container_of ( x , struct vmw_display_unit , crtc )
/*
* Basic cursor manipulation
*/
int vmw_cursor_update_image ( struct vmw_private * dev_priv ,
u32 * image , u32 width , u32 height ,
u32 hotspotX , u32 hotspotY ) ;
2011-11-28 13:19:14 +01:00
int vmw_cursor_update_dmabuf ( struct vmw_private * dev_priv ,
struct vmw_dma_buffer * dmabuf ,
u32 width , u32 height ,
u32 hotspotX , u32 hotspotY ) ;
2009-12-10 00:19:58 +00:00
void vmw_cursor_update_position ( struct vmw_private * dev_priv ,
bool show , int x , int y ) ;
2011-11-28 13:19:14 +01:00
2009-12-10 00:19:58 +00:00
/**
* Base class display unit .
*
* Since the SVGA hw doesn ' t have a concept of a crtc , encoder or connector
* so the display unit is all of them at the same time . This is true for both
* legacy multimon and screen objects .
*/
struct vmw_display_unit {
struct drm_crtc crtc ;
struct drm_encoder encoder ;
struct drm_connector connector ;
struct vmw_surface * cursor_surface ;
struct vmw_dma_buffer * cursor_dmabuf ;
size_t cursor_age ;
int cursor_x ;
int cursor_y ;
int hotspot_x ;
int hotspot_y ;
unsigned unit ;
2011-10-04 20:13:20 +02:00
/*
* Prefered mode tracking .
*/
unsigned pref_width ;
unsigned pref_height ;
bool pref_active ;
struct drm_display_mode * pref_mode ;
2011-10-25 23:35:53 +02:00
/*
* Gui positioning
*/
int gui_x ;
int gui_y ;
2011-11-02 09:43:11 +01:00
bool is_implicit ;
2009-12-10 00:19:58 +00:00
} ;
2011-10-04 20:13:26 +02:00
# define vmw_crtc_to_du(x) \
container_of ( x , struct vmw_display_unit , crtc )
2011-10-04 20:13:20 +02:00
# define vmw_connector_to_du(x) \
container_of ( x , struct vmw_display_unit , connector )
2009-12-10 00:19:58 +00:00
/*
* Shared display unit functions - vmwgfx_kms . c
*/
void vmw_display_unit_cleanup ( struct vmw_display_unit * du ) ;
2012-02-09 16:56:45 +01:00
int vmw_du_page_flip ( struct drm_crtc * crtc ,
struct drm_framebuffer * fb ,
struct drm_pending_vblank_event * event ) ;
2011-10-04 20:13:20 +02:00
void vmw_du_crtc_save ( struct drm_crtc * crtc ) ;
void vmw_du_crtc_restore ( struct drm_crtc * crtc ) ;
void vmw_du_crtc_gamma_set ( struct drm_crtc * crtc ,
u16 * r , u16 * g , u16 * b ,
uint32_t start , uint32_t size ) ;
2009-12-10 00:19:58 +00:00
int vmw_du_crtc_cursor_set ( struct drm_crtc * crtc , struct drm_file * file_priv ,
uint32_t handle , uint32_t width , uint32_t height ) ;
int vmw_du_crtc_cursor_move ( struct drm_crtc * crtc , int x , int y ) ;
2011-10-04 20:13:20 +02:00
void vmw_du_connector_dpms ( struct drm_connector * connector , int mode ) ;
void vmw_du_connector_save ( struct drm_connector * connector ) ;
void vmw_du_connector_restore ( struct drm_connector * connector ) ;
enum drm_connector_status
vmw_du_connector_detect ( struct drm_connector * connector , bool force ) ;
int vmw_du_connector_fill_modes ( struct drm_connector * connector ,
uint32_t max_width , uint32_t max_height ) ;
int vmw_du_connector_set_property ( struct drm_connector * connector ,
struct drm_property * property ,
uint64_t val ) ;
2011-10-25 23:35:53 +02:00
2009-12-10 00:19:58 +00:00
/*
2010-06-01 11:54:20 +02:00
* Legacy display unit functions - vmwgfx_ldu . c
2009-12-10 00:19:58 +00:00
*/
int vmw_kms_init_legacy_display_system ( struct vmw_private * dev_priv ) ;
int vmw_kms_close_legacy_display_system ( struct vmw_private * dev_priv ) ;
2011-10-04 20:13:22 +02:00
/*
* Screen Objects display functions - vmwgfx_scrn . c
*/
int vmw_kms_init_screen_object_display ( struct vmw_private * dev_priv ) ;
int vmw_kms_close_screen_object_display ( struct vmw_private * dev_priv ) ;
int vmw_kms_sou_update_layout ( struct vmw_private * dev_priv , unsigned num ,
struct drm_vmw_rect * rects ) ;
2012-02-09 16:56:45 +01:00
bool vmw_kms_screen_object_flippable ( struct vmw_private * dev_priv ,
struct drm_crtc * crtc ) ;
void vmw_kms_screen_object_update_implicit_fb ( struct vmw_private * dev_priv ,
struct drm_crtc * crtc ) ;
2011-10-04 20:13:22 +02:00
2009-12-10 00:19:58 +00:00
# endif