OSDN Git Service

Merge branch 'master' into libkms-master
[android-x86/external-libdrm.git] / radeon / radeon_bo.c
1 #include <radeon_bo.h>
2 #include <radeon_bo_int.h>
3
4 void 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
13 struct 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
25 void 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
32 struct radeon_bo *radeon_bo_unref(struct radeon_bo *bo)
33 {
34     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
35     if (bo == NULL)
36         return NULL;
37
38     boi->cref--;
39     return boi->bom->funcs->bo_unref(boi);
40 }
41
42 int radeon_bo_map(struct radeon_bo *bo, int write)
43 {
44     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
45     return boi->bom->funcs->bo_map(boi, write);
46 }
47
48 int radeon_bo_unmap(struct radeon_bo *bo)
49 {
50     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
51     return boi->bom->funcs->bo_unmap(boi);
52 }
53
54 int radeon_bo_wait(struct radeon_bo *bo)
55 {
56     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
57     if (!boi->bom->funcs->bo_wait)
58         return 0;
59     return boi->bom->funcs->bo_wait(boi);
60 }
61
62 int radeon_bo_is_busy(struct radeon_bo *bo,
63                       uint32_t *domain)
64 {
65     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
66     return boi->bom->funcs->bo_is_busy(boi, domain);
67 }
68
69 int radeon_bo_set_tiling(struct radeon_bo *bo,
70                          uint32_t tiling_flags, uint32_t pitch)
71 {
72     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
73     return boi->bom->funcs->bo_set_tiling(boi, tiling_flags, pitch);
74 }
75
76 int radeon_bo_get_tiling(struct radeon_bo *bo,
77                           uint32_t *tiling_flags, uint32_t *pitch)
78 {
79     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
80     return boi->bom->funcs->bo_get_tiling(boi, tiling_flags, pitch);
81 }
82
83 int radeon_bo_is_static(struct radeon_bo *bo)
84 {
85     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
86     if (boi->bom->funcs->bo_is_static)
87         return boi->bom->funcs->bo_is_static(boi);
88     return 0;
89 }
90
91 int radeon_bo_is_referenced_by_cs(struct radeon_bo *bo,
92                                   struct radeon_cs *cs)
93 {
94     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
95     return boi->cref > 1;
96 }
97
98 uint32_t radeon_bo_get_handle(struct radeon_bo *bo)
99 {
100     return bo->handle;
101 }
102
103 uint32_t radeon_bo_get_src_domain(struct radeon_bo *bo)
104 {
105     struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
106     uint32_t src_domain;
107
108     src_domain = boi->space_accounted & 0xffff;
109     if (!src_domain)
110         src_domain = boi->space_accounted >> 16;
111
112     return src_domain;
113 }