#define __NVKM_MMU_H__
#include <core/subdev.h>
#include <core/mm.h>
-struct nvkm_device;
+struct nvkm_gpuobj;
struct nvkm_mem;
struct nvkm_vm_pgt {
};
struct nvkm_vma {
- struct list_head head;
- int refcount;
struct nvkm_vm *vm;
struct nvkm_mm_node *node;
- u64 offset;
+ union {
+ u64 offset;
+ u64 addr;
+ };
u32 access;
};
struct nvkm_vm_pgt *pgt;
u32 fpde;
u32 lpde;
+
+ bool bootstrapped;
};
int nvkm_vm_new(struct nvkm_device *, u64 offset, u64 length, u64 mm_offset,
u64 limit;
u8 dma_bits;
u8 lpg_shift;
+
+ struct nvkm_vmm *vmm;
+
+ struct {
+ struct mutex mutex;
+ struct list_head list;
+ } ptc, ptp;
};
int nv04_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
int nv41_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
int nv44_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
int nv50_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int g84_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
int gf100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gk104_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gk20a_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gm200_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gm20b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gp100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
+int gp10b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **);
#endif