]>
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 { | |
c9582455 BS |
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 | ||
d30af7ce | 21 | void (*map_pgt)(struct nvkm_vmm *, u32 pde, |
c9582455 BS |
22 | struct nvkm_memory *pgt[2]); |
23 | void (*map)(struct nvkm_vma *, struct nvkm_memory *, | |
24 | struct nvkm_mem *, u32 pte, u32 cnt, | |
25 | u64 phys, u64 delta); | |
26 | void (*map_sg)(struct nvkm_vma *, struct nvkm_memory *, | |
27 | struct nvkm_mem *, u32 pte, u32 cnt, dma_addr_t *); | |
28 | void (*unmap)(struct nvkm_vma *, struct nvkm_memory *pgt, | |
29 | u32 pte, u32 cnt); | |
30 | void (*flush)(struct nvkm_vm *); | |
806a7335 BS |
31 | |
32 | struct { | |
5b17f362 | 33 | struct nvkm_sclass user; |
806a7335 BS |
34 | int (*ctor)(struct nvkm_mmu *, u64 addr, u64 size, |
35 | void *argv, u32 argc, struct lock_class_key *, | |
36 | const char *name, struct nvkm_vmm **); | |
37 | bool global; | |
9f6219fd | 38 | u32 pd_offset; |
806a7335 | 39 | } vmm; |
fd542a3e BS |
40 | |
41 | const u8 *(*kind)(struct nvkm_mmu *, int *count); | |
c9582455 BS |
42 | }; |
43 | ||
5b17f362 BS |
44 | extern const struct nvkm_mmu_func nv04_mmu; |
45 | ||
fd542a3e | 46 | const u8 *nv50_mmu_kind(struct nvkm_mmu *, int *count); |
db018585 | 47 | |
d30af7ce | 48 | void gf100_vm_map_pgt(struct nvkm_vmm *, u32, struct nvkm_memory **); |
db018585 BS |
49 | void gf100_vm_map(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, |
50 | u32, u32, u64, u64); | |
51 | void gf100_vm_map_sg(struct nvkm_vma *, struct nvkm_memory *, struct nvkm_mem *, | |
52 | u32, u32, dma_addr_t *); | |
53 | void gf100_vm_unmap(struct nvkm_vma *, struct nvkm_memory *, u32, u32); | |
54 | void gf100_vm_flush(struct nvkm_vm *); | |
b77791da | 55 | const u8 *gf100_mmu_kind(struct nvkm_mmu *, int *count); |
9a45ddaa | 56 | |
e12cf6ad BS |
57 | const u8 *gm200_mmu_kind(struct nvkm_mmu *, int *); |
58 | ||
9a45ddaa BS |
59 | struct nvkm_mmu_pt { |
60 | union { | |
61 | struct nvkm_mmu_ptc *ptc; | |
f1280394 | 62 | struct nvkm_mmu_ptp *ptp; |
9a45ddaa BS |
63 | }; |
64 | struct nvkm_memory *memory; | |
f1280394 | 65 | bool sub; |
9a45ddaa BS |
66 | u16 base; |
67 | u64 addr; | |
68 | struct list_head head; | |
69 | }; | |
70 | ||
71 | void nvkm_mmu_ptc_dump(struct nvkm_mmu *); | |
72 | struct nvkm_mmu_pt * | |
73 | nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); | |
74 | void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); | |
c9582455 | 75 | #endif |