Loading drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ struct nvkm_fifo_chan { u64 addr; u32 size; u16 chid; u64 inst; }; static inline struct nvkm_fifo_chan * Loading Loading @@ -81,6 +82,13 @@ struct nvkm_fifo { void (*start)(struct nvkm_fifo *, unsigned long *); }; void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags, struct nvkm_fifo_chan **); struct nvkm_fifo_chan * nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); static inline struct nvkm_fifo * nvkm_fifo(void *obj) { Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +41 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,47 @@ #include <nvif/event.h> #include <nvif/unpack.h> void nvkm_fifo_chan_put(struct nvkm_fifo *fifo, unsigned long flags, struct nvkm_fifo_chan **pchan) { struct nvkm_fifo_chan *chan = *pchan; if (likely(chan)) { *pchan = NULL; spin_unlock_irqrestore(&fifo->lock, flags); } } struct nvkm_fifo_chan * nvkm_fifo_chan_inst(struct nvkm_fifo *fifo, u64 inst, unsigned long *rflags) { unsigned long flags; int i; spin_lock_irqsave(&fifo->lock, flags); for (i = fifo->min; i < fifo->max; i++) { struct nvkm_fifo_chan *chan = (void *)fifo->channel[i]; if (chan && chan->inst == inst) { *rflags = flags; return chan; } } spin_unlock_irqrestore(&fifo->lock, flags); return NULL; } struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *fifo, int chid, unsigned long *rflags) { unsigned long flags; spin_lock_irqsave(&fifo->lock, flags); if (fifo->channel[chid]) { *rflags = flags; return (void *)fifo->channel[chid]; } spin_unlock_irqrestore(&fifo->lock, flags); return NULL; } static int nvkm_fifo_event_ctor(struct nvkm_object *object, void *data, u32 size, struct nvkm_notify *notify) Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c +2 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ g84_fifo_chan_ctor_dma(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; ret = nvkm_ramht_new(device, 0x8000, 16, &base->base.gpuobj, Loading Loading @@ -285,6 +286,7 @@ g84_fifo_chan_ctor_ind(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; ret = nvkm_ramht_new(device, 0x8000, 16, &base->base.gpuobj, Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +1 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,7 @@ gf100_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; nv_parent(chan)->context_attach = gf100_fifo_context_attach; Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +1 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,7 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; nv_parent(chan)->context_attach = gk104_fifo_context_attach; Loading Loading
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +8 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ struct nvkm_fifo_chan { u64 addr; u32 size; u16 chid; u64 inst; }; static inline struct nvkm_fifo_chan * Loading Loading @@ -81,6 +82,13 @@ struct nvkm_fifo { void (*start)(struct nvkm_fifo *, unsigned long *); }; void nvkm_fifo_chan_put(struct nvkm_fifo *, unsigned long flags, struct nvkm_fifo_chan **); struct nvkm_fifo_chan * nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); static inline struct nvkm_fifo * nvkm_fifo(void *obj) { Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +41 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,47 @@ #include <nvif/event.h> #include <nvif/unpack.h> void nvkm_fifo_chan_put(struct nvkm_fifo *fifo, unsigned long flags, struct nvkm_fifo_chan **pchan) { struct nvkm_fifo_chan *chan = *pchan; if (likely(chan)) { *pchan = NULL; spin_unlock_irqrestore(&fifo->lock, flags); } } struct nvkm_fifo_chan * nvkm_fifo_chan_inst(struct nvkm_fifo *fifo, u64 inst, unsigned long *rflags) { unsigned long flags; int i; spin_lock_irqsave(&fifo->lock, flags); for (i = fifo->min; i < fifo->max; i++) { struct nvkm_fifo_chan *chan = (void *)fifo->channel[i]; if (chan && chan->inst == inst) { *rflags = flags; return chan; } } spin_unlock_irqrestore(&fifo->lock, flags); return NULL; } struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *fifo, int chid, unsigned long *rflags) { unsigned long flags; spin_lock_irqsave(&fifo->lock, flags); if (fifo->channel[chid]) { *rflags = flags; return (void *)fifo->channel[chid]; } spin_unlock_irqrestore(&fifo->lock, flags); return NULL; } static int nvkm_fifo_event_ctor(struct nvkm_object *object, void *data, u32 size, struct nvkm_notify *notify) Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c +2 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,7 @@ g84_fifo_chan_ctor_dma(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; ret = nvkm_ramht_new(device, 0x8000, 16, &base->base.gpuobj, Loading Loading @@ -285,6 +286,7 @@ g84_fifo_chan_ctor_ind(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; ret = nvkm_ramht_new(device, 0x8000, 16, &base->base.gpuobj, Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +1 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,7 @@ gf100_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; nv_parent(chan)->context_attach = gf100_fifo_context_attach; Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +1 −0 Original line number Diff line number Diff line Loading @@ -283,6 +283,7 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine, if (ret) return ret; chan->base.inst = base->base.gpuobj.addr; args->v0.chid = chan->base.chid; nv_parent(chan)->context_attach = gk104_fifo_context_attach; Loading