diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index 64f6b7654a08..c773caf21f6b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <subdev/mc.h> | 30 | #include <subdev/mc.h> |
| 31 | 31 | ||
| 32 | #include <nvif/event.h> | 32 | #include <nvif/event.h> |
| 33 | #include <nvif/cl0080.h> | ||
| 33 | #include <nvif/unpack.h> | 34 | #include <nvif/unpack.h> |
| 34 | 35 | ||
| 35 | void | 36 | void |
| @@ -56,6 +57,12 @@ nvkm_fifo_start(struct nvkm_fifo *fifo, unsigned long *flags) | |||
| 56 | } | 57 | } |
| 57 | 58 | ||
| 58 | void | 59 | void |
| 60 | nvkm_fifo_fault(struct nvkm_fifo *fifo, struct nvkm_fault_data *info) | ||
| 61 | { | ||
| 62 | return fifo->func->fault(fifo, info); | ||
| 63 | } | ||
| 64 | |||
| 65 | void | ||
| 59 | nvkm_fifo_chan_put(struct nvkm_fifo *fifo, unsigned long flags, | 66 | nvkm_fifo_chan_put(struct nvkm_fifo *fifo, unsigned long flags, |
| 60 | struct nvkm_fifo_chan **pchan) | 67 | struct nvkm_fifo_chan **pchan) |
| 61 | { | 68 | { |
| @@ -209,6 +216,20 @@ nvkm_fifo_uevent(struct nvkm_fifo *fifo) | |||
| 209 | } | 216 | } |
| 210 | 217 | ||
| 211 | static int | 218 | static int |
| 219 | nvkm_fifo_class_new_(struct nvkm_device *device, | ||
| 220 | const struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 221 | struct nvkm_object **pobject) | ||
| 222 | { | ||
| 223 | struct nvkm_fifo *fifo = nvkm_fifo(oclass->engine); | ||
| 224 | return fifo->func->class_new(fifo, oclass, data, size, pobject); | ||
| 225 | } | ||
| 226 | |||
| 227 | static const struct nvkm_device_oclass | ||
| 228 | nvkm_fifo_class_ = { | ||
| 229 | .ctor = nvkm_fifo_class_new_, | ||
| 230 | }; | ||
| 231 | |||
| 232 | static int | ||
| 212 | nvkm_fifo_class_new(struct nvkm_device *device, | 233 | nvkm_fifo_class_new(struct nvkm_device *device, |
| 213 | const struct nvkm_oclass *oclass, void *data, u32 size, | 234 | const struct nvkm_oclass *oclass, void *data, u32 size, |
| 214 | struct nvkm_object **pobject) | 235 | struct nvkm_object **pobject) |
| @@ -232,13 +253,9 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index, | |||
| 232 | int c = 0; | 253 | int c = 0; |
| 233 | 254 | ||
| 234 | if (fifo->func->class_get) { | 255 | if (fifo->func->class_get) { |
| 235 | int ret = fifo->func->class_get(fifo, index, &sclass); | 256 | int ret = fifo->func->class_get(fifo, index, oclass); |
| 236 | if (ret == 0) { | 257 | if (ret == 0) |
| 237 | oclass->base = sclass->base; | 258 | *class = &nvkm_fifo_class_; |
| 238 | oclass->engn = sclass; | ||
| 239 | *class = &nvkm_fifo_class; | ||
| 240 | return 0; | ||
| 241 | } | ||
| 242 | return ret; | 259 | return ret; |
| 243 | } | 260 | } |
| 244 | 261 | ||
| @@ -271,6 +288,20 @@ nvkm_fifo_fini(struct nvkm_engine *engine, bool suspend) | |||
| 271 | } | 288 | } |
| 272 | 289 | ||
| 273 | static int | 290 | static int |
| 291 | nvkm_fifo_info(struct nvkm_engine *engine, u64 mthd, u64 *data) | ||
| 292 | { | ||
| 293 | struct nvkm_fifo *fifo = nvkm_fifo(engine); | ||
| 294 | switch (mthd) { | ||
| 295 | case NV_DEVICE_FIFO_CHANNELS: *data = fifo->nr; return 0; | ||
| 296 | default: | ||
| 297 | if (fifo->func->info) | ||
| 298 | return fifo->func->info(fifo, mthd, data); | ||
| 299 | break; | ||
| 300 | } | ||
| 301 | return -ENOSYS; | ||
| 302 | } | ||
| 303 | |||
| 304 | static int | ||
| 274 | nvkm_fifo_oneinit(struct nvkm_engine *engine) | 305 | nvkm_fifo_oneinit(struct nvkm_engine *engine) |
| 275 | { | 306 | { |
| 276 | struct nvkm_fifo *fifo = nvkm_fifo(engine); | 307 | struct nvkm_fifo *fifo = nvkm_fifo(engine); |
| @@ -311,6 +342,7 @@ nvkm_fifo = { | |||
| 311 | .dtor = nvkm_fifo_dtor, | 342 | .dtor = nvkm_fifo_dtor, |
| 312 | .preinit = nvkm_fifo_preinit, | 343 | .preinit = nvkm_fifo_preinit, |
| 313 | .oneinit = nvkm_fifo_oneinit, | 344 | .oneinit = nvkm_fifo_oneinit, |
| 345 | .info = nvkm_fifo_info, | ||
| 314 | .init = nvkm_fifo_init, | 346 | .init = nvkm_fifo_init, |
| 315 | .fini = nvkm_fifo_fini, | 347 | .fini = nvkm_fifo_fini, |
| 316 | .intr = nvkm_fifo_intr, | 348 | .intr = nvkm_fifo_intr, |
