| /* SPDX-License-Identifier: GPL-2.0 OR MIT */ |
| |
| #ifndef _TTM_RANGE_MANAGER_H_ |
| #define _TTM_RANGE_MANAGER_H_ |
| |
| #include <drm/ttm/ttm_resource.h> |
| #include <drm/ttm/ttm_device.h> |
| #include <drm/drm_mm.h> |
| |
| /** |
| * struct ttm_range_mgr_node |
| * |
| * @base: base clase we extend |
| * @mm_nodes: MM nodes, usually 1 |
| * |
| * Extending the ttm_resource object to manage an address space allocation with |
| * one or more drm_mm_nodes. |
| */ |
| struct ttm_range_mgr_node { |
| struct ttm_resource base; |
| struct drm_mm_node mm_nodes[]; |
| }; |
| |
| /** |
| * to_ttm_range_mgr_node |
| * |
| * @res: the resource to upcast |
| * |
| * Upcast the ttm_resource object into a ttm_range_mgr_node object. |
| */ |
| static inline struct ttm_range_mgr_node * |
| to_ttm_range_mgr_node(struct ttm_resource *res) |
| { |
| return container_of(res, struct ttm_range_mgr_node, base); |
| } |
| |
| int ttm_range_man_init_nocheck(struct ttm_device *bdev, |
| unsigned type, bool use_tt, |
| unsigned long p_size); |
| int ttm_range_man_fini_nocheck(struct ttm_device *bdev, |
| unsigned type); |
| static __always_inline int ttm_range_man_init(struct ttm_device *bdev, |
| unsigned int type, bool use_tt, |
| unsigned long p_size) |
| { |
| BUILD_BUG_ON(__builtin_constant_p(type) && type >= TTM_NUM_MEM_TYPES); |
| return ttm_range_man_init_nocheck(bdev, type, use_tt, p_size); |
| } |
| |
| static __always_inline int ttm_range_man_fini(struct ttm_device *bdev, |
| unsigned int type) |
| { |
| BUILD_BUG_ON(__builtin_constant_p(type) && type >= TTM_NUM_MEM_TYPES); |
| return ttm_range_man_fini_nocheck(bdev, type); |
| } |
| #endif |