Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild +0 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,3 @@ nvkm-y += nvkm/engine/fifo/gpfifonv50.o nvkm-y += nvkm/engine/fifo/gpfifog84.o nvkm-y += nvkm/engine/fifo/gpfifogf100.o nvkm-y += nvkm/engine/fifo/gpfifogk104.o nvkm-y += nvkm/engine/fifo/gpfifogk110.o nvkm-y += nvkm/engine/fifo/gpfifogm200.o nvkm-y += nvkm/engine/fifo/gpfifogp100.o drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +17 −7 Original line number Diff line number Diff line Loading @@ -215,6 +215,20 @@ nvkm_fifo_uevent(struct nvkm_fifo *fifo) nvkm_event_send(&fifo->uevent, 1, 0, &rep, sizeof(rep)); } static int nvkm_fifo_class_new_(struct nvkm_device *device, const struct nvkm_oclass *oclass, void *data, u32 size, struct nvkm_object **pobject) { struct nvkm_fifo *fifo = nvkm_fifo(oclass->engine); return fifo->func->class_new(fifo, oclass, data, size, pobject); } static const struct nvkm_device_oclass nvkm_fifo_class_ = { .ctor = nvkm_fifo_class_new_, }; static int nvkm_fifo_class_new(struct nvkm_device *device, const struct nvkm_oclass *oclass, void *data, u32 size, Loading @@ -239,13 +253,9 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, int c = 0; if (fifo->func->class_get) { int ret = fifo->func->class_get(fifo, index, &sclass); if (ret == 0) { oclass->base = sclass->base; oclass->engn = sclass; *class = &nvkm_fifo_class; return 0; } int ret = fifo->func->class_get(fifo, index, oclass); if (ret == 0) *class = &nvkm_fifo_class_; return ret; } Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h +1 −6 Original line number Diff line number Diff line Loading @@ -19,11 +19,6 @@ struct gk104_fifo_chan { } engn[NVKM_SUBDEV_NR]; }; int gk104_fifo_gpfifo_new(struct nvkm_fifo *, const struct nvkm_oclass *, int gk104_fifo_gpfifo_new(struct gk104_fifo *, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); extern const struct nvkm_fifo_chan_oclass gk104_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gk110_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gm200_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gp100_fifo_gpfifo_oclass; #endif drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +20 −8 Original line number Diff line number Diff line Loading @@ -94,15 +94,29 @@ gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn, status->chan == &status->next ? "*" : " "); } static int gk104_fifo_class_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, void *argv, u32 argc, struct nvkm_object **pobject) { struct gk104_fifo *fifo = gk104_fifo(base); if (oclass->engn == &fifo->func->chan) { const struct gk104_fifo_chan_user *user = oclass->engn; return user->ctor(fifo, oclass, argv, argc, pobject); } WARN_ON(1); return -EINVAL; } static int gk104_fifo_class_get(struct nvkm_fifo *base, int index, const struct nvkm_fifo_chan_oclass **psclass) struct nvkm_oclass *oclass) { struct gk104_fifo *fifo = gk104_fifo(base); int c = 0; while ((*psclass = fifo->func->chan[c])) { if (c++ == index) if (fifo->func->chan.ctor && c++ == index) { oclass->base = fifo->func->chan.user; oclass->engn = &fifo->func->chan; return 0; } Loading Loading @@ -950,6 +964,7 @@ gk104_fifo_ = { .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = gk104_fifo_recover_chan, .class_get = gk104_fifo_class_get, .class_new = gk104_fifo_class_new, }; int Loading Loading @@ -1096,10 +1111,7 @@ gk104_fifo = { .fault.reason = gk104_fifo_fault_reason, .fault.hubclient = gk104_fifo_fault_hubclient, .fault.gpcclient = gk104_fifo_fault_gpcclient, .chan = { &gk104_fifo_gpfifo_oclass, NULL }, .chan = {{0,0,KEPLER_CHANNEL_GPFIFO_A}, gk104_fifo_gpfifo_new }, }; int Loading drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +5 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,11 @@ struct gk104_fifo_func { const struct nvkm_enum *gpcclient; } fault; const struct nvkm_fifo_chan_oclass *chan[]; struct gk104_fifo_chan_user { struct nvkm_sclass user; int (*ctor)(struct gk104_fifo *, const struct nvkm_oclass *, void *, u32, struct nvkm_object **); } chan; }; int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, Loading Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild +0 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,3 @@ nvkm-y += nvkm/engine/fifo/gpfifonv50.o nvkm-y += nvkm/engine/fifo/gpfifog84.o nvkm-y += nvkm/engine/fifo/gpfifogf100.o nvkm-y += nvkm/engine/fifo/gpfifogk104.o nvkm-y += nvkm/engine/fifo/gpfifogk110.o nvkm-y += nvkm/engine/fifo/gpfifogm200.o nvkm-y += nvkm/engine/fifo/gpfifogp100.o
drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +17 −7 Original line number Diff line number Diff line Loading @@ -215,6 +215,20 @@ nvkm_fifo_uevent(struct nvkm_fifo *fifo) nvkm_event_send(&fifo->uevent, 1, 0, &rep, sizeof(rep)); } static int nvkm_fifo_class_new_(struct nvkm_device *device, const struct nvkm_oclass *oclass, void *data, u32 size, struct nvkm_object **pobject) { struct nvkm_fifo *fifo = nvkm_fifo(oclass->engine); return fifo->func->class_new(fifo, oclass, data, size, pobject); } static const struct nvkm_device_oclass nvkm_fifo_class_ = { .ctor = nvkm_fifo_class_new_, }; static int nvkm_fifo_class_new(struct nvkm_device *device, const struct nvkm_oclass *oclass, void *data, u32 size, Loading @@ -239,13 +253,9 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, int c = 0; if (fifo->func->class_get) { int ret = fifo->func->class_get(fifo, index, &sclass); if (ret == 0) { oclass->base = sclass->base; oclass->engn = sclass; *class = &nvkm_fifo_class; return 0; } int ret = fifo->func->class_get(fifo, index, oclass); if (ret == 0) *class = &nvkm_fifo_class_; return ret; } Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h +1 −6 Original line number Diff line number Diff line Loading @@ -19,11 +19,6 @@ struct gk104_fifo_chan { } engn[NVKM_SUBDEV_NR]; }; int gk104_fifo_gpfifo_new(struct nvkm_fifo *, const struct nvkm_oclass *, int gk104_fifo_gpfifo_new(struct gk104_fifo *, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_object **); extern const struct nvkm_fifo_chan_oclass gk104_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gk110_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gm200_fifo_gpfifo_oclass; extern const struct nvkm_fifo_chan_oclass gp100_fifo_gpfifo_oclass; #endif
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +20 −8 Original line number Diff line number Diff line Loading @@ -94,15 +94,29 @@ gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn, status->chan == &status->next ? "*" : " "); } static int gk104_fifo_class_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, void *argv, u32 argc, struct nvkm_object **pobject) { struct gk104_fifo *fifo = gk104_fifo(base); if (oclass->engn == &fifo->func->chan) { const struct gk104_fifo_chan_user *user = oclass->engn; return user->ctor(fifo, oclass, argv, argc, pobject); } WARN_ON(1); return -EINVAL; } static int gk104_fifo_class_get(struct nvkm_fifo *base, int index, const struct nvkm_fifo_chan_oclass **psclass) struct nvkm_oclass *oclass) { struct gk104_fifo *fifo = gk104_fifo(base); int c = 0; while ((*psclass = fifo->func->chan[c])) { if (c++ == index) if (fifo->func->chan.ctor && c++ == index) { oclass->base = fifo->func->chan.user; oclass->engn = &fifo->func->chan; return 0; } Loading Loading @@ -950,6 +964,7 @@ gk104_fifo_ = { .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = gk104_fifo_recover_chan, .class_get = gk104_fifo_class_get, .class_new = gk104_fifo_class_new, }; int Loading Loading @@ -1096,10 +1111,7 @@ gk104_fifo = { .fault.reason = gk104_fifo_fault_reason, .fault.hubclient = gk104_fifo_fault_hubclient, .fault.gpcclient = gk104_fifo_fault_gpcclient, .chan = { &gk104_fifo_gpfifo_oclass, NULL }, .chan = {{0,0,KEPLER_CHANNEL_GPFIFO_A}, gk104_fifo_gpfifo_new }, }; int Loading
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +5 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,11 @@ struct gk104_fifo_func { const struct nvkm_enum *gpcclient; } fault; const struct nvkm_fifo_chan_oclass *chan[]; struct gk104_fifo_chan_user { struct nvkm_sclass user; int (*ctor)(struct gk104_fifo *, const struct nvkm_oclass *, void *, u32, struct nvkm_object **); } chan; }; int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, Loading