1 #ifndef __NVKM_MMU_PRIV_H__ 2 #define __NVKM_MMU_PRIV_H__ 3 #define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev) 4 #include <subdev/mmu.h> 5 6 void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, 7 int index, struct nvkm_mmu *); 8 int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, 9 int index, struct nvkm_mmu **); 10 11 struct nvkm_mmu_func { 12 int (*oneinit)(struct nvkm_mmu *); 13 void (*init)(struct nvkm_mmu *); 14 15 u64 limit; 16 u8 dma_bits; 17 u32 pgt_bits; 18 u8 spg_shift; 19 u8 lpg_shift; 20 21 int (*create)(struct nvkm_mmu *, u64 offset, u64 length, u64 mm_offset, 22 struct lock_class_key *, struct nvkm_vm **); 23 24 void (*map_pgt)(struct nvkm_gpuobj *pgd, u32 pde, 25 struct nvkm_memory *pgt[2]); 26 void (*map)(struct nvkm_vma *, struct nvkm_memory *, 27 struct nvkm_mem *, u32 pte, u32 cnt, 28 u64 phys, u64 delta); 29 void (*map_sg)(struct nvkm_vma *, struct nvkm_memory *, 30 struct nvkm_mem *, u32 pte, u32 cnt, dma_addr_t *); 31 void (*unmap)(struct nvkm_vma *, struct nvkm_memory *pgt, 32 u32 pte, u32 cnt); 33 void (*flush)(struct nvkm_vm *); 34 35 struct { 36 struct nvkm_sclass user; 37 int (*ctor)(struct nvkm_mmu *, u64 addr, u64 size, 38 void *argv, u32 argc, struct lock_class_key *, 39 const char *name, struct nvkm_vmm **); 40 bool global; 41 } vmm; 42 }; 43 44 int nvkm_vm_create(struct nvkm_mmu *, u64, u64, u64, u32, 45 struct lock_class_key *, struct nvkm_vm **); 46 47 extern const struct nvkm_mmu_func nv04_mmu; 48 49 int nv50_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *, 50 struct nvkm_vm **); 51 void nv50_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **); 52 void nv50_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, 53 u32, u32, u64, u64); 54 void nv50_vm_map_sg(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, 55 u32, u32, dma_addr_t *); 56 void nv50_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32); 57 void nv50_vm_flush(struct nvkm_vm *); 58 59 int gf100_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *, 60 struct nvkm_vm **); 61 void gf100_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **); 62 void gf100_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, 63 u32, u32, u64, u64); 64 void gf100_vm_map_sg(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, 65 u32, u32, dma_addr_t *); 66 void gf100_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32); 67 void gf100_vm_flush(struct nvkm_vm *); 68 69 struct nvkm_mmu_pt { 70 union { 71 struct nvkm_mmu_ptc *ptc; 72 struct nvkm_mmu_ptp *ptp; 73 }; 74 struct nvkm_memory *memory; 75 bool sub; 76 u16 base; 77 u64 addr; 78 struct list_head head; 79 }; 80 81 void nvkm_mmu_ptc_dump(struct nvkm_mmu *); 82 struct nvkm_mmu_pt * 83 nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); 84 void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); 85 #endif 86