summaryrefslogtreecommitdiff
path: root/libdrm
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-08-30 13:04:08 +0200
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-08-30 13:04:08 +0200
commite47a4fda2ef7aada45b7799ad20e8012102dc12e (patch)
treeb7e5995074a56840702b28f874c67b060e901a39 /libdrm
parent033bda07e9a4eab5058fb919b375deb57b08b5be (diff)
Memory manager init and takedown.
Diffstat (limited to 'libdrm')
-rw-r--r--libdrm/Makefile.am2
-rw-r--r--libdrm/xf86drm.c30
-rw-r--r--libdrm/xf86drm.h2
-rw-r--r--libdrm/xf86mm.h9
4 files changed, 40 insertions, 3 deletions
diff --git a/libdrm/Makefile.am b/libdrm/Makefile.am
index b12e87fa..91a7e5dc 100644
--- a/libdrm/Makefile.am
+++ b/libdrm/Makefile.am
@@ -26,6 +26,6 @@ AM_CFLAGS = -I$(top_srcdir)/shared-core
libdrm_la_SOURCES = xf86drm.c xf86drmHash.c xf86drmRandom.c xf86drmSL.c
libdrmincludedir = ${includedir}
-libdrminclude_HEADERS = xf86drm.h
+libdrminclude_HEADERS = xf86drm.h xf86mm.h
EXTRA_DIST = ChangeLog TODO
diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c
index 3fccdf69..c9005c41 100644
--- a/libdrm/xf86drm.c
+++ b/libdrm/xf86drm.c
@@ -65,7 +65,6 @@
# define _DRM_FREE free
# include "drm.h"
#endif
-#include "xf86mm.h"
/* Not all systems have MAP_FAILED defined */
@@ -2582,6 +2581,7 @@ int drmBOCreate(int fd, drmTTM *ttm, unsigned long start, unsigned long size,
buf->ttm = ttm;
break;
case drm_bo_type_dc:
+ req->buffer_start = start;
break;
case drm_bo_type_user:
req->buffer_start = (unsigned long) user_buffer;
@@ -2699,4 +2699,32 @@ int drmBOUnReference(int fd, drmBO *buf)
return 0;
}
+int drmMMInit(int fd, unsigned long vramPOffset, unsigned long vramPSize,
+ unsigned long ttPOffset, unsigned long ttPSize)
+{
+ drm_mm_init_arg_t arg;
+
+ arg.req.op = mm_init;
+ arg.req.vr_p_offset = vramPOffset;
+ arg.req.vr_p_size = vramPSize;
+ arg.req.tt_p_offset = vramPOffset;
+ arg.req.tt_p_size = vramPSize;
+
+ if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
+ return -errno;
+
+ return 0;
+}
+
+int drmMMTakedown(int fd)
+{
+ drm_mm_init_arg_t arg;
+ arg.req.op = mm_takedown;
+
+ if (ioctl(fd, DRM_IOCTL_MM_INIT, &arg))
+ return -errno;
+
+ return 0;
+}
+
#endif
diff --git a/libdrm/xf86drm.h b/libdrm/xf86drm.h
index ca48bfbf..f257deda 100644
--- a/libdrm/xf86drm.h
+++ b/libdrm/xf86drm.h
@@ -670,4 +670,6 @@ extern int drmSLLookupNeighbors(void *l, unsigned long key,
unsigned long *prev_key, void **prev_value,
unsigned long *next_key, void **next_value);
+#include "xf86mm.h"
+
#endif
diff --git a/libdrm/xf86mm.h b/libdrm/xf86mm.h
index 08149d08..8711a144 100644
--- a/libdrm/xf86mm.h
+++ b/libdrm/xf86mm.h
@@ -29,7 +29,7 @@
#ifndef _XF86MM_H_
#define _XF86MM_H_
#include <stddef.h>
-#include "xf86drm.h"
+#include "drm.h"
/*
* List macros heavily inspired by the Linux kernel
@@ -114,5 +114,12 @@ typedef struct _drmBOList {
drmMMListHead free;
} drmBOList;
+extern int drmBOCreate(int fd, drmTTM *ttm, unsigned long start, unsigned long size,
+ void *user_buffer, drm_bo_type_t type, unsigned mask,
+ unsigned hint, drmBO *buf);
+extern int drmBODestroy(int fd, drmBO *buf);
+extern int drmBOReference(int fd, unsigned handle, drmBO *buf);
+extern int drmBOUnReference(int fd, drmBO *buf);
+
#endif