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