23
23
#include <drm/drmP.h>
25
/*#include "img_types.h"*/
28
26
struct drm_device *dev;
30
27
uint32_t gatt_start;
31
28
uint32_t mmu_gatt_start;
34
29
uint32_t gtt_start;
35
30
uint32_t gtt_phys_start;
36
31
unsigned gtt_pages;
37
32
unsigned gatt_pages;
42
33
unsigned long stolen_size;
43
34
unsigned long vram_stolen_size;
44
unsigned long ci_stolen_size;
45
unsigned long rar_stolen_size;
47
35
struct rw_semaphore sem;
52
struct drm_open_hash hash;
57
struct psb_gtt_hash_entry {
58
struct drm_open_hash ht;
60
struct drm_hash_item item;
63
struct psb_gtt_mem_mapping {
64
struct drm_mm_node *node;
65
struct drm_hash_item item;
68
38
/*Exported functions*/
69
extern int psb_gtt_init(struct psb_gtt *pg, int resume);
70
extern int psb_gtt_insert_pages(struct psb_gtt *pg, struct page **pages,
71
unsigned offset_pages, unsigned num_pages,
72
unsigned desired_tile_stride,
73
unsigned hw_tile_stride, int type);
74
extern int psb_gtt_remove_pages(struct psb_gtt *pg, unsigned offset_pages,
76
unsigned desired_tile_stride,
77
unsigned hw_tile_stride,
80
extern struct psb_gtt *psb_gtt_alloc(struct drm_device *dev);
81
extern void psb_gtt_takedown(struct psb_gtt *pg, int free);
82
extern int psb_gtt_map_meminfo(struct drm_device *dev,
83
void * hKernelMemInfo,
85
extern int psb_gtt_unmap_meminfo(struct drm_device *dev,
86
void * hKernelMemInfo);
87
extern int psb_gtt_map_meminfo_ioctl(struct drm_device *dev, void *data,
88
struct drm_file *file_priv);
89
extern int psb_gtt_unmap_meminfo_ioctl(struct drm_device *dev, void *data,
90
struct drm_file *file_priv);
91
extern int psb_gtt_mm_init(struct psb_gtt *pg);
92
extern void psb_gtt_mm_takedown(void);
94
extern int psb_gtt_map_pvr_memory(struct drm_device *dev,
96
unsigned int ui32TaskId,
98
unsigned int ui32PagesNum,
99
unsigned int *ui32Offset);
101
extern int psb_gtt_unmap_pvr_memory(struct drm_device *dev,
102
unsigned int hHandle,
103
unsigned int ui32TaskId);
39
extern int psb_gtt_init(struct drm_device *dev, int resume);
40
extern void psb_gtt_takedown(struct drm_device *dev);
42
/* Each gtt_range describes an allocation in the GTT area */
44
struct resource resource;
47
struct drm_gem_object gem; /* GEM high level stuff */
48
int in_gart; /* Currently in the GART (ref ct) */
49
bool stolen; /* Backed from stolen RAM */
50
bool mmapping; /* Is mmappable */
51
struct page **pages; /* Backing pages if present */
54
extern struct gtt_range *psb_gtt_alloc_range(struct drm_device *dev, int len,
55
const char *name, int backed);
56
extern void psb_gtt_kref_put(struct gtt_range *gt);
57
extern void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt);
58
extern int psb_gtt_pin(struct gtt_range *gt);
59
extern void psb_gtt_unpin(struct gtt_range *gt);