Subversion Repositories Kolibri OS

Rev

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

Rev 4389 Rev 4392
Line 41... Line 41...
41
 
41
 
42
#define PROT_READ       0x1             /* page can be read */
42
#define PROT_READ       0x1             /* page can be read */
43
#define PROT_WRITE      0x2             /* page can be written */
43
#define PROT_WRITE      0x2             /* page can be written */
Line 44... Line -...
44
#define MAP_SHARED      0x01            /* Share changes */
-
 
45
 
-
 
46
#undef mb
-
 
47
#undef rmb
-
 
48
#undef wmb
-
 
49
#define mb() asm volatile("mfence")
-
 
Line 50... Line 44...
50
#define rmb() asm volatile ("lfence")
44
#define MAP_SHARED      0x01            /* Share changes */
Line 51... Line 45...
51
#define wmb() asm volatile ("sfence")
45
 
52
 
46
 
Line 64... Line 58...
64
#define MAX_ERRNO       4095
58
#define MAX_ERRNO       4095
Line 65... Line 59...
65
 
59
 
Line 66... Line -...
66
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
-
 
67
 
-
 
68
 
-
 
69
#define I915_EXEC_CONSTANTS_MASK        (3<<6)
-
 
Line 70... Line 60...
70
#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
60
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
71
#define I915_EXEC_CONSTANTS_ABSOLUTE    (1<<6)
61
 
72
#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
62
 
73
 
63
 
Line 909... Line 899...
909
	int ret;
899
	int ret;
Line 910... Line 900...
910
 
900
 
911
	if (args->size == 0)
901
	if (args->size == 0)
Line 912... Line -...
912
		return 0;
-
 
913
 
-
 
914
     if(args->handle == -2)
-
 
915
     {
-
 
916
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
Line 917... Line 902...
917
        return 0;
902
		return 0;
918
     }
903
 
919
 
904
 
Line 1232... Line 1217...
1232
	struct drm_i915_gem_object *obj;
1217
	struct drm_i915_gem_object *obj;
1233
	uint32_t read_domains = args->read_domains;
1218
	uint32_t read_domains = args->read_domains;
1234
	uint32_t write_domain = args->write_domain;
1219
	uint32_t write_domain = args->write_domain;
1235
	int ret;
1220
	int ret;
Line 1236... Line -...
1236
 
-
 
1237
 
-
 
1238
     if(args->handle == -2)
-
 
1239
     {
-
 
1240
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
1241
        return 0;
-
 
1242
     }
-
 
1243
 
1221
 
1244
	/* Only handle setting domains to types used by the CPU. */
1222
	/* Only handle setting domains to types used by the CPU. */
1245
	if (write_domain & I915_GEM_GPU_DOMAINS)
1223
	if (write_domain & I915_GEM_GPU_DOMAINS)
Line 1246... Line 1224...
1246
		return -EINVAL;
1224
		return -EINVAL;
Line 1301... Line 1279...
1301
{
1279
{
1302
	struct drm_i915_gem_sw_finish *args = data;
1280
	struct drm_i915_gem_sw_finish *args = data;
1303
	struct drm_i915_gem_object *obj;
1281
	struct drm_i915_gem_object *obj;
1304
	int ret = 0;
1282
	int ret = 0;
Line 1305... Line -...
1305
 
-
 
1306
    if(args->handle == -2)
-
 
1307
    {
-
 
1308
       printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
1309
       return 0;
-
 
1310
    }
-
 
1311
 
1283
 
1312
	ret = i915_mutex_lock_interruptible(dev);
1284
	ret = i915_mutex_lock_interruptible(dev);
1313
	if (ret)
1285
	if (ret)
Line 1314... Line 1286...
1314
		return ret;
1286
		return ret;
Line 1340... Line 1312...
1340
i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1312
i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1341
		    struct drm_file *file)
1313
		    struct drm_file *file)
1342
{
1314
{
1343
	struct drm_i915_gem_mmap *args = data;
1315
	struct drm_i915_gem_mmap *args = data;
1344
	struct drm_gem_object *obj;
1316
	struct drm_gem_object *obj;
1345
	unsigned long addr = 0;
1317
	unsigned long addr;
1346
 
-
 
1347
     if(args->handle == -2)
-
 
1348
     {
-
 
1349
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
1350
        return 0;
-
 
1351
     }
-
 
Line 1352... Line 1318...
1352
 
1318
 
1353
	obj = drm_gem_object_lookup(dev, file, args->handle);
1319
	obj = drm_gem_object_lookup(dev, file, args->handle);
1354
	if (obj == NULL)
1320
	if (obj == NULL)
Line 1455... Line 1421...
1455
	 * fence register that can contain the object.
1421
	 * fence register that can contain the object.
1456
	 */
1422
	 */
1457
	return i915_gem_get_gtt_size(dev, size, tiling_mode);
1423
	return i915_gem_get_gtt_size(dev, size, tiling_mode);
1458
}
1424
}
Line 1459... Line -...
1459
 
-
 
1460
/**
-
 
1461
 * i915_gem_get_unfenced_gtt_alignment - return required GTT alignment for an
-
 
1462
 *					 unfenced object
-
 
1463
 * @dev: the device
-
 
1464
 * @size: size of the object
-
 
1465
 * @tiling_mode: tiling mode of the object
-
 
1466
 *
-
 
1467
 * Return the required GTT alignment for an object, only taking into account
-
 
1468
 * unfenced tiled surface requirements.
-
 
1469
 */
-
 
1470
uint32_t
-
 
1471
i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
-
 
1472
				    uint32_t size,
-
 
1473
				    int tiling_mode)
-
 
1474
{
-
 
1475
	/*
-
 
1476
	 * Minimum alignment is 4k (GTT page size) for sane hw.
-
 
1477
	 */
-
 
1478
	if (INTEL_INFO(dev)->gen >= 4 || IS_G33(dev) ||
-
 
1479
	    tiling_mode == I915_TILING_NONE)
-
 
Line 1480... Line -...
1480
		return 4096;
-
 
1481
 
-
 
1482
	/* Previous hardware however needs to be aligned to a power-of-two
-
 
1483
	 * tile height. The simplest method for determining this is to reuse
-
 
1484
	 * the power-of-tile object size.
-
 
1485
	 */
-
 
Line 1486... Line 1425...
1486
	return i915_gem_get_gtt_size(dev, size, tiling_mode);
1425
 
1487
}
1426
 
1488
 
1427
 
1489
int
1428
int
Line 1766... Line 1705...
1766
	int ret;
1705
	int ret;
Line 1767... Line 1706...
1767
 
1706
 
1768
	if (obj->pages)
1707
	if (obj->pages)
Line -... Line 1708...
-
 
1708
		return 0;
-
 
1709
 
-
 
1710
	if (obj->madv != I915_MADV_WILLNEED) {
-
 
1711
		DRM_ERROR("Attempting to obtain a purgeable object\n");
-
 
1712
		return -EINVAL;
1769
		return 0;
1713
	}
Line 1770... Line 1714...
1770
 
1714
 
1771
	BUG_ON(obj->pages_pin_count);
1715
	BUG_ON(obj->pages_pin_count);
1772
 
1716
 
Line 2380... Line 2324...
2380
 
2324
 
2381
	ret = i915_mutex_lock_interruptible(dev);
2325
	ret = i915_mutex_lock_interruptible(dev);
2382
	if (ret)
2326
	if (ret)
Line 2383... Line -...
2383
		return ret;
-
 
2384
 
-
 
2385
    if(args->bo_handle == -2)
-
 
2386
    {
-
 
2387
        obj = get_fb_obj();
-
 
2388
        drm_gem_object_reference(&obj->base);
-
 
2389
    }
2327
		return ret;
2390
    else
2328
 
2391
	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->bo_handle));
2329
	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->bo_handle));
2392
	if (&obj->base == NULL) {
2330
	if (&obj->base == NULL) {
2393
		mutex_unlock(&dev->struct_mutex);
2331
		mutex_unlock(&dev->struct_mutex);
Line 3348... Line 3286...
3348
{
3286
{
3349
	struct drm_i915_gem_caching *args = data;
3287
	struct drm_i915_gem_caching *args = data;
3350
	struct drm_i915_gem_object *obj;
3288
	struct drm_i915_gem_object *obj;
3351
	int ret;
3289
	int ret;
Line 3352... Line -...
3352
 
-
 
3353
     if(args->handle == -2)
-
 
3354
     {
-
 
3355
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
3356
        return 0;
-
 
3357
     }
-
 
3358
 
3290
 
3359
	ret = i915_mutex_lock_interruptible(dev);
3291
	ret = i915_mutex_lock_interruptible(dev);
3360
	if (ret)
3292
	if (ret)
Line 3361... Line 3293...
3361
		return ret;
3293
		return ret;
Line 3393... Line 3325...
3393
	struct drm_i915_gem_caching *args = data;
3325
	struct drm_i915_gem_caching *args = data;
3394
	struct drm_i915_gem_object *obj;
3326
	struct drm_i915_gem_object *obj;
3395
	enum i915_cache_level level;
3327
	enum i915_cache_level level;
3396
	int ret;
3328
	int ret;
Line 3397... Line -...
3397
 
-
 
3398
     if(args->handle == -2)
-
 
3399
     {
-
 
3400
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
3401
        return 0;
-
 
3402
     }
-
 
3403
 
3329
 
3404
	switch (args->caching) {
3330
	switch (args->caching) {
3405
	case I915_CACHING_NONE:
3331
	case I915_CACHING_NONE:
3406
		level = I915_CACHE_NONE;
3332
		level = I915_CACHE_NONE;
3407
		break;
3333
		break;
Line 3715... Line 3641...
3715
{
3641
{
3716
	struct drm_i915_gem_pin *args = data;
3642
	struct drm_i915_gem_pin *args = data;
3717
	struct drm_i915_gem_object *obj;
3643
	struct drm_i915_gem_object *obj;
3718
	int ret;
3644
	int ret;
Line 3719... Line -...
3719
 
-
 
3720
     if(args->handle == -2)
-
 
3721
     {
-
 
3722
        printf("%s handle %d\n", __FUNCTION__, args->handle);
-
 
3723
        return 0;
-
 
3724
     }
-
 
3725
 
3645
 
3726
	ret = i915_mutex_lock_interruptible(dev);
3646
	ret = i915_mutex_lock_interruptible(dev);
3727
	if (ret)
3647
	if (ret)
Line 3728... Line 3648...
3728
		return ret;
3648
		return ret;
Line 3773... Line 3693...
3773
 
3693
 
3774
	ret = i915_mutex_lock_interruptible(dev);
3694
	ret = i915_mutex_lock_interruptible(dev);
3775
	if (ret)
3695
	if (ret)
Line 3776... Line -...
3776
		return ret;
-
 
3777
 
-
 
3778
    if(args->handle == -2)
-
 
3779
    {
-
 
3780
        obj = get_fb_obj();
-
 
3781
        drm_gem_object_reference(&obj->base);
-
 
3782
    }
3696
		return ret;
3783
    else
3697
 
3784
	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
3698
	obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
3785
	if (&obj->base == NULL) {
3699
	if (&obj->base == NULL) {
3786
		ret = -ENOENT;
3700
		ret = -ENOENT;
Line 3816... Line 3730...
3816
 
3730
 
3817
	ret = i915_mutex_lock_interruptible(dev);
3731
	ret = i915_mutex_lock_interruptible(dev);
3818
	if (ret)
3732
	if (ret)
Line 3819... Line -...
3819
		return ret;
-
 
3820
 
-
 
3821
    if(args->handle == -2)
-
 
3822
    {
-
 
3823
        obj = get_fb_obj();
-
 
3824
        drm_gem_object_reference(&obj->base);
-
 
3825
    }
3733
		return ret;
3826
    else
3734
 
3827
        obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
3735
        obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
3828
	if (&obj->base == NULL) {
3736
	if (&obj->base == NULL) {
3829
		ret = -ENOENT;
3737
		ret = -ENOENT;