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