diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2015-08-20 14:54:21 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-08-28 12:37:43 +1000 |
commit | ae77f90e783a3ab36fe210de9a6515173bfae21b (patch) | |
tree | 48a0c8a9a609895b17a068ef30672a12bab1996d /drm/nouveau/nvkm/engine/dma | |
parent | fede97e41306d326b2d74084d8a77fc9c60bbb9a (diff) | |
download | nouveau-ae77f90e783a3ab36fe210de9a6515173bfae21b.tar.gz |
dma: convert to new-style nvkm_engine
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drm/nouveau/nvkm/engine/dma')
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/Kbuild | 4 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/base.c | 30 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/gf100.c | 19 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/gf119.c (renamed from drm/nouveau/nvkm/engine/dma/gf110.c) | 21 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/nv04.c | 19 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/nv50.c | 19 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/priv.h | 19 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/user.h | 2 | ||||
-rw-r--r-- | drm/nouveau/nvkm/engine/dma/usergf119.c (renamed from drm/nouveau/nvkm/engine/dma/usergf110.c) | 30 |
9 files changed, 79 insertions, 84 deletions
diff --git a/drm/nouveau/nvkm/engine/dma/Kbuild b/drm/nouveau/nvkm/engine/dma/Kbuild index bb3a0528b..c4a2ce9b0 100644 --- a/drm/nouveau/nvkm/engine/dma/Kbuild +++ b/drm/nouveau/nvkm/engine/dma/Kbuild @@ -2,10 +2,10 @@ nvkm-y += nvkm/engine/dma/base.o nvkm-y += nvkm/engine/dma/nv04.o nvkm-y += nvkm/engine/dma/nv50.o nvkm-y += nvkm/engine/dma/gf100.o -nvkm-y += nvkm/engine/dma/gf110.o +nvkm-y += nvkm/engine/dma/gf119.o nvkm-y += nvkm/engine/dma/user.o nvkm-y += nvkm/engine/dma/usernv04.o nvkm-y += nvkm/engine/dma/usernv50.o nvkm-y += nvkm/engine/dma/usergf100.o -nvkm-y += nvkm/engine/dma/usergf110.o +nvkm-y += nvkm/engine/dma/usergf119.o diff --git a/drm/nouveau/nvkm/engine/dma/base.c b/drm/nouveau/nvkm/engine/dma/base.c index 1a3772019..9769fc0d5 100644 --- a/drm/nouveau/nvkm/engine/dma/base.c +++ b/drm/nouveau/nvkm/engine/dma/base.c @@ -52,14 +52,13 @@ nvkm_dma_oclass_new(struct nvkm_device *device, struct nvkm_object **pobject) { struct nvkm_dma *dma = nvkm_dma(oclass->engine); - struct nvkm_dma_impl *impl = (void *)dma->engine.subdev.object.oclass; struct nvkm_dmaobj *dmaobj = NULL; struct nvkm_client *client = oclass->client; struct rb_node **ptr = &client->dmaroot.rb_node; struct rb_node *parent = NULL; int ret; - ret = impl->class_new(dma, oclass, data, size, &dmaobj); + ret = dma->func->class_new(dma, oclass, data, size, &dmaobj); if (dmaobj) *pobject = &dmaobj->object; if (ret) @@ -130,26 +129,29 @@ nvkm_dma_oclass_fifo_get(struct nvkm_oclass *oclass, int index) return count; } +static void * +nvkm_dma_dtor(struct nvkm_engine *engine) +{ + return nvkm_dma(engine); +} + static const struct nvkm_engine_func nvkm_dma = { + .dtor = nvkm_dma_dtor, .base.sclass = nvkm_dma_oclass_base_get, .fifo.sclass = nvkm_dma_oclass_fifo_get, }; int -_nvkm_dma_ctor(struct nvkm_object *parent, struct nvkm_object *engine, - struct nvkm_oclass *oclass, void *data, u32 size, - struct nvkm_object **pobject) +nvkm_dma_new_(const struct nvkm_dma_func *func, struct nvkm_device *device, + int index, struct nvkm_dma **pdma) { - struct nvkm_dma *dmaeng; - int ret; + struct nvkm_dma *dma; - ret = nvkm_engine_create(parent, engine, oclass, true, "DMAOBJ", - "dmaobj", &dmaeng); - *pobject = nv_object(dmaeng); - if (ret) - return ret; + if (!(dma = *pdma = kzalloc(sizeof(*dma), GFP_KERNEL))) + return -ENOMEM; + dma->func = func; - dmaeng->engine.func = &nvkm_dma; - return 0; + return nvkm_engine_ctor(&nvkm_dma, device, index, + 0, true, &dma->engine); } diff --git a/drm/nouveau/nvkm/engine/dma/gf100.c b/drm/nouveau/nvkm/engine/dma/gf100.c index 81badf09e..efec5d322 100644 --- a/drm/nouveau/nvkm/engine/dma/gf100.c +++ b/drm/nouveau/nvkm/engine/dma/gf100.c @@ -24,14 +24,13 @@ #include "priv.h" #include "user.h" -struct nvkm_oclass * -gf100_dmaeng_oclass = &(struct nvkm_dma_impl) { - .base.handle = NV_ENGINE(DMAOBJ, 0xc0), - .base.ofuncs = &(struct nvkm_ofuncs) { - .ctor = _nvkm_dma_ctor, - .dtor = _nvkm_dma_dtor, - .init = _nvkm_dma_init, - .fini = _nvkm_dma_fini, - }, +static const struct nvkm_dma_func +gf100_dma = { .class_new = gf100_dmaobj_new, -}.base; +}; + +int +gf100_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +{ + return nvkm_dma_new_(&gf100_dma, device, index, pdma); +} diff --git a/drm/nouveau/nvkm/engine/dma/gf110.c b/drm/nouveau/nvkm/engine/dma/gf119.c index 79d869bf9..34c766039 100644 --- a/drm/nouveau/nvkm/engine/dma/gf110.c +++ b/drm/nouveau/nvkm/engine/dma/gf119.c @@ -24,14 +24,13 @@ #include "priv.h" #include "user.h" -struct nvkm_oclass * -gf110_dmaeng_oclass = &(struct nvkm_dma_impl) { - .base.handle = NV_ENGINE(DMAOBJ, 0xd0), - .base.ofuncs = &(struct nvkm_ofuncs) { - .ctor = _nvkm_dma_ctor, - .dtor = _nvkm_dma_dtor, - .init = _nvkm_dma_init, - .fini = _nvkm_dma_fini, - }, - .class_new = gf110_dmaobj_new, -}.base; +static const struct nvkm_dma_func +gf119_dma = { + .class_new = gf119_dmaobj_new, +}; + +int +gf119_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +{ + return nvkm_dma_new_(&gf119_dma, device, index, pdma); +} diff --git a/drm/nouveau/nvkm/engine/dma/nv04.c b/drm/nouveau/nvkm/engine/dma/nv04.c index c116995f8..30747a0ce 100644 --- a/drm/nouveau/nvkm/engine/dma/nv04.c +++ b/drm/nouveau/nvkm/engine/dma/nv04.c @@ -24,14 +24,13 @@ #include "priv.h" #include "user.h" -struct nvkm_oclass * -nv04_dmaeng_oclass = &(struct nvkm_dma_impl) { - .base.handle = NV_ENGINE(DMAOBJ, 0x04), - .base.ofuncs = &(struct nvkm_ofuncs) { - .ctor = _nvkm_dma_ctor, - .dtor = _nvkm_dma_dtor, - .init = _nvkm_dma_init, - .fini = _nvkm_dma_fini, - }, +static const struct nvkm_dma_func +nv04_dma = { .class_new = nv04_dmaobj_new, -}.base; +}; + +int +nv04_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +{ + return nvkm_dma_new_(&nv04_dma, device, index, pdma); +} diff --git a/drm/nouveau/nvkm/engine/dma/nv50.c b/drm/nouveau/nvkm/engine/dma/nv50.c index b8d87e7d6..77aca7b71 100644 --- a/drm/nouveau/nvkm/engine/dma/nv50.c +++ b/drm/nouveau/nvkm/engine/dma/nv50.c @@ -24,14 +24,13 @@ #include "priv.h" #include "user.h" -struct nvkm_oclass * -nv50_dmaeng_oclass = &(struct nvkm_dma_impl) { - .base.handle = NV_ENGINE(DMAOBJ, 0x50), - .base.ofuncs = &(struct nvkm_ofuncs) { - .ctor = _nvkm_dma_ctor, - .dtor = _nvkm_dma_dtor, - .init = _nvkm_dma_init, - .fini = _nvkm_dma_fini, - }, +static const struct nvkm_dma_func +nv50_dma = { .class_new = nv50_dmaobj_new, -}.base; +}; + +int +nv50_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +{ + return nvkm_dma_new_(&nv50_dma, device, index, pdma); +} diff --git a/drm/nouveau/nvkm/engine/dma/priv.h b/drm/nouveau/nvkm/engine/dma/priv.h index fbff168e6..deb37ee55 100644 --- a/drm/nouveau/nvkm/engine/dma/priv.h +++ b/drm/nouveau/nvkm/engine/dma/priv.h @@ -3,18 +3,15 @@ #define nvkm_dma(p) container_of((p), struct nvkm_dma, engine) #include <engine/dma.h> -int _nvkm_dma_ctor(struct nvkm_object *, struct nvkm_object *, - struct nvkm_oclass *, void *, u32, - struct nvkm_object **); -#define _nvkm_dma_dtor _nvkm_engine_dtor -#define _nvkm_dma_init _nvkm_engine_init -#define _nvkm_dma_fini _nvkm_engine_fini - -struct nvkm_dma_impl { - struct nvkm_oclass base; - struct nvkm_oclass *sclass; - int (*bind)(struct nvkm_dmaobj *, struct nvkm_gpuobj *, +struct nvkm_dmaobj_func { + int (*bind)(struct nvkm_dmaobj *, struct nvkm_gpuobj *, int align, struct nvkm_gpuobj **); +}; + +int nvkm_dma_new_(const struct nvkm_dma_func *, struct nvkm_device *, + int index, struct nvkm_dma **); + +struct nvkm_dma_func { int (*class_new)(struct nvkm_dma *, const struct nvkm_oclass *, void *data, u32 size, struct nvkm_dmaobj **); }; diff --git a/drm/nouveau/nvkm/engine/dma/user.h b/drm/nouveau/nvkm/engine/dma/user.h index f667505a8..69a7f1034 100644 --- a/drm/nouveau/nvkm/engine/dma/user.h +++ b/drm/nouveau/nvkm/engine/dma/user.h @@ -13,6 +13,6 @@ int nv50_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32, struct nvkm_dmaobj **); int gf100_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32, struct nvkm_dmaobj **); -int gf110_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32, +int gf119_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32, struct nvkm_dmaobj **); #endif diff --git a/drm/nouveau/nvkm/engine/dma/usergf110.c b/drm/nouveau/nvkm/engine/dma/usergf119.c index f6bbdffed..0e1af8b4d 100644 --- a/drm/nouveau/nvkm/engine/dma/usergf110.c +++ b/drm/nouveau/nvkm/engine/dma/usergf119.c @@ -21,7 +21,7 @@ * * Authors: Ben Skeggs */ -#define gf110_dmaobj(p) container_of((p), struct gf110_dmaobj, base) +#define gf119_dmaobj(p) container_of((p), struct gf119_dmaobj, base) #include "user.h" #include <core/client.h> @@ -31,16 +31,16 @@ #include <nvif/class.h> #include <nvif/unpack.h> -struct gf110_dmaobj { +struct gf119_dmaobj { struct nvkm_dmaobj base; u32 flags0; }; static int -gf110_dmaobj_bind(struct nvkm_dmaobj *base, struct nvkm_gpuobj *parent, +gf119_dmaobj_bind(struct nvkm_dmaobj *base, struct nvkm_gpuobj *parent, int align, struct nvkm_gpuobj **pgpuobj) { - struct gf110_dmaobj *dmaobj = gf110_dmaobj(base); + struct gf119_dmaobj *dmaobj = gf119_dmaobj(base); struct nvkm_device *device = dmaobj->base.dma->engine.subdev.device; int ret; @@ -60,19 +60,19 @@ gf110_dmaobj_bind(struct nvkm_dmaobj *base, struct nvkm_gpuobj *parent, } static const struct nvkm_dmaobj_func -gf110_dmaobj_func = { - .bind = gf110_dmaobj_bind, +gf119_dmaobj_func = { + .bind = gf119_dmaobj_bind, }; int -gf110_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, +gf119_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, void *data, u32 size, struct nvkm_dmaobj **pdmaobj) { union { - struct gf110_dma_v0 v0; + struct gf119_dma_v0 v0; } *args; struct nvkm_object *parent = oclass->parent; - struct gf110_dmaobj *dmaobj; + struct gf119_dmaobj *dmaobj; u32 kind, page; int ret; @@ -80,14 +80,14 @@ gf110_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, return -ENOMEM; *pdmaobj = &dmaobj->base; - ret = nvkm_dmaobj_ctor(&gf110_dmaobj_func, dma, oclass, + ret = nvkm_dmaobj_ctor(&gf119_dmaobj_func, dma, oclass, &data, &size, &dmaobj->base); if (ret) return ret; args = data; - nvif_ioctl(parent, "create gf110 dma size %d\n", size); + nvif_ioctl(parent, "create gf119 dma size %d\n", size); if (nvif_unpack(args->v0, 0, 0, false)) { nvif_ioctl(parent, "create gf100 dma vers %d page %d kind %02x\n", @@ -97,11 +97,11 @@ gf110_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, } else if (size == 0) { if (dmaobj->base.target != NV_MEM_TARGET_VM) { - kind = GF110_DMA_V0_KIND_PITCH; - page = GF110_DMA_V0_PAGE_SP; + kind = GF119_DMA_V0_KIND_PITCH; + page = GF119_DMA_V0_PAGE_SP; } else { - kind = GF110_DMA_V0_KIND_VM; - page = GF110_DMA_V0_PAGE_LP; + kind = GF119_DMA_V0_KIND_VM; + page = GF119_DMA_V0_PAGE_LP; } } else return ret; |