5 #include "pscnv_tree.h"
7 PSCNV_RB_HEAD(pscnv_mm_head
, pscnv_mm_node
);
10 struct drm_device
*dev
;
11 struct pscnv_mm_head head
;
17 struct pscnv_mm_node
{
18 PSCNV_RB_ENTRY(pscnv_mm_node
) entry
;
30 struct pscnv_mm_node
*next
;
31 struct pscnv_mm_node
*prev
;
38 #define PSCNV_MM_FRAGOK 4
39 #define PSCNV_MM_FROMBACK 8
41 int pscnv_mm_init(struct drm_device
*dev
, uint64_t start
, uint64_t end
, uint32_t spsize
, uint32_t lpsize
, uint32_t tssize
, struct pscnv_mm
**res
);
42 int pscnv_mm_alloc(struct pscnv_mm
*mm
, uint64_t size
, uint32_t flags
, uint64_t start
, uint64_t end
, struct pscnv_mm_node
**res
);
43 void pscnv_mm_free(struct pscnv_mm_node
*node
);
44 void pscnv_mm_takedown(struct pscnv_mm
*mm
, void (*free_callback
)(struct pscnv_mm_node
*));
45 struct pscnv_mm_node
*pscnv_mm_find_node(struct pscnv_mm
*mm
, uint64_t addr
);