summaryrefslogtreecommitdiff
path: root/radeon/radeon_bo_gem.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2009-12-17 14:11:55 +1000
committerDave Airlie <airlied@redhat.com>2009-12-21 08:05:16 +1000
commit125994ab30d4f0f126c62fa741ec62a52d69d7a8 (patch)
treee641a13ec8e32c2322ebe1f1480581d58ad815e8 /radeon/radeon_bo_gem.c
parentf1660c249198b5cc14ebbb75107da7bcb6972033 (diff)
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_gem.c')
-rw-r--r--radeon/radeon_bo_gem.c89
1 files changed, 46 insertions, 43 deletions
diff --git a/radeon/radeon_bo_gem.c b/radeon/radeon_bo_gem.c
index 6ededcd4..baa1d716 100644
--- a/radeon/radeon_bo_gem.c
+++ b/radeon/radeon_bo_gem.c
@@ -42,10 +42,11 @@
#include "drm.h"
#include "radeon_drm.h"
#include "radeon_bo.h"
+#include "radeon_bo_int.h"
#include "radeon_bo_gem.h"
struct radeon_bo_gem {
- struct radeon_bo base;
+ struct radeon_bo_int base;
uint32_t name;
int map_count;
void *priv_ptr;
@@ -55,8 +56,8 @@ struct bo_manager_gem {
struct radeon_bo_manager base;
};
-static int bo_wait(struct radeon_bo *bo);
-
+static int bo_wait(struct radeon_bo_int *boi);
+
static struct radeon_bo *bo_open(struct radeon_bo_manager *bom,
uint32_t handle,
uint32_t size,
@@ -117,39 +118,39 @@ static struct radeon_bo *bo_open(struct radeon_bo_manager *bom,
return (struct radeon_bo*)bo;
}
-static void bo_ref(struct radeon_bo *bo)
+static void bo_ref(struct radeon_bo_int *boi)
{
}
-static struct radeon_bo *bo_unref(struct radeon_bo *bo)
+static struct radeon_bo *bo_unref(struct radeon_bo_int *boi)
{
- struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+ struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)boi;
struct drm_gem_close args;
- if (bo == NULL) {
+ if (boi == NULL) {
return NULL;
}
- if (bo->cref) {
- return bo;
+ if (boi->cref) {
+ return (struct radeon_bo *)boi;
}
if (bo_gem->priv_ptr) {
- munmap(bo_gem->priv_ptr, bo->size);
+ munmap(bo_gem->priv_ptr, boi->size);
}
/* Zero out args to make valgrind happy */
memset(&args, 0, sizeof(args));
/* close object */
- args.handle = bo->handle;
- drmIoctl(bo->bom->fd, DRM_IOCTL_GEM_CLOSE, &args);
+ args.handle = boi->handle;
+ drmIoctl(boi->bom->fd, DRM_IOCTL_GEM_CLOSE, &args);
memset(bo_gem, 0, sizeof(struct radeon_bo_gem));
free(bo_gem);
return NULL;
}
-static int bo_map(struct radeon_bo *bo, int write)
+static int bo_map(struct radeon_bo_int *boi, int write)
{
- struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+ struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)boi;
struct drm_radeon_gem_mmap args;
int r;
void *ptr;
@@ -161,102 +162,102 @@ static int bo_map(struct radeon_bo *bo, int write)
goto wait;
}
- bo->ptr = NULL;
+ boi->ptr = NULL;
/* Zero out args to make valgrind happy */
memset(&args, 0, sizeof(args));
- args.handle = bo->handle;
+ args.handle = boi->handle;
args.offset = 0;
- args.size = (uint64_t)bo->size;
- r = drmCommandWriteRead(bo->bom->fd,
+ args.size = (uint64_t)boi->size;
+ r = drmCommandWriteRead(boi->bom->fd,
DRM_RADEON_GEM_MMAP,
&args,
sizeof(args));
if (r) {
fprintf(stderr, "error mapping %p 0x%08X (error = %d)\n",
- bo, bo->handle, r);
+ boi, boi->handle, r);
return r;
}
- ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, bo->bom->fd, args.addr_ptr);
+ ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, boi->bom->fd, args.addr_ptr);
if (ptr == MAP_FAILED)
return -errno;
bo_gem->priv_ptr = ptr;
wait:
- bo->ptr = bo_gem->priv_ptr;
- r = bo_wait(bo);
+ boi->ptr = bo_gem->priv_ptr;
+ r = bo_wait(boi);
if (r)
- return r;
+ return r;
return 0;
}
-static int bo_unmap(struct radeon_bo *bo)
+static int bo_unmap(struct radeon_bo_int *boi)
{
- struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
+ struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)boi;
if (--bo_gem->map_count > 0) {
return 0;
}
//munmap(bo->ptr, bo->size);
- bo->ptr = NULL;
+ boi->ptr = NULL;
return 0;
}
-static int bo_wait(struct radeon_bo *bo)
+static int bo_wait(struct radeon_bo_int *boi)
{
struct drm_radeon_gem_wait_idle args;
int ret;
/* Zero out args to make valgrind happy */
memset(&args, 0, sizeof(args));
- args.handle = bo->handle;
+ args.handle = boi->handle;
do {
- ret = drmCommandWriteRead(bo->bom->fd, DRM_RADEON_GEM_WAIT_IDLE,
+ ret = drmCommandWriteRead(boi->bom->fd, DRM_RADEON_GEM_WAIT_IDLE,
&args, sizeof(args));
} while (ret == -EBUSY);
return ret;
}
-static int bo_is_busy(struct radeon_bo *bo, uint32_t *domain)
+static int bo_is_busy(struct radeon_bo_int *boi, uint32_t *domain)
{
struct drm_radeon_gem_busy args;
int ret;
- args.handle = bo->handle;
+ args.handle = boi->handle;
args.domain = 0;
- ret = drmCommandWriteRead(bo->bom->fd, DRM_RADEON_GEM_BUSY,
- &args, sizeof(args));
+ ret = drmCommandWriteRead(boi->bom->fd, DRM_RADEON_GEM_BUSY,
+ &args, sizeof(args));
*domain = args.domain;
return ret;
}
-static int bo_set_tiling(struct radeon_bo *bo, uint32_t tiling_flags,
- uint32_t pitch)
+static int bo_set_tiling(struct radeon_bo_int *boi, uint32_t tiling_flags,
+ uint32_t pitch)
{
struct drm_radeon_gem_set_tiling args;
int r;
- args.handle = bo->handle;
+ args.handle = boi->handle;
args.tiling_flags = tiling_flags;
args.pitch = pitch;
- r = drmCommandWriteRead(bo->bom->fd,
+ r = drmCommandWriteRead(boi->bom->fd,
DRM_RADEON_GEM_SET_TILING,
&args,
sizeof(args));
return r;
}
-static int bo_get_tiling(struct radeon_bo *bo, uint32_t *tiling_flags,
- uint32_t *pitch)
+static int bo_get_tiling(struct radeon_bo_int *boi, uint32_t *tiling_flags,
+ uint32_t *pitch)
{
struct drm_radeon_gem_set_tiling args;
int r;
- args.handle = bo->handle;
+ args.handle = boi->handle;
- r = drmCommandWriteRead(bo->bom->fd,
+ r = drmCommandWriteRead(boi->bom->fd,
DRM_RADEON_GEM_GET_TILING,
&args,
sizeof(args));
@@ -313,11 +314,12 @@ uint32_t radeon_gem_name_bo(struct radeon_bo *bo)
int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
{
+ struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
struct drm_gem_flink flink;
int r;
flink.handle = bo->handle;
- r = drmIoctl(bo->bom->fd, DRM_IOCTL_GEM_FLINK, &flink);
+ r = drmIoctl(boi->bom->fd, DRM_IOCTL_GEM_FLINK, &flink);
if (r) {
return r;
}
@@ -327,6 +329,7 @@ int radeon_gem_get_kernel_name(struct radeon_bo *bo, uint32_t *name)
int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
{
+ struct radeon_bo_int *boi = (struct radeon_bo_int *)bo;
struct drm_radeon_gem_set_domain args;
int r;
@@ -334,7 +337,7 @@ int radeon_gem_set_domain(struct radeon_bo *bo, uint32_t read_domains, uint32_t
args.read_domains = read_domains;
args.write_domain = write_domain;
- r = drmCommandWriteRead(bo->bom->fd,
+ r = drmCommandWriteRead(boi->bom->fd,
DRM_RADEON_GEM_SET_DOMAIN,
&args,
sizeof(args));