]> git.ipfire.org Git - people/arne_f/kernel.git/blame - drivers/gpu/drm/nouveau/include/nvkm/core/mm.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[people/arne_f/kernel.git] / drivers / gpu / drm / nouveau / include / nvkm / core / mm.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
5025407b
BS
2#ifndef __NVKM_MM_H__
3#define __NVKM_MM_H__
4#include <core/os.h>
573a2a37 5
5025407b 6struct nvkm_mm_node {
573a2a37
BS
7 struct list_head nl_entry;
8 struct list_head fl_entry;
134fdc1a 9 struct nvkm_mm_node *next;
573a2a37 10
65270a65
BS
11#define NVKM_MM_HEAP_ANY 0x00
12 u8 heap;
79456e1a 13#define NVKM_MM_TYPE_NONE 0x00
13dfe128 14#define NVKM_MM_TYPE_HOLE 0xff
8b464bfe 15 u8 type;
573a2a37
BS
16 u32 offset;
17 u32 length;
18};
19
5025407b 20struct nvkm_mm {
573a2a37
BS
21 struct list_head nodes;
22 struct list_head free;
23
573a2a37 24 u32 block_size;
a12036ba 25 int heap_nodes;
573a2a37
BS
26};
27
7e0f992b 28static inline bool
5025407b 29nvkm_mm_initialised(struct nvkm_mm *mm)
7e0f992b 30{
d36a99d2 31 return mm->heap_nodes;
7e0f992b
BS
32}
33
5025407b
BS
34int nvkm_mm_init(struct nvkm_mm *, u32 offset, u32 length, u32 block);
35int nvkm_mm_fini(struct nvkm_mm *);
36int nvkm_mm_head(struct nvkm_mm *, u8 heap, u8 type, u32 size_max,
37 u32 size_min, u32 align, struct nvkm_mm_node **);
38int nvkm_mm_tail(struct nvkm_mm *, u8 heap, u8 type, u32 size_max,
39 u32 size_min, u32 align, struct nvkm_mm_node **);
40void nvkm_mm_free(struct nvkm_mm *, struct nvkm_mm_node **);
d36a99d2 41void nvkm_mm_dump(struct nvkm_mm *, const char *);
134fdc1a
BS
42
43static inline bool
44nvkm_mm_contiguous(struct nvkm_mm_node *node)
45{
46 return !node->next;
47}
573a2a37 48#endif