summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 440fc51)
raw | patch | inline | side by side (parent: 440fc51)
author | Kristian Høgsberg <krh@redhat.com> | |
Wed, 10 Oct 2007 01:09:30 +0000 (21:09 -0400) | ||
committer | Dave Airlie <airlied@linux.ie> | |
Tue, 16 Oct 2007 11:03:05 +0000 (22:03 +1100) |
The buffer object type is still tracked internally, but it is no longer
part of the user space visible ioctl interface. If the bo create ioctl
specifies a non-NULL buffer address we assume drm_bo_type_user,
otherwise drm_bo_type_dc. Kernel side allocations call
drm_buffer_object_create() directly and can still specify drm_bo_type_kernel.
Not 100% this makes sense either, but with this patch, the buffer type
is no longer exported and we can clean up the internals later on.
part of the user space visible ioctl interface. If the bo create ioctl
specifies a non-NULL buffer address we assume drm_bo_type_user,
otherwise drm_bo_type_dc. Kernel side allocations call
drm_buffer_object_create() directly and can still specify drm_bo_type_kernel.
Not 100% this makes sense either, but with this patch, the buffer type
is no longer exported and we can clean up the internals later on.
diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c
index bb2b3abe2627c5dc49a669faf52e80e04139b58f..c450a98521166702c0fecfac80feebbc45197dc4 100644 (file)
--- a/libdrm/xf86drm.c
+++ b/libdrm/xf86drm.c
-int drmBOCreate(int fd, unsigned long start, unsigned long size,
- unsigned pageAlignment, void *user_buffer, drm_bo_type_t type,
+int drmBOCreate(int fd, unsigned long size,
+ unsigned pageAlignment, void *user_buffer,
uint64_t mask,
unsigned hint, drmBO *buf)
{
req->mask = mask;
req->hint = hint;
req->size = size;
- req->type = type;
req->page_alignment = pageAlignment;
+ req->buffer_start = (unsigned long) user_buffer;
buf->virtual = NULL;
- switch(type) {
- case drm_bo_type_dc:
- req->buffer_start = start;
- break;
- case drm_bo_type_user:
- req->buffer_start = (unsigned long) user_buffer;
- buf->virtual = user_buffer;
- break;
- default:
- return -EINVAL;
- }
-
do {
ret = ioctl(fd, DRM_IOCTL_BO_CREATE, &arg);
} while (ret != 0 && errno == EAGAIN);
return -errno;
drmBOCopyReply(rep, buf);
- buf->type = drm_bo_type_dc;
buf->mapVirtual = NULL;
buf->mapCount = 0;
buf->virtual = NULL;
diff --git a/libdrm/xf86mm.h b/libdrm/xf86mm.h
index cacd13af3fd25a65701c117cbd35db378416f3b3..0dac7eff0d7b94851f4384ef85c159461ed2812b 100644 (file)
--- a/libdrm/xf86mm.h
+++ b/libdrm/xf86mm.h
typedef struct _drmBO
{
- drm_bo_type_t type;
unsigned handle;
uint64_t mapHandle;
uint64_t flags;
* Buffer object functions.
*/
-extern int drmBOCreate(int fd, unsigned long start, unsigned long size,
- unsigned pageAlignment,void *user_buffer,
- drm_bo_type_t type, uint64_t mask,
- unsigned hint, drmBO *buf);
+extern int drmBOCreate(int fd, unsigned long size,
+ unsigned pageAlignment, void *user_buffer,
+ uint64_t 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);
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index 7dd9856d9306cccff90e29b7f9b2190363455f22..e2f460ed80cb3cdc5847878bd6b981d7647c3012 100644 (file)
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
INIT_LIST_HEAD(&bo->vma_list);
#endif
bo->dev = dev;
- bo->type = type;
+ if (buffer_start != 0)
+ bo->type = drm_bo_type_user;
+ else
+ bo->type = type;
bo->num_pages = num_pages;
bo->mem.mem_type = DRM_BO_MEM_LOCAL;
bo->mem.num_pages = bo->num_pages;
@@ -1783,8 +1786,8 @@ int drm_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
struct drm_buffer_object *entry;
int ret = 0;
- DRM_DEBUG("drm_bo_create_ioctl: %dkb, %dkb align, %d type\n",
- (int)(req->size / 1024), req->page_alignment * 4, req->type);
+ DRM_DEBUG("drm_bo_create_ioctl: %dkb, %dkb align\n",
+ (int)(req->size / 1024), req->page_alignment * 4);
if (!dev->bm.initialized) {
DRM_ERROR("Buffer object manager is not initialized.\n");
@@ -1792,7 +1795,7 @@ int drm_bo_create_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
}
ret = drm_buffer_object_create(file_priv->head->dev,
- req->size, req->type, req->mask,
+ req->size, drm_bo_type_dc, req->mask,
req->hint, req->page_alignment,
req->buffer_start, &entry);
if (ret)
index 9748baae0aa7fd3e877d6e9b01950be206f95edb..b58db57fafae9503b3977349388e715b646208fb 100644 (file)
--- a/linux-core/drm_objects.h
+++ b/linux-core/drm_objects.h
uint32_t hw_tile_stride;
};
+enum drm_bo_type {
+ drm_bo_type_dc,
+ drm_bo_type_user,
+ drm_bo_type_kernel, /* for initial kernel allocations */
+};
+
struct drm_buffer_object {
struct drm_device *dev;
struct drm_user_object base;
diff --git a/shared-core/drm.h b/shared-core/drm.h
index 279f858fc560e329cdd9d49c242e9849c7d4e07d..568b10036a3d9f5840fcee0f5a982ecafe1cee72 100644 (file)
--- a/shared-core/drm.h
+++ b/shared-core/drm.h
#define DRM_BO_INIT_MINOR 1
-enum drm_bo_type {
- drm_bo_type_dc,
- drm_bo_type_user,
- drm_bo_type_kernel, /* for initial kernel allocations */
-};
-
struct drm_bo_info_req {
uint64_t mask;
uint64_t flags;
uint64_t buffer_start;
unsigned int hint;
unsigned int page_alignment;
- enum drm_bo_type type;
- unsigned int pad64;
};
struct drm_bo_op_req {