drm/ttm: restructure to allow driver to plug in alternate memory manager
Nouveau will need this on GeForce 8 and up to account for the GPU reordering physical VRAM for some memory types. Reviewed-by: Jerome Glisse <jglisse@redhat.com> Acked-by: Thomas Hellström <thellstrom@vmware.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -102,7 +102,8 @@ struct ttm_bus_placement {
|
||||
*/
|
||||
|
||||
struct ttm_mem_reg {
|
||||
struct drm_mm_node *mm_node;
|
||||
void *mm_node;
|
||||
unsigned long start;
|
||||
unsigned long size;
|
||||
unsigned long num_pages;
|
||||
uint32_t page_alignment;
|
||||
|
@@ -203,7 +203,22 @@ struct ttm_tt {
|
||||
* It's set up by the ttm_bo_driver::init_mem_type method.
|
||||
*/
|
||||
|
||||
struct ttm_mem_type_manager;
|
||||
|
||||
struct ttm_mem_type_manager_func {
|
||||
int (*init)(struct ttm_mem_type_manager *man, unsigned long p_size);
|
||||
int (*takedown)(struct ttm_mem_type_manager *man);
|
||||
int (*get_node)(struct ttm_mem_type_manager *man,
|
||||
struct ttm_buffer_object *bo,
|
||||
struct ttm_placement *placement,
|
||||
struct ttm_mem_reg *mem);
|
||||
void (*put_node)(struct ttm_mem_type_manager *man,
|
||||
struct ttm_mem_reg *mem);
|
||||
void (*debug)(struct ttm_mem_type_manager *man, const char *prefix);
|
||||
};
|
||||
|
||||
struct ttm_mem_type_manager {
|
||||
struct ttm_bo_device *bdev;
|
||||
|
||||
/*
|
||||
* No protection. Constant from start.
|
||||
@@ -222,8 +237,8 @@ struct ttm_mem_type_manager {
|
||||
* TODO: Consider one lru_lock per ttm_mem_type_manager.
|
||||
* Plays ill with list removal, though.
|
||||
*/
|
||||
|
||||
struct drm_mm manager;
|
||||
const struct ttm_mem_type_manager_func *func;
|
||||
void *priv;
|
||||
struct list_head lru;
|
||||
};
|
||||
|
||||
@@ -895,6 +910,8 @@ extern int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
|
||||
*/
|
||||
extern pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp);
|
||||
|
||||
extern const struct ttm_mem_type_manager_func ttm_bo_manager_func;
|
||||
|
||||
#if (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE)))
|
||||
#define TTM_HAS_AGP
|
||||
#include <linux/agp_backend.h>
|
||||
|
Reference in New Issue
Block a user