5 #include "pscnv_engine.h"
7 #define NVC0_VM_SIZE 0x10000000000ULL
9 #define NVC0_SPAGE_SHIFT 12
10 #define NVC0_LPAGE_SHIFT 17
11 #define NVC0_SPAGE_MASK 0x00fff
12 #define NVC0_LPAGE_MASK 0x1ffff
14 #define NVC0_VM_PDE_COUNT 0x2000
15 #define NVC0_VM_BLOCK_SIZE 0x8000000
16 #define NVC0_VM_BLOCK_MASK 0x7ffffff
17 #define NVC0_VM_SPTE_COUNT (NVC0_VM_BLOCK_SIZE >> NVC0_SPAGE_SHIFT)
18 #define NVC0_VM_LPTE_COUNT (NVC0_VM_BLOCK_SIZE >> NVC0_LPAGE_SHIFT)
20 #define NVC0_PDE(a) ((a) / NVC0_VM_BLOCK_SIZE)
21 #define NVC0_SPTE(a) (((a) & NVC0_VM_BLOCK_MASK) >> NVC0_SPAGE_SHIFT)
22 #define NVC0_LPTE(a) (((a) & NVC0_VM_BLOCK_MASK) >> NVC0_LPAGE_SHIFT)
24 #define NVC0_PDE_HT_SIZE 32
25 #define NVC0_PDE_HASH(n) (n % NVC0_PDE_HT_SIZE)
27 #define nvc0_vm(x) container_of(x, struct nvc0_vm_engine, base)
28 #define nvc0_vs(x) ((struct nvc0_vspace *)(x)->engdata)
31 struct list_head head
;
33 unsigned int limit
; /* virtual range = NVC0_VM_BLOCK_SIZE >> limit */
34 struct pscnv_bo
*bo
[2]; /* 128 KiB and 4 KiB page tables */
37 struct nvc0_vm_engine
{
38 struct pscnv_vm_engine base
;
39 struct pscnv_vspace
*bar1vm
;
40 struct pscnv_chan
*bar1ch
;
41 struct pscnv_vspace
*bar3vm
;
42 struct pscnv_chan
*bar3ch
;
47 struct list_head ptht
[NVC0_PDE_HT_SIZE
];
48 struct pscnv_mm_node
*obj19848
;
49 struct pscnv_mm_node
*obj08004
;
50 struct pscnv_mm_node
*obj0800c
;
51 struct pscnv_bo
*mmio_bo
;
52 struct pscnv_mm_node
*mmio_vm
;
56 #endif /* __NVC0_VM_H__ */