1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef __NOUVEAU_MM_H__
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __NOUVEAU_MM_H__
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunion nouveau_bo_config;
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nouveau_mman;
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Since a resource can be migrated, we need to decouple allocations from
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * them. This struct is linked with fences for delayed freeing of allocs.
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct nouveau_mm_allocation {
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct nouveau_mm_allocation *next;
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *priv;
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint32_t offset;
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct nouveau_mman *
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnouveau_mm_create(struct nouveau_device *, uint32_t domain,
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  union nouveau_bo_config *);
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnouveau_mm_destroy(struct nouveau_mman *);
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct nouveau_mm_allocation *
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnouveau_mm_allocate(struct nouveau_mman *, uint32_t size,
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    struct nouveau_bo **, uint32_t *offset);
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnouveau_mm_free(struct nouveau_mm_allocation *);
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnouveau_mm_free_work(void *);
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif // __NOUVEAU_MM_H__
34