Subversion Repositories Kolibri OS

Rev

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

Rev 2344 Rev 2351
Line 27... Line 27...
27
 
27
 
28
#include "drmP.h"
28
#include "drmP.h"
29
#include "drm.h"
29
#include "drm.h"
30
#include "i915_drm.h"
30
#include "i915_drm.h"
31
#include "i915_drv.h"
31
#include "i915_drv.h"
32
//#include "i915_trace.h"
32
#include "i915_trace.h"
33
#include "intel_drv.h"
33
#include "intel_drv.h"
34
//#include 
34
//#include 
35
#include 
35
#include 
36
//#include 
36
//#include 
Line 234... Line 234...
234
	i915_gem_do_init(dev, args->gtt_start, args->gtt_end, args->gtt_end);
234
	i915_gem_do_init(dev, args->gtt_start, args->gtt_end, args->gtt_end);
235
	mutex_unlock(&dev->struct_mutex);
235
	mutex_unlock(&dev->struct_mutex);
Line 236... Line 236...
236
 
236
 
237
	return 0;
237
	return 0;
-
 
238
}
Line 238... Line 239...
238
}
239
#endif
239
 
240
 
240
int
241
int
241
i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
242
i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
242
			    struct drm_file *file)
243
			    struct drm_file *file)
243
{
244
{
244
	struct drm_i915_private *dev_priv = dev->dev_private;
245
	struct drm_i915_private *dev_priv = dev->dev_private;
245
	struct drm_i915_gem_get_aperture *args = data;
246
	struct drm_i915_gem_get_aperture *args = data;
Line 246... Line -...
246
	struct drm_i915_gem_object *obj;
-
 
247
	size_t pinned;
-
 
Line 248... Line 247...
248
 
247
	struct drm_i915_gem_object *obj;
249
	if (!(dev->driver->driver_features & DRIVER_GEM))
248
	size_t pinned;
250
		return -ENODEV;
249
 
251
 
250
 
Line 259... Line 258...
259
	args->aper_available_size = args->aper_size - pinned;
258
	args->aper_available_size = args->aper_size - pinned;
Line 260... Line 259...
260
 
259
 
261
	return 0;
260
	return 0;
Line 262... Line 261...
262
}
261
}
-
 
262
 
263
 
263
#if 0
264
static int
264
 
265
i915_gem_create(struct drm_file *file,
265
int i915_gem_create(struct drm_file *file,
266
		struct drm_device *dev,
266
		struct drm_device *dev,
267
		uint64_t size,
267
		uint64_t size,
268
		uint32_t *handle_p)
268
		uint32_t *handle_p)
Line 288... Line 288...
288
		return ret;
288
		return ret;
289
	}
289
	}
Line 290... Line 290...
290
 
290
 
291
	/* drop reference from allocate - handle holds it now */
291
	/* drop reference from allocate - handle holds it now */
-
 
292
	drm_gem_object_unreference(&obj->base);
Line 292... Line 293...
292
	drm_gem_object_unreference(&obj->base);
293
	trace_i915_gem_object_create(obj);
293
 
294
 
294
	*handle_p = handle;
295
	*handle_p = handle;
Line 743... Line -...
743
 
-
 
744
 
-
 
745
 
744
 
746
 
745
 
747
 
746
 
748
 
747
 
749
 
748
 
Line 792... Line 791...
792
i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
791
i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
793
{
792
{
794
	int page_count = obj->base.size / PAGE_SIZE;
793
	int page_count = obj->base.size / PAGE_SIZE;
795
	int i;
794
	int i;
Line 796... Line -...
796
 
-
 
797
    ENTER();
-
 
798
 
795
 
Line 799... Line 796...
799
	BUG_ON(obj->madv == __I915_MADV_PURGED);
796
	BUG_ON(obj->madv == __I915_MADV_PURGED);
800
 
797
 
Line 809... Line 806...
809
	}
806
	}
810
	obj->dirty = 0;
807
	obj->dirty = 0;
Line 811... Line 808...
811
 
808
 
812
    free(obj->pages);
809
    free(obj->pages);
813
	obj->pages = NULL;
-
 
814
 
-
 
815
    LEAVE();
810
	obj->pages = NULL;
Line 816... Line 811...
816
}
811
}
817
 
812
 
818
void
813
void
Line 992... Line 987...
992
	if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
987
	if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
993
		return;
988
		return;
Line 994... Line 989...
994
 
989
 
995
	old_read_domains = obj->base.read_domains;
990
	old_read_domains = obj->base.read_domains;
-
 
991
	old_write_domain = obj->base.write_domain;
996
	old_write_domain = obj->base.write_domain;
992
 
997
	obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT;
993
	obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT;
Line -... Line 994...
-
 
994
	obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT;
-
 
995
 
-
 
996
	trace_i915_gem_object_change_domain(obj,
998
	obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT;
997
					    old_read_domains,
Line 999... Line 998...
999
 
998
					    old_write_domain);
1000
}
999
}
1001
 
1000
 
1002
/**
1001
/**
1003
 * Unbinds an object from the GTT aperture.
1002
 * Unbinds an object from the GTT aperture.
1004
 */
1003
 */
1005
int
1004
int
Line 1006... Line -...
1006
i915_gem_object_unbind(struct drm_i915_gem_object *obj)
-
 
1007
{
1005
i915_gem_object_unbind(struct drm_i915_gem_object *obj)
1008
	int ret = 0;
1006
{
Line 1009... Line 1007...
1009
 
1007
	int ret = 0;
1010
    ENTER();
1008
 
Line 1045... Line 1043...
1045
	/* release the fence reg _after_ flushing */
1043
	/* release the fence reg _after_ flushing */
1046
	ret = i915_gem_object_put_fence(obj);
1044
	ret = i915_gem_object_put_fence(obj);
1047
	if (ret == -ERESTARTSYS)
1045
	if (ret == -ERESTARTSYS)
1048
		return ret;
1046
		return ret;
Line -... Line 1047...
-
 
1047
 
Line 1049... Line 1048...
1049
 
1048
	trace_i915_gem_object_unbind(obj);
1050
 
1049
 
Line 1051... Line 1050...
1051
	i915_gem_gtt_unbind_object(obj);
1050
	i915_gem_gtt_unbind_object(obj);
Line 1061... Line 1060...
1061
	obj->gtt_offset = 0;
1060
	obj->gtt_offset = 0;
Line 1062... Line 1061...
1062
 
1061
 
1063
	if (i915_gem_object_is_purgeable(obj))
1062
	if (i915_gem_object_is_purgeable(obj))
Line 1064... Line -...
1064
		i915_gem_object_truncate(obj);
-
 
1065
 
1063
		i915_gem_object_truncate(obj);
1066
    LEAVE();
1064
 
Line 1067... Line 1065...
1067
	return ret;
1065
	return ret;
1068
}
1066
}
Line 1075... Line 1073...
1075
	int ret;
1073
	int ret;
Line 1076... Line 1074...
1076
 
1074
 
1077
	if (((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) == 0)
1075
	if (((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) == 0)
Line -... Line 1076...
-
 
1076
		return 0;
Line 1078... Line 1077...
1078
		return 0;
1077
 
1079
 
1078
	trace_i915_gem_ring_flush(ring, invalidate_domains, flush_domains);
1080
 
1079
 
Line 1237... Line -...
1237
 
-
 
1238
 
-
 
1239
 
-
 
1240
 
1236
 
1241
 
1237
 
1242
 
1238
 
1243
 
1239
 
1244
 
1240
 
Line 1421... Line 1417...
1421
	mappable =
1417
	mappable =
1422
		obj->gtt_offset + obj->base.size <= dev_priv->mm.gtt_mappable_end;
1418
		obj->gtt_offset + obj->base.size <= dev_priv->mm.gtt_mappable_end;
Line 1423... Line 1419...
1423
 
1419
 
Line -... Line 1420...
-
 
1420
	obj->map_and_fenceable = mappable && fenceable;
1424
	obj->map_and_fenceable = mappable && fenceable;
1421
 
1425
 
1422
	trace_i915_gem_object_bind(obj, map_and_fenceable);
Line 1426... Line 1423...
1426
	return 0;
1423
	return 0;
1427
}
1424
}
Line 1526... Line 1523...
1526
	wmb();
1523
	wmb();
Line 1527... Line 1524...
1527
 
1524
 
1528
	old_write_domain = obj->base.write_domain;
1525
	old_write_domain = obj->base.write_domain;
Line -... Line 1526...
-
 
1526
	obj->base.write_domain = 0;
-
 
1527
 
-
 
1528
	trace_i915_gem_object_change_domain(obj,
1529
	obj->base.write_domain = 0;
1529
					    obj->base.read_domains,
Line 1530... Line 1530...
1530
 
1530
					    old_write_domain);
1531
}
1531
}
1532
 
1532
 
Line 1542... Line 1542...
1542
	i915_gem_clflush_object(obj);
1542
	i915_gem_clflush_object(obj);
1543
	intel_gtt_chipset_flush();
1543
	intel_gtt_chipset_flush();
1544
	old_write_domain = obj->base.write_domain;
1544
	old_write_domain = obj->base.write_domain;
1545
	obj->base.write_domain = 0;
1545
	obj->base.write_domain = 0;
Line -... Line 1546...
-
 
1546
 
-
 
1547
	trace_i915_gem_object_change_domain(obj,
-
 
1548
					    obj->base.read_domains,
1546
 
1549
					    old_write_domain);
Line 1547... Line 1550...
1547
}
1550
}
1548
 
1551
 
1549
/**
1552
/**
Line 1589... Line 1592...
1589
		obj->base.read_domains = I915_GEM_DOMAIN_GTT;
1592
		obj->base.read_domains = I915_GEM_DOMAIN_GTT;
1590
		obj->base.write_domain = I915_GEM_DOMAIN_GTT;
1593
		obj->base.write_domain = I915_GEM_DOMAIN_GTT;
1591
		obj->dirty = 1;
1594
		obj->dirty = 1;
1592
	}
1595
	}
Line -... Line 1596...
-
 
1596
 
-
 
1597
	trace_i915_gem_object_change_domain(obj,
-
 
1598
					    old_read_domains,
-
 
1599
					    old_write_domain);
1593
 
1600
 
1594
	return 0;
1601
	return 0;
Line 1595... Line 1602...
1595
}
1602
}
1596
 
1603
 
Line 1644... Line 1651...
1644
		old_write_domain = obj->base.write_domain;
1651
		old_write_domain = obj->base.write_domain;
Line 1645... Line 1652...
1645
 
1652
 
1646
		obj->base.read_domains = I915_GEM_DOMAIN_CPU;
1653
		obj->base.read_domains = I915_GEM_DOMAIN_CPU;
Line -... Line 1654...
-
 
1654
		obj->base.write_domain = I915_GEM_DOMAIN_CPU;
-
 
1655
 
-
 
1656
		trace_i915_gem_object_change_domain(obj,
1647
		obj->base.write_domain = I915_GEM_DOMAIN_CPU;
1657
						    old_read_domains,
Line 1648... Line 1658...
1648
 
1658
						    old_write_domain);
1649
    }
1659
    }
1650
 
1660
 
Line 1711... Line 1721...
1711
	 * the domain values for our changes.
1721
	 * the domain values for our changes.
1712
	 */
1722
	 */
1713
	BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
1723
	BUG_ON((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) != 0);
1714
	obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
1724
	obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
Line -... Line 1725...
-
 
1725
 
-
 
1726
	trace_i915_gem_object_change_domain(obj,
-
 
1727
					    old_read_domains,
Line 1715... Line 1728...
1715
 
1728
					    old_write_domain);
1716
 
1729
 
Line 1717... Line 1730...
1717
	return 0;
1730
	return 0;
Line 1788... Line 1801...
1788
	if (write) {
1801
	if (write) {
1789
		obj->base.read_domains = I915_GEM_DOMAIN_CPU;
1802
		obj->base.read_domains = I915_GEM_DOMAIN_CPU;
1790
		obj->base.write_domain = I915_GEM_DOMAIN_CPU;
1803
		obj->base.write_domain = I915_GEM_DOMAIN_CPU;
1791
	}
1804
	}
Line -... Line 1805...
-
 
1805
 
-
 
1806
	trace_i915_gem_object_change_domain(obj,
-
 
1807
					    old_read_domains,
Line 1792... Line 1808...
1792
 
1808
					    old_write_domain);
1793
 
1809
 
Line 1794... Line 1810...
1794
	return 0;
1810
	return 0;
Line 1931... Line -...
1931
 
-
 
1932
 
-
 
1933
 
1947
 
1934
 
1948
 
1935
 
1949
 
1936
 
1950
 
1937
 
1951
 
Line 1998... Line 2012...
1998
{
2012
{
1999
	struct drm_device *dev = obj->base.dev;
2013
	struct drm_device *dev = obj->base.dev;
2000
	drm_i915_private_t *dev_priv = dev->dev_private;
2014
	drm_i915_private_t *dev_priv = dev->dev_private;
2001
	int ret;
2015
	int ret;
Line 2002... Line -...
2002
 
-
 
2003
    ENTER();
-
 
2004
 
2016
 
2005
	ret = i915_gem_object_unbind(obj);
2017
	ret = i915_gem_object_unbind(obj);
2006
	if (ret == -ERESTARTSYS) {
2018
	if (ret == -ERESTARTSYS) {
2007
		list_move(&obj->mm_list,
2019
		list_move(&obj->mm_list,
2008
			  &dev_priv->mm.deferred_free_list);
2020
			  &dev_priv->mm.deferred_free_list);
2009
		return;
2021
		return;
Line -... Line 2022...
-
 
2022
	}
Line 2010... Line 2023...
2010
	}
2023
 
2011
 
2024
	trace_i915_gem_object_destroy(obj);
Line 2012... Line 2025...
2012
 
2025
 
2013
//	if (obj->base.map_list.map)
2026
//	if (obj->base.map_list.map)
Line 2014... Line 2027...
2014
//		drm_gem_free_mmap_offset(&obj->base);
2027
//		drm_gem_free_mmap_offset(&obj->base);
2015
 
2028
 
2016
	drm_gem_object_release(&obj->base);
2029
	drm_gem_object_release(&obj->base);
2017
	i915_gem_info_remove_obj(dev_priv, obj->base.size);
-
 
2018
 
2030
	i915_gem_info_remove_obj(dev_priv, obj->base.size);
Line 2019... Line 2031...
2019
	kfree(obj->page_cpu_valid);
2031
 
2020
	kfree(obj->bit_17);
2032
	kfree(obj->page_cpu_valid);
2021
	kfree(obj);
2033
	kfree(obj->bit_17);
2022
    LEAVE();
2034
	kfree(obj);
Line 2023... Line -...
2023
}
-
 
2024
 
2035
}
2025
void i915_gem_free_object(struct drm_gem_object *gem_obj)
2036
 
Line 2026... Line 2037...
2026
{
2037
void i915_gem_free_object(struct drm_gem_object *gem_obj)
2027
	struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
2038
{
Line 2028... Line 2039...
2028
	struct drm_device *dev = obj->base.dev;
2039
	struct drm_i915_gem_object *obj = to_intel_bo(gem_obj);
2029
 
-
 
2030
    ENTER();
2040
	struct drm_device *dev = obj->base.dev;
Line 2052... Line 2062...
2052
int
2062
int
2053
i915_gem_init_ringbuffer(struct drm_device *dev)
2063
i915_gem_init_ringbuffer(struct drm_device *dev)
2054
{
2064
{
2055
	drm_i915_private_t *dev_priv = dev->dev_private;
2065
	drm_i915_private_t *dev_priv = dev->dev_private;
2056
	int ret;
2066
	int ret;
2057
    ENTER();
2067
 
2058
	ret = intel_init_render_ring_buffer(dev);
2068
	ret = intel_init_render_ring_buffer(dev);
2059
	if (ret)
2069
	if (ret)
2060
		return ret;
2070
		return ret;
Line 2061... Line 2071...
2061
 
2071
 
Line 2070... Line 2080...
2070
		if (ret)
2080
		if (ret)
2071
			goto cleanup_bsd_ring;
2081
			goto cleanup_bsd_ring;
2072
	}
2082
	}
Line 2073... Line 2083...
2073
 
2083
 
2074
	dev_priv->next_seqno = 1;
2084
	dev_priv->next_seqno = 1;
2075
    LEAVE();
2085
 
Line 2076... Line 2086...
2076
	return 0;
2086
	return 0;
2077
 
2087
 
2078
cleanup_bsd_ring:
2088
cleanup_bsd_ring: