diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2015-08-20 14:54:18 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-08-28 12:40:39 +1000 |
commit | 6157091177102638c7d94ffc159c0b157a1c9b56 (patch) | |
tree | 7fb03c21a5db1bc156d3634ede7f1d45fb00f176 /drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c | |
parent | 590801c1a3b19883b0d0e4c60241cbed8a916d47 (diff) | |
download | linux-stable-6157091177102638c7d94ffc159c0b157a1c9b56.tar.gz linux-stable-6157091177102638c7d94ffc159c0b157a1c9b56.tar.bz2 linux-stable-6157091177102638c7d94ffc159c0b157a1c9b56.zip |
drm/nouveau/sw: remove dependence on namedb/engctx lookup
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c index 08b59f198c73..6958cba393da 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c @@ -21,6 +21,7 @@ * * Authors: Ben Skeggs */ +#define nv04_sw_chan(p) container_of((p), struct nv04_sw_chan, base) #include "priv.h" #include "chan.h" #include "nvsw.h" @@ -39,29 +40,6 @@ struct nv04_sw_chan { ******************************************************************************/ static int -nv04_sw_set_ref(struct nvkm_object *object, u32 mthd, void *data, u32 size) -{ - struct nv04_sw_chan *chan = (void *)nv_engctx(object->parent); - atomic_set(&chan->ref, *(u32*)data); - return 0; -} - -static int -nv04_sw_flip(struct nvkm_object *object, u32 mthd, void *args, u32 size) -{ - struct nvkm_sw_chan *chan = (void *)nv_engctx(object->parent); - nvkm_event_send(&chan->event, 1, 0, NULL, 0); - return 0; -} - -static struct nvkm_omthds -nv04_sw_omthds[] = { - { 0x0150, 0x0150, nv04_sw_set_ref }, - { 0x0500, 0x0500, nv04_sw_flip }, - {} -}; - -static int nv04_sw_mthd_get_ref(struct nvkm_object *object, void *data, u32 size) { struct nv04_sw_chan *chan = (void *)object->parent; @@ -100,7 +78,7 @@ nv04_sw_ofuncs = { static struct nvkm_oclass nv04_sw_sclass[] = { - { NVIF_IOCTL_NEW_V0_SW_NV04, &nv04_sw_ofuncs, nv04_sw_omthds }, + { NVIF_IOCTL_NEW_V0_SW_NV04, &nv04_sw_ofuncs }, {} }; @@ -108,6 +86,27 @@ nv04_sw_sclass[] = { * software context ******************************************************************************/ +static bool +nv04_sw_chan_mthd(struct nvkm_sw_chan *base, int subc, u32 mthd, u32 data) +{ + struct nv04_sw_chan *chan = nv04_sw_chan(base); + + switch (mthd) { + case 0x0150: + atomic_set(&chan->ref, data); + return true; + default: + break; + } + + return false; +} + +static const struct nvkm_sw_chan_func +nv04_sw_chan_func = { + .mthd = nv04_sw_chan_mthd, +}; + static int nv04_sw_context_ctor(struct nvkm_object *parent, struct nvkm_object *engine, struct nvkm_oclass *oclass, void *data, u32 size, @@ -116,7 +115,8 @@ nv04_sw_context_ctor(struct nvkm_object *parent, struct nvkm_object *engine, struct nv04_sw_chan *chan; int ret; - ret = nvkm_sw_context_create(parent, engine, oclass, &chan); + ret = nvkm_sw_context_create(&nv04_sw_chan_func, + parent, engine, oclass, &chan); *pobject = nv_object(chan); if (ret) return ret; |