1eea5cf0fSBen Skeggs #ifndef __NVIF_MMU_H__ 2eea5cf0fSBen Skeggs #define __NVIF_MMU_H__ 3eea5cf0fSBen Skeggs #include <nvif/object.h> 4eea5cf0fSBen Skeggs 5eea5cf0fSBen Skeggs struct nvif_mmu { 6eea5cf0fSBen Skeggs struct nvif_object object; 7eea5cf0fSBen Skeggs u8 dmabits; 8eea5cf0fSBen Skeggs u8 heap_nr; 9eea5cf0fSBen Skeggs u8 type_nr; 10eea5cf0fSBen Skeggs u16 kind_nr; 11*f5650478SBen Skeggs s32 mem; 12eea5cf0fSBen Skeggs 13eea5cf0fSBen Skeggs struct { 14eea5cf0fSBen Skeggs u64 size; 15eea5cf0fSBen Skeggs } *heap; 16eea5cf0fSBen Skeggs 17eea5cf0fSBen Skeggs struct { 18eea5cf0fSBen Skeggs #define NVIF_MEM_VRAM 0x01 19eea5cf0fSBen Skeggs #define NVIF_MEM_HOST 0x02 20eea5cf0fSBen Skeggs #define NVIF_MEM_COMP 0x04 21eea5cf0fSBen Skeggs #define NVIF_MEM_DISP 0x08 22eea5cf0fSBen Skeggs #define NVIF_MEM_KIND 0x10 23eea5cf0fSBen Skeggs #define NVIF_MEM_MAPPABLE 0x20 24eea5cf0fSBen Skeggs #define NVIF_MEM_COHERENT 0x40 25eea5cf0fSBen Skeggs #define NVIF_MEM_UNCACHED 0x80 26eea5cf0fSBen Skeggs u8 type; 27eea5cf0fSBen Skeggs u8 heap; 28eea5cf0fSBen Skeggs } *type; 29eea5cf0fSBen Skeggs 30eea5cf0fSBen Skeggs u8 *kind; 31eea5cf0fSBen Skeggs }; 32eea5cf0fSBen Skeggs 33eea5cf0fSBen Skeggs int nvif_mmu_init(struct nvif_object *, s32 oclass, struct nvif_mmu *); 34eea5cf0fSBen Skeggs void nvif_mmu_fini(struct nvif_mmu *); 35eea5cf0fSBen Skeggs 36eea5cf0fSBen Skeggs static inline bool 37eea5cf0fSBen Skeggs nvif_mmu_kind_valid(struct nvif_mmu *mmu, u8 kind) 38eea5cf0fSBen Skeggs { 39eea5cf0fSBen Skeggs const u8 invalid = mmu->kind_nr - 1; 40eea5cf0fSBen Skeggs if (kind) { 41eea5cf0fSBen Skeggs if (kind >= mmu->kind_nr || mmu->kind[kind] == invalid) 42eea5cf0fSBen Skeggs return false; 43eea5cf0fSBen Skeggs } 44eea5cf0fSBen Skeggs return true; 45eea5cf0fSBen Skeggs } 46eea5cf0fSBen Skeggs 47eea5cf0fSBen Skeggs static inline int 48eea5cf0fSBen Skeggs nvif_mmu_type(struct nvif_mmu *mmu, u8 mask) 49eea5cf0fSBen Skeggs { 50eea5cf0fSBen Skeggs int i; 51eea5cf0fSBen Skeggs for (i = 0; i < mmu->type_nr; i++) { 52eea5cf0fSBen Skeggs if ((mmu->type[i].type & mask) == mask) 53eea5cf0fSBen Skeggs return i; 54eea5cf0fSBen Skeggs } 55eea5cf0fSBen Skeggs return -EINVAL; 56eea5cf0fSBen Skeggs } 57eea5cf0fSBen Skeggs #endif 58