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.

Reply via email to