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; |