Module Name: xsrc
Committed By: riastradh
Date: Fri Mar 21 18:09:50 UTC 2014
Modified Files:
xsrc/external/mit/libdrm/dist: xf86drm.c
xsrc/external/mit/libdrm/dist/include/drm: drm.h
Log Message:
Use the NetBSD-specific mmapping ioctl for drmMap.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 xsrc/external/mit/libdrm/dist/xf86drm.c
cvs rdiff -u -r1.1.1.4 -r1.2 xsrc/external/mit/libdrm/dist/include/drm/drm.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/libdrm/dist/xf86drm.c
diff -u xsrc/external/mit/libdrm/dist/xf86drm.c:1.5 xsrc/external/mit/libdrm/dist/xf86drm.c:1.6
--- xsrc/external/mit/libdrm/dist/xf86drm.c:1.5 Mon Mar 17 07:52:19 2014
+++ xsrc/external/mit/libdrm/dist/xf86drm.c Fri Mar 21 18:09:50 2014
@@ -1138,6 +1138,10 @@ int drmClose(int fd)
int drmMap(int fd, drm_handle_t handle, drmSize size, drmAddressPtr address)
{
static unsigned long pagesize_mask = 0;
+#ifdef __NetBSD__ /* XXX */
+ static const struct drm_mmap zero_mmap_req;
+ struct drm_mmap mmap_req = zero_mmap_req;
+#endif
if (fd < 0)
return -EINVAL;
@@ -1147,9 +1151,20 @@ int drmMap(int fd, drm_handle_t handle,
size = (size + pagesize_mask) & ~pagesize_mask;
+#ifdef __NetBSD__
+ mmap_req.dnm_addr = NULL;
+ mmap_req.dnm_size = size;
+ mmap_req.dnm_prot = (PROT_READ | PROT_WRITE);
+ mmap_req.dnm_flags = MAP_SHARED;
+ mmap_req.dnm_offset = handle;
+ if (drmIoctl(fd, DRM_IOCTL_MMAP, &mmap_req) == -1)
+ return -errno;
+ *address = mmap_req.dnm_addr;
+#else
*address = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, handle);
if (*address == MAP_FAILED)
return -errno;
+#endif
return 0;
}
Index: xsrc/external/mit/libdrm/dist/include/drm/drm.h
diff -u xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.1.1.4 xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.2
--- xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.1.1.4 Mon Mar 17 07:51:43 2014
+++ xsrc/external/mit/libdrm/dist/include/drm/drm.h Fri Mar 21 18:09:49 2014
@@ -751,6 +751,20 @@ struct drm_prime_handle {
#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property)
#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2)
+#ifdef __NetBSD__
+/*
+ * Instrumenting mmap is trickier than just making an ioctl to do it.
+ */
+struct drm_mmap {
+ void *dnm_addr; /* in/out */
+ size_t dnm_size; /* in */
+ int dnm_prot; /* in */
+ int dnm_flags; /* in */
+ off_t dnm_offset; /* in */
+};
+#define DRM_IOCTL_MMAP DRM_IOWR(0xff, struct drm_mmap)
+#endif
+
/**
* Device specific ioctls should only be in their respective headers
* The device specific ioctl range is from 0x40 to 0x99.