diff options
Diffstat (limited to 'drivers/staging/gma500/psb_gtt.h')
-rw-r--r-- | drivers/staging/gma500/psb_gtt.h | 84 |
1 files changed, 20 insertions, 64 deletions
diff --git a/drivers/staging/gma500/psb_gtt.h b/drivers/staging/gma500/psb_gtt.h index 0272f83b461e..535ae00f2ab9 100644 --- a/drivers/staging/gma500/psb_gtt.h +++ b/drivers/staging/gma500/psb_gtt.h @@ -22,84 +22,40 @@ #include <drm/drmP.h> -/*#include "img_types.h"*/ - struct psb_gtt { struct drm_device *dev; - int initialized; uint32_t gatt_start; uint32_t mmu_gatt_start; - uint32_t ci_start; - uint32_t rar_start; uint32_t gtt_start; uint32_t gtt_phys_start; unsigned gtt_pages; unsigned gatt_pages; - uint32_t stolen_base; - void *vram_addr; - uint32_t pge_ctl; - u16 gmch_ctrl; unsigned long stolen_size; unsigned long vram_stolen_size; - unsigned long ci_stolen_size; - unsigned long rar_stolen_size; - uint32_t *gtt_map; struct rw_semaphore sem; }; -struct psb_gtt_mm { - struct drm_mm base; - struct drm_open_hash hash; - uint32_t count; - spinlock_t lock; -}; - -struct psb_gtt_hash_entry { - struct drm_open_hash ht; - uint32_t count; - struct drm_hash_item item; -}; - -struct psb_gtt_mem_mapping { - struct drm_mm_node *node; - struct drm_hash_item item; -}; - /*Exported functions*/ -extern int psb_gtt_init(struct psb_gtt *pg, int resume); -extern int psb_gtt_insert_pages(struct psb_gtt *pg, struct page **pages, - unsigned offset_pages, unsigned num_pages, - unsigned desired_tile_stride, - unsigned hw_tile_stride, int type); -extern int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages, - unsigned num_pages, - unsigned desired_tile_stride, - unsigned hw_tile_stride, - int rc_prot); - -extern struct psb_gtt *psb_gtt_alloc(struct drm_device *dev); -extern void psb_gtt_takedown(struct psb_gtt *pg, int free); -extern int psb_gtt_map_meminfo(struct drm_device *dev, - void * hKernelMemInfo, - uint32_t *offset); -extern int psb_gtt_unmap_meminfo(struct drm_device *dev, - void * hKernelMemInfo); -extern int psb_gtt_map_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_gtt_unmap_meminfo_ioctl(struct drm_device *dev, void *data, - struct drm_file *file_priv); -extern int psb_gtt_mm_init(struct psb_gtt *pg); -extern void psb_gtt_mm_takedown(void); - -extern int psb_gtt_map_pvr_memory(struct drm_device *dev, - unsigned int hHandle, - unsigned int ui32TaskId, - dma_addr_t *pPages, - unsigned int ui32PagesNum, - unsigned int *ui32Offset); +extern int psb_gtt_init(struct drm_device *dev, int resume); +extern void psb_gtt_takedown(struct drm_device *dev); + +/* Each gtt_range describes an allocation in the GTT area */ +struct gtt_range { + struct resource resource; + u32 offset; + struct kref kref; + struct drm_gem_object gem; /* GEM high level stuff */ + int in_gart; /* Currently in the GART (ref ct) */ + bool stolen; /* Backed from stolen RAM */ + bool mmapping; /* Is mmappable */ + struct page **pages; /* Backing pages if present */ +}; -extern int psb_gtt_unmap_pvr_memory(struct drm_device *dev, - unsigned int hHandle, - unsigned int ui32TaskId); +extern struct gtt_range *psb_gtt_alloc_range(struct drm_device *dev, int len, + const char *name, int backed); +extern void psb_gtt_kref_put(struct gtt_range *gt); +extern void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt); +extern int psb_gtt_pin(struct gtt_range *gt); +extern void psb_gtt_unpin(struct gtt_range *gt); #endif |