linux/drivers/gpu/drm/nouveau/nouveau_fence.h
<<
>>
Prefs
   1#ifndef __NOUVEAU_FENCE_H__
   2#define __NOUVEAU_FENCE_H__
   3
   4struct nouveau_drm;
   5
   6struct nouveau_fence {
   7        struct list_head head;
   8        struct list_head work;
   9        struct kref kref;
  10
  11        bool sysmem;
  12
  13        struct nouveau_channel *channel;
  14        unsigned long timeout;
  15        u32 sequence;
  16};
  17
  18int  nouveau_fence_new(struct nouveau_channel *, bool sysmem,
  19                       struct nouveau_fence **);
  20struct nouveau_fence *
  21nouveau_fence_ref(struct nouveau_fence *);
  22void nouveau_fence_unref(struct nouveau_fence **);
  23
  24int  nouveau_fence_emit(struct nouveau_fence *, struct nouveau_channel *);
  25bool nouveau_fence_done(struct nouveau_fence *);
  26void nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *);
  27int  nouveau_fence_wait(struct nouveau_fence *, bool lazy, bool intr);
  28int  nouveau_fence_sync(struct nouveau_fence *, struct nouveau_channel *);
  29
  30struct nouveau_fence_chan {
  31        struct list_head pending;
  32        struct list_head flip;
  33
  34        int  (*emit)(struct nouveau_fence *);
  35        int  (*sync)(struct nouveau_fence *, struct nouveau_channel *,
  36                     struct nouveau_channel *);
  37        u32  (*read)(struct nouveau_channel *);
  38        int  (*emit32)(struct nouveau_channel *, u64, u32);
  39        int  (*sync32)(struct nouveau_channel *, u64, u32);
  40
  41        spinlock_t lock;
  42        u32 sequence;
  43};
  44
  45struct nouveau_fence_priv {
  46        void (*dtor)(struct nouveau_drm *);
  47        bool (*suspend)(struct nouveau_drm *);
  48        void (*resume)(struct nouveau_drm *);
  49        int  (*context_new)(struct nouveau_channel *);
  50        void (*context_del)(struct nouveau_channel *);
  51
  52        wait_queue_head_t waiting;
  53        bool uevent;
  54};
  55
  56#define nouveau_fence(drm) ((struct nouveau_fence_priv *)(drm)->fence)
  57
  58void nouveau_fence_context_new(struct nouveau_fence_chan *);
  59void nouveau_fence_context_del(struct nouveau_fence_chan *);
  60
  61int nv04_fence_create(struct nouveau_drm *);
  62int nv04_fence_mthd(struct nouveau_channel *, u32, u32, u32);
  63
  64int  nv10_fence_emit(struct nouveau_fence *);
  65int  nv17_fence_sync(struct nouveau_fence *, struct nouveau_channel *,
  66                     struct nouveau_channel *);
  67u32  nv10_fence_read(struct nouveau_channel *);
  68void nv10_fence_context_del(struct nouveau_channel *);
  69void nv10_fence_destroy(struct nouveau_drm *);
  70int  nv10_fence_create(struct nouveau_drm *);
  71
  72int  nv17_fence_create(struct nouveau_drm *);
  73void nv17_fence_resume(struct nouveau_drm *drm);
  74
  75int nv50_fence_create(struct nouveau_drm *);
  76int nv84_fence_create(struct nouveau_drm *);
  77int nvc0_fence_create(struct nouveau_drm *);
  78
  79int nouveau_flip_complete(void *chan);
  80
  81struct nv84_fence_chan {
  82        struct nouveau_fence_chan base;
  83        struct nouveau_vma vma;
  84        struct nouveau_vma vma_gart;
  85        struct nouveau_vma dispc_vma[4];
  86};
  87
  88struct nv84_fence_priv {
  89        struct nouveau_fence_priv base;
  90        struct nouveau_bo *bo;
  91        struct nouveau_bo *bo_gart;
  92        u32 *suspend;
  93};
  94
  95u64  nv84_fence_crtc(struct nouveau_channel *, int);
  96int  nv84_fence_context_new(struct nouveau_channel *);
  97
  98#endif
  99