Subversion Repositories Kolibri OS

Rev

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

Rev 3260 Rev 3263
Line 35... Line 35...
35
//#include 
35
//#include 
36
#include 
36
#include 
Line 37... Line 37...
37
 
37
 
Line -... Line 38...
-
 
38
extern int x86_clflush_size;
-
 
39
 
-
 
40
#define PROT_READ       0x1             /* page can be read */
-
 
41
#define PROT_WRITE      0x2             /* page can be written */
38
extern int x86_clflush_size;
42
#define MAP_SHARED      0x01            /* Share changes */
39
 
43
 
40
#undef mb
44
#undef mb
41
#undef rmb
45
#undef rmb
42
#undef wmb
46
#undef wmb
43
#define mb() asm volatile("mfence")
47
#define mb() asm volatile("mfence")
Line -... Line 48...
-
 
48
#define rmb() asm volatile ("lfence")
-
 
49
#define wmb() asm volatile ("sfence")
-
 
50
 
-
 
51
unsigned long vm_mmap(struct file *file, unsigned long addr,
44
#define rmb() asm volatile ("lfence")
52
         unsigned long len, unsigned long prot,
45
#define wmb() asm volatile ("sfence")
53
         unsigned long flag, unsigned long offset);
46
 
54
 
47
static inline void clflush(volatile void *__p)
55
static inline void clflush(volatile void *__p)
Line 1294... Line 1302...
1294
 
1302
 
1295
	obj = drm_gem_object_lookup(dev, file, args->handle);
1303
	obj = drm_gem_object_lookup(dev, file, args->handle);
1296
	if (obj == NULL)
1304
	if (obj == NULL)
Line 1297... Line 1305...
1297
		return -ENOENT;
1305
		return -ENOENT;
1298
	
1306
	
1299
	dbgprintf("%s offset %lld size %lld not supported\n",
1307
    dbgprintf("%s offset %lld size %lld\n",
1300
				args->offset, args->size);  
1308
                __FUNCTION__, args->offset, args->size);
1301
	/* prime objects have no backing filp to GEM mmap
1309
	/* prime objects have no backing filp to GEM mmap
1302
	 * pages from.
1310
	 * pages from.
1303
	 */
1311
	 */
1304
	if (!obj->filp) {
1312
	if (!obj->filp) {
1305
		drm_gem_object_unreference_unlocked(obj);
1313
		drm_gem_object_unreference_unlocked(obj);
Line 1306... Line 1314...
1306
		return -EINVAL;
1314
		return -EINVAL;
1307
	}
1315
	}
1308
 
1316
 
1309
//	addr = vm_mmap(obj->filp, 0, args->size,
1317
    addr = vm_mmap(obj->filp, 0, args->size,
1310
//		       PROT_READ | PROT_WRITE, MAP_SHARED,
1318
              PROT_READ | PROT_WRITE, MAP_SHARED,
1311
//		       args->offset);
1319
              args->offset);
Line 1312... Line 1320...
1312
	drm_gem_object_unreference_unlocked(obj);
1320
	drm_gem_object_unreference_unlocked(obj);
1313
//	if (IS_ERR((void *)addr))
-
 
Line 1314... Line 1321...
1314
//		return addr;
1321
    if (IS_ERR((void *)addr))
1315
 
1322
        return addr;
Line 1442... Line 1449...
1442
{
1449
{
1443
//	struct inode *inode;
1450
//	struct inode *inode;
Line 1444... Line 1451...
1444
 
1451
 
Line 1445... Line 1452...
1445
//	i915_gem_object_free_mmap_offset(obj);
1452
//	i915_gem_object_free_mmap_offset(obj);
1446
 
1453
 
Line 1447... Line 1454...
1447
//	if (obj->base.filp == NULL)
1454
	if (obj->base.filp == NULL)
1448
//		return;
1455
		return;
1449
 
1456
 
1450
	/* Our goal here is to return as much of the memory as
1457
	/* Our goal here is to return as much of the memory as
Line 1489... Line 1496...
1489
	for_each_sg(obj->pages->sgl, sg, page_count, i) {
1496
	for_each_sg(obj->pages->sgl, sg, page_count, i) {
1490
		struct page *page = sg_page(sg);
1497
		struct page *page = sg_page(sg);
Line 1491... Line 1498...
1491
 
1498
 
1492
 
1499
 
1493
 
1500
 
1494
		page_cache_release(page);
1501
//       page_cache_release(page);
Line 1495... Line 1502...
1495
	}
1502
	}
Line 1782... Line 1789...
1782
    request->emitted_jiffies = GetTimerTicks();
1789
    request->emitted_jiffies = GetTimerTicks();
1783
	was_empty = list_empty(&ring->request_list);
1790
	was_empty = list_empty(&ring->request_list);
1784
	list_add_tail(&request->list, &ring->request_list);
1791
	list_add_tail(&request->list, &ring->request_list);
1785
	request->file_priv = NULL;
1792
	request->file_priv = NULL;
Line -... Line 1793...
-
 
1793
 
-
 
1794
	if (file) {
Line -... Line 1795...
-
 
1795
		struct drm_i915_file_private *file_priv = file->driver_priv;
-
 
1796
 
-
 
1797
		spin_lock(&file_priv->mm.lock);
-
 
1798
		request->file_priv = file_priv;
-
 
1799
		list_add_tail(&request->client_list,
-
 
1800
			      &file_priv->mm.request_list);
-
 
1801
		spin_unlock(&file_priv->mm.lock);
-
 
1802
	}
1786
 
1803
 
Line 1787... Line 1804...
1787
 
1804
	trace_i915_gem_request_add(ring, request->seqno);
1788
	ring->outstanding_lazy_request = 0;
1805
	ring->outstanding_lazy_request = 0;
1789
 
1806
 
Line 1803... Line 1820...
1803
	if (out_seqno)
1820
	if (out_seqno)
1804
		*out_seqno = request->seqno;
1821
		*out_seqno = request->seqno;
1805
	return 0;
1822
	return 0;
1806
}
1823
}
Line -... Line 1824...
-
 
1824
 
-
 
1825
static inline void
-
 
1826
i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
-
 
1827
{
Line -... Line 1828...
-
 
1828
	struct drm_i915_file_private *file_priv = request->file_priv;
-
 
1829
 
Line -... Line 1830...
-
 
1830
	if (!file_priv)
-
 
1831
		return;
-
 
1832
 
-
 
1833
	spin_lock(&file_priv->mm.lock);
-
 
1834
	if (request->file_priv) {
-
 
1835
		list_del(&request->client_list);
-
 
1836
		request->file_priv = NULL;
Line 1807... Line 1837...
1807
 
1837
	}
1808
 
1838
	spin_unlock(&file_priv->mm.lock);
1809
 
1839
}
1810
 
1840
 
Line 1817... Line 1847...
1817
		request = list_first_entry(&ring->request_list,
1847
		request = list_first_entry(&ring->request_list,
1818
					   struct drm_i915_gem_request,
1848
					   struct drm_i915_gem_request,
1819
					   list);
1849
					   list);
Line 1820... Line 1850...
1820
 
1850
 
1821
		list_del(&request->list);
1851
		list_del(&request->list);
1822
//       i915_gem_request_remove_from_client(request);
1852
		i915_gem_request_remove_from_client(request);
1823
		kfree(request);
1853
		kfree(request);
Line 1824... Line 1854...
1824
	}
1854
	}
1825
 
1855
 
Line 1885... Line 1915...
1885
void
1915
void
1886
i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
1916
i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
1887
{
1917
{
1888
	uint32_t seqno;
1918
	uint32_t seqno;
Line -... Line 1919...
-
 
1919
 
-
 
1920
    ENTER();
1889
 
1921
 
1890
	if (list_empty(&ring->request_list))
1922
	if (list_empty(&ring->request_list))
Line 1891... Line 1923...
1891
		return;
1923
		return;
Line 1911... Line 1943...
1911
		 * of the GPU head.
1943
		 * of the GPU head.
1912
		 */
1944
		 */
1913
		ring->last_retired_head = request->tail;
1945
		ring->last_retired_head = request->tail;
Line 1914... Line 1946...
1914
 
1946
 
-
 
1947
		list_del(&request->list);
1915
		list_del(&request->list);
1948
		i915_gem_request_remove_from_client(request);
1916
		kfree(request);
1949
		kfree(request);
Line 1917... Line 1950...
1917
	}
1950
	}
1918
 
1951
 
Line 1937... Line 1970...
1937
		ring->irq_put(ring);
1970
		ring->irq_put(ring);
1938
		ring->trace_irq_seqno = 0;
1971
		ring->trace_irq_seqno = 0;
1939
	}
1972
	}
Line 1940... Line 1973...
1940
 
1973
 
-
 
1974
	WARN_ON(i915_verify_lists(ring->dev));
1941
	WARN_ON(i915_verify_lists(ring->dev));
1975
    LEAVE();
Line 1942... Line 1976...
1942
}
1976
}
1943
 
1977
 
1944
void
1978
void
Line 1959... Line 1993...
1959
	struct drm_device *dev;
1993
	struct drm_device *dev;
1960
	struct intel_ring_buffer *ring;
1994
	struct intel_ring_buffer *ring;
1961
	bool idle;
1995
	bool idle;
1962
	int i;
1996
	int i;
Line -... Line 1997...
-
 
1997
 
-
 
1998
    ENTER();
1963
 
1999
 
1964
	dev_priv = container_of(work, drm_i915_private_t,
2000
	dev_priv = container_of(work, drm_i915_private_t,
1965
				mm.retire_work.work);
2001
				mm.retire_work.work);
Line 1966... Line 2002...
1966
	dev = dev_priv->dev;
2002
	dev = dev_priv->dev;
Line 1988... Line 2024...
1988
       queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ);
2024
       queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ);
1989
	if (idle)
2025
	if (idle)
1990
		intel_mark_idle(dev);
2026
		intel_mark_idle(dev);
Line 1991... Line 2027...
1991
 
2027
 
-
 
2028
	mutex_unlock(&dev->struct_mutex);
-
 
2029
 
1992
	mutex_unlock(&dev->struct_mutex);
2030
    LEAVE();
Line 1993... Line 2031...
1993
}
2031
}
1994
 
2032
 
1995
/**
2033
/**
Line 2125... Line 2163...
2125
i915_gem_object_unbind(struct drm_i915_gem_object *obj)
2163
i915_gem_object_unbind(struct drm_i915_gem_object *obj)
2126
{
2164
{
2127
	drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
2165
	drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
2128
	int ret = 0;
2166
	int ret = 0;
Line -... Line 2167...
-
 
2167
 
-
 
2168
    if(obj == get_fb_obj())
-
 
2169
        return 0;
2129
 
2170
 
2130
	if (obj->gtt_space == NULL)
2171
	if (obj->gtt_space == NULL)
Line 2131... Line 2172...
2131
		return 0;
2172
		return 0;
2132
 
2173
 
Line 3103... Line 3144...
3103
					    old_write_domain);
3144
					    old_write_domain);
Line 3104... Line 3145...
3104
 
3145
 
3105
	return 0;
3146
	return 0;
Line 3106... Line -...
3106
}
-
 
3107
 
3147
}
3108
#if 0
3148
 
3109
/* Throttle our rendering by waiting until the ring has completed our requests
3149
/* Throttle our rendering by waiting until the ring has completed our requests
3110
 * emitted over 20 msec ago.
3150
 * emitted over 20 msec ago.
3111
 *
3151
 *
Line 3119... Line 3159...
3119
static int
3159
static int
3120
i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
3160
i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
3121
{
3161
{
3122
	struct drm_i915_private *dev_priv = dev->dev_private;
3162
	struct drm_i915_private *dev_priv = dev->dev_private;
3123
	struct drm_i915_file_private *file_priv = file->driver_priv;
3163
	struct drm_i915_file_private *file_priv = file->driver_priv;
3124
	unsigned long recent_enough = GetTimerTics() - msecs_to_jiffies(20);
3164
	unsigned long recent_enough = GetTimerTicks() - msecs_to_jiffies(20);
3125
	struct drm_i915_gem_request *request;
3165
	struct drm_i915_gem_request *request;
3126
	struct intel_ring_buffer *ring = NULL;
3166
	struct intel_ring_buffer *ring = NULL;
3127
	u32 seqno = 0;
3167
	u32 seqno = 0;
3128
	int ret;
3168
	int ret;
Line 3147... Line 3187...
3147
	if (ret == 0)
3187
	if (ret == 0)
3148
		queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);
3188
		queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);
Line 3149... Line 3189...
3149
 
3189
 
3150
	return ret;
3190
	return ret;
3151
}
-
 
Line 3152... Line 3191...
3152
#endif
3191
}
3153
 
3192
 
3154
int
3193
int
3155
i915_gem_object_pin(struct drm_i915_gem_object *obj,
3194
i915_gem_object_pin(struct drm_i915_gem_object *obj,
Line 3160... Line 3199...
3160
	int ret;
3199
	int ret;
Line 3161... Line 3200...
3161
 
3200
 
3162
	if (WARN_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
3201
	if (WARN_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
Line 3163... Line -...
3163
		return -EBUSY;
-
 
3164
 
3202
		return -EBUSY;
3165
#if 0
3203
 
3166
	if (obj->gtt_space != NULL) {
3204
	if (obj->gtt_space != NULL) {
3167
		if ((alignment && obj->gtt_offset & (alignment - 1)) ||
3205
		if ((alignment && obj->gtt_offset & (alignment - 1)) ||
3168
		    (map_and_fenceable && !obj->map_and_fenceable)) {
3206
		    (map_and_fenceable && !obj->map_and_fenceable)) {
Line 3176... Line 3214...
3176
			ret = i915_gem_object_unbind(obj);
3214
			ret = i915_gem_object_unbind(obj);
3177
			if (ret)
3215
			if (ret)
3178
				return ret;
3216
				return ret;
3179
		}
3217
		}
3180
	}
3218
	}
3181
#endif
-
 
Line 3182... Line 3219...
3182
 
3219
 
3183
	if (obj->gtt_space == NULL) {
3220
	if (obj->gtt_space == NULL) {
Line 3184... Line 3221...
3184
		struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
3221
		struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
Line 3340... Line 3377...
3340
unlock:
3377
unlock:
3341
	mutex_unlock(&dev->struct_mutex);
3378
	mutex_unlock(&dev->struct_mutex);
3342
	return ret;
3379
	return ret;
3343
}
3380
}
Line 3344... Line -...
3344
 
-
 
3345
#if 0
3381
 
3346
int
3382
int
3347
i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
3383
i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
3348
			struct drm_file *file_priv)
3384
			struct drm_file *file_priv)
3349
{
3385
{
3350
	return i915_gem_ring_throttle(dev, file_priv);
3386
	return i915_gem_ring_throttle(dev, file_priv);
Line -... Line 3387...
-
 
3387
}
-
 
3388
 
3351
}
3389
#if 0
3352
 
3390
 
3353
int
3391
int
3354
i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
3392
i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
3355
		       struct drm_file *file_priv)
3393
		       struct drm_file *file_priv)
Line 3543... Line 3581...
3543
	i915_gem_cleanup_ringbuffer(dev);
3581
	i915_gem_cleanup_ringbuffer(dev);
Line 3544... Line 3582...
3544
 
3582
 
Line 3545... Line 3583...
3545
	mutex_unlock(&dev->struct_mutex);
3583
	mutex_unlock(&dev->struct_mutex);
3546
 
3584
 
Line 3547... Line 3585...
3547
	/* Cancel the retire work handler, which should be idle now. */
3585
	/* Cancel the retire work handler, which should be idle now. */
3548
//   cancel_delayed_work_sync(&dev_priv->mm.retire_work);
3586
	cancel_delayed_work_sync(&dev_priv->mm.retire_work);
3549
 
3587