2012-07-31 16:16:21 +10:00
# ifndef __NOUVEAU_DISPLAY_H__
# define __NOUVEAU_DISPLAY_H__
2015-01-14 09:57:36 +10:00
# include <subdev/mmu.h>
2012-07-31 16:16:21 +10:00
2016-05-20 09:22:55 +10:00
# include "nouveau_drv.h"
2012-07-31 16:16:21 +10:00
struct nouveau_framebuffer {
struct drm_framebuffer base ;
struct nouveau_bo * nvbo ;
2015-01-14 15:36:34 +10:00
struct nvkm_vma vma ;
2014-08-10 04:10:19 +10:00
u32 r_handle ;
2012-07-31 16:16:21 +10:00
u32 r_format ;
u32 r_pitch ;
2014-08-10 04:10:22 +10:00
struct nvif_object h_base [ 4 ] ;
struct nvif_object h_core ;
2012-07-31 16:16:21 +10:00
} ;
static inline struct nouveau_framebuffer *
nouveau_framebuffer ( struct drm_framebuffer * fb )
{
return container_of ( fb , struct nouveau_framebuffer , base ) ;
}
2016-11-04 17:20:35 +10:00
int nouveau_framebuffer_new ( struct drm_device * ,
const struct drm_mode_fb_cmd2 * ,
struct nouveau_bo * , struct nouveau_framebuffer * * ) ;
2012-07-31 16:16:21 +10:00
struct nouveau_page_flip_state {
struct list_head head ;
struct drm_pending_vblank_event * event ;
2016-06-07 11:07:53 -03:00
struct drm_crtc * crtc ;
int bpp , pitch ;
2012-07-31 16:16:21 +10:00
u64 offset ;
} ;
struct nouveau_display {
void * priv ;
void ( * dtor ) ( struct drm_device * ) ;
int ( * init ) ( struct drm_device * ) ;
void ( * fini ) ( struct drm_device * ) ;
2014-08-10 04:10:22 +10:00
struct nvif_object disp ;
2014-08-10 04:10:19 +10:00
2012-07-31 16:16:21 +10:00
struct drm_property * dithering_mode ;
struct drm_property * dithering_depth ;
struct drm_property * underscan_property ;
struct drm_property * underscan_hborder_property ;
struct drm_property * underscan_vborder_property ;
/* not really hue and saturation: */
struct drm_property * vibrant_hue_property ;
struct drm_property * color_vibrance_property ;
2016-11-04 17:20:36 +10:00
struct drm_atomic_state * suspend ;
2012-07-31 16:16:21 +10:00
} ;
static inline struct nouveau_display *
nouveau_display ( struct drm_device * dev )
{
return nouveau_drm ( dev ) - > display ;
}
int nouveau_display_create ( struct drm_device * dev ) ;
void nouveau_display_destroy ( struct drm_device * dev ) ;
int nouveau_display_init ( struct drm_device * dev ) ;
2016-11-04 17:20:35 +10:00
void nouveau_display_fini ( struct drm_device * dev , bool suspend ) ;
2014-10-02 13:22:27 +10:00
int nouveau_display_suspend ( struct drm_device * dev , bool runtime ) ;
void nouveau_display_resume ( struct drm_device * dev , bool runtime ) ;
2015-09-24 18:35:31 +02:00
int nouveau_display_vblank_enable ( struct drm_device * , unsigned int ) ;
void nouveau_display_vblank_disable ( struct drm_device * , unsigned int ) ;
int nouveau_display_scanoutpos ( struct drm_device * , unsigned int ,
unsigned int , int * , int * , ktime_t * ,
ktime_t * , const struct drm_display_mode * ) ;
int nouveau_display_vblstamp ( struct drm_device * , unsigned int , int * ,
2013-11-14 13:37:49 +10:00
struct timeval * , unsigned ) ;
2012-07-31 16:16:21 +10:00
int nouveau_crtc_page_flip ( struct drm_crtc * crtc , struct drm_framebuffer * fb ,
2013-07-22 18:49:58 -07:00
struct drm_pending_vblank_event * event ,
uint32_t page_flip_flags ) ;
2012-07-31 16:16:21 +10:00
int nouveau_finish_page_flip ( struct nouveau_channel * ,
struct nouveau_page_flip_state * ) ;
int nouveau_display_dumb_create ( struct drm_file * , struct drm_device * ,
struct drm_mode_create_dumb * args ) ;
int nouveau_display_dumb_map_offset ( struct drm_file * , struct drm_device * ,
u32 handle , u64 * offset ) ;
void nouveau_hdmi_mode_set ( struct drm_encoder * , struct drm_display_mode * ) ;
2012-09-10 14:20:51 +10:00
int nouveau_crtc_set_config ( struct drm_mode_set * set ) ;
2012-07-31 16:16:21 +10:00
# ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
extern int nouveau_backlight_init ( struct drm_device * ) ;
extern void nouveau_backlight_exit ( struct drm_device * ) ;
drm/nouveau/bl: Assign different names to interfaces
Currently, every backlight interface created by Nouveau uses the same name,
nv_backlight. This leads to a sysfs warning as it tries to create an already
existing folder. This patch adds a incremented number to the name, but keeps
the initial name as nv_backlight, to avoid possibly breaking userspace; the
second interface will be named nv_backlight1, and so on.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86539
v2:
* Switch to using ida for generating unique IDs, as suggested by Ilia Mirkin;
* Allocate backlight name on the stack, as suggested by Ilia Mirkin;
* Move `nouveau_get_backlight_name()` to avoid forward declaration, as
suggested by Ilia Mirkin;
* Fix reference to bug report formatting, as reported by Nick Tenney.
v3:
* Define a macro for the size of the backlight name, to avoid defining
it multiple times;
* Use snprintf in place of sprintf.
v4:
* Do not create similarly named interfaces when reaching the maximum
amount of unique names, but fail instead, as pointed out by Lukas Wunner
Signed-off-by: Pierre Moreau <pierre.morrow@free.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
2016-12-08 00:57:08 +01:00
extern void nouveau_backlight_ctor ( void ) ;
extern void nouveau_backlight_dtor ( void ) ;
2012-07-31 16:16:21 +10:00
# else
static inline int
nouveau_backlight_init ( struct drm_device * dev )
{
return 0 ;
}
static inline void
nouveau_backlight_exit ( struct drm_device * dev ) {
}
drm/nouveau/bl: Assign different names to interfaces
Currently, every backlight interface created by Nouveau uses the same name,
nv_backlight. This leads to a sysfs warning as it tries to create an already
existing folder. This patch adds a incremented number to the name, but keeps
the initial name as nv_backlight, to avoid possibly breaking userspace; the
second interface will be named nv_backlight1, and so on.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86539
v2:
* Switch to using ida for generating unique IDs, as suggested by Ilia Mirkin;
* Allocate backlight name on the stack, as suggested by Ilia Mirkin;
* Move `nouveau_get_backlight_name()` to avoid forward declaration, as
suggested by Ilia Mirkin;
* Fix reference to bug report formatting, as reported by Nick Tenney.
v3:
* Define a macro for the size of the backlight name, to avoid defining
it multiple times;
* Use snprintf in place of sprintf.
v4:
* Do not create similarly named interfaces when reaching the maximum
amount of unique names, but fail instead, as pointed out by Lukas Wunner
Signed-off-by: Pierre Moreau <pierre.morrow@free.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
2016-12-08 00:57:08 +01:00
static inline void
nouveau_backlight_ctor ( void ) {
}
static inline void
nouveau_backlight_dtor ( void ) {
}
2012-07-31 16:16:21 +10:00
# endif
2016-11-04 17:20:36 +10:00
struct drm_framebuffer *
nouveau_user_framebuffer_create ( struct drm_device * , struct drm_file * ,
const struct drm_mode_fb_cmd2 * ) ;
2012-07-31 16:16:21 +10:00
# endif