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*6dd123baSBen Skeggs void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, 8*6dd123baSBen Skeggs struct nvkm_mmu *); 9*6dd123baSBen Skeggs int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, 10*6dd123baSBen Skeggs struct nvkm_mmu **); 11c9582455SBen Skeggs 12c9582455SBen Skeggs struct nvkm_mmu_func { 13c9582455SBen Skeggs void (*init)(struct nvkm_mmu *); 14c9582455SBen Skeggs 15c9582455SBen Skeggs u8 dma_bits; 16c9582455SBen Skeggs 17806a7335SBen Skeggs struct { 185b17f362SBen Skeggs struct nvkm_sclass user; 19eea5cf0fSBen Skeggs } mmu; 20c9582455SBen Skeggs 21eea5cf0fSBen Skeggs struct { 22eea5cf0fSBen Skeggs struct nvkm_sclass user; 23eaf1a691SBen Skeggs int (*vram)(struct nvkm_mmu *, int type, u8 page, u64 size, 24eaf1a691SBen Skeggs void *argv, u32 argc, struct nvkm_memory **); 25eaf1a691SBen Skeggs int (*umap)(struct nvkm_mmu *, struct nvkm_memory *, void *argv, 26eaf1a691SBen Skeggs u32 argc, u64 *addr, u64 *size, struct nvkm_vma **); 27eaf1a691SBen Skeggs } mem; 28eaf1a691SBen Skeggs 29eaf1a691SBen Skeggs struct { 30eaf1a691SBen Skeggs struct nvkm_sclass user; 312606f291SBen Skeggs int (*ctor)(struct nvkm_mmu *, bool managed, u64 addr, u64 size, 32806a7335SBen Skeggs void *argv, u32 argc, struct lock_class_key *, 33806a7335SBen Skeggs const char *name, struct nvkm_vmm **); 34806a7335SBen Skeggs bool global; 359f6219fdSBen Skeggs u32 pd_offset; 36806a7335SBen Skeggs } vmm; 37fd542a3eSBen Skeggs 38176ada03SJames Jones const u8 *(*kind)(struct nvkm_mmu *, int *count, u8 *invalid); 3951645eb7SBen Skeggs bool kind_sys; 40c9582455SBen Skeggs }; 41c9582455SBen Skeggs 425b17f362SBen Skeggs extern const struct nvkm_mmu_func nv04_mmu; 435b17f362SBen Skeggs 44176ada03SJames Jones const u8 *nv50_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 45db018585SBen Skeggs 46176ada03SJames Jones const u8 *gf100_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 479a45ddaaSBen Skeggs 48176ada03SJames Jones const u8 *gm200_mmu_kind(struct nvkm_mmu *, int *, u8 *); 49e12cf6adSBen Skeggs 509a45ddaaSBen Skeggs struct nvkm_mmu_pt { 519a45ddaaSBen Skeggs union { 529a45ddaaSBen Skeggs struct nvkm_mmu_ptc *ptc; 53f1280394SBen Skeggs struct nvkm_mmu_ptp *ptp; 549a45ddaaSBen Skeggs }; 559a45ddaaSBen Skeggs struct nvkm_memory *memory; 56f1280394SBen Skeggs bool sub; 579a45ddaaSBen Skeggs u16 base; 589a45ddaaSBen Skeggs u64 addr; 599a45ddaaSBen Skeggs struct list_head head; 609a45ddaaSBen Skeggs }; 619a45ddaaSBen Skeggs 629a45ddaaSBen Skeggs void nvkm_mmu_ptc_dump(struct nvkm_mmu *); 639a45ddaaSBen Skeggs struct nvkm_mmu_pt * 649a45ddaaSBen Skeggs nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); 659a45ddaaSBen Skeggs void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); 66c9582455SBen Skeggs #endif 67