• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __NOUVEAU_MM_H__
2 #define __NOUVEAU_MM_H__
3 
4 struct nouveau_mm_node {
5 	struct list_head nl_entry;
6 	struct list_head fl_entry;
7 	struct list_head rl_entry;
8 
9 	u8  type;
10 	u32 offset;
11 	u32 length;
12 };
13 
14 struct nouveau_mm {
15 	struct list_head nodes;
16 	struct list_head free;
17 
18 	struct mutex mutex;
19 
20 	u32 block_size;
21 	int heap_nodes;
22 };
23 
24 static inline bool
nouveau_mm_initialised(struct nouveau_mm * mm)25 nouveau_mm_initialised(struct nouveau_mm *mm)
26 {
27 	return mm->block_size != 0;
28 }
29 
30 int  nouveau_mm_init(struct nouveau_mm *, u32 offset, u32 length, u32 block);
31 int  nouveau_mm_fini(struct nouveau_mm *);
32 int  nouveau_mm_head(struct nouveau_mm *, u8 type, u32 size_max, u32 size_min,
33 		     u32 align, struct nouveau_mm_node **);
34 int  nouveau_mm_tail(struct nouveau_mm *, u8 type, u32 size_max, u32 size_min,
35 		     u32 align, struct nouveau_mm_node **);
36 void nouveau_mm_free(struct nouveau_mm *, struct nouveau_mm_node **);
37 
38 #endif
39