Back to home page

OSCL-LXR

 
 

    


0001 #ifndef __NVIF_MMU_H__
0002 #define __NVIF_MMU_H__
0003 #include <nvif/object.h>
0004 
0005 struct nvif_mmu {
0006     struct nvif_object object;
0007     u8  dmabits;
0008     u8  heap_nr;
0009     u8  type_nr;
0010     u8  kind_inv;
0011     u16 kind_nr;
0012     s32 mem;
0013 
0014     struct {
0015         u64 size;
0016     } *heap;
0017 
0018     struct {
0019 #define NVIF_MEM_VRAM                                                      0x01
0020 #define NVIF_MEM_HOST                                                      0x02
0021 #define NVIF_MEM_COMP                                                      0x04
0022 #define NVIF_MEM_DISP                                                      0x08
0023 #define NVIF_MEM_KIND                                                      0x10
0024 #define NVIF_MEM_MAPPABLE                                                  0x20
0025 #define NVIF_MEM_COHERENT                                                  0x40
0026 #define NVIF_MEM_UNCACHED                                                  0x80
0027         u8 type;
0028         u8 heap;
0029     } *type;
0030 
0031     u8 *kind;
0032 };
0033 
0034 int nvif_mmu_ctor(struct nvif_object *, const char *name, s32 oclass,
0035           struct nvif_mmu *);
0036 void nvif_mmu_dtor(struct nvif_mmu *);
0037 
0038 static inline bool
0039 nvif_mmu_kind_valid(struct nvif_mmu *mmu, u8 kind)
0040 {
0041     if (kind) {
0042         if (kind >= mmu->kind_nr || mmu->kind[kind] == mmu->kind_inv)
0043             return false;
0044     }
0045     return true;
0046 }
0047 
0048 static inline int
0049 nvif_mmu_type(struct nvif_mmu *mmu, u8 mask)
0050 {
0051     int i;
0052     for (i = 0; i < mmu->type_nr; i++) {
0053         if ((mmu->type[i].type & mask) == mask)
0054             return i;
0055     }
0056     return -EINVAL;
0057 }
0058 #endif