aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie2009-12-16 22:11:55 -0600
committerDave Airlie2009-12-20 16:05:16 -0600
commit125994ab30d4f0f126c62fa741ec62a52d69d7a8 (patch)
treee641a13ec8e32c2322ebe1f1480581d58ad815e8 /radeon/radeon_bo.c
parentf1660c249198b5cc14ebbb75107da7bcb6972033 (diff)
downloadexternal-libgbm-125994ab30d4f0f126c62fa741ec62a52d69d7a8.tar.gz
external-libgbm-125994ab30d4f0f126c62fa741ec62a52d69d7a8.tar.xz
external-libgbm-125994ab30d4f0f126c62fa741ec62a52d69d7a8.zip
radeon: straighten out the API insanity.
as Michel pointed out we are exposing too much info for these object for this to be maintainable going forward. This patch set minimises the exposed parts of the radeon_bo and radeon_cs objects to the piece necessary for ddx/mesa to operate at a decent speed. The major problem is mesa contains a legacy BO/CS managers which we still need to expose functionality to, and we really cannot change the API until we can drop the non-KMS codepaths. Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'radeon/radeon_bo.c')
-rw-r--r--radeon/radeon_bo.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/radeon/radeon_bo.c b/radeon/radeon_bo.c
new file mode 100644
index 00000000..f04a77a1
--- /dev/null
+++ b/radeon/radeon_bo.c
@@ -0,0 +1,110 @@
1#include <radeon_bo.h>
2#include <radeon_bo_int.h>
3
4void radeon_bo_debug(struct radeon_bo *bo,
5 const char *op)
6{
7 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
8
9 fprintf(stderr, "%s %p 0x%08X 0x%08X 0x%08X\n",
10 op, bo, bo->handle, boi->size, boi->cref);
11}
12
13struct radeon_bo *radeon_bo_open(struct radeon_bo_manager *bom,
14 uint32_t handle,
15 uint32_t size,
16 uint32_t alignment,
17 uint32_t domains,
18 uint32_t flags)
19{
20 struct radeon_bo *bo;
21 bo = bom->funcs->bo_open(bom, handle, size, alignment, domains, flags);
22 return bo;
23}
24
25void radeon_bo_ref(struct radeon_bo *bo)
26{
27 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
28 boi->cref++;
29 boi->bom->funcs->bo_ref(boi);
30}
31
32struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo)
33{
34 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
35 boi->cref--;
36 return boi->bom->funcs->bo_unref(boi);
37}
38
39int radeon_bo_map(struct radeon_bo *bo, int write)
40{
41 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
42 return boi->bom->funcs->bo_map(boi, write);
43}
44
45int radeon_bo_unmap(struct radeon_bo *bo)
46{
47 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
48 return boi->bom->funcs->bo_unmap(boi);
49}
50
51int radeon_bo_wait(struct radeon_bo *bo)
52{
53 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
54 if (!boi->bom->funcs->bo_wait)
55 return 0;
56 return boi->bom->funcs->bo_wait(boi);
57}
58
59int radeon_bo_is_busy(struct radeon_bo *bo,
60 uint32_t *domain)
61{
62 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
63 return boi->bom->funcs->bo_is_busy(boi, domain);
64}
65
66int radeon_bo_set_tiling(struct radeon_bo *bo,
67 uint32_t tiling_flags, uint32_t pitch)
68{
69 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
70 return boi->bom->funcs->bo_set_tiling(boi, tiling_flags, pitch);
71}
72
73int radeon_bo_get_tiling(struct radeon_bo *bo,
74 uint32_t *tiling_flags, uint32_t *pitch)
75{
76 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
77 return boi->bom->funcs->bo_get_tiling(boi, tiling_flags, pitch);
78}
79
80int radeon_bo_is_static(struct radeon_bo *bo)
81{
82 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
83 if (boi->bom->funcs->bo_is_static)
84 return boi->bom->funcs->bo_is_static(boi);
85 return 0;
86}
87
88int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo,
89 struct radeon_cs *cs)
90{
91 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
92 return boi->cref > 1;
93}
94
95uint32_t radeon_bo_get_handle(struct radeon_bo *bo)
96{
97 return bo->handle;
98}
99
100uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo)
101{
102 struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
103 uint32_t src_domain;
104
105 src_domain = boi->space_accounted & 0xffff;
106 if (!src_domain)
107 src_domain = boi->space_accounted >> 16;
108
109 return src_domain;
110}