linux/drivers/gpu/drm/nouveau/dispnv50/wndw.h
<<
>>
Prefs
   1#ifndef __NV50_KMS_WNDW_H__
   2#define __NV50_KMS_WNDW_H__
   3#define nv50_wndw(p) container_of((p), struct nv50_wndw, plane)
   4#include "disp.h"
   5#include "atom.h"
   6#include "lut.h"
   7
   8#include <nvif/notify.h>
   9
  10struct nv50_wndw_ctxdma {
  11        struct list_head head;
  12        struct nvif_object object;
  13};
  14
  15struct nv50_wndw {
  16        const struct nv50_wndw_func *func;
  17        const struct nv50_wimm_func *immd;
  18        int id;
  19        struct nv50_disp_interlock interlock;
  20
  21        struct {
  22                struct nvif_object *parent;
  23                struct list_head list;
  24        } ctxdma;
  25
  26        struct drm_plane plane;
  27
  28        struct nv50_lut ilut;
  29
  30        struct nv50_dmac wndw;
  31        struct nv50_dmac wimm;
  32
  33        struct nvif_notify notify;
  34        u16 ntfy;
  35        u16 sema;
  36        u32 data;
  37};
  38
  39int nv50_wndw_new_(const struct nv50_wndw_func *, struct drm_device *,
  40                   enum drm_plane_type, const char *name, int index,
  41                   const u32 *format, enum nv50_disp_interlock_type,
  42                   u32 interlock_data, u32 heads, struct nv50_wndw **);
  43void nv50_wndw_init(struct nv50_wndw *);
  44void nv50_wndw_fini(struct nv50_wndw *);
  45void nv50_wndw_flush_set(struct nv50_wndw *, u32 *interlock,
  46                         struct nv50_wndw_atom *);
  47void nv50_wndw_flush_clr(struct nv50_wndw *, u32 *interlock, bool flush,
  48                         struct nv50_wndw_atom *);
  49void nv50_wndw_ntfy_enable(struct nv50_wndw *, struct nv50_wndw_atom *);
  50int nv50_wndw_wait_armed(struct nv50_wndw *, struct nv50_wndw_atom *);
  51
  52struct nv50_wndw_func {
  53        int (*acquire)(struct nv50_wndw *, struct nv50_wndw_atom *asyw,
  54                       struct nv50_head_atom *asyh);
  55        void (*release)(struct nv50_wndw *, struct nv50_wndw_atom *asyw,
  56                        struct nv50_head_atom *asyh);
  57        void (*prepare)(struct nv50_wndw *, struct nv50_head_atom *asyh,
  58                        struct nv50_wndw_atom *asyw);
  59
  60        void (*sema_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
  61        void (*sema_clr)(struct nv50_wndw *);
  62        void (*ntfy_reset)(struct nouveau_bo *, u32 offset);
  63        void (*ntfy_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
  64        void (*ntfy_clr)(struct nv50_wndw *);
  65        int (*ntfy_wait_begun)(struct nouveau_bo *, u32 offset,
  66                               struct nvif_device *);
  67        void (*ilut)(struct nv50_wndw *, struct nv50_wndw_atom *);
  68        bool olut_core;
  69        void (*xlut_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
  70        void (*xlut_clr)(struct nv50_wndw *);
  71        void (*image_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
  72        void (*image_clr)(struct nv50_wndw *);
  73        void (*scale_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
  74
  75        void (*update)(struct nv50_wndw *, u32 *interlock);
  76};
  77
  78extern const struct drm_plane_funcs nv50_wndw;
  79
  80void base507c_ntfy_reset(struct nouveau_bo *, u32);
  81int base507c_ntfy_wait_begun(struct nouveau_bo *, u32, struct nvif_device *);
  82
  83struct nv50_wimm_func {
  84        void (*point)(struct nv50_wndw *, struct nv50_wndw_atom *);
  85
  86        void (*update)(struct nv50_wndw *, u32 *interlock);
  87};
  88
  89extern const struct nv50_wimm_func curs507a;
  90
  91int wndwc37e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
  92                 struct nv50_wndw **);
  93
  94int nv50_wndw_new(struct nouveau_drm *, enum drm_plane_type, int index,
  95                  struct nv50_wndw **);
  96#endif
  97