Subversion Repositories Kolibri OS

Rev

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

Rev 1404 Rev 1963
Line 62... Line 62...
62
	}
62
	}
63
	/* At least align on page size */
63
	/* At least align on page size */
64
	if (alignment < PAGE_SIZE) {
64
	if (alignment < PAGE_SIZE) {
65
		alignment = PAGE_SIZE;
65
		alignment = PAGE_SIZE;
66
	}
66
	}
67
    r = radeon_fb_bo_create(rdev, gobj, size, kernel, initial_domain, &robj);
67
	r = radeon_bo_create(rdev, gobj, size, alignment, kernel, initial_domain, &robj);
68
	if (r) {
68
	if (r) {
69
		DRM_ERROR("Failed to allocate GEM object (%d, %d, %u)\n",
69
		DRM_ERROR("Failed to allocate GEM object (%d, %d, %u)\n",
70
			  size, initial_domain, alignment);
70
			  size, initial_domain, alignment);
71
        return r;
71
        return r;
72
	}
72
	}
Line 151... Line 151...
151
{
151
{
152
	struct radeon_device *rdev = dev->dev_private;
152
	struct radeon_device *rdev = dev->dev_private;
153
	struct drm_radeon_gem_info *args = data;
153
	struct drm_radeon_gem_info *args = data;
Line 154... Line 154...
154
 
154
 
155
	args->vram_size = rdev->mc.real_vram_size;
155
	args->vram_size = rdev->mc.real_vram_size;
-
 
156
	args->vram_visible = rdev->mc.real_vram_size;
-
 
157
	if (rdev->stollen_vga_memory)
156
	/* FIXME: report somethings that makes sense */
158
		args->vram_visible -= radeon_bo_size(rdev->stollen_vga_memory);
157
	args->vram_visible = rdev->mc.real_vram_size - (4 * 1024 * 1024);
159
	args->vram_visible -= radeon_fbdev_total_size(rdev);
-
 
160
	args->gart_size = rdev->mc.gtt_size - rdev->cp.ring_size - 4096 -
158
	args->gart_size = rdev->mc.gtt_size;
161
		RADEON_IB_POOL_SIZE*64*1024;
159
	return 0;
162
	return 0;
Line 160... Line 163...
160
}
163
}
161
 
164
 
Line 191... Line 194...
191
					false, &gobj);
194
					false, &gobj);
192
	if (r) {
195
	if (r) {
193
		return r;
196
		return r;
194
	}
197
	}
195
	r = drm_gem_handle_create(filp, gobj, &handle);
198
	r = drm_gem_handle_create(filp, gobj, &handle);
-
 
199
	/* drop reference from allocate - handle holds it now */
-
 
200
	drm_gem_object_unreference_unlocked(gobj);
196
	if (r) {
201
	if (r) {
197
		mutex_lock(&dev->struct_mutex);
-
 
198
		drm_gem_object_unreference(gobj);
-
 
199
		mutex_unlock(&dev->struct_mutex);
-
 
200
		return r;
202
		return r;
201
	}
203
	}
202
	mutex_lock(&dev->struct_mutex);
-
 
203
	drm_gem_object_handle_unreference(gobj);
-
 
204
	mutex_unlock(&dev->struct_mutex);
-
 
205
	args->handle = handle;
204
	args->handle = handle;
206
	return 0;
205
	return 0;
207
}
206
}
Line 208... Line 207...
208
 
207
 
Line 220... Line 219...
220
	 * just make sure the buffer is finished with */
219
	 * just make sure the buffer is finished with */
Line 221... Line 220...
221
 
220
 
222
	/* just do a BO wait for now */
221
	/* just do a BO wait for now */
223
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
222
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
224
	if (gobj == NULL) {
223
	if (gobj == NULL) {
225
		return -EINVAL;
224
		return -ENOENT;
226
	}
225
	}
Line 227... Line 226...
227
	robj = gobj->driver_private;
226
	robj = gobj->driver_private;
Line 228... Line -...
228
 
-
 
229
	r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain);
227
 
230
 
-
 
231
	mutex_lock(&dev->struct_mutex);
228
	r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain);
232
	drm_gem_object_unreference(gobj);
229
 
Line 233... Line 230...
233
	mutex_unlock(&dev->struct_mutex);
230
	drm_gem_object_unreference_unlocked(gobj);
234
	return r;
231
	return r;
Line 241... Line 238...
241
	struct drm_gem_object *gobj;
238
	struct drm_gem_object *gobj;
242
	struct radeon_bo *robj;
239
	struct radeon_bo *robj;
Line 243... Line 240...
243
 
240
 
244
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
241
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
245
	if (gobj == NULL) {
242
	if (gobj == NULL) {
246
		return -EINVAL;
243
		return -ENOENT;
247
	}
244
	}
248
	robj = gobj->driver_private;
245
	robj = gobj->driver_private;
249
	args->addr_ptr = radeon_bo_mmap_offset(robj);
-
 
250
	mutex_lock(&dev->struct_mutex);
246
	args->addr_ptr = radeon_bo_mmap_offset(robj);
251
	drm_gem_object_unreference(gobj);
-
 
252
	mutex_unlock(&dev->struct_mutex);
247
	drm_gem_object_unreference_unlocked(gobj);
253
	return 0;
248
	return 0;
Line 254... Line 249...
254
}
249
}
255
 
250
 
Line 262... Line 257...
262
	int r;
257
	int r;
263
	uint32_t cur_placement = 0;
258
	uint32_t cur_placement = 0;
Line 264... Line 259...
264
 
259
 
265
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
260
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
266
	if (gobj == NULL) {
261
	if (gobj == NULL) {
267
		return -EINVAL;
262
		return -ENOENT;
268
	}
263
	}
269
	robj = gobj->driver_private;
264
	robj = gobj->driver_private;
270
	r = radeon_bo_wait(robj, &cur_placement, true);
265
	r = radeon_bo_wait(robj, &cur_placement, true);
271
	switch (cur_placement) {
266
	switch (cur_placement) {
Line 278... Line 273...
278
	case TTM_PL_SYSTEM:
273
	case TTM_PL_SYSTEM:
279
		args->domain = RADEON_GEM_DOMAIN_CPU;
274
		args->domain = RADEON_GEM_DOMAIN_CPU;
280
	default:
275
	default:
281
		break;
276
		break;
282
	}
277
	}
283
	mutex_lock(&dev->struct_mutex);
-
 
284
	drm_gem_object_unreference(gobj);
278
	drm_gem_object_unreference_unlocked(gobj);
285
	mutex_unlock(&dev->struct_mutex);
-
 
286
	return r;
279
	return r;
287
}
280
}
Line 288... Line 281...
288
 
281
 
289
int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
282
int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
Line 294... Line 287...
294
	struct radeon_bo *robj;
287
	struct radeon_bo *robj;
295
	int r;
288
	int r;
Line 296... Line 289...
296
 
289
 
297
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
290
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
298
	if (gobj == NULL) {
291
	if (gobj == NULL) {
299
		return -EINVAL;
292
		return -ENOENT;
300
	}
293
	}
301
	robj = gobj->driver_private;
294
	robj = gobj->driver_private;
302
	r = radeon_bo_wait(robj, NULL, false);
295
	r = radeon_bo_wait(robj, NULL, false);
303
	/* callback hw specific functions if any */
296
	/* callback hw specific functions if any */
304
	if (robj->rdev->asic->ioctl_wait_idle)
297
	if (robj->rdev->asic->ioctl_wait_idle)
305
		robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj);
-
 
306
	mutex_lock(&dev->struct_mutex);
298
		robj->rdev->asic->ioctl_wait_idle(robj->rdev, robj);
307
	drm_gem_object_unreference(gobj);
-
 
308
	mutex_unlock(&dev->struct_mutex);
299
	drm_gem_object_unreference_unlocked(gobj);
309
	return r;
300
	return r;
Line 310... Line 301...
310
}
301
}
311
 
302
 
Line 318... Line 309...
318
	int r = 0;
309
	int r = 0;
Line 319... Line 310...
319
 
310
 
320
	DRM_DEBUG("%d \n", args->handle);
311
	DRM_DEBUG("%d \n", args->handle);
321
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
312
	gobj = drm_gem_object_lookup(dev, filp, args->handle);
322
	if (gobj == NULL)
313
	if (gobj == NULL)
323
		return -EINVAL;
314
		return -ENOENT;
324
	robj = gobj->driver_private;
315
	robj = gobj->driver_private;
325
	r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch);
-
 
326
	mutex_lock(&dev->struct_mutex);
316
	r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch);
327
	drm_gem_object_unreference(gobj);
-
 
328
	mutex_unlock(&dev->struct_mutex);
317
	drm_gem_object_unreference_unlocked(gobj);
329
	return r;
318
	return r;
Line 330... Line 319...
330
}
319
}