Commit | Line | Data |
---|---|---|
c9582455 BS |
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 | void *(*dtor)(struct nvkm_mmu *); | |
13 | int (*oneinit)(struct nvkm_mmu *); | |
14 | void (*init)(struct nvkm_mmu *); | |
15 | ||
16 | u64 limit; | |
17 | u8 dma_bits; | |
18 | u32 pgt_bits; | |
19 | u8 spg_shift; | |
20 | u8 lpg_shift; | |
21 | ||
22 | int (*create)(struct nvkm_mmu *, u64 offset, u64 length, u64 mm_offset, | |
23 | struct lock_class_key *, struct nvkm_vm **); | |
24 | ||
25 | void (*map_pgt)(struct nvkm_gpuobj *pgd, u32 pde, | |
26 | struct nvkm_memory *pgt[2]); | |
27 | void (*map)(struct nvkm_vma *, struct nvkm_memory *, | |
28 | struct nvkm_mem *, u32 pte, u32 cnt, | |
29 | u64 phys, u64 delta); | |
30 | void (*map_sg)(struct nvkm_vma *, struct nvkm_memory *, | |
31 | struct nvkm_mem *, u32 pte, u32 cnt, dma_addr_t *); | |
32 | void (*unmap)(struct nvkm_vma *, struct nvkm_memory *pgt, | |
33 | u32 pte, u32 cnt); | |
34 | void (*flush)(struct nvkm_vm *); | |
806a7335 BS |
35 | |
36 | struct { | |
37 | struct nvkm_sclass base; | |
38 | int (*ctor)(struct nvkm_mmu *, u64 addr, u64 size, | |
39 | void *argv, u32 argc, struct lock_class_key *, | |
40 | const char *name, struct nvkm_vmm **); | |
41 | bool global; | |
42 | } vmm; | |
c9582455 BS |
43 | }; |
44 | ||
45 | int nvkm_vm_create(struct nvkm_mmu *, u64, u64, u64, u32, | |
46 | struct lock_class_key *, struct nvkm_vm **); | |
0f43715f BS |
47 | |
48 | int nv50_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *, | |
49 | struct nvkm_vm **); | |
50 | void nv50_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **); | |
51 | void nv50_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, | |
52 | u32, u32, u64, u64); | |
53 | void nv50_vm_map_sg(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, | |
54 | u32, u32, dma_addr_t *); | |
55 | void nv50_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32); | |
56 | void nv50_vm_flush(struct nvkm_vm *); | |
db018585 BS |
57 | |
58 | int gf100_vm_create(struct nvkm_mmu *, u64, u64, u64, struct lock_class_key *, | |
59 | struct nvkm_vm **); | |
60 | void gf100_vm_map_pgt(struct nvkm_gpuobj *, u32, struct nvkm_memory **); | |
61 | void gf100_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, | |
62 | u32, u32, u64, u64); | |
63 | void gf100_vm_map_sg(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, | |
64 | u32, u32, dma_addr_t *); | |
65 | void gf100_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32); | |
66 | void gf100_vm_flush(struct nvkm_vm *); | |
9a45ddaa BS |
67 | |
68 | struct nvkm_mmu_pt { | |
69 | union { | |
70 | struct nvkm_mmu_ptc *ptc; | |
f1280394 | 71 | struct nvkm_mmu_ptp *ptp; |
9a45ddaa BS |
72 | }; |
73 | struct nvkm_memory *memory; | |
f1280394 | 74 | bool sub; |
9a45ddaa BS |
75 | u16 base; |
76 | u64 addr; | |
77 | struct list_head head; | |
78 | }; | |
79 | ||
80 | void nvkm_mmu_ptc_dump(struct nvkm_mmu *); | |
81 | struct nvkm_mmu_pt * | |
82 | nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); | |
83 | void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); | |
c9582455 | 84 | #endif |