Subversion Repositories Kolibri OS

Rev

Rev 3764 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3764 Rev 5078
Line 29... Line 29...
29
#define __RADEON_OBJECT_H__
29
#define __RADEON_OBJECT_H__
Line 30... Line 30...
30
 
30
 
31
#include 
31
#include 
Line 32... Line -...
32
#include "radeon.h"
-
 
33
 
-
 
34
struct sg_table;
32
#include "radeon.h"
35
 
33
 
36
/**
34
/**
37
 * radeon_mem_type_to_domain - return domain corresponding to mem_type
35
 * radeon_mem_type_to_domain - return domain corresponding to mem_type
38
 * @mem_type:	ttm memory type
36
 * @mem_type:	ttm memory type
Line 52... Line 50...
52
		break;
50
		break;
53
	}
51
	}
54
	return 0;
52
	return 0;
55
}
53
}
Line -... Line 54...
-
 
54
 
-
 
55
/**
-
 
56
 * radeon_bo_reserve - reserve bo
-
 
57
 * @bo:		bo structure
-
 
58
 * @no_intr:	don't return -ERESTARTSYS on pending signal
-
 
59
 *
-
 
60
 * Returns:
-
 
61
 * -ERESTARTSYS: A wait for the buffer to become unreserved was interrupted by
-
 
62
 * a signal. Release all buffer reservations and return to user-space.
56
 
63
 */
-
 
64
static inline int radeon_bo_reserve(struct radeon_bo *bo, bool no_intr)
-
 
65
{
-
 
66
	int r;
-
 
67
 
-
 
68
	r = ttm_bo_reserve(&bo->tbo, !no_intr, false, false, NULL);
-
 
69
	if (unlikely(r != 0)) {
-
 
70
		if (r != -ERESTARTSYS)
-
 
71
			dev_err(bo->rdev->dev, "%p reserve failed\n", bo);
-
 
72
		return r;
-
 
73
	}
-
 
74
    return 0;
Line 57... Line 75...
57
int radeon_bo_reserve(struct radeon_bo *bo, bool no_intr);
75
}
58
 
76
 
59
static inline void radeon_bo_unreserve(struct radeon_bo *bo)
77
static inline void radeon_bo_unreserve(struct radeon_bo *bo)
60
{
78
{
Line 61... Line 79...
61
   //    ttm_bo_unreserve(&bo->tbo);
79
	ttm_bo_unreserve(&bo->tbo);
62
}
80
}
63
 
81
 
Line 78... Line 96...
78
static inline unsigned long radeon_bo_size(struct radeon_bo *bo)
96
static inline unsigned long radeon_bo_size(struct radeon_bo *bo)
79
{
97
{
80
	return bo->tbo.num_pages << PAGE_SHIFT;
98
	return bo->tbo.num_pages << PAGE_SHIFT;
81
}
99
}
Line 82... Line -...
82
 
-
 
83
static inline bool radeon_bo_is_reserved(struct radeon_bo *bo)
-
 
84
{
-
 
85
#ifdef __TTM__
-
 
86
	return ttm_bo_is_reserved(&bo->tbo);
-
 
87
#else
-
 
88
	return !!atomic_read(&bo->tbo.reserved);
-
 
89
#endif
-
 
90
}
-
 
91
 
100
 
92
static inline unsigned radeon_bo_ngpu_pages(struct radeon_bo *bo)
101
static inline unsigned radeon_bo_ngpu_pages(struct radeon_bo *bo)
93
{
102
{
94
	return (bo->tbo.num_pages << PAGE_SHIFT) / RADEON_GPU_PAGE_SIZE;
103
	return (bo->tbo.num_pages << PAGE_SHIFT) / RADEON_GPU_PAGE_SIZE;
Line 102... Line 111...
102
/**
111
/**
103
 * radeon_bo_mmap_offset - return mmap offset of bo
112
 * radeon_bo_mmap_offset - return mmap offset of bo
104
 * @bo:	radeon object for which we query the offset
113
 * @bo:	radeon object for which we query the offset
105
 *
114
 *
106
 * Returns mmap offset of the object.
115
 * Returns mmap offset of the object.
107
 *
-
 
108
 * Note: addr_space_offset is constant after ttm bo init thus isn't protected
-
 
109
 * by any lock.
-
 
110
 */
116
 */
111
static inline u64 radeon_bo_mmap_offset(struct radeon_bo *bo)
117
static inline u64 radeon_bo_mmap_offset(struct radeon_bo *bo)
112
{
118
{
113
	return bo->tbo.addr_space_offset;
119
	return drm_vma_node_offset_addr(&bo->tbo.vma_node);
114
}
120
}
Line 115... Line 121...
115
 
121
 
116
extern int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type,
122
extern int radeon_bo_wait(struct radeon_bo *bo, u32 *mem_type,
Line 117... Line 123...
117
			  bool no_wait);
123
			  bool no_wait);
118
 
124
 
119
extern int radeon_bo_create(struct radeon_device *rdev,
125
extern int radeon_bo_create(struct radeon_device *rdev,
120
				unsigned long size, int byte_align,
126
				unsigned long size, int byte_align,
121
				bool kernel, u32 domain,
127
			    bool kernel, u32 domain, u32 flags,
122
			    struct sg_table *sg,
128
			    struct sg_table *sg,
123
				struct radeon_bo **bo_ptr);
129
				struct radeon_bo **bo_ptr);
-
 
130
extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr);
124
extern int radeon_bo_kmap(struct radeon_bo *bo, void **ptr);
131
extern void radeon_bo_kunmap(struct radeon_bo *bo);
125
extern void radeon_bo_kunmap(struct radeon_bo *bo);
132
extern struct radeon_bo *radeon_bo_ref(struct radeon_bo *bo);
126
extern void radeon_bo_unref(struct radeon_bo **bo);
133
extern void radeon_bo_unref(struct radeon_bo **bo);
127
extern int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr);
134
extern int radeon_bo_pin(struct radeon_bo *bo, u32 domain, u64 *gpu_addr);
128
extern int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain,
135
extern int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain,
129
				    u64 max_offset, u64 *gpu_addr);
136
				    u64 max_offset, u64 *gpu_addr);
130
extern int radeon_bo_unpin(struct radeon_bo *bo);
137
extern int radeon_bo_unpin(struct radeon_bo *bo);
131
extern int radeon_bo_evict_vram(struct radeon_device *rdev);
138
extern int radeon_bo_evict_vram(struct radeon_device *rdev);
132
extern void radeon_bo_force_delete(struct radeon_device *rdev);
139
extern void radeon_bo_force_delete(struct radeon_device *rdev);
133
extern int radeon_bo_init(struct radeon_device *rdev);
140
extern int radeon_bo_init(struct radeon_device *rdev);
134
extern void radeon_bo_fini(struct radeon_device *rdev);
141
extern void radeon_bo_fini(struct radeon_device *rdev);
135
extern void radeon_bo_list_add_object(struct radeon_bo_list *lobj,
142
extern int radeon_bo_list_validate(struct radeon_device *rdev,
136
				struct list_head *head);
143
				   struct ww_acquire_ctx *ticket,
137
extern int radeon_bo_list_validate(struct list_head *head, int ring);
144
				   struct list_head *head, int ring);
138
extern int radeon_bo_fbdev_mmap(struct radeon_bo *bo,
145
extern int radeon_bo_fbdev_mmap(struct radeon_bo *bo,
139
				struct vm_area_struct *vma);
146
				struct vm_area_struct *vma);
140
extern int radeon_bo_set_tiling_flags(struct radeon_bo *bo,
147
extern int radeon_bo_set_tiling_flags(struct radeon_bo *bo,
141
				u32 tiling_flags, u32 pitch);
148
				u32 tiling_flags, u32 pitch);
142
extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
149
extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
143
				u32 *tiling_flags, u32 *pitch);
150
				u32 *tiling_flags, u32 *pitch);
144
extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
151
extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
145
				bool force_drop);
152
				bool force_drop);
146
extern void radeon_bo_move_notify(struct ttm_buffer_object *bo,
153
extern void radeon_bo_move_notify(struct ttm_buffer_object *bo,
147
					struct ttm_mem_reg *mem);
154
				  struct ttm_mem_reg *new_mem);
Line 148... Line 155...
148
extern int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo);
155
extern int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo);
149
extern int radeon_bo_get_surface_reg(struct radeon_bo *bo);
156
extern int radeon_bo_get_surface_reg(struct radeon_bo *bo);
Line 162... Line 169...
162
	return sa_bo->manager->cpu_ptr + sa_bo->soffset;
169
	return sa_bo->manager->cpu_ptr + sa_bo->soffset;
163
}
170
}
Line 164... Line 171...
164
 
171
 
165
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
172
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
166
				     struct radeon_sa_manager *sa_manager,
173
				     struct radeon_sa_manager *sa_manager,
-
 
174
				     unsigned size, u32 align, u32 domain,
167
				     unsigned size, u32 domain);
175
				     u32 flags);
168
extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev,
176
extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev,
169
				      struct radeon_sa_manager *sa_manager);
177
				      struct radeon_sa_manager *sa_manager);
170
extern int radeon_sa_bo_manager_start(struct radeon_device *rdev,
178
extern int radeon_sa_bo_manager_start(struct radeon_device *rdev,
171
				      struct radeon_sa_manager *sa_manager);
179
				      struct radeon_sa_manager *sa_manager);
172
extern int radeon_sa_bo_manager_suspend(struct radeon_device *rdev,
180
extern int radeon_sa_bo_manager_suspend(struct radeon_device *rdev,
173
					struct radeon_sa_manager *sa_manager);
181
					struct radeon_sa_manager *sa_manager);
174
extern int radeon_sa_bo_new(struct radeon_device *rdev,
182
extern int radeon_sa_bo_new(struct radeon_device *rdev,
175
			    struct radeon_sa_manager *sa_manager,
183
			    struct radeon_sa_manager *sa_manager,
176
			    struct radeon_sa_bo **sa_bo,
184
			    struct radeon_sa_bo **sa_bo,
177
			    unsigned size, unsigned align, bool block);
185
			    unsigned size, unsigned align);
178
extern void radeon_sa_bo_free(struct radeon_device *rdev,
186
extern void radeon_sa_bo_free(struct radeon_device *rdev,
179
			      struct radeon_sa_bo **sa_bo,
187
			      struct radeon_sa_bo **sa_bo,
180
			      struct radeon_fence *fence);
188
			      struct radeon_fence *fence);
181
#if defined(CONFIG_DEBUG_FS)
189
#if defined(CONFIG_DEBUG_FS)