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 <subdev/mmu.h> 7 8struct gk104_fifo_engn { 9 struct nvkm_memory *runlist[2]; 10 int cur_runlist; 11 wait_queue_head_t wait; 12 struct list_head chan; 13}; 14 15struct gk104_fifo { 16 struct nvkm_fifo base; 17 18 struct work_struct fault; 19 u64 mask; 20 21 struct gk104_fifo_engn engine[7]; 22 struct { 23 struct nvkm_memory *mem; 24 struct nvkm_vma bar; 25 } user; 26 int spoon_nr; 27}; 28 29int gk104_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, 30 int index, int nr, struct nvkm_fifo **); 31void *gk104_fifo_dtor(struct nvkm_fifo *); 32int gk104_fifo_oneinit(struct nvkm_fifo *); 33void gk104_fifo_init(struct nvkm_fifo *); 34void gk104_fifo_fini(struct nvkm_fifo *); 35void gk104_fifo_intr(struct nvkm_fifo *); 36void gk104_fifo_uevent_init(struct nvkm_fifo *); 37void gk104_fifo_uevent_fini(struct nvkm_fifo *); 38void gk104_fifo_runlist_update(struct gk104_fifo *, u32 engine); 39 40static inline u64 41gk104_fifo_engine_subdev(int engine) 42{ 43 switch (engine) { 44 case 0: return (1ULL << NVKM_ENGINE_GR) | 45 (1ULL << NVKM_ENGINE_SW) | 46 (1ULL << NVKM_ENGINE_CE2); 47 case 1: return (1ULL << NVKM_ENGINE_MSPDEC); 48 case 2: return (1ULL << NVKM_ENGINE_MSPPP); 49 case 3: return (1ULL << NVKM_ENGINE_MSVLD); 50 case 4: return (1ULL << NVKM_ENGINE_CE0); 51 case 5: return (1ULL << NVKM_ENGINE_CE1); 52 case 6: return (1ULL << NVKM_ENGINE_MSENC); 53 default: 54 WARN_ON(1); 55 return 0; 56 } 57} 58 59static inline int 60gk104_fifo_subdev_engine(int subdev) 61{ 62 switch (subdev) { 63 case NVKM_ENGINE_GR: 64 case NVKM_ENGINE_SW: 65 case NVKM_ENGINE_CE2 : return 0; 66 case NVKM_ENGINE_MSPDEC: return 1; 67 case NVKM_ENGINE_MSPPP : return 2; 68 case NVKM_ENGINE_MSVLD : return 3; 69 case NVKM_ENGINE_CE0 : return 4; 70 case NVKM_ENGINE_CE1 : return 5; 71 case NVKM_ENGINE_MSENC : return 6; 72 default: 73 WARN_ON(1); 74 return 0; 75 } 76} 77#endif 78