1#ifndef __NOUVEAU_MM_H__
2#define __NOUVEAU_MM_H__
3
4struct 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
14struct nouveau_mm {
15 struct list_head nodes;
16 struct list_head free;
17
18 u32 block_size;
19 int heap_nodes;
20};
21
22static inline bool
23nouveau_mm_initialised(struct nouveau_mm *mm)
24{
25 return mm->block_size != 0;
26}
27
28int nouveau_mm_init(struct nouveau_mm *, u32 offset, u32 length, u32 block);
29int nouveau_mm_fini(struct nouveau_mm *);
30int nouveau_mm_head(struct nouveau_mm *, u8 type, u32 size_max, u32 size_min,
31 u32 align, struct nouveau_mm_node **);
32int nouveau_mm_tail(struct nouveau_mm *, u8 type, u32 size_max, u32 size_min,
33 u32 align, struct nouveau_mm_node **);
34void nouveau_mm_free(struct nouveau_mm *, struct nouveau_mm_node **);
35
36#endif
37