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