1b7019ac5SIlia Mirkin /* SPDX-License-Identifier: MIT */ 2c9582455SBen Skeggs #ifndef __NVKM_MMU_PRIV_H__ 3c9582455SBen Skeggs #define __NVKM_MMU_PRIV_H__ 4c9582455SBen Skeggs #define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev) 5c9582455SBen Skeggs #include <subdev/mmu.h> 6c9582455SBen Skeggs 7*5bf02571SBen Skeggs int r535_mmu_new(const struct nvkm_mmu_func *hw, struct nvkm_device *, enum nvkm_subdev_type, int, 8*5bf02571SBen Skeggs struct nvkm_mmu **); 9*5bf02571SBen Skeggs 106dd123baSBen Skeggs void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, 116dd123baSBen Skeggs struct nvkm_mmu *); 126dd123baSBen Skeggs int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, 136dd123baSBen Skeggs struct nvkm_mmu **); 14c9582455SBen Skeggs 15c9582455SBen Skeggs struct nvkm_mmu_func { 16*5bf02571SBen Skeggs void (*dtor)(struct nvkm_mmu *); 17c9582455SBen Skeggs void (*init)(struct nvkm_mmu *); 18c9582455SBen Skeggs 19c9582455SBen Skeggs u8 dma_bits; 20c9582455SBen Skeggs 21806a7335SBen Skeggs struct { 225b17f362SBen Skeggs struct nvkm_sclass user; 23eea5cf0fSBen Skeggs } mmu; 24c9582455SBen Skeggs 25eea5cf0fSBen Skeggs struct { 26eea5cf0fSBen Skeggs struct nvkm_sclass user; 27eaf1a691SBen Skeggs int (*vram)(struct nvkm_mmu *, int type, u8 page, u64 size, 28eaf1a691SBen Skeggs void *argv, u32 argc, struct nvkm_memory **); 29eaf1a691SBen Skeggs int (*umap)(struct nvkm_mmu *, struct nvkm_memory *, void *argv, 30eaf1a691SBen Skeggs u32 argc, u64 *addr, u64 *size, struct nvkm_vma **); 31eaf1a691SBen Skeggs } mem; 32eaf1a691SBen Skeggs 33eaf1a691SBen Skeggs struct { 34eaf1a691SBen Skeggs struct nvkm_sclass user; 352606f291SBen Skeggs int (*ctor)(struct nvkm_mmu *, bool managed, u64 addr, u64 size, 36806a7335SBen Skeggs void *argv, u32 argc, struct lock_class_key *, 37806a7335SBen Skeggs const char *name, struct nvkm_vmm **); 38806a7335SBen Skeggs bool global; 399f6219fdSBen Skeggs u32 pd_offset; 40806a7335SBen Skeggs } vmm; 41fd542a3eSBen Skeggs 42176ada03SJames Jones const u8 *(*kind)(struct nvkm_mmu *, int *count, u8 *invalid); 4351645eb7SBen Skeggs bool kind_sys; 44*5bf02571SBen Skeggs 45*5bf02571SBen Skeggs int (*promote_vmm)(struct nvkm_vmm *); 46c9582455SBen Skeggs }; 47c9582455SBen Skeggs 485b17f362SBen Skeggs extern const struct nvkm_mmu_func nv04_mmu; 495b17f362SBen Skeggs 50176ada03SJames Jones const u8 *nv50_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 51db018585SBen Skeggs 52176ada03SJames Jones const u8 *gf100_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 539a45ddaaSBen Skeggs 54176ada03SJames Jones const u8 *gm200_mmu_kind(struct nvkm_mmu *, int *, u8 *); 55e12cf6adSBen Skeggs 569a45ddaaSBen Skeggs struct nvkm_mmu_pt { 579a45ddaaSBen Skeggs union { 589a45ddaaSBen Skeggs struct nvkm_mmu_ptc *ptc; 59f1280394SBen Skeggs struct nvkm_mmu_ptp *ptp; 609a45ddaaSBen Skeggs }; 619a45ddaaSBen Skeggs struct nvkm_memory *memory; 62f1280394SBen Skeggs bool sub; 639a45ddaaSBen Skeggs u16 base; 649a45ddaaSBen Skeggs u64 addr; 659a45ddaaSBen Skeggs struct list_head head; 669a45ddaaSBen Skeggs }; 679a45ddaaSBen Skeggs 689a45ddaaSBen Skeggs void nvkm_mmu_ptc_dump(struct nvkm_mmu *); 699a45ddaaSBen Skeggs struct nvkm_mmu_pt * 709a45ddaaSBen Skeggs nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); 719a45ddaaSBen Skeggs void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); 72c9582455SBen Skeggs #endif 73