xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/nouveau/include/nvif/vmm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __NVIF_VMM_H__
2*4882a593Smuzhiyun #define __NVIF_VMM_H__
3*4882a593Smuzhiyun #include <nvif/object.h>
4*4882a593Smuzhiyun struct nvif_mem;
5*4882a593Smuzhiyun struct nvif_mmu;
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun enum nvif_vmm_get {
8*4882a593Smuzhiyun 	ADDR,
9*4882a593Smuzhiyun 	PTES,
10*4882a593Smuzhiyun 	LAZY
11*4882a593Smuzhiyun };
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun struct nvif_vma {
14*4882a593Smuzhiyun 	u64 addr;
15*4882a593Smuzhiyun 	u64 size;
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun struct nvif_vmm {
19*4882a593Smuzhiyun 	struct nvif_object object;
20*4882a593Smuzhiyun 	u64 start;
21*4882a593Smuzhiyun 	u64 limit;
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun 	struct {
24*4882a593Smuzhiyun 		u8 shift;
25*4882a593Smuzhiyun 		bool sparse:1;
26*4882a593Smuzhiyun 		bool vram:1;
27*4882a593Smuzhiyun 		bool host:1;
28*4882a593Smuzhiyun 		bool comp:1;
29*4882a593Smuzhiyun 	} *page;
30*4882a593Smuzhiyun 	int page_nr;
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun int nvif_vmm_ctor(struct nvif_mmu *, const char *name, s32 oclass, bool managed,
34*4882a593Smuzhiyun 		  u64 addr, u64 size, void *argv, u32 argc, struct nvif_vmm *);
35*4882a593Smuzhiyun void nvif_vmm_dtor(struct nvif_vmm *);
36*4882a593Smuzhiyun int nvif_vmm_get(struct nvif_vmm *, enum nvif_vmm_get, bool sparse,
37*4882a593Smuzhiyun 		 u8 page, u8 align, u64 size, struct nvif_vma *);
38*4882a593Smuzhiyun void nvif_vmm_put(struct nvif_vmm *, struct nvif_vma *);
39*4882a593Smuzhiyun int nvif_vmm_map(struct nvif_vmm *, u64 addr, u64 size, void *argv, u32 argc,
40*4882a593Smuzhiyun 		 struct nvif_mem *, u64 offset);
41*4882a593Smuzhiyun int nvif_vmm_unmap(struct nvif_vmm *, u64);
42*4882a593Smuzhiyun #endif
43