xref: /openbmc/linux/drivers/gpu/drm/nouveau/nouveau_crtc.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
16ee73861SBen Skeggs /*
26ee73861SBen Skeggs  * Copyright (C) 2008 Maarten Maathuis.
36ee73861SBen Skeggs  * All Rights Reserved.
46ee73861SBen Skeggs  *
56ee73861SBen Skeggs  * Permission is hereby granted, free of charge, to any person obtaining
66ee73861SBen Skeggs  * a copy of this software and associated documentation files (the
76ee73861SBen Skeggs  * "Software"), to deal in the Software without restriction, including
86ee73861SBen Skeggs  * without limitation the rights to use, copy, modify, merge, publish,
96ee73861SBen Skeggs  * distribute, sublicense, and/or sell copies of the Software, and to
106ee73861SBen Skeggs  * permit persons to whom the Software is furnished to do so, subject to
116ee73861SBen Skeggs  * the following conditions:
126ee73861SBen Skeggs  *
136ee73861SBen Skeggs  * The above copyright notice and this permission notice (including the
146ee73861SBen Skeggs  * next paragraph) shall be included in all copies or substantial
156ee73861SBen Skeggs  * portions of the Software.
166ee73861SBen Skeggs  *
176ee73861SBen Skeggs  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
186ee73861SBen Skeggs  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
196ee73861SBen Skeggs  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
206ee73861SBen Skeggs  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
216ee73861SBen Skeggs  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
226ee73861SBen Skeggs  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
236ee73861SBen Skeggs  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
246ee73861SBen Skeggs  *
256ee73861SBen Skeggs  */
266ee73861SBen Skeggs 
276ee73861SBen Skeggs #ifndef __NOUVEAU_CRTC_H__
286ee73861SBen Skeggs #define __NOUVEAU_CRTC_H__
293a2b9272SSam Ravnborg #include <drm/drm_crtc.h>
303a2b9272SSam Ravnborg 
31a2b7eadfSBen Skeggs #include <nvif/head.h>
32*ffd26641SBen Skeggs #include <nvif/event.h>
3380bc340bSBen Skeggs 
346ee73861SBen Skeggs struct nouveau_crtc {
356ee73861SBen Skeggs 	struct drm_crtc base;
366ee73861SBen Skeggs 
37a2b7eadfSBen Skeggs 	struct nvif_head head;
386ee73861SBen Skeggs 	int index;
39*ffd26641SBen Skeggs 	struct nvif_event vblank;
406ee73861SBen Skeggs 
416ee73861SBen Skeggs 	uint32_t dpms_saved_fp_control;
426ee73861SBen Skeggs 	uint32_t fp_users;
436ee73861SBen Skeggs 	int saturation;
446ee73861SBen Skeggs 	int sharpness;
456ee73861SBen Skeggs 	int last_dpms;
466ee73861SBen Skeggs 
47b334f2b3SMaarten Maathuis 	int cursor_saved_x, cursor_saved_y;
48b334f2b3SMaarten Maathuis 
496ee73861SBen Skeggs 	struct {
506ee73861SBen Skeggs 		int cpp;
516ee73861SBen Skeggs 		bool blanked;
526ee73861SBen Skeggs 		uint32_t offset;
538a423647SBen Skeggs 		uint32_t handle;
546ee73861SBen Skeggs 	} fb;
556ee73861SBen Skeggs 
566ee73861SBen Skeggs 	struct {
576ee73861SBen Skeggs 		struct nouveau_bo *nvbo;
586ee73861SBen Skeggs 		uint32_t offset;
596ee73861SBen Skeggs 		void (*set_offset)(struct nouveau_crtc *, uint32_t offset);
606ee73861SBen Skeggs 		void (*set_pos)(struct nouveau_crtc *, int x, int y);
616ee73861SBen Skeggs 		void (*hide)(struct nouveau_crtc *, bool update);
626ee73861SBen Skeggs 		void (*show)(struct nouveau_crtc *, bool update);
636ee73861SBen Skeggs 	} cursor;
646ee73861SBen Skeggs 
656ee73861SBen Skeggs 	struct {
666ee73861SBen Skeggs 		int depth;
676ee73861SBen Skeggs 	} lut;
686ee73861SBen Skeggs 
692c3d7715SDaniel Vetter 	void (*save)(struct drm_crtc *crtc);
702c3d7715SDaniel Vetter 	void (*restore)(struct drm_crtc *crtc);
716ee73861SBen Skeggs };
726ee73861SBen Skeggs 
nouveau_crtc(struct drm_crtc * crtc)736ee73861SBen Skeggs static inline struct nouveau_crtc *nouveau_crtc(struct drm_crtc *crtc)
746ee73861SBen Skeggs {
75e84a35a8SBen Skeggs 	return crtc ? container_of(crtc, struct nouveau_crtc, base) : NULL;
766ee73861SBen Skeggs }
776ee73861SBen Skeggs 
to_drm_crtc(struct nouveau_crtc * crtc)786ee73861SBen Skeggs static inline struct drm_crtc *to_drm_crtc(struct nouveau_crtc *crtc)
796ee73861SBen Skeggs {
806ee73861SBen Skeggs 	return &crtc->base;
816ee73861SBen Skeggs }
826ee73861SBen Skeggs 
836ee73861SBen Skeggs int nv04_cursor_init(struct nouveau_crtc *);
846ee73861SBen Skeggs 
856ee73861SBen Skeggs #endif /* __NOUVEAU_CRTC_H__ */
86