Lines Matching refs:wndw

48 nv50_wndw_ctxdma_new(struct nv50_wndw *wndw, struct drm_framebuffer *fb)  in nv50_wndw_ctxdma_new()  argument
69 list_for_each_entry(ctxdma, &wndw->ctxdma.list, head) { in nv50_wndw_ctxdma_new()
76 list_add(&ctxdma->head, &wndw->ctxdma.list); in nv50_wndw_ctxdma_new()
101 ret = nvif_object_ctor(wndw->ctxdma.parent, "kmsFbCtxDma", handle, in nv50_wndw_ctxdma_new()
112 nv50_wndw_wait_armed(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) in nv50_wndw_wait_armed() argument
114 struct nv50_disp *disp = nv50_disp(wndw->plane.dev); in nv50_wndw_wait_armed()
116 return wndw->func->ntfy_wait_begun(disp->sync, in nv50_wndw_wait_armed()
118 wndw->wndw.base.device); in nv50_wndw_wait_armed()
124 nv50_wndw_flush_clr(struct nv50_wndw *wndw, u32 *interlock, bool flush, in nv50_wndw_flush_clr() argument
130 if (clr.sema ) wndw->func-> sema_clr(wndw); in nv50_wndw_flush_clr()
131 if (clr.ntfy ) wndw->func-> ntfy_clr(wndw); in nv50_wndw_flush_clr()
132 if (clr.xlut ) wndw->func-> xlut_clr(wndw); in nv50_wndw_flush_clr()
133 if (clr.csc ) wndw->func-> csc_clr(wndw); in nv50_wndw_flush_clr()
134 if (clr.image) wndw->func->image_clr(wndw); in nv50_wndw_flush_clr()
136 interlock[wndw->interlock.type] |= wndw->interlock.data; in nv50_wndw_flush_clr()
140 nv50_wndw_flush_set(struct nv50_wndw *wndw, u32 *interlock, in nv50_wndw_flush_set() argument
148 if (asyw->set.sema ) wndw->func->sema_set (wndw, asyw); in nv50_wndw_flush_set()
149 if (asyw->set.ntfy ) wndw->func->ntfy_set (wndw, asyw); in nv50_wndw_flush_set()
150 if (asyw->set.image) wndw->func->image_set(wndw, asyw); in nv50_wndw_flush_set()
155 nv50_lut_load(&wndw->ilut, asyw->xlut.i.buffer, in nv50_wndw_flush_set()
158 wndw->func->xlut_set(wndw, asyw); in nv50_wndw_flush_set()
161 if (asyw->set.csc ) wndw->func->csc_set (wndw, asyw); in nv50_wndw_flush_set()
162 if (asyw->set.scale) wndw->func->scale_set(wndw, asyw); in nv50_wndw_flush_set()
163 if (asyw->set.blend) wndw->func->blend_set(wndw, asyw); in nv50_wndw_flush_set()
166 interlock[wndw->interlock.type] |= wndw->interlock.data; in nv50_wndw_flush_set()
167 interlock[NV50_DISP_INTERLOCK_WIMM] |= wndw->interlock.wimm; in nv50_wndw_flush_set()
169 wndw->immd->point(wndw, asyw); in nv50_wndw_flush_set()
170 wndw->immd->update(wndw, interlock); in nv50_wndw_flush_set()
172 interlock[wndw->interlock.type] |= wndw->interlock.data; in nv50_wndw_flush_set()
177 nv50_wndw_ntfy_enable(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) in nv50_wndw_ntfy_enable() argument
179 struct nv50_disp *disp = nv50_disp(wndw->plane.dev); in nv50_wndw_ntfy_enable()
181 asyw->ntfy.handle = wndw->wndw.sync.handle; in nv50_wndw_ntfy_enable()
182 asyw->ntfy.offset = wndw->ntfy; in nv50_wndw_ntfy_enable()
186 wndw->func->ntfy_reset(disp->sync, wndw->ntfy); in nv50_wndw_ntfy_enable()
187 wndw->ntfy ^= 0x10; in nv50_wndw_ntfy_enable()
191 nv50_wndw_atomic_check_release(struct nv50_wndw *wndw, in nv50_wndw_atomic_check_release() argument
195 struct nouveau_drm *drm = nouveau_drm(wndw->plane.dev); in nv50_wndw_atomic_check_release()
196 NV_ATOMIC(drm, "%s release\n", wndw->plane.name); in nv50_wndw_atomic_check_release()
197 wndw->func->release(wndw, asyw, asyh); in nv50_wndw_atomic_check_release()
266 nv50_wndw_atomic_check_acquire(struct nv50_wndw *wndw, bool modeset, in nv50_wndw_atomic_check_acquire() argument
272 struct nouveau_drm *drm = nouveau_drm(wndw->plane.dev); in nv50_wndw_atomic_check_acquire()
277 NV_ATOMIC(drm, "%s acquire\n", wndw->plane.name); in nv50_wndw_atomic_check_acquire()
318 asyw->set.image = wndw->func->image_set != NULL; in nv50_wndw_atomic_check_acquire()
321 if (wndw->func->scale_set) { in nv50_wndw_atomic_check_acquire()
332 if (wndw->func->blend_set) { in nv50_wndw_atomic_check_acquire()
354 if (wndw->immd) { in nv50_wndw_atomic_check_acquire()
361 return wndw->func->acquire(wndw, asyw, asyh); in nv50_wndw_atomic_check_acquire()
365 nv50_wndw_atomic_check_lut(struct nv50_wndw *wndw, in nv50_wndw_atomic_check_lut() argument
389 if (wndw->func->ilut) in nv50_wndw_atomic_check_lut()
390 asyh->wndw.olut |= BIT(wndw->id); in nv50_wndw_atomic_check_lut()
392 asyh->wndw.olut &= ~BIT(wndw->id); in nv50_wndw_atomic_check_lut()
395 if (!ilut && wndw->func->ilut_identity && in nv50_wndw_atomic_check_lut()
404 if ((asyw->ilut = wndw->func->ilut ? ilut : NULL)) { in nv50_wndw_atomic_check_lut()
405 if (!wndw->func->ilut(wndw, asyw, drm_color_lut_size(ilut))) { in nv50_wndw_atomic_check_lut()
409 asyw->xlut.handle = wndw->wndw.vram.handle; in nv50_wndw_atomic_check_lut()
417 if (wndw->func->olut_core && in nv50_wndw_atomic_check_lut()
421 if (wndw->func->csc && asyh->state.ctm) { in nv50_wndw_atomic_check_lut()
423 wndw->func->csc(wndw, asyw, ctm); in nv50_wndw_atomic_check_lut()
440 struct nv50_wndw *wndw = nv50_wndw(plane); in nv50_wndw_atomic_check() local
441 struct nv50_wndw_atom *armw = nv50_wndw_atom(wndw->plane.state); in nv50_wndw_atomic_check()
470 if (asyw->visible && wndw->func->xlut_set && in nv50_wndw_atomic_check()
475 ret = nv50_wndw_atomic_check_lut(wndw, armw, asyw, asyh); in nv50_wndw_atomic_check()
482 ret = nv50_wndw_atomic_check_acquire(wndw, modeset, in nv50_wndw_atomic_check()
487 asyh->wndw.mask |= BIT(wndw->id); in nv50_wndw_atomic_check()
490 nv50_wndw_atomic_check_release(wndw, asyw, harm); in nv50_wndw_atomic_check()
491 harm->wndw.mask &= ~BIT(wndw->id); in nv50_wndw_atomic_check()
507 if (wndw->func->image_clr) in nv50_wndw_atomic_check()
533 struct nv50_wndw *wndw = nv50_wndw(plane); in nv50_wndw_prepare_fb() local
549 if (wndw->ctxdma.parent) { in nv50_wndw_prepare_fb()
550 ctxdma = nv50_wndw_ctxdma_new(wndw, fb); in nv50_wndw_prepare_fb()
563 if (wndw->func->prepare) { in nv50_wndw_prepare_fb()
568 wndw->func->prepare(wndw, asyh, asyw); in nv50_wndw_prepare_fb()
636 struct nv50_wndw *wndw = nv50_wndw(plane); in nv50_wndw_destroy() local
639 list_for_each_entry_safe(ctxdma, ctxtmp, &wndw->ctxdma.list, head) { in nv50_wndw_destroy()
643 nvif_notify_dtor(&wndw->notify); in nv50_wndw_destroy()
644 nv50_dmac_destroy(&wndw->wimm); in nv50_wndw_destroy()
645 nv50_dmac_destroy(&wndw->wndw); in nv50_wndw_destroy()
647 nv50_lut_fini(&wndw->ilut); in nv50_wndw_destroy()
649 drm_plane_cleanup(&wndw->plane); in nv50_wndw_destroy()
650 kfree(wndw); in nv50_wndw_destroy()
694 nv50_wndw_fini(struct nv50_wndw *wndw) in nv50_wndw_fini() argument
696 nvif_notify_put(&wndw->notify); in nv50_wndw_fini()
700 nv50_wndw_init(struct nv50_wndw *wndw) in nv50_wndw_init() argument
702 nvif_notify_get(&wndw->notify); in nv50_wndw_init()
720 struct nv50_wndw *wndw; in nv50_wndw_new_() local
725 if (!(wndw = *pwndw = kzalloc(sizeof(*wndw), GFP_KERNEL))) in nv50_wndw_new_()
727 wndw->func = func; in nv50_wndw_new_()
728 wndw->id = index; in nv50_wndw_new_()
729 wndw->interlock.type = interlock_type; in nv50_wndw_new_()
730 wndw->interlock.data = interlock_data; in nv50_wndw_new_()
732 wndw->ctxdma.parent = &wndw->wndw.base.user; in nv50_wndw_new_()
733 INIT_LIST_HEAD(&wndw->ctxdma.list); in nv50_wndw_new_()
742 ret = drm_universal_plane_init(dev, &wndw->plane, heads, &nv50_wndw, format, nformat, in nv50_wndw_new_()
750 drm_plane_helper_add(&wndw->plane, &nv50_wndw_helper); in nv50_wndw_new_()
752 if (wndw->func->ilut) { in nv50_wndw_new_()
753 ret = nv50_lut_init(disp, mmu, &wndw->ilut); in nv50_wndw_new_()
758 wndw->notify.func = nv50_wndw_notify; in nv50_wndw_new_()
760 if (wndw->func->blend_set) { in nv50_wndw_new_()
761 ret = drm_plane_create_zpos_property(&wndw->plane, in nv50_wndw_new_()
762 nv50_wndw_zpos_default(&wndw->plane), 0, 254); in nv50_wndw_new_()
766 ret = drm_plane_create_alpha_property(&wndw->plane); in nv50_wndw_new_()
770 ret = drm_plane_create_blend_mode_property(&wndw->plane, in nv50_wndw_new_()
777 ret = drm_plane_create_zpos_immutable_property(&wndw->plane, in nv50_wndw_new_()
778 nv50_wndw_zpos_default(&wndw->plane)); in nv50_wndw_new_()