Linux Audio

Check our new training course

Loading...
v6.8
 1/* SPDX-License-Identifier: MIT */
 2#ifndef __NOUVEAU_DISPLAY_H__
 3#define __NOUVEAU_DISPLAY_H__
 4
 5#include "nouveau_drv.h"
 6
 7#include <nvif/disp.h>
 8
 9#include <drm/drm_framebuffer.h>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
11int
12nouveau_framebuffer_new(struct drm_device *dev,
13			const struct drm_mode_fb_cmd2 *mode_cmd,
14			struct drm_gem_object *gem,
15			struct drm_framebuffer **pfb);
 
 
 
 
16
17struct nouveau_display {
18	void *priv;
19	void (*dtor)(struct drm_device *);
20	int  (*init)(struct drm_device *, bool resume, bool runtime);
21	void (*fini)(struct drm_device *, bool suspend, bool runtime);
 
 
 
22
23	struct nvif_disp disp;
24
25	struct drm_property *dithering_mode;
26	struct drm_property *dithering_depth;
27	struct drm_property *underscan_property;
28	struct drm_property *underscan_hborder_property;
29	struct drm_property *underscan_vborder_property;
30	/* not really hue and saturation: */
31	struct drm_property *vibrant_hue_property;
32	struct drm_property *color_vibrance_property;
33
34	struct drm_atomic_state *suspend;
35
36	const u64 *format_modifiers;
37};
38
39static inline struct nouveau_display *
40nouveau_display(struct drm_device *dev)
41{
42	return nouveau_drm(dev)->display;
43}
44
45int  nouveau_display_create(struct drm_device *dev);
46void nouveau_display_destroy(struct drm_device *dev);
47int  nouveau_display_init(struct drm_device *dev, bool resume, bool runtime);
48void nouveau_display_hpd_resume(struct drm_device *dev);
49void nouveau_display_fini(struct drm_device *dev, bool suspend, bool runtime);
50int  nouveau_display_suspend(struct drm_device *dev, bool runtime);
51void nouveau_display_resume(struct drm_device *dev, bool runtime);
52int  nouveau_display_vblank_enable(struct drm_crtc *crtc);
53void nouveau_display_vblank_disable(struct drm_crtc *crtc);
54bool nouveau_display_scanoutpos(struct drm_crtc *crtc,
55				bool in_vblank_irq, int *vpos, int *hpos,
56				ktime_t *stime, ktime_t *etime,
57				const struct drm_display_mode *mode);
 
 
 
 
 
 
 
58
59int  nouveau_display_dumb_create(struct drm_file *, struct drm_device *,
60				 struct drm_mode_create_dumb *args);
 
 
61
62void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
63
64void
65nouveau_framebuffer_get_layout(struct drm_framebuffer *fb, uint32_t *tile_mode,
66			       uint8_t *kind);
67
68struct drm_framebuffer *
69nouveau_user_framebuffer_create(struct drm_device *, struct drm_file *,
70				const struct drm_mode_fb_cmd2 *);
 
 
 
 
 
 
 
 
 
71#endif
v4.6
 
  1#ifndef __NOUVEAU_DISPLAY_H__
  2#define __NOUVEAU_DISPLAY_H__
  3
  4#include <subdev/mmu.h>
  5
  6#include "nouveau_drm.h"
  7
  8struct nouveau_framebuffer {
  9	struct drm_framebuffer base;
 10	struct nouveau_bo *nvbo;
 11	struct nvkm_vma vma;
 12	u32 r_handle;
 13	u32 r_format;
 14	u32 r_pitch;
 15	struct nvif_object h_base[4];
 16	struct nvif_object h_core;
 17};
 18
 19static inline struct nouveau_framebuffer *
 20nouveau_framebuffer(struct drm_framebuffer *fb)
 21{
 22	return container_of(fb, struct nouveau_framebuffer, base);
 23}
 24
 25int nouveau_framebuffer_init(struct drm_device *, struct nouveau_framebuffer *,
 26			     const struct drm_mode_fb_cmd2 *, struct nouveau_bo *);
 27
 28struct nouveau_page_flip_state {
 29	struct list_head head;
 30	struct drm_pending_vblank_event *event;
 31	int crtc, bpp, pitch, x, y;
 32	u64 offset;
 33};
 34
 35struct nouveau_display {
 36	void *priv;
 37	void (*dtor)(struct drm_device *);
 38	int  (*init)(struct drm_device *);
 39	void (*fini)(struct drm_device *);
 40
 41	int  (*fb_ctor)(struct drm_framebuffer *);
 42	void (*fb_dtor)(struct drm_framebuffer *);
 43
 44	struct nvif_object disp;
 45
 46	struct drm_property *dithering_mode;
 47	struct drm_property *dithering_depth;
 48	struct drm_property *underscan_property;
 49	struct drm_property *underscan_hborder_property;
 50	struct drm_property *underscan_vborder_property;
 51	/* not really hue and saturation: */
 52	struct drm_property *vibrant_hue_property;
 53	struct drm_property *color_vibrance_property;
 
 
 
 
 54};
 55
 56static inline struct nouveau_display *
 57nouveau_display(struct drm_device *dev)
 58{
 59	return nouveau_drm(dev)->display;
 60}
 61
 62int  nouveau_display_create(struct drm_device *dev);
 63void nouveau_display_destroy(struct drm_device *dev);
 64int  nouveau_display_init(struct drm_device *dev);
 65void nouveau_display_fini(struct drm_device *dev);
 
 66int  nouveau_display_suspend(struct drm_device *dev, bool runtime);
 67void nouveau_display_resume(struct drm_device *dev, bool runtime);
 68int  nouveau_display_vblank_enable(struct drm_device *, unsigned int);
 69void nouveau_display_vblank_disable(struct drm_device *, unsigned int);
 70int  nouveau_display_scanoutpos(struct drm_device *, unsigned int,
 71				unsigned int, int *, int *, ktime_t *,
 72				ktime_t *, const struct drm_display_mode *);
 73int  nouveau_display_vblstamp(struct drm_device *, unsigned int, int *,
 74			      struct timeval *, unsigned);
 75
 76int  nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
 77			    struct drm_pending_vblank_event *event,
 78			    uint32_t page_flip_flags);
 79int  nouveau_finish_page_flip(struct nouveau_channel *,
 80			      struct nouveau_page_flip_state *);
 81
 82int  nouveau_display_dumb_create(struct drm_file *, struct drm_device *,
 83				 struct drm_mode_create_dumb *args);
 84int  nouveau_display_dumb_map_offset(struct drm_file *, struct drm_device *,
 85				     u32 handle, u64 *offset);
 86
 87void nouveau_hdmi_mode_set(struct drm_encoder *, struct drm_display_mode *);
 88
 89int nouveau_crtc_set_config(struct drm_mode_set *set);
 90#ifdef CONFIG_DRM_NOUVEAU_BACKLIGHT
 91extern int nouveau_backlight_init(struct drm_device *);
 92extern void nouveau_backlight_exit(struct drm_device *);
 93#else
 94static inline int
 95nouveau_backlight_init(struct drm_device *dev)
 96{
 97	return 0;
 98}
 99
100static inline void
101nouveau_backlight_exit(struct drm_device *dev) {
102}
103#endif
104
105#endif