aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/msm_ringbuffer.c
blob: 8171537dd7d127f9c104bb9417bf5b71a4bf91d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * Copyright (C) 2013 Red Hat
 * Author: Rob Clark <robdclark@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "msm_ringbuffer.h"
#include "msm_gpu.h"

struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int size)
{
	struct msm_ringbuffer *ring;
	int ret;

	size = ALIGN(size, 4);   /* size should be dword aligned */

	ring = kzalloc(sizeof(*ring), GFP_KERNEL);
	if (!ring) {
		ret = -ENOMEM;
		goto fail;
	}

	ring->gpu = gpu;
	ring->bo = msm_gem_new(gpu->dev, size, MSM_BO_WC);
	if (IS_ERR(ring->bo)) {
		ret = PTR_ERR(ring->bo);
		ring->bo = NULL;
		goto fail;
	}

	ring->start = msm_gem_vaddr_locked(ring->bo);
	ring->end   = ring->start + (size / 4);
	ring->cur   = ring->start;

	ring->size = size;

	return ring;

fail:
	if (ring)
		msm_ringbuffer_destroy(ring);
	return ERR_PTR(ret);
}

void msm_ringbuffer_destroy(struct msm_ringbuffer *ring)
{
	if (ring->bo)
		drm_gem_object_unreference(ring->bo);
	kfree(ring);
}
a1'>783f61843e9d
f7545144c2e3
783f61843e9d
3b2ce58b0f3c
783f61843e9d




3b2ce58b0f3c
783f61843e9d






b004a5eb0bab
783f61843e9d


b004a5eb0bab






783f61843e9d


783f61843e9d
2879ed66e4c6
783f61843e9d







0e14a3595bdd
783f61843e9d
aa405b1f4238
783f61843e9d


fa0d7e3de6d6
783f61843e9d
fa0d7e3de6d6
b91c9a97c933





783f61843e9d


fa0d7e3de6d6




f7545144c2e3
783f61843e9d
e3154e9748f0
783f61843e9d
783f61843e9d
783f61843e9d
e339ad31f599
3b2ce58b0f3c
87e99511ea54
f8c131f5b6ff
87e99511ea54

783f61843e9d
87e99511ea54
e339ad31f599
783f61843e9d

e339ad31f599
b2ac86e1a8e3





e339ad31f599





b2ac86e1a8e3

e339ad31f599



783f61843e9d
e339ad31f599


b2ac86e1a8e3
e339ad31f599
b2ac86e1a8e3

e339ad31f599
b2ac86e1a8e3


e339ad31f599
783f61843e9d
b2ac86e1a8e3




783f61843e9d


60f46b7efc1d















f7545144c2e3
b2ac86e1a8e3
783f61843e9d
e3154e9748f0
e339ad31f599
783f61843e9d
d26493b6f017
34cb9b5c973a
d26493b6f017

b2ac86e1a8e3
d26493b6f017
e339ad31f599
f7545144c2e3
d26493b6f017
e339ad31f599
b2ac86e1a8e3


e339ad31f599
b2ac86e1a8e3



d26493b6f017


f7545144c2e3
d26493b6f017
e3154e9748f0
d26493b6f017



e339ad31f599
b2ac86e1a8e3
e339ad31f599




b2ac86e1a8e3





e339ad31f599
e605f0a7249d
f7545144c2e3
783f61843e9d

7ecaa46cfea4

f7545144c2e3
7ecaa46cfea4




f7545144c2e3
7ecaa46cfea4
e3154e9748f0
d26493b6f017
b2ac86e1a8e3
d26493b6f017
7ecaa46cfea4
f7545144c2e3
d26493b6f017
f7545144c2e3

b2ac86e1a8e3








f7545144c2e3
d26493b6f017
7ecaa46cfea4


cfb0a4bfd873
























































4e33f9eab07e






































































783f61843e9d

e3154e9748f0
783f61843e9d
f7545144c2e3
783f61843e9d


f7545144c2e3
783f61843e9d


f1e89c86fdd0