2021-04-17 18:48:36 +02:00
/* SPDX-License-Identifier: GPL-2.0 OR MIT */
# ifndef _TTM_RANGE_MANAGER_H_
# define _TTM_RANGE_MANAGER_H_
# include <drm/ttm/ttm_resource.h>
2021-09-13 16:09:50 +08:00
# include <drm/ttm/ttm_device.h>
2021-04-17 18:48:36 +02:00
# 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 )
{
2021-04-30 09:48:27 +02:00
return container_of ( res , struct ttm_range_mgr_node , base ) ;
2021-04-17 18:48:36 +02:00
}
2021-09-13 16:09:50 +08:00
int ttm_range_man_init_nocheck ( struct ttm_device * bdev ,
2021-04-17 18:48:36 +02:00
unsigned type , bool use_tt ,
unsigned long p_size ) ;
2021-09-13 16:09:50 +08:00
int ttm_range_man_fini_nocheck ( struct ttm_device * bdev ,
2021-04-17 18:48:36 +02:00
unsigned type ) ;
2021-09-13 16:09:50 +08:00
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 ) ;
}
2021-04-17 18:48:36 +02:00
2021-09-13 16:09:50 +08:00
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 ) ;
}
2021-04-17 18:48:36 +02:00
# endif