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.