brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · 8bc065a Raw
102 lines · c
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/event.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_create(struct nouveau_fence **, struct nouveau_channel *);21int  nouveau_fence_new(struct nouveau_fence **, struct nouveau_channel *);22void nouveau_fence_unref(struct nouveau_fence **);23 24int  nouveau_fence_emit(struct nouveau_fence *);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 work_struct uevent_work;48	struct nvif_event event;49	int notify_ref, dead, killed;50};51 52struct nouveau_fence_priv {53	void (*dtor)(struct nouveau_drm *);54	bool (*suspend)(struct nouveau_drm *);55	void (*resume)(struct nouveau_drm *);56	int  (*context_new)(struct nouveau_channel *);57	void (*context_del)(struct nouveau_channel *);58 59	bool uevent;60};61 62#define nouveau_fence(drm) ((struct nouveau_fence_priv *)(drm)->fence)63 64void nouveau_fence_context_new(struct nouveau_channel *, struct nouveau_fence_chan *);65void nouveau_fence_context_del(struct nouveau_fence_chan *);66void nouveau_fence_context_free(struct nouveau_fence_chan *);67void nouveau_fence_context_kill(struct nouveau_fence_chan *, int error);68 69int nv04_fence_create(struct nouveau_drm *);70int nv04_fence_mthd(struct nouveau_channel *, u32, u32, u32);71 72int  nv10_fence_emit(struct nouveau_fence *);73int  nv17_fence_sync(struct nouveau_fence *, struct nouveau_channel *,74		     struct nouveau_channel *);75u32  nv10_fence_read(struct nouveau_channel *);76void nv10_fence_context_del(struct nouveau_channel *);77void nv10_fence_destroy(struct nouveau_drm *);78int  nv10_fence_create(struct nouveau_drm *);79 80int  nv17_fence_create(struct nouveau_drm *);81void nv17_fence_resume(struct nouveau_drm *drm);82 83int nv50_fence_create(struct nouveau_drm *);84int nv84_fence_create(struct nouveau_drm *);85int nvc0_fence_create(struct nouveau_drm *);86 87struct nv84_fence_chan {88	struct nouveau_fence_chan base;89	struct nouveau_vma *vma;90};91 92struct nv84_fence_priv {93	struct nouveau_fence_priv base;94	struct nouveau_bo *bo;95	u32 *suspend;96	struct mutex mutex;97};98 99int  nv84_fence_context_new(struct nouveau_channel *);100 101#endif102