xref: /linux/include/drm/ttm/ttm_range_manager.h (revision 6beeaf48db6c548fcfc2ad32739d33af2fef3a5b)
1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
2 
3 #ifndef _TTM_RANGE_MANAGER_H_
4 #define _TTM_RANGE_MANAGER_H_
5 
6 #include <drm/ttm/ttm_resource.h>
7 #include <drm/drm_mm.h>
8 
9 /**
10  * struct ttm_range_mgr_node
11  *
12  * @base: base clase we extend
13  * @mm_nodes: MM nodes, usually 1
14  *
15  * Extending the ttm_resource object to manage an address space allocation with
16  * one or more drm_mm_nodes.
17  */
18 struct ttm_range_mgr_node {
19 	struct ttm_resource base;
20 	struct drm_mm_node mm_nodes[];
21 };
22 
23 /**
24  * to_ttm_range_mgr_node
25  *
26  * @res: the resource to upcast
27  *
28  * Upcast the ttm_resource object into a ttm_range_mgr_node object.
29  */
30 static inline struct ttm_range_mgr_node *
31 to_ttm_range_mgr_node(struct ttm_resource *res)
32 {
33 	return container_of(res, struct ttm_range_mgr_node, base);
34 }
35 
36 int ttm_range_man_init(struct ttm_device *bdev,
37 		       unsigned type, bool use_tt,
38 		       unsigned long p_size);
39 int ttm_range_man_fini(struct ttm_device *bdev,
40 		       unsigned type);
41 
42 #endif
43