cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

nouveau_fence.h (2857B)


      1/* SPDX-License-Identifier: MIT */
      2#ifndef __NOUVEAU_FENCE_H__
      3#define __NOUVEAU_FENCE_H__
      4
      5#include <linux/dma-fence.h>
      6#include <nvif/notify.h>
      7
      8struct nouveau_drm;
      9struct nouveau_bo;
     10
     11struct nouveau_fence {
     12	struct dma_fence base;
     13
     14	struct list_head head;
     15
     16	struct nouveau_channel __rcu *channel;
     17	unsigned long timeout;
     18};
     19
     20int  nouveau_fence_new(struct nouveau_channel *, bool sysmem,
     21		       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 *);
     26int  nouveau_fence_wait(struct nouveau_fence *, bool lazy, bool intr);
     27int  nouveau_fence_sync(struct nouveau_bo *, struct nouveau_channel *, bool exclusive, bool intr);
     28
     29struct nouveau_fence_chan {
     30	spinlock_t lock;
     31	struct kref fence_ref;
     32
     33	struct list_head pending;
     34	struct list_head flip;
     35
     36	int  (*emit)(struct nouveau_fence *);
     37	int  (*sync)(struct nouveau_fence *, struct nouveau_channel *,
     38		     struct nouveau_channel *);
     39	u32  (*read)(struct nouveau_channel *);
     40	int  (*emit32)(struct nouveau_channel *, u64, u32);
     41	int  (*sync32)(struct nouveau_channel *, u64, u32);
     42
     43	u32 sequence;
     44	u32 context;
     45	char name[32];
     46
     47	struct nvif_notify notify;
     48	int notify_ref, dead;
     49};
     50
     51struct nouveau_fence_priv {
     52	void (*dtor)(struct nouveau_drm *);
     53	bool (*suspend)(struct nouveau_drm *);
     54	void (*resume)(struct nouveau_drm *);
     55	int  (*context_new)(struct nouveau_channel *);
     56	void (*context_del)(struct nouveau_channel *);
     57
     58	bool uevent;
     59};
     60
     61#define nouveau_fence(drm) ((struct nouveau_fence_priv *)(drm)->fence)
     62
     63void nouveau_fence_context_new(struct nouveau_channel *, struct nouveau_fence_chan *);
     64void nouveau_fence_context_del(struct nouveau_fence_chan *);
     65void nouveau_fence_context_free(struct nouveau_fence_chan *);
     66void nouveau_fence_context_kill(struct nouveau_fence_chan *, int error);
     67
     68int nv04_fence_create(struct nouveau_drm *);
     69int nv04_fence_mthd(struct nouveau_channel *, u32, u32, u32);
     70
     71int  nv10_fence_emit(struct nouveau_fence *);
     72int  nv17_fence_sync(struct nouveau_fence *, struct nouveau_channel *,
     73		     struct nouveau_channel *);
     74u32  nv10_fence_read(struct nouveau_channel *);
     75void nv10_fence_context_del(struct nouveau_channel *);
     76void nv10_fence_destroy(struct nouveau_drm *);
     77int  nv10_fence_create(struct nouveau_drm *);
     78
     79int  nv17_fence_create(struct nouveau_drm *);
     80void nv17_fence_resume(struct nouveau_drm *drm);
     81
     82int nv50_fence_create(struct nouveau_drm *);
     83int nv84_fence_create(struct nouveau_drm *);
     84int nvc0_fence_create(struct nouveau_drm *);
     85
     86struct nv84_fence_chan {
     87	struct nouveau_fence_chan base;
     88	struct nouveau_vma *vma;
     89};
     90
     91struct nv84_fence_priv {
     92	struct nouveau_fence_priv base;
     93	struct nouveau_bo *bo;
     94	u32 *suspend;
     95	struct mutex mutex;
     96};
     97
     98int  nv84_fence_context_new(struct nouveau_channel *);
     99
    100#endif