Subversion Repositories Kolibri OS

Rev

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

Rev 5078 Rev 5271
Line 63... Line 63...
63
		return -ENOMEM;
63
		return -ENOMEM;
64
	}
64
	}
Line 65... Line 65...
65
 
65
 
66
retry:
66
retry:
67
	r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain,
67
	r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain,
68
			     flags, NULL, &robj);
68
			     flags, NULL, NULL, &robj);
69
	if (r) {
69
	if (r) {
70
		if (r != -ERESTARTSYS) {
70
		if (r != -ERESTARTSYS) {
71
			if (initial_domain == RADEON_GEM_DOMAIN_VRAM) {
71
			if (initial_domain == RADEON_GEM_DOMAIN_VRAM) {
72
				initial_domain |= RADEON_GEM_DOMAIN_GTT;
72
				initial_domain |= RADEON_GEM_DOMAIN_GTT;
Line 89... Line 89...
89
static int radeon_gem_set_domain(struct drm_gem_object *gobj,
89
static int radeon_gem_set_domain(struct drm_gem_object *gobj,
90
			  uint32_t rdomain, uint32_t wdomain)
90
			  uint32_t rdomain, uint32_t wdomain)
91
{
91
{
92
	struct radeon_bo *robj;
92
	struct radeon_bo *robj;
93
	uint32_t domain;
93
	uint32_t domain;
94
	int r;
94
	long r;
Line 95... Line 95...
95
 
95
 
96
	/* FIXME: reeimplement */
96
	/* FIXME: reeimplement */
97
	robj = gem_to_radeon_bo(gobj);
97
	robj = gem_to_radeon_bo(gobj);
98
	/* work out where to validate the buffer to */
98
	/* work out where to validate the buffer to */
Line 227... Line 227...
227
	up_read(&rdev->exclusive_lock);
227
	up_read(&rdev->exclusive_lock);
228
	r = radeon_gem_handle_lockup(robj->rdev, r);
228
	r = radeon_gem_handle_lockup(robj->rdev, r);
229
	return r;
229
	return r;
230
}
230
}
Line 231... Line 231...
231
 
231
 
232
int radeon_mode_dumb_mmap(struct drm_file *filp,
232
static int radeon_mode_mmap(struct drm_file *filp,
-
 
233
			  struct drm_device *dev,
233
			  struct drm_device *dev,
234
			    uint32_t handle, bool dumb,
234
			  uint32_t handle, uint64_t *offset_p)
235
			    uint64_t *offset_p)
235
{
236
{
236
	struct drm_gem_object *gobj;
237
	struct drm_gem_object *gobj;
Line 237... Line 238...
237
	struct radeon_bo *robj;
238
	struct radeon_bo *robj;
238
 
239
 
239
	gobj = drm_gem_object_lookup(dev, filp, handle);
240
	gobj = drm_gem_object_lookup(dev, filp, handle);
240
	if (gobj == NULL) {
241
	if (gobj == NULL) {
-
 
242
		return -ENOENT;
-
 
243
	}
-
 
244
 
-
 
245
	/*
-
 
246
	 * We don't allow dumb mmaps on objects created using another
-
 
247
	 * interface.
-
 
248
	 */
-
 
249
	WARN_ONCE(dumb && !(gobj->dumb || gobj->import_attach),
241
		return -ENOENT;
250
		"Illegal dumb map of GPU buffer.\n");
242
	}
251
 
243
	robj = gem_to_radeon_bo(gobj);
252
	robj = gem_to_radeon_bo(gobj);
244
	*offset_p = radeon_bo_mmap_offset(robj);
253
	*offset_p = radeon_bo_mmap_offset(robj);
245
	drm_gem_object_unreference_unlocked(gobj);
254
	drm_gem_object_unreference_unlocked(gobj);
Line 249... Line 258...
249
int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
258
int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
250
			  struct drm_file *filp)
259
			  struct drm_file *filp)
251
{
260
{
252
	struct drm_radeon_gem_mmap *args = data;
261
	struct drm_radeon_gem_mmap *args = data;
Line 253... Line 262...
253
 
262
 
-
 
263
	return radeon_mode_mmap(filp, dev, args->handle, false,
254
	return radeon_mode_dumb_mmap(filp, dev, args->handle, &args->addr_ptr);
264
				&args->addr_ptr);
Line 255... Line 265...
255
}
265
}
256
 
266
 
257
int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
267
int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
Line 281... Line 291...
281
{
291
{
282
	struct radeon_device *rdev = dev->dev_private;
292
	struct radeon_device *rdev = dev->dev_private;
283
	struct drm_radeon_gem_wait_idle *args = data;
293
	struct drm_radeon_gem_wait_idle *args = data;
284
	struct drm_gem_object *gobj;
294
	struct drm_gem_object *gobj;
285
	struct radeon_bo *robj;
295
	struct radeon_bo *robj;
286
	int r;
296
	int r = 0;
287
	uint32_t cur_placement = 0;
297
	uint32_t cur_placement = 0;
-
 
298
	long ret;
Line 288... Line 299...
288
 
299
 
289
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
300
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
290
	if (gobj == NULL) {
301
	if (gobj == NULL) {
291
		return -ENOENT;
302
		return -ENOENT;