Line data Source code
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/ttm/ttm_device.h> 8 : #include <drm/drm_mm.h> 9 : 10 : /** 11 : * struct ttm_range_mgr_node 12 : * 13 : * @base: base clase we extend 14 : * @mm_nodes: MM nodes, usually 1 15 : * 16 : * Extending the ttm_resource object to manage an address space allocation with 17 : * one or more drm_mm_nodes. 18 : */ 19 : struct ttm_range_mgr_node { 20 : struct ttm_resource base; 21 : struct drm_mm_node mm_nodes[]; 22 : }; 23 : 24 : /** 25 : * to_ttm_range_mgr_node 26 : * 27 : * @res: the resource to upcast 28 : * 29 : * Upcast the ttm_resource object into a ttm_range_mgr_node object. 30 : */ 31 : static inline struct ttm_range_mgr_node * 32 : to_ttm_range_mgr_node(struct ttm_resource *res) 33 : { 34 0 : return container_of(res, struct ttm_range_mgr_node, base); 35 : } 36 : 37 : int ttm_range_man_init_nocheck(struct ttm_device *bdev, 38 : unsigned type, bool use_tt, 39 : unsigned long p_size); 40 : int ttm_range_man_fini_nocheck(struct ttm_device *bdev, 41 : unsigned type); 42 : static __always_inline int ttm_range_man_init(struct ttm_device *bdev, 43 : unsigned int type, bool use_tt, 44 : unsigned long p_size) 45 : { 46 : BUILD_BUG_ON(__builtin_constant_p(type) && type >= TTM_NUM_MEM_TYPES); 47 0 : return ttm_range_man_init_nocheck(bdev, type, use_tt, p_size); 48 : } 49 : 50 : static __always_inline int ttm_range_man_fini(struct ttm_device *bdev, 51 : unsigned int type) 52 : { 53 : BUILD_BUG_ON(__builtin_constant_p(type) && type >= TTM_NUM_MEM_TYPES); 54 0 : return ttm_range_man_fini_nocheck(bdev, type); 55 : } 56 : #endif