root/drivers/gpu/drm/nouveau/dispnv50/disp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. nv50_disp

   1 #ifndef __NV50_KMS_H__
   2 #define __NV50_KMS_H__
   3 #include <nvif/mem.h>
   4 
   5 #include "nouveau_display.h"
   6 
   7 struct nv50_disp {
   8         struct nvif_disp *disp;
   9         struct nv50_core *core;
  10 
  11 #define NV50_DISP_SYNC(c, o)                                ((c) * 0x040 + (o))
  12 #define NV50_DISP_CORE_NTFY                       NV50_DISP_SYNC(0      , 0x00)
  13 #define NV50_DISP_WNDW_SEM0(c)                    NV50_DISP_SYNC(1 + (c), 0x00)
  14 #define NV50_DISP_WNDW_SEM1(c)                    NV50_DISP_SYNC(1 + (c), 0x10)
  15 #define NV50_DISP_WNDW_NTFY(c)                    NV50_DISP_SYNC(1 + (c), 0x20)
  16 #define NV50_DISP_BASE_SEM0(c)                    NV50_DISP_WNDW_SEM0(0 + (c))
  17 #define NV50_DISP_BASE_SEM1(c)                    NV50_DISP_WNDW_SEM1(0 + (c))
  18 #define NV50_DISP_BASE_NTFY(c)                    NV50_DISP_WNDW_NTFY(0 + (c))
  19 #define NV50_DISP_OVLY_SEM0(c)                    NV50_DISP_WNDW_SEM0(4 + (c))
  20 #define NV50_DISP_OVLY_SEM1(c)                    NV50_DISP_WNDW_SEM1(4 + (c))
  21 #define NV50_DISP_OVLY_NTFY(c)                    NV50_DISP_WNDW_NTFY(4 + (c))
  22         struct nouveau_bo *sync;
  23 
  24         struct mutex mutex;
  25 };
  26 
  27 static inline struct nv50_disp *
  28 nv50_disp(struct drm_device *dev)
  29 {
  30         return nouveau_display(dev)->priv;
  31 }
  32 
  33 struct nv50_disp_interlock {
  34         enum nv50_disp_interlock_type {
  35                 NV50_DISP_INTERLOCK_CORE = 0,
  36                 NV50_DISP_INTERLOCK_CURS,
  37                 NV50_DISP_INTERLOCK_BASE,
  38                 NV50_DISP_INTERLOCK_OVLY,
  39                 NV50_DISP_INTERLOCK_WNDW,
  40                 NV50_DISP_INTERLOCK_WIMM,
  41                 NV50_DISP_INTERLOCK__SIZE
  42         } type;
  43         u32 data;
  44         u32 wimm;
  45 };
  46 
  47 void corec37d_ntfy_init(struct nouveau_bo *, u32);
  48 
  49 void head907d_olut_load(struct drm_color_lut *, int size, void __iomem *);
  50 
  51 struct nv50_chan {
  52         struct nvif_object user;
  53         struct nvif_device *device;
  54 };
  55 
  56 struct nv50_dmac {
  57         struct nv50_chan base;
  58 
  59         struct nvif_mem push;
  60         u32 *ptr;
  61 
  62         struct nvif_object sync;
  63         struct nvif_object vram;
  64 
  65         /* Protects against concurrent pushbuf access to this channel, lock is
  66          * grabbed by evo_wait (if the pushbuf reservation is successful) and
  67          * dropped again by evo_kick. */
  68         struct mutex lock;
  69 };
  70 
  71 int nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
  72                      const s32 *oclass, u8 head, void *data, u32 size,
  73                      u64 syncbuf, struct nv50_dmac *dmac);
  74 void nv50_dmac_destroy(struct nv50_dmac *);
  75 
  76 u32 *evo_wait(struct nv50_dmac *, int nr);
  77 void evo_kick(u32 *, struct nv50_dmac *);
  78 
  79 #define evo_mthd(p, m, s) do {                                          \
  80         const u32 _m = (m), _s = (s);                                   \
  81         if (drm_debug & DRM_UT_KMS)                                     \
  82                 pr_err("%04x %d %s\n", _m, _s, __func__);               \
  83         *((p)++) = ((_s << 18) | _m);                                   \
  84 } while(0)
  85 
  86 #define evo_data(p, d) do {                                             \
  87         const u32 _d = (d);                                             \
  88         if (drm_debug & DRM_UT_KMS)                                     \
  89                 pr_err("\t%08x\n", _d);                                 \
  90         *((p)++) = _d;                                                  \
  91 } while(0)
  92 #endif

/* [<][>][^][v][top][bottom][index][help] */