1 /* $NetBSD: priv.h,v 1.4 2021/12/19 10:51:58 riastradh Exp $ */ 2 3 /* SPDX-License-Identifier: MIT */ 4 #ifndef __NVKM_MMU_PRIV_H__ 5 #define __NVKM_MMU_PRIV_H__ 6 #define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev) 7 #include <subdev/mmu.h> 8 9 void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, 10 int index, struct nvkm_mmu *); 11 int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, 12 int index, struct nvkm_mmu **); 13 14 struct nvkm_mmu_func { 15 void (*init)(struct nvkm_mmu *); 16 17 u8 dma_bits; 18 19 struct { 20 struct nvkm_sclass user; 21 } mmu; 22 23 struct { 24 struct nvkm_sclass user; 25 int (*vram)(struct nvkm_mmu *, int type, u8 page, u64 size, 26 void *argv, u32 argc, struct nvkm_memory **); 27 #ifdef __NetBSD__ 28 int (*umap)(struct nvkm_mmu *, struct nvkm_memory *, void *argv, 29 u32 argc, bus_space_tag_t *, u64 *addr, u64 *size, struct nvkm_vma **); 30 #else 31 int (*umap)(struct nvkm_mmu *, struct nvkm_memory *, void *argv, 32 u32 argc, u64 *addr, u64 *size, struct nvkm_vma **); 33 #endif 34 } mem; 35 36 struct { 37 struct nvkm_sclass user; 38 int (*ctor)(struct nvkm_mmu *, bool managed, u64 addr, u64 size, 39 void *argv, u32 argc, struct lock_class_key *, 40 const char *name, struct nvkm_vmm **); 41 bool global; 42 u32 pd_offset; 43 } vmm; 44 45 const u8 *(*kind)(struct nvkm_mmu *, int *count, u8 *invalid); 46 bool kind_sys; 47 }; 48 49 extern const struct nvkm_mmu_func nv04_mmu; 50 51 const u8 *nv50_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 52 53 const u8 *gf100_mmu_kind(struct nvkm_mmu *, int *count, u8 *invalid); 54 55 const u8 *gm200_mmu_kind(struct nvkm_mmu *, int *, u8 *); 56 57 struct nvkm_mmu_pt { 58 union { 59 struct nvkm_mmu_ptc *ptc; 60 struct nvkm_mmu_ptp *ptp; 61 }; 62 struct nvkm_memory *memory; 63 bool sub; 64 u16 base; 65 u64 addr; 66 struct list_head head; 67 }; 68 69 void nvkm_mmu_ptc_dump(struct nvkm_mmu *); 70 struct nvkm_mmu_pt * 71 nvkm_mmu_ptc_get(struct nvkm_mmu *, u32 size, u32 align, bool zero); 72 void nvkm_mmu_ptc_put(struct nvkm_mmu *, bool force, struct nvkm_mmu_pt **); 73 #endif 74