linux/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h
<<
>>
Prefs
   1#ifndef __GK104_FIFO_H__
   2#define __GK104_FIFO_H__
   3#define gk104_fifo(p) container_of((p), struct gk104_fifo, base)
   4#include "priv.h"
   5
   6#include <core/enum.h>
   7#include <subdev/mmu.h>
   8
   9struct gk104_fifo_chan;
  10struct gk104_fifo {
  11        const struct gk104_fifo_func *func;
  12        struct nvkm_fifo base;
  13
  14        struct {
  15                struct work_struct work;
  16                u32 engm;
  17                u32 runm;
  18        } recover;
  19
  20        int pbdma_nr;
  21
  22        struct {
  23                struct nvkm_engine *engine;
  24                int runl;
  25                int pbid;
  26        } engine[16];
  27        int engine_nr;
  28
  29        struct {
  30                struct nvkm_memory *mem[2];
  31                int next;
  32                wait_queue_head_t wait;
  33                struct list_head chan;
  34                u32 engm;
  35        } runlist[16];
  36        int runlist_nr;
  37
  38        struct {
  39                struct nvkm_memory *mem;
  40                struct nvkm_vma bar;
  41        } user;
  42};
  43
  44struct gk104_fifo_func {
  45        struct {
  46                const struct nvkm_enum *engine;
  47                const struct nvkm_enum *reason;
  48                const struct nvkm_enum *hubclient;
  49                const struct nvkm_enum *gpcclient;
  50        } fault;
  51
  52        const struct nvkm_fifo_chan_oclass *chan[];
  53};
  54
  55int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *,
  56                    int index, int nr, struct nvkm_fifo **);
  57void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *);
  58void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *);
  59void gk104_fifo_runlist_commit(struct gk104_fifo *, int runl);
  60
  61static inline u64
  62gk104_fifo_engine_subdev(int engine)
  63{
  64        switch (engine) {
  65        case 0: return (1ULL << NVKM_ENGINE_GR) |
  66                       (1ULL << NVKM_ENGINE_SW) |
  67                       (1ULL << NVKM_ENGINE_CE2);
  68        case 1: return (1ULL << NVKM_ENGINE_MSPDEC);
  69        case 2: return (1ULL << NVKM_ENGINE_MSPPP);
  70        case 3: return (1ULL << NVKM_ENGINE_MSVLD);
  71        case 4: return (1ULL << NVKM_ENGINE_CE0);
  72        case 5: return (1ULL << NVKM_ENGINE_CE1);
  73        case 6: return (1ULL << NVKM_ENGINE_MSENC);
  74        default:
  75                WARN_ON(1);
  76                return 0;
  77        }
  78}
  79
  80extern const struct nvkm_enum gk104_fifo_fault_engine[];
  81extern const struct nvkm_enum gk104_fifo_fault_reason[];
  82extern const struct nvkm_enum gk104_fifo_fault_hubclient[];
  83extern const struct nvkm_enum gk104_fifo_fault_gpcclient[];
  84
  85extern const struct nvkm_enum gm107_fifo_fault_engine[];
  86#endif
  87