3 #include <core/subdev.h>
9 struct nvkm_memory
*mem
[2];
14 struct list_head head
;
15 struct nvkm_gpuobj
*obj
;
19 struct list_head head
;
22 struct nvkm_mm_node
*node
;
34 struct list_head pgd_list
;
35 atomic_t engref
[NVDEV_SUBDEV_NR
];
37 struct nvkm_vm_pgt
*pgt
;
43 struct nvkm_subdev subdev
;
51 int (*create
)(struct nvkm_mmu
*, u64 offset
, u64 length
,
52 u64 mm_offset
, struct lock_class_key
*,
55 void (*map_pgt
)(struct nvkm_gpuobj
*pgd
, u32 pde
,
56 struct nvkm_memory
*pgt
[2]);
57 void (*map
)(struct nvkm_vma
*, struct nvkm_memory
*,
58 struct nvkm_mem
*, u32 pte
, u32 cnt
,
60 void (*map_sg
)(struct nvkm_vma
*, struct nvkm_memory
*,
61 struct nvkm_mem
*, u32 pte
, u32 cnt
, dma_addr_t
*);
62 void (*unmap
)(struct nvkm_vma
*, struct nvkm_memory
*pgt
,
64 void (*flush
)(struct nvkm_vm
*);
67 static inline struct nvkm_mmu
*
70 return (void *)nvkm_subdev(obj
, NVDEV_SUBDEV_MMU
);
73 #define nvkm_mmu_create(p,e,o,i,f,d) \
74 nvkm_subdev_create((p), (e), (o), 0, (i), (f), (d))
75 #define nvkm_mmu_destroy(p) \
76 nvkm_subdev_destroy(&(p)->subdev)
77 #define nvkm_mmu_init(p) \
78 nvkm_subdev_init_old(&(p)->subdev)
79 #define nvkm_mmu_fini(p,s) \
80 nvkm_subdev_fini_old(&(p)->subdev, (s))
82 #define _nvkm_mmu_dtor _nvkm_subdev_dtor
83 #define _nvkm_mmu_init _nvkm_subdev_init
84 #define _nvkm_mmu_fini _nvkm_subdev_fini
86 extern struct nvkm_oclass nv04_mmu_oclass
;
87 extern struct nvkm_oclass nv41_mmu_oclass
;
88 extern struct nvkm_oclass nv44_mmu_oclass
;
89 extern struct nvkm_oclass nv50_mmu_oclass
;
90 extern struct nvkm_oclass gf100_mmu_oclass
;
92 int nv04_vm_create(struct nvkm_mmu
*, u64
, u64
, u64
, struct lock_class_key
*,
94 void nv04_mmu_dtor(struct nvkm_object
*);
96 int nvkm_vm_create(struct nvkm_mmu
*, u64 offset
, u64 length
, u64 mm_offset
,
97 u32 block
, struct lock_class_key
*, struct nvkm_vm
**);
98 int nvkm_vm_new(struct nvkm_device
*, u64 offset
, u64 length
, u64 mm_offset
,
99 struct lock_class_key
*, struct nvkm_vm
**);
100 int nvkm_vm_ref(struct nvkm_vm
*, struct nvkm_vm
**, struct nvkm_gpuobj
*pgd
);
101 int nvkm_vm_boot(struct nvkm_vm
*, u64 size
);
102 int nvkm_vm_get(struct nvkm_vm
*, u64 size
, u32 page_shift
, u32 access
,
104 void nvkm_vm_put(struct nvkm_vma
*);
105 void nvkm_vm_map(struct nvkm_vma
*, struct nvkm_mem
*);
106 void nvkm_vm_map_at(struct nvkm_vma
*, u64 offset
, struct nvkm_mem
*);
107 void nvkm_vm_unmap(struct nvkm_vma
*);
108 void nvkm_vm_unmap_at(struct nvkm_vma
*, u64 offset
, u64 length
);