Wed Mar 14 07:19:26 2018 UTC ()
merge libdrm 2.4.91


(mrg)
diff -r1.9 -r1.10 xsrc/external/mit/libdrm/dist/xf86atomic.h
diff -r1.15 -r1.16 xsrc/external/mit/libdrm/dist/xf86drm.c
diff -r1.8 -r1.9 xsrc/external/mit/libdrm/dist/xf86drm.h
diff -r1.12 -r1.13 xsrc/external/mit/libdrm/dist/xf86drmMode.c
diff -r1.7 -r1.8 xsrc/external/mit/libdrm/dist/xf86drmMode.h
diff -r1.8 -r1.9 xsrc/external/mit/libdrm/dist/include/drm/drm.h
diff -r1.14 -r1.15 xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c
diff -r1.10 -r1.11 xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c

cvs diff -r1.9 -r1.10 xsrc/external/mit/libdrm/dist/xf86atomic.h (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/xf86atomic.h 2016/02/25 05:01:21 1.9
+++ xsrc/external/mit/libdrm/dist/xf86atomic.h 2018/03/14 07:19:26 1.10
@@ -91,27 +91,27 @@ typedef struct { @@ -91,27 +91,27 @@ typedef struct {
91typedef struct { volatile LIBDRM_ATOMIC_TYPE atomic; } atomic_t; 91typedef struct { volatile LIBDRM_ATOMIC_TYPE atomic; } atomic_t;
92 92
93# define atomic_read(x) (int) ((x)->atomic) 93# define atomic_read(x) (int) ((x)->atomic)
94# define atomic_set(x, val) ((x)->atomic = (LIBDRM_ATOMIC_TYPE)(val)) 94# define atomic_set(x, val) ((x)->atomic = (LIBDRM_ATOMIC_TYPE)(val))
95# define atomic_inc(x) (atomic_inc_uint (&(x)->atomic)) 95# define atomic_inc(x) (atomic_inc_uint (&(x)->atomic))
96# define atomic_inc_return(x) (atomic_inc_uint_nv(&(x)->atomic)) 96# define atomic_inc_return(x) (atomic_inc_uint_nv(&(x)->atomic))
97# define atomic_dec_and_test(x) (atomic_dec_uint_nv(&(x)->atomic) == 0) 97# define atomic_dec_and_test(x) (atomic_dec_uint_nv(&(x)->atomic) == 0)
98# define atomic_add(x, v) (atomic_add_int(&(x)->atomic, (v))) 98# define atomic_add(x, v) (atomic_add_int(&(x)->atomic, (v)))
99# define atomic_dec(x, v) (atomic_add_int(&(x)->atomic, -(v))) 99# define atomic_dec(x, v) (atomic_add_int(&(x)->atomic, -(v)))
100# define atomic_cmpxchg(x, oldv, newv) atomic_cas_uint (&(x)->atomic, oldv, newv) 100# define atomic_cmpxchg(x, oldv, newv) atomic_cas_uint (&(x)->atomic, oldv, newv)
101 101
102#endif 102#endif
103 103
104#if ! HAS_ATOMIC_OPS 104#if !defined(HAS_ATOMIC_OPS)
105#error libdrm requires atomic operations, please define them for your CPU/compiler. 105#error libdrm requires atomic operations, please define them for your CPU/compiler.
106#endif 106#endif
107 107
108static inline int atomic_add_unless(atomic_t *v, int add, int unless) 108static inline int atomic_add_unless(atomic_t *v, int add, int unless)
109{ 109{
110 int c, old; 110 int c, old;
111 c = atomic_read(v); 111 c = atomic_read(v);
112 while (c != unless && (old = atomic_cmpxchg(v, c, c + add)) != c) 112 while (c != unless && (old = atomic_cmpxchg(v, c, c + add)) != c)
113 c = old; 113 c = old;
114 return c == unless; 114 return c == unless;
115} 115}
116 116
117#endif 117#endif

cvs diff -r1.15 -r1.16 xsrc/external/mit/libdrm/dist/xf86drm.c (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/xf86drm.c 2017/08/29 06:31:24 1.15
+++ xsrc/external/mit/libdrm/dist/xf86drm.c 2018/03/14 07:19:26 1.16
@@ -1686,26 +1686,63 @@ int drmUpdateDrawableInfo(int fd, drm_dr @@ -1686,26 +1686,63 @@ int drmUpdateDrawableInfo(int fd, drm_dr
1686 1686
1687 memclear(update); 1687 memclear(update);
1688 update.handle = handle; 1688 update.handle = handle;
1689 update.type = type; 1689 update.type = type;
1690 update.num = num; 1690 update.num = num;
1691 update.data = (unsigned long long)(unsigned long)data; 1691 update.data = (unsigned long long)(unsigned long)data;
1692 1692
1693 if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update)) 1693 if (drmIoctl(fd, DRM_IOCTL_UPDATE_DRAW, &update))
1694 return -errno; 1694 return -errno;
1695 1695
1696 return 0; 1696 return 0;
1697} 1697}
1698 1698
 1699int drmCrtcGetSequence(int fd, uint32_t crtcId, uint64_t *sequence, uint64_t *ns)
 1700{
 1701 struct drm_crtc_get_sequence get_seq;
 1702 int ret;
 1703
 1704 memclear(get_seq);
 1705 get_seq.crtc_id = crtcId;
 1706 ret = drmIoctl(fd, DRM_IOCTL_CRTC_GET_SEQUENCE, &get_seq);
 1707 if (ret)
 1708 return ret;
 1709
 1710 if (sequence)
 1711 *sequence = get_seq.sequence;
 1712 if (ns)
 1713 *ns = get_seq.sequence_ns;
 1714 return 0;
 1715}
 1716
 1717int drmCrtcQueueSequence(int fd, uint32_t crtcId, uint32_t flags, uint64_t sequence,
 1718 uint64_t *sequence_queued, uint64_t user_data)
 1719{
 1720 struct drm_crtc_queue_sequence queue_seq;
 1721 int ret;
 1722
 1723 memclear(queue_seq);
 1724 queue_seq.crtc_id = crtcId;
 1725 queue_seq.flags = flags;
 1726 queue_seq.sequence = sequence;
 1727 queue_seq.user_data = user_data;
 1728
 1729 ret = drmIoctl(fd, DRM_IOCTL_CRTC_QUEUE_SEQUENCE, &queue_seq);
 1730 if (ret == 0 && sequence_queued)
 1731 *sequence_queued = queue_seq.sequence;
 1732
 1733 return ret;
 1734}
 1735
1699/** 1736/**
1700 * Acquire the AGP device. 1737 * Acquire the AGP device.
1701 * 1738 *
1702 * Must be called before any of the other AGP related calls. 1739 * Must be called before any of the other AGP related calls.
1703 * 1740 *
1704 * \param fd file descriptor. 1741 * \param fd file descriptor.
1705 * 1742 *
1706 * \return zero on success, or a negative value on failure. 1743 * \return zero on success, or a negative value on failure.
1707 * 1744 *
1708 * \internal 1745 * \internal
1709 * This function is a wrapper around the DRM_IOCTL_AGP_ACQUIRE ioctl. 1746 * This function is a wrapper around the DRM_IOCTL_AGP_ACQUIRE ioctl.
1710 */ 1747 */
1711int drmAgpAcquire(int fd) 1748int drmAgpAcquire(int fd)
@@ -4146,83 +4183,131 @@ char *drmGetDeviceNameFromFd2(int fd) @@ -4146,83 +4183,131 @@ char *drmGetDeviceNameFromFd2(int fd)
4146#endif 4183#endif
4147} 4184}
4148 4185
4149int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle) 4186int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle)
4150{ 4187{
4151 struct drm_syncobj_create args; 4188 struct drm_syncobj_create args;
4152 int ret; 4189 int ret;
4153 4190
4154 memclear(args); 4191 memclear(args);
4155 args.flags = flags; 4192 args.flags = flags;
4156 args.handle = 0; 4193 args.handle = 0;
4157 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args); 4194 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args);
4158 if (ret) 4195 if (ret)
4159 return ret; 4196 return ret;
4160 *handle = args.handle; 4197 *handle = args.handle;
4161 return 0; 4198 return 0;
4162} 4199}
4163 4200
4164int drmSyncobjDestroy(int fd, uint32_t handle) 4201int drmSyncobjDestroy(int fd, uint32_t handle)
4165{ 4202{
4166 struct drm_syncobj_destroy args; 4203 struct drm_syncobj_destroy args;
4167 4204
4168 memclear(args); 4205 memclear(args);
4169 args.handle = handle; 4206 args.handle = handle;
4170 return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args); 4207 return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args);
4171} 4208}
4172 4209
4173int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd) 4210int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd)
4174{ 4211{
4175 struct drm_syncobj_handle args; 4212 struct drm_syncobj_handle args;
4176 int ret; 4213 int ret;
4177 4214
4178 memclear(args); 4215 memclear(args);
4179 args.fd = -1; 4216 args.fd = -1;
4180 args.handle = handle; 4217 args.handle = handle;
4181 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); 4218 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args);
4182 if (ret) 4219 if (ret)
4183 return ret; 4220 return ret;
4184 *obj_fd = args.fd; 4221 *obj_fd = args.fd;
4185 return 0; 4222 return 0;
4186} 4223}
4187 4224
4188int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle) 4225int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle)
4189{ 4226{
4190 struct drm_syncobj_handle args; 4227 struct drm_syncobj_handle args;
4191 int ret; 4228 int ret;
4192 4229
4193 memclear(args); 4230 memclear(args);
4194 args.fd = obj_fd; 4231 args.fd = obj_fd;
4195 args.handle = 0; 4232 args.handle = 0;
4196 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); 4233 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args);
4197 if (ret) 4234 if (ret)
4198 return ret; 4235 return ret;
4199 *handle = args.handle; 4236 *handle = args.handle;
4200 return 0; 4237 return 0;
4201} 4238}
4202 4239
4203int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd) 4240int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd)
4204{ 4241{
4205 struct drm_syncobj_handle args; 4242 struct drm_syncobj_handle args;
4206 4243
4207 memclear(args); 4244 memclear(args);
4208 args.fd = sync_file_fd; 4245 args.fd = sync_file_fd;
4209 args.handle = handle; 4246 args.handle = handle;
4210 args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE; 4247 args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE;
4211 return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); 4248 return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args);
4212} 4249}
4213 4250
4214int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd) 4251int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd)
4215{ 4252{
4216 struct drm_syncobj_handle args; 4253 struct drm_syncobj_handle args;
4217 int ret; 4254 int ret;
4218 4255
4219 memclear(args); 4256 memclear(args);
4220 args.fd = -1; 4257 args.fd = -1;
4221 args.handle = handle; 4258 args.handle = handle;
4222 args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE; 4259 args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE;
4223 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); 4260 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args);
4224 if (ret) 4261 if (ret)
4225 return ret; 4262 return ret;
4226 *sync_file_fd = args.fd; 4263 *sync_file_fd = args.fd;
4227 return 0; 4264 return 0;
4228} 4265}
 4266
 4267int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles,
 4268 int64_t timeout_nsec, unsigned flags,
 4269 uint32_t *first_signaled)
 4270{
 4271 struct drm_syncobj_wait args;
 4272 int ret;
 4273
 4274 memclear(args);
 4275 args.handles = (uintptr_t)handles;
 4276 args.timeout_nsec = timeout_nsec;
 4277 args.count_handles = num_handles;
 4278 args.flags = flags;
 4279
 4280 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &args);
 4281 if (ret < 0)
 4282 return -errno;
 4283
 4284 if (first_signaled)
 4285 *first_signaled = args.first_signaled;
 4286 return ret;
 4287}
 4288
 4289int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count)
 4290{
 4291 struct drm_syncobj_array args;
 4292 int ret;
 4293
 4294 memclear(args);
 4295 args.handles = (uintptr_t)handles;
 4296 args.count_handles = handle_count;
 4297
 4298 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_RESET, &args);
 4299 return ret;
 4300}
 4301
 4302int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count)
 4303{
 4304 struct drm_syncobj_array args;
 4305 int ret;
 4306
 4307 memclear(args);
 4308 args.handles = (uintptr_t)handles;
 4309 args.count_handles = handle_count;
 4310
 4311 ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_SIGNAL, &args);
 4312 return ret;
 4313}

cvs diff -r1.8 -r1.9 xsrc/external/mit/libdrm/dist/xf86drm.h (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/xf86drm.h 2017/08/29 06:31:24 1.8
+++ xsrc/external/mit/libdrm/dist/xf86drm.h 2018/03/14 07:19:26 1.9
@@ -635,26 +635,32 @@ extern drm_context_t * drmGetReservedCon @@ -635,26 +635,32 @@ extern drm_context_t * drmGetReservedCon
635extern void drmFreeReservedContextList(drm_context_t *); 635extern void drmFreeReservedContextList(drm_context_t *);
636extern int drmSwitchToContext(int fd, drm_context_t context); 636extern int drmSwitchToContext(int fd, drm_context_t context);
637extern int drmDestroyContext(int fd, drm_context_t handle); 637extern int drmDestroyContext(int fd, drm_context_t handle);
638extern int drmCreateDrawable(int fd, drm_drawable_t * handle); 638extern int drmCreateDrawable(int fd, drm_drawable_t * handle);
639extern int drmDestroyDrawable(int fd, drm_drawable_t handle); 639extern int drmDestroyDrawable(int fd, drm_drawable_t handle);
640extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle, 640extern int drmUpdateDrawableInfo(int fd, drm_drawable_t handle,
641 drm_drawable_info_type_t type, 641 drm_drawable_info_type_t type,
642 unsigned int num, void *data); 642 unsigned int num, void *data);
643extern int drmCtlInstHandler(int fd, int irq); 643extern int drmCtlInstHandler(int fd, int irq);
644extern int drmCtlUninstHandler(int fd); 644extern int drmCtlUninstHandler(int fd);
645extern int drmSetClientCap(int fd, uint64_t capability, 645extern int drmSetClientCap(int fd, uint64_t capability,
646 uint64_t value); 646 uint64_t value);
647 647
 648extern int drmCrtcGetSequence(int fd, uint32_t crtcId,
 649 uint64_t *sequence, uint64_t *ns);
 650extern int drmCrtcQueueSequence(int fd, uint32_t crtcId,
 651 uint32_t flags, uint64_t sequence,
 652 uint64_t *sequence_queued,
 653 uint64_t user_data);
648/* General user-level programmer's API: authenticated client and/or X */ 654/* General user-level programmer's API: authenticated client and/or X */
649extern int drmMap(int fd, 655extern int drmMap(int fd,
650 drm_handle_t handle, 656 drm_handle_t handle,
651 drmSize size, 657 drmSize size,
652 drmAddressPtr address); 658 drmAddressPtr address);
653extern int drmUnmap(drmAddress address, drmSize size); 659extern int drmUnmap(drmAddress address, drmSize size);
654extern drmBufInfoPtr drmGetBufInfo(int fd); 660extern drmBufInfoPtr drmGetBufInfo(int fd);
655extern drmBufMapPtr drmMapBufs(int fd); 661extern drmBufMapPtr drmMapBufs(int fd);
656extern int drmUnmapBufs(drmBufMapPtr bufs); 662extern int drmUnmapBufs(drmBufMapPtr bufs);
657extern int drmDMA(int fd, drmDMAReqPtr request); 663extern int drmDMA(int fd, drmDMAReqPtr request);
658extern int drmFreeBufs(int fd, int count, int *list); 664extern int drmFreeBufs(int fd, int count, int *list);
659extern int drmGetLock(int fd, 665extern int drmGetLock(int fd,
660 drm_context_t context, 666 drm_context_t context,
@@ -727,53 +733,57 @@ extern int drmSLFirst(void *l, unsigned @@ -727,53 +733,57 @@ extern int drmSLFirst(void *l, unsigned
727extern void drmSLDump(void *l); 733extern void drmSLDump(void *l);
728extern int drmSLLookupNeighbors(void *l, unsigned long key, 734extern int drmSLLookupNeighbors(void *l, unsigned long key,
729 unsigned long *prev_key, void **prev_value, 735 unsigned long *prev_key, void **prev_value,
730 unsigned long *next_key, void **next_value); 736 unsigned long *next_key, void **next_value);
731 737
732extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened); 738extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened);
733extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type); 739extern int drmOpenOnceWithType(const char *BusID, int *newlyopened, int type);
734extern void drmCloseOnce(int fd); 740extern void drmCloseOnce(int fd);
735extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); 741extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2);
736 742
737extern int drmSetMaster(int fd); 743extern int drmSetMaster(int fd);
738extern int drmDropMaster(int fd); 744extern int drmDropMaster(int fd);
739 745
740#define DRM_EVENT_CONTEXT_VERSION 3 746#define DRM_EVENT_CONTEXT_VERSION 4
741 747
742typedef struct _drmEventContext { 748typedef struct _drmEventContext {
743 749
744 /* This struct is versioned so we can add more pointers if we 750 /* This struct is versioned so we can add more pointers if we
745 * add more events. */ 751 * add more events. */
746 int version; 752 int version;
747 753
748 void (*vblank_handler)(int fd, 754 void (*vblank_handler)(int fd,
749 unsigned int sequence,  755 unsigned int sequence,
750 unsigned int tv_sec, 756 unsigned int tv_sec,
751 unsigned int tv_usec, 757 unsigned int tv_usec,
752 void *user_data); 758 void *user_data);
753 759
754 void (*page_flip_handler)(int fd, 760 void (*page_flip_handler)(int fd,
755 unsigned int sequence, 761 unsigned int sequence,
756 unsigned int tv_sec, 762 unsigned int tv_sec,
757 unsigned int tv_usec, 763 unsigned int tv_usec,
758 void *user_data); 764 void *user_data);
759 765
760 void (*page_flip_handler2)(int fd, 766 void (*page_flip_handler2)(int fd,
761 unsigned int sequence, 767 unsigned int sequence,
762 unsigned int tv_sec, 768 unsigned int tv_sec,
763 unsigned int tv_usec, 769 unsigned int tv_usec,
764 unsigned int crtc_id, 770 unsigned int crtc_id,
765 void *user_data); 771 void *user_data);
766 772
 773 void (*sequence_handler)(int fd,
 774 uint64_t sequence,
 775 uint64_t ns,
 776 uint64_t user_data);
767} drmEventContext, *drmEventContextPtr; 777} drmEventContext, *drmEventContextPtr;
768 778
769extern int drmHandleEvent(int fd, drmEventContextPtr evctx); 779extern int drmHandleEvent(int fd, drmEventContextPtr evctx);
770 780
771extern char *drmGetDeviceNameFromFd(int fd); 781extern char *drmGetDeviceNameFromFd(int fd);
772 782
773/* Improved version of drmGetDeviceNameFromFd which attributes for any type of 783/* Improved version of drmGetDeviceNameFromFd which attributes for any type of
774 * device/node - card, control or renderD. 784 * device/node - card, control or renderD.
775 */ 785 */
776extern char *drmGetDeviceNameFromFd2(int fd); 786extern char *drmGetDeviceNameFromFd2(int fd);
777extern int drmGetNodeTypeFromFd(int fd); 787extern int drmGetNodeTypeFromFd(int fd);
778 788
779extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); 789extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd);
@@ -859,19 +869,24 @@ extern void drmFreeDevices(drmDevicePtr  @@ -859,19 +869,24 @@ extern void drmFreeDevices(drmDevicePtr
859#define DRM_DEVICE_GET_PCI_REVISION (1 << 0) 869#define DRM_DEVICE_GET_PCI_REVISION (1 << 0)
860extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); 870extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device);
861extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); 871extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices);
862 872
863extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); 873extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b);
864 874
865extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); 875extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle);
866extern int drmSyncobjDestroy(int fd, uint32_t handle); 876extern int drmSyncobjDestroy(int fd, uint32_t handle);
867extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); 877extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd);
868extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); 878extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle);
869 879
870extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); 880extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd);
871extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); 881extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd);
 882extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles,
 883 int64_t timeout_nsec, unsigned flags,
 884 uint32_t *first_signaled);
 885extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count);
 886extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count);
872 887
873#if defined(__cplusplus) 888#if defined(__cplusplus)
874} 889}
875#endif 890#endif
876 891
877#endif 892#endif

cvs diff -r1.12 -r1.13 xsrc/external/mit/libdrm/dist/xf86drmMode.c (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/xf86drmMode.c 2017/08/29 06:31:24 1.12
+++ xsrc/external/mit/libdrm/dist/xf86drmMode.c 2018/03/14 07:19:26 1.13
@@ -261,54 +261,54 @@ int drmModeAddFB(int fd, uint32_t width, @@ -261,54 +261,54 @@ int drmModeAddFB(int fd, uint32_t width,
261 f.pitch = pitch; 261 f.pitch = pitch;
262 f.bpp = bpp; 262 f.bpp = bpp;
263 f.depth = depth; 263 f.depth = depth;
264 f.handle = bo_handle; 264 f.handle = bo_handle;
265 265
266 if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB, &f))) 266 if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB, &f)))
267 return ret; 267 return ret;
268 268
269 *buf_id = f.fb_id; 269 *buf_id = f.fb_id;
270 return 0; 270 return 0;
271} 271}
272 272
273int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, 273int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
274 uint32_t pixel_format, uint32_t bo_handles[4], 274 uint32_t pixel_format, const uint32_t bo_handles[4],
275 uint32_t pitches[4], uint32_t offsets[4], 275 const uint32_t pitches[4], const uint32_t offsets[4],
276 uint64_t modifier[4], uint32_t *buf_id, uint32_t flags) 276 const uint64_t modifier[4], uint32_t *buf_id, uint32_t flags)
277{ 277{
278 struct drm_mode_fb_cmd2 f; 278 struct drm_mode_fb_cmd2 f;
279 int ret; 279 int ret;
280 280
281 memclear(f); 281 memclear(f);
282 f.width = width; 282 f.width = width;
283 f.height = height; 283 f.height = height;
284 f.pixel_format = pixel_format; 284 f.pixel_format = pixel_format;
285 f.flags = flags; 285 f.flags = flags;
286 memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0])); 286 memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0]));
287 memcpy(f.pitches, pitches, 4 * sizeof(pitches[0])); 287 memcpy(f.pitches, pitches, 4 * sizeof(pitches[0]));
288 memcpy(f.offsets, offsets, 4 * sizeof(offsets[0])); 288 memcpy(f.offsets, offsets, 4 * sizeof(offsets[0]));
289 if (modifier) 289 if (modifier)
290 memcpy(f.modifier, modifier, 4 * sizeof(modifier[0])); 290 memcpy(f.modifier, modifier, 4 * sizeof(modifier[0]));
291 291
292 if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f))) 292 if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f)))
293 return ret; 293 return ret;
294 294
295 *buf_id = f.fb_id; 295 *buf_id = f.fb_id;
296 return 0; 296 return 0;
297} 297}
298 298
299int drmModeAddFB2(int fd, uint32_t width, uint32_t height, 299int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
300 uint32_t pixel_format, uint32_t bo_handles[4], 300 uint32_t pixel_format, const uint32_t bo_handles[4],
301 uint32_t pitches[4], uint32_t offsets[4], 301 const uint32_t pitches[4], const uint32_t offsets[4],
302 uint32_t *buf_id, uint32_t flags) 302 uint32_t *buf_id, uint32_t flags)
303{ 303{
304 return drmModeAddFB2WithModifiers(fd, width, height, 304 return drmModeAddFB2WithModifiers(fd, width, height,
305 pixel_format, bo_handles, 305 pixel_format, bo_handles,
306 pitches, offsets, NULL, 306 pitches, offsets, NULL,
307 buf_id, flags); 307 buf_id, flags);
308} 308}
309 309
310int drmModeRmFB(int fd, uint32_t bufferId) 310int drmModeRmFB(int fd, uint32_t bufferId)
311{ 311{
312 return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId); 312 return DRM_IOCTL(fd, DRM_IOCTL_MODE_RMFB, &bufferId);
313} 313}
314 314
@@ -892,26 +892,27 @@ int drmModeCrtcSetGamma(int fd, uint32_t @@ -892,26 +892,27 @@ int drmModeCrtcSetGamma(int fd, uint32_t
892 l.red = VOID2U64(red); 892 l.red = VOID2U64(red);
893 l.green = VOID2U64(green); 893 l.green = VOID2U64(green);
894 l.blue = VOID2U64(blue); 894 l.blue = VOID2U64(blue);
895 895
896 return DRM_IOCTL(fd, DRM_IOCTL_MODE_SETGAMMA, &l); 896 return DRM_IOCTL(fd, DRM_IOCTL_MODE_SETGAMMA, &l);
897} 897}
898 898
899int drmHandleEvent(int fd, drmEventContextPtr evctx) 899int drmHandleEvent(int fd, drmEventContextPtr evctx)
900{ 900{
901 char buffer[1024]; 901 char buffer[1024];
902 int len, i; 902 int len, i;
903 struct drm_event *e; 903 struct drm_event *e;
904 struct drm_event_vblank *vblank; 904 struct drm_event_vblank *vblank;
 905 struct drm_event_crtc_sequence *seq;
905 void *user_data; 906 void *user_data;
906 907
907 /* The DRM read semantics guarantees that we always get only 908 /* The DRM read semantics guarantees that we always get only
908 * complete events. */ 909 * complete events. */
909 910
910 len = read(fd, buffer, sizeof buffer); 911 len = read(fd, buffer, sizeof buffer);
911 if (len == 0) 912 if (len == 0)
912 return 0; 913 return 0;
913 if (len < (int)sizeof *e) 914 if (len < (int)sizeof *e)
914 return -1; 915 return -1;
915 916
916 i = 0; 917 i = 0;
917 while (i < len) { 918 while (i < len) {
@@ -936,26 +937,34 @@ int drmHandleEvent(int fd, drmEventConte @@ -936,26 +937,34 @@ int drmHandleEvent(int fd, drmEventConte
936 evctx->page_flip_handler2(fd, 937 evctx->page_flip_handler2(fd,
937 vblank->sequence, 938 vblank->sequence,
938 vblank->tv_sec, 939 vblank->tv_sec,
939 vblank->tv_usec, 940 vblank->tv_usec,
940 vblank->crtc_id, 941 vblank->crtc_id,
941 user_data); 942 user_data);
942 else if (evctx->version >= 2 && evctx->page_flip_handler) 943 else if (evctx->version >= 2 && evctx->page_flip_handler)
943 evctx->page_flip_handler(fd, 944 evctx->page_flip_handler(fd,
944 vblank->sequence, 945 vblank->sequence,
945 vblank->tv_sec, 946 vblank->tv_sec,
946 vblank->tv_usec, 947 vblank->tv_usec,
947 user_data); 948 user_data);
948 break; 949 break;
 950 case DRM_EVENT_CRTC_SEQUENCE:
 951 seq = (struct drm_event_crtc_sequence *) e;
 952 if (evctx->version >= 4 && evctx->sequence_handler)
 953 evctx->sequence_handler(fd,
 954 seq->sequence,
 955 seq->time_ns,
 956 seq->user_data);
 957 break;
949 default: 958 default:
950 break; 959 break;
951 } 960 }
952 i += e->length; 961 i += e->length;
953 } 962 }
954 963
955 return 0; 964 return 0;
956} 965}
957 966
958int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, 967int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id,
959 uint32_t flags, void *user_data) 968 uint32_t flags, void *user_data)
960{ 969{
961 struct drm_mode_crtc_page_flip flip; 970 struct drm_mode_crtc_page_flip flip;
@@ -1488,13 +1497,102 @@ drmModeCreatePropertyBlob(int fd, const  @@ -1488,13 +1497,102 @@ drmModeCreatePropertyBlob(int fd, const
1488 *id = create.blob_id; 1497 *id = create.blob_id;
1489 return 0; 1498 return 0;
1490} 1499}
1491 1500
1492int 1501int
1493drmModeDestroyPropertyBlob(int fd, uint32_t id) 1502drmModeDestroyPropertyBlob(int fd, uint32_t id)
1494{ 1503{
1495 struct drm_mode_destroy_blob destroy; 1504 struct drm_mode_destroy_blob destroy;
1496 1505
1497 memclear(destroy); 1506 memclear(destroy);
1498 destroy.blob_id = id; 1507 destroy.blob_id = id;
1499 return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy); 1508 return DRM_IOCTL(fd, DRM_IOCTL_MODE_DESTROYPROPBLOB, &destroy);
1500} 1509}
 1510
 1511int
 1512drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id)
 1513{
 1514 struct drm_mode_create_lease create;
 1515 int ret;
 1516
 1517 memclear(create);
 1518 create.object_ids = (uintptr_t) objects;
 1519 create.object_count = num_objects;
 1520 create.flags = flags;
 1521
 1522 ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_CREATE_LEASE, &create);
 1523 if (ret == 0) {
 1524 *lessee_id = create.lessee_id;
 1525 return create.fd;
 1526 }
 1527 return -errno;
 1528}
 1529
 1530drmModeLesseeListPtr
 1531drmModeListLessees(int fd)
 1532{
 1533 struct drm_mode_list_lessees list;
 1534 uint32_t count;
 1535 drmModeLesseeListPtr ret;
 1536
 1537 memclear(list);
 1538
 1539 if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list))
 1540 return NULL;
 1541
 1542 count = list.count_lessees;
 1543 ret = drmMalloc(sizeof (drmModeLesseeListRes) + count * sizeof (ret->lessees[0]));
 1544 if (!ret)
 1545 return NULL;
 1546
 1547 list.lessees_ptr = VOID2U64(&ret->lessees[0]);
 1548 if (DRM_IOCTL(fd, DRM_IOCTL_MODE_LIST_LESSEES, &list)) {
 1549 drmFree(ret);
 1550 return NULL;
 1551 }
 1552
 1553 ret->count = count;
 1554 return ret;
 1555}
 1556
 1557drmModeObjectListPtr
 1558drmModeGetLease(int fd)
 1559{
 1560 struct drm_mode_get_lease get;
 1561 uint32_t count;
 1562 drmModeObjectListPtr ret;
 1563
 1564 memclear(get);
 1565
 1566 if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get))
 1567 return NULL;
 1568
 1569 count = get.count_objects;
 1570 ret = drmMalloc(sizeof (drmModeObjectListRes) + count * sizeof (ret->objects[0]));
 1571 if (!ret)
 1572 return NULL;
 1573
 1574 get.objects_ptr = VOID2U64(&ret->objects[0]);
 1575 if (DRM_IOCTL(fd, DRM_IOCTL_MODE_GET_LEASE, &get)) {
 1576 drmFree(ret);
 1577 return NULL;
 1578 }
 1579
 1580 ret->count = count;
 1581 return ret;
 1582}
 1583
 1584int
 1585drmModeRevokeLease(int fd, uint32_t lessee_id)
 1586{
 1587 struct drm_mode_revoke_lease revoke;
 1588 int ret;
 1589
 1590 memclear(revoke);
 1591
 1592 revoke.lessee_id = lessee_id;
 1593
 1594 ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_REVOKE_LEASE, &revoke);
 1595 if (ret == 0)
 1596 return 0;
 1597 return -errno;
 1598}

cvs diff -r1.7 -r1.8 xsrc/external/mit/libdrm/dist/xf86drmMode.h (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/xf86drmMode.h 2017/03/04 23:22:48 1.7
+++ xsrc/external/mit/libdrm/dist/xf86drmMode.h 2018/03/14 07:19:26 1.8
@@ -359,35 +359,36 @@ extern drmModeResPtr drmModeGetResources @@ -359,35 +359,36 @@ extern drmModeResPtr drmModeGetResources
359/** 359/**
360 * Retrive information about framebuffer bufferId 360 * Retrive information about framebuffer bufferId
361 */ 361 */
362extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId); 362extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
363 363
364/** 364/**
365 * Creates a new framebuffer with an buffer object as its scanout buffer. 365 * Creates a new framebuffer with an buffer object as its scanout buffer.
366 */ 366 */
367extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth, 367extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
368 uint8_t bpp, uint32_t pitch, uint32_t bo_handle, 368 uint8_t bpp, uint32_t pitch, uint32_t bo_handle,
369 uint32_t *buf_id); 369 uint32_t *buf_id);
370/* ...with a specific pixel format */ 370/* ...with a specific pixel format */
371extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height, 371extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
372 uint32_t pixel_format, uint32_t bo_handles[4], 372 uint32_t pixel_format, const uint32_t bo_handles[4],
373 uint32_t pitches[4], uint32_t offsets[4], 373 const uint32_t pitches[4], const uint32_t offsets[4],
374 uint32_t *buf_id, uint32_t flags); 374 uint32_t *buf_id, uint32_t flags);
375 375
376/* ...with format modifiers */ 376/* ...with format modifiers */
377int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height, 377int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
378 uint32_t pixel_format, uint32_t bo_handles[4], 378 uint32_t pixel_format, const uint32_t bo_handles[4],
379 uint32_t pitches[4], uint32_t offsets[4], 379 const uint32_t pitches[4], const uint32_t offsets[4],
380 uint64_t modifier[4], uint32_t *buf_id, uint32_t flags); 380 const uint64_t modifier[4], uint32_t *buf_id,
 381 uint32_t flags);
381 382
382/** 383/**
383 * Destroies the given framebuffer. 384 * Destroies the given framebuffer.
384 */ 385 */
385extern int drmModeRmFB(int fd, uint32_t bufferId); 386extern int drmModeRmFB(int fd, uint32_t bufferId);
386 387
387/** 388/**
388 * Mark a region of a framebuffer as dirty. 389 * Mark a region of a framebuffer as dirty.
389 */ 390 */
390extern int drmModeDirtyFB(int fd, uint32_t bufferId, 391extern int drmModeDirtyFB(int fd, uint32_t bufferId,
391 drmModeClipPtr clips, uint32_t num_clips); 392 drmModeClipPtr clips, uint32_t num_clips);
392 393
393 394
@@ -510,19 +511,41 @@ extern void drmModeAtomicSetCursor(drmMo @@ -510,19 +511,41 @@ extern void drmModeAtomicSetCursor(drmMo
510extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, 511extern int drmModeAtomicAddProperty(drmModeAtomicReqPtr req,
511 uint32_t object_id, 512 uint32_t object_id,
512 uint32_t property_id, 513 uint32_t property_id,
513 uint64_t value); 514 uint64_t value);
514extern int drmModeAtomicCommit(int fd, 515extern int drmModeAtomicCommit(int fd,
515 drmModeAtomicReqPtr req, 516 drmModeAtomicReqPtr req,
516 uint32_t flags, 517 uint32_t flags,
517 void *user_data); 518 void *user_data);
518 519
519extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size, 520extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
520 uint32_t *id); 521 uint32_t *id);
521extern int drmModeDestroyPropertyBlob(int fd, uint32_t id); 522extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
522 523
 524/*
 525 * DRM mode lease APIs. These create and manage new drm_masters with
 526 * access to a subset of the available DRM resources
 527 */
 528
 529extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id);
 530
 531typedef struct drmModeLesseeList {
 532 uint32_t count;
 533 uint32_t lessees[0];
 534} drmModeLesseeListRes, *drmModeLesseeListPtr;
 535
 536extern drmModeLesseeListPtr drmModeListLessees(int fd);
 537
 538typedef struct drmModeObjectList {
 539 uint32_t count;
 540 uint32_t objects[0];
 541} drmModeObjectListRes, *drmModeObjectListPtr;
 542
 543extern drmModeObjectListPtr drmModeGetLease(int fd);
 544
 545extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
523 546
524#if defined(__cplusplus) 547#if defined(__cplusplus)
525} 548}
526#endif 549#endif
527 550
528#endif 551#endif

cvs diff -r1.8 -r1.9 xsrc/external/mit/libdrm/dist/include/drm/drm.h (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/include/drm/drm.h 2017/08/29 06:31:24 1.8
+++ xsrc/external/mit/libdrm/dist/include/drm/drm.h 2018/03/14 07:19:26 1.9
@@ -684,44 +684,85 @@ struct drm_set_client_cap { @@ -684,44 +684,85 @@ struct drm_set_client_cap {
684#define DRM_CLOEXEC O_CLOEXEC 684#define DRM_CLOEXEC O_CLOEXEC
685struct drm_prime_handle { 685struct drm_prime_handle {
686 __u32 handle; 686 __u32 handle;
687 687
688 /** Flags.. only applicable for handle->fd */ 688 /** Flags.. only applicable for handle->fd */
689 __u32 flags; 689 __u32 flags;
690 690
691 /** Returned dmabuf file descriptor */ 691 /** Returned dmabuf file descriptor */
692 __s32 fd; 692 __s32 fd;
693}; 693};
694 694
695struct drm_syncobj_create { 695struct drm_syncobj_create {
696 __u32 handle; 696 __u32 handle;
 697#define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0)
697 __u32 flags; 698 __u32 flags;
698}; 699};
699 700
700struct drm_syncobj_destroy { 701struct drm_syncobj_destroy {
701 __u32 handle; 702 __u32 handle;
702 __u32 pad; 703 __u32 pad;
703}; 704};
704 705
705#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) 706#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0)
706#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) 707#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0)
707struct drm_syncobj_handle { 708struct drm_syncobj_handle {
708 __u32 handle; 709 __u32 handle;
709 __u32 flags; 710 __u32 flags;
710 711
711 __s32 fd; 712 __s32 fd;
712 __u32 pad; 713 __u32 pad;
713}; 714};
714 715
 716#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0)
 717#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1)
 718struct drm_syncobj_wait {
 719 __u64 handles;
 720 /* absolute timeout */
 721 __s64 timeout_nsec;
 722 __u32 count_handles;
 723 __u32 flags;
 724 __u32 first_signaled; /* only valid when not waiting all */
 725 __u32 pad;
 726};
 727
 728struct drm_syncobj_array {
 729 __u64 handles;
 730 __u32 count_handles;
 731 __u32 pad;
 732};
 733
 734/* Query current scanout sequence number */
 735struct drm_crtc_get_sequence {
 736 __u32 crtc_id; /* requested crtc_id */
 737 __u32 active; /* return: crtc output is active */
 738 __u64 sequence; /* return: most recent vblank sequence */
 739 __s64 sequence_ns; /* return: most recent time of first pixel out */
 740};
 741
 742/* Queue event to be delivered at specified sequence. Time stamp marks
 743 * when the first pixel of the refresh cycle leaves the display engine
 744 * for the display
 745 */
 746#define DRM_CRTC_SEQUENCE_RELATIVE 0x00000001 /* sequence is relative to current */
 747#define DRM_CRTC_SEQUENCE_NEXT_ON_MISS 0x00000002 /* Use next sequence if we've missed */
 748
 749struct drm_crtc_queue_sequence {
 750 __u32 crtc_id;
 751 __u32 flags;
 752 __u64 sequence; /* on input, target sequence. on output, actual sequence */
 753 __u64 user_data; /* user data passed to event */
 754};
 755
715#if defined(__cplusplus) 756#if defined(__cplusplus)
716} 757}
717#endif 758#endif
718 759
719#include "drm_mode.h" 760#include "drm_mode.h"
720 761
721#if defined(__cplusplus) 762#if defined(__cplusplus)
722extern "C" { 763extern "C" {
723#endif 764#endif
724 765
725#define DRM_IOCTL_BASE 'd' 766#define DRM_IOCTL_BASE 'd'
726#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr) 767#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr)
727#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type) 768#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type)
@@ -784,26 +825,29 @@ extern "C" { @@ -784,26 +825,29 @@ extern "C" {
784#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31) 825#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31)
785#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode) 826#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode)
786#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info) 827#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info)
787#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer) 828#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer)
788#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer) 829#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer)
789#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding) 830#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding)
790#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding) 831#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding)
791 832
792#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather) 833#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather)
793#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather) 834#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather)
794 835
795#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank) 836#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank)
796 837
 838#define DRM_IOCTL_CRTC_GET_SEQUENCE DRM_IOWR(0x3b, struct drm_crtc_get_sequence)
 839#define DRM_IOCTL_CRTC_QUEUE_SEQUENCE DRM_IOWR(0x3c, struct drm_crtc_queue_sequence)
 840
797#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw) 841#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw)
798 842
799#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res) 843#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res)
800#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc) 844#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc)
801#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc) 845#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc)
802#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor) 846#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor)
803#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut) 847#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
804#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut) 848#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
805#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder) 849#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder)
806#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector) 850#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector)
807#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */ 851#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd) /* deprecated (never worked) */
808#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */ 852#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd) /* deprecated (never worked) */
809 853
@@ -824,26 +868,34 @@ extern "C" { @@ -824,26 +868,34 @@ extern "C" {
824#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane) 868#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane)
825#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2) 869#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2)
826#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties) 870#define DRM_IOCTL_MODE_OBJ_GETPROPERTIES DRM_IOWR(0xB9, struct drm_mode_obj_get_properties)
827#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property) 871#define DRM_IOCTL_MODE_OBJ_SETPROPERTY DRM_IOWR(0xBA, struct drm_mode_obj_set_property)
828#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2) 872#define DRM_IOCTL_MODE_CURSOR2 DRM_IOWR(0xBB, struct drm_mode_cursor2)
829#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic) 873#define DRM_IOCTL_MODE_ATOMIC DRM_IOWR(0xBC, struct drm_mode_atomic)
830#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) 874#define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob)
831#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) 875#define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob)
832 876
833#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) 877#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create)
834#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) 878#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy)
835#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) 879#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle)
836#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) 880#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle)
 881#define DRM_IOCTL_SYNCOBJ_WAIT DRM_IOWR(0xC3, struct drm_syncobj_wait)
 882#define DRM_IOCTL_SYNCOBJ_RESET DRM_IOWR(0xC4, struct drm_syncobj_array)
 883#define DRM_IOCTL_SYNCOBJ_SIGNAL DRM_IOWR(0xC5, struct drm_syncobj_array)
 884
 885#define DRM_IOCTL_MODE_CREATE_LEASE DRM_IOWR(0xC6, struct drm_mode_create_lease)
 886#define DRM_IOCTL_MODE_LIST_LESSEES DRM_IOWR(0xC7, struct drm_mode_list_lessees)
 887#define DRM_IOCTL_MODE_GET_LEASE DRM_IOWR(0xC8, struct drm_mode_get_lease)
 888#define DRM_IOCTL_MODE_REVOKE_LEASE DRM_IOWR(0xC9, struct drm_mode_revoke_lease)
837 889
838/** 890/**
839 * Device specific ioctls should only be in their respective headers 891 * Device specific ioctls should only be in their respective headers
840 * The device specific ioctl range is from 0x40 to 0x9f. 892 * The device specific ioctl range is from 0x40 to 0x9f.
841 * Generic IOCTLS restart at 0xA0. 893 * Generic IOCTLS restart at 0xA0.
842 * 894 *
843 * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and 895 * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
844 * drmCommandReadWrite(). 896 * drmCommandReadWrite().
845 */ 897 */
846#define DRM_COMMAND_BASE 0x40 898#define DRM_COMMAND_BASE 0x40
847#define DRM_COMMAND_END 0xA0 899#define DRM_COMMAND_END 0xA0
848 900
849/** 901/**
@@ -855,36 +907,47 @@ extern "C" { @@ -855,36 +907,47 @@ extern "C" {
855 * events, that is, if for example the read buffer is 100 bytes, and 907 * events, that is, if for example the read buffer is 100 bytes, and
856 * there are two 64 byte events pending, only one will be returned. 908 * there are two 64 byte events pending, only one will be returned.
857 * 909 *
858 * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and 910 * Event types 0 - 0x7fffffff are generic drm events, 0x80000000 and
859 * up are chipset specific. 911 * up are chipset specific.
860 */ 912 */
861struct drm_event { 913struct drm_event {
862 __u32 type; 914 __u32 type;
863 __u32 length; 915 __u32 length;
864}; 916};
865 917
866#define DRM_EVENT_VBLANK 0x01 918#define DRM_EVENT_VBLANK 0x01
867#define DRM_EVENT_FLIP_COMPLETE 0x02 919#define DRM_EVENT_FLIP_COMPLETE 0x02
 920#define DRM_EVENT_CRTC_SEQUENCE 0x03
868 921
869struct drm_event_vblank { 922struct drm_event_vblank {
870 struct drm_event base; 923 struct drm_event base;
871 __u64 user_data; 924 __u64 user_data;
872 __u32 tv_sec; 925 __u32 tv_sec;
873 __u32 tv_usec; 926 __u32 tv_usec;
874 __u32 sequence; 927 __u32 sequence;
875 __u32 crtc_id; /* 0 on older kernels that do not support this */ 928 __u32 crtc_id; /* 0 on older kernels that do not support this */
876}; 929};
877 930
 931/* Event delivered at sequence. Time stamp marks when the first pixel
 932 * of the refresh cycle leaves the display engine for the display
 933 */
 934struct drm_event_crtc_sequence {
 935 struct drm_event base;
 936 __u64 user_data;
 937 __s64 time_ns;
 938 __u64 sequence;
 939};
 940
878/* typedef area */ 941/* typedef area */
879typedef struct drm_clip_rect drm_clip_rect_t; 942typedef struct drm_clip_rect drm_clip_rect_t;
880typedef struct drm_drawable_info drm_drawable_info_t; 943typedef struct drm_drawable_info drm_drawable_info_t;
881typedef struct drm_tex_region drm_tex_region_t; 944typedef struct drm_tex_region drm_tex_region_t;
882typedef struct drm_hw_lock drm_hw_lock_t; 945typedef struct drm_hw_lock drm_hw_lock_t;
883typedef struct drm_version drm_version_t; 946typedef struct drm_version drm_version_t;
884typedef struct drm_unique drm_unique_t; 947typedef struct drm_unique drm_unique_t;
885typedef struct drm_list drm_list_t; 948typedef struct drm_list drm_list_t;
886typedef struct drm_block drm_block_t; 949typedef struct drm_block drm_block_t;
887typedef struct drm_control drm_control_t; 950typedef struct drm_control drm_control_t;
888typedef enum drm_map_type drm_map_type_t; 951typedef enum drm_map_type drm_map_type_t;
889typedef enum drm_map_flags drm_map_flags_t; 952typedef enum drm_map_flags drm_map_flags_t;
890typedef struct drm_ctx_priv_map drm_ctx_priv_map_t; 953typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;

cvs diff -r1.14 -r1.15 xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c 2017/08/29 06:31:24 1.14
+++ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c 2018/03/14 07:19:26 1.15
@@ -57,27 +57,27 @@ @@ -57,27 +57,27 @@
57#ifndef ETIME 57#ifndef ETIME
58#define ETIME ETIMEDOUT 58#define ETIME ETIMEDOUT
59#endif 59#endif
60#include "libdrm_macros.h" 60#include "libdrm_macros.h"
61#include "libdrm_lists.h" 61#include "libdrm_lists.h"
62#include "intel_bufmgr.h" 62#include "intel_bufmgr.h"
63#include "intel_bufmgr_priv.h" 63#include "intel_bufmgr_priv.h"
64#include "intel_chipset.h" 64#include "intel_chipset.h"
65#include "string.h" 65#include "string.h"
66 66
67#include "i915_drm.h" 67#include "i915_drm.h"
68#include "uthash.h" 68#include "uthash.h"
69 69
70#ifdef HAVE_VALGRIND 70#if HAVE_VALGRIND
71#include <valgrind.h> 71#include <valgrind.h>
72#include <memcheck.h> 72#include <memcheck.h>
73#define VG(x) x 73#define VG(x) x
74#else 74#else
75#define VG(x) 75#define VG(x)
76#endif 76#endif
77 77
78#define memclear(s) memset(&s, 0, sizeof(s)) 78#define memclear(s) memset(&s, 0, sizeof(s))
79 79
80#define DBG(...) do { \ 80#define DBG(...) do { \
81 if (bufmgr_gem->bufmgr.debug) \ 81 if (bufmgr_gem->bufmgr.debug) \
82 fprintf(stderr, __VA_ARGS__); \ 82 fprintf(stderr, __VA_ARGS__); \
83} while (0) 83} while (0)
@@ -1618,27 +1618,27 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b @@ -1618,27 +1618,27 @@ drm_intel_gem_bo_map_gtt(drm_intel_bo *b
1618 * This is used in the implementation of GL_ARB_map_buffer_range: The 1618 * This is used in the implementation of GL_ARB_map_buffer_range: The
1619 * user asks to create a buffer, then does a mapping, fills some 1619 * user asks to create a buffer, then does a mapping, fills some
1620 * space, runs a drawing command, then asks to map it again without 1620 * space, runs a drawing command, then asks to map it again without
1621 * synchronizing because it guarantees that it won't write over the 1621 * synchronizing because it guarantees that it won't write over the
1622 * data that the GPU is busy using (or, more specifically, that if it 1622 * data that the GPU is busy using (or, more specifically, that if it
1623 * does write over the data, it acknowledges that rendering is 1623 * does write over the data, it acknowledges that rendering is
1624 * undefined). 1624 * undefined).
1625 */ 1625 */
1626 1626
1627int 1627int
1628drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo) 1628drm_intel_gem_bo_map_unsynchronized(drm_intel_bo *bo)
1629{ 1629{
1630 drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; 1630 drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
1631#ifdef HAVE_VALGRIND 1631#if HAVE_VALGRIND
1632 drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; 1632 drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
1633#endif 1633#endif
1634 int ret; 1634 int ret;
1635 1635
1636 /* If the CPU cache isn't coherent with the GTT, then use a 1636 /* If the CPU cache isn't coherent with the GTT, then use a
1637 * regular synchronized mapping. The problem is that we don't 1637 * regular synchronized mapping. The problem is that we don't
1638 * track where the buffer was last used on the CPU side in 1638 * track where the buffer was last used on the CPU side in
1639 * terms of drm_intel_bo_map vs drm_intel_gem_bo_map_gtt, so 1639 * terms of drm_intel_bo_map vs drm_intel_gem_bo_map_gtt, so
1640 * we would potentially corrupt the buffer even when the user 1640 * we would potentially corrupt the buffer even when the user
1641 * does reasonable things. 1641 * does reasonable things.
1642 */ 1642 */
1643 if (!bufmgr_gem->has_llc) 1643 if (!bufmgr_gem->has_llc)
1644 return drm_intel_gem_bo_map_gtt(bo); 1644 return drm_intel_gem_bo_map_gtt(bo);

cvs diff -r1.10 -r1.11 xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c (expand / switch to unified diff)

--- xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c 2017/08/29 06:31:24 1.10
+++ xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c 2018/03/14 07:19:26 1.11
@@ -241,26 +241,109 @@ static void dump_blob(struct device *dev @@ -241,26 +241,109 @@ static void dump_blob(struct device *dev
241 241
242 blob_data = blob->data; 242 blob_data = blob->data;
243 243
244 for (i = 0; i < blob->length; i++) { 244 for (i = 0; i < blob->length; i++) {
245 if (i % 16 == 0) 245 if (i % 16 == 0)
246 printf("\n\t\t\t"); 246 printf("\n\t\t\t");
247 printf("%.2hhx", blob_data[i]); 247 printf("%.2hhx", blob_data[i]);
248 } 248 }
249 printf("\n"); 249 printf("\n");
250 250
251 drmModeFreePropertyBlob(blob); 251 drmModeFreePropertyBlob(blob);
252} 252}
253 253
 254static const char *modifier_to_string(uint64_t modifier)
 255{
 256 switch (modifier) {
 257 case DRM_FORMAT_MOD_INVALID:
 258 return "INVALID";
 259 case DRM_FORMAT_MOD_LINEAR:
 260 return "LINEAR";
 261 case I915_FORMAT_MOD_X_TILED:
 262 return "X_TILED";
 263 case I915_FORMAT_MOD_Y_TILED:
 264 return "Y_TILED";
 265 case I915_FORMAT_MOD_Yf_TILED:
 266 return "Yf_TILED";
 267 case I915_FORMAT_MOD_Y_TILED_CCS:
 268 return "Y_TILED_CCS";
 269 case I915_FORMAT_MOD_Yf_TILED_CCS:
 270 return "Yf_TILED_CCS";
 271 case DRM_FORMAT_MOD_SAMSUNG_64_32_TILE:
 272 return "SAMSUNG_64_32_TILE";
 273 case DRM_FORMAT_MOD_VIVANTE_TILED:
 274 return "VIVANTE_TILED";
 275 case DRM_FORMAT_MOD_VIVANTE_SUPER_TILED:
 276 return "VIVANTE_SUPER_TILED";
 277 case DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED:
 278 return "VIVANTE_SPLIT_TILED";
 279 case DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED:
 280 return "VIVANTE_SPLIT_SUPER_TILED";
 281 case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED:
 282 return "NVIDIA_TEGRA_TILED";
 283 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0):
 284 return "NVIDIA_16BX2_BLOCK(0)";
 285 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1):
 286 return "NVIDIA_16BX2_BLOCK(1)";
 287 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2):
 288 return "NVIDIA_16BX2_BLOCK(2)";
 289 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3):
 290 return "NVIDIA_16BX2_BLOCK(3)";
 291 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4):
 292 return "NVIDIA_16BX2_BLOCK(4)";
 293 case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5):
 294 return "NVIDIA_16BX2_BLOCK(5)";
 295 case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED:
 296 return "MOD_BROADCOM_VC4_T_TILED";
 297 default:
 298 return "(UNKNOWN MODIFIER)";
 299 }
 300}
 301
 302static void dump_in_formats(struct device *dev, uint32_t blob_id)
 303{
 304 uint32_t i, j;
 305 drmModePropertyBlobPtr blob;
 306 struct drm_format_modifier_blob *header;
 307 uint32_t *formats;
 308 struct drm_format_modifier *modifiers;
 309
 310 printf("\t\tin_formats blob decoded:\n");
 311 blob = drmModeGetPropertyBlob(dev->fd, blob_id);
 312 if (!blob) {
 313 printf("\n");
 314 return;
 315 }
 316
 317 header = blob->data;
 318 formats = (uint32_t *) ((char *) header + header->formats_offset);
 319 modifiers = (struct drm_format_modifier *)
 320 ((char *) header + header->modifiers_offset);
 321
 322 for (i = 0; i < header->count_formats; i++) {
 323 printf("\t\t\t");
 324 dump_fourcc(formats[i]);
 325 printf(": ");
 326 for (j = 0; j < header->count_modifiers; j++) {
 327 uint64_t mask = 1ULL << i;
 328 if (modifiers[j].formats & mask)
 329 printf(" %s", modifier_to_string(modifiers[j].modifier));
 330 }
 331 printf("\n");
 332 }
 333
 334 drmModeFreePropertyBlob(blob);
 335}
 336
254static void dump_prop(struct device *dev, drmModePropertyPtr prop, 337static void dump_prop(struct device *dev, drmModePropertyPtr prop,
255 uint32_t prop_id, uint64_t value) 338 uint32_t prop_id, uint64_t value)
256{ 339{
257 int i; 340 int i;
258 printf("\t%d", prop_id); 341 printf("\t%d", prop_id);
259 if (!prop) { 342 if (!prop) {
260 printf("\n"); 343 printf("\n");
261 return; 344 return;
262 } 345 }
263 346
264 printf(" %s:\n", prop->name); 347 printf(" %s:\n", prop->name);
265 348
266 printf("\t\tflags:"); 349 printf("\t\tflags:");
@@ -318,26 +401,29 @@ static void dump_prop(struct device *dev @@ -318,26 +401,29 @@ static void dump_prop(struct device *dev
318 dump_blob(dev, prop->blob_ids[i]); 401 dump_blob(dev, prop->blob_ids[i]);
319 printf("\n"); 402 printf("\n");
320 } else { 403 } else {
321 assert(prop->count_blobs == 0); 404 assert(prop->count_blobs == 0);
322 } 405 }
323 406
324 printf("\t\tvalue:"); 407 printf("\t\tvalue:");
325 if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) 408 if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
326 dump_blob(dev, value); 409 dump_blob(dev, value);
327 else if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) 410 else if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE))
328 printf(" %"PRId64"\n", value); 411 printf(" %"PRId64"\n", value);
329 else 412 else
330 printf(" %"PRIu64"\n", value); 413 printf(" %"PRIu64"\n", value);
 414
 415 if (strcmp(prop->name, "IN_FORMATS") == 0)
 416 dump_in_formats(dev, value);
331} 417}
332 418
333static void dump_connectors(struct device *dev) 419static void dump_connectors(struct device *dev)
334{ 420{
335 int i, j; 421 int i, j;
336 422
337 printf("Connectors:\n"); 423 printf("Connectors:\n");
338 printf("id\tencoder\tstatus\t\tname\t\tsize (mm)\tmodes\tencoders\n"); 424 printf("id\tencoder\tstatus\t\tname\t\tsize (mm)\tmodes\tencoders\n");
339 for (i = 0; i < dev->resources->res->count_connectors; i++) { 425 for (i = 0; i < dev->resources->res->count_connectors; i++) {
340 struct connector *_connector = &dev->resources->connectors[i]; 426 struct connector *_connector = &dev->resources->connectors[i];
341 drmModeConnector *connector = _connector->connector; 427 drmModeConnector *connector = _connector->connector;
342 if (!connector) 428 if (!connector)
343 continue; 429 continue;
@@ -562,30 +648,33 @@ static struct resources *get_resources(s @@ -562,30 +648,33 @@ static struct resources *get_resources(s
562 strerror(errno)); \ 648 strerror(errno)); \
563 } \ 649 } \
564 } while (0) 650 } while (0)
565 651
566 get_resource(res, res, crtc, Crtc); 652 get_resource(res, res, crtc, Crtc);
567 get_resource(res, res, encoder, Encoder); 653 get_resource(res, res, encoder, Encoder);
568 get_resource(res, res, connector, Connector); 654 get_resource(res, res, connector, Connector);
569 get_resource(res, res, fb, FB); 655 get_resource(res, res, fb, FB);
570 656
571 /* Set the name of all connectors based on the type name and the per-type ID. */ 657 /* Set the name of all connectors based on the type name and the per-type ID. */
572 for (i = 0; i < res->res->count_connectors; i++) { 658 for (i = 0; i < res->res->count_connectors; i++) {
573 struct connector *connector = &res->connectors[i]; 659 struct connector *connector = &res->connectors[i];
574 drmModeConnector *conn = connector->connector; 660 drmModeConnector *conn = connector->connector;
 661 int num;
575 662
576 asprintf(&connector->name, "%s-%u", 663 num = asprintf(&connector->name, "%s-%u",
577 util_lookup_connector_type_name(conn->connector_type), 664 util_lookup_connector_type_name(conn->connector_type),
578 conn->connector_type_id); 665 conn->connector_type_id);
 666 if (num < 0)
 667 goto error;
579 } 668 }
580 669
581#define get_properties(_res, __res, type, Type) \ 670#define get_properties(_res, __res, type, Type) \
582 do { \ 671 do { \
583 for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \ 672 for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \
584 struct type *obj = &res->type##s[i]; \ 673 struct type *obj = &res->type##s[i]; \
585 unsigned int j; \ 674 unsigned int j; \
586 obj->props = \ 675 obj->props = \
587 drmModeObjectGetProperties(dev->fd, obj->type->type##_id, \ 676 drmModeObjectGetProperties(dev->fd, obj->type->type##_id, \
588 DRM_MODE_OBJECT_##Type); \ 677 DRM_MODE_OBJECT_##Type); \
589 if (!obj->props) { \ 678 if (!obj->props) { \
590 fprintf(stderr, \ 679 fprintf(stderr, \
591 "could not get %s %i properties: %s\n", \ 680 "could not get %s %i properties: %s\n", \
@@ -997,27 +1086,28 @@ static int set_plane(struct device *dev, @@ -997,27 +1086,28 @@ static int set_plane(struct device *dev,
997 plane_id = p->plane_id; 1086 plane_id = p->plane_id;
998 1087
999 for (i = 0; i < dev->resources->plane_res->count_planes; i++) { 1088 for (i = 0; i < dev->resources->plane_res->count_planes; i++) {
1000 ovr = dev->resources->planes[i].plane; 1089 ovr = dev->resources->planes[i].plane;
1001 if (!ovr) 1090 if (!ovr)
1002 continue; 1091 continue;
1003 1092
1004 if (plane_id && plane_id != ovr->plane_id) 1093 if (plane_id && plane_id != ovr->plane_id)
1005 continue; 1094 continue;
1006 1095
1007 if (!format_support(ovr, p->fourcc)) 1096 if (!format_support(ovr, p->fourcc))
1008 continue; 1097 continue;
1009 1098
1010 if ((ovr->possible_crtcs & (1 << pipe)) && !ovr->crtc_id) { 1099 if ((ovr->possible_crtcs & (1 << pipe)) &&
 1100 (ovr->crtc_id == 0 || ovr->crtc_id == p->crtc_id)) {
1011 plane_id = ovr->plane_id; 1101 plane_id = ovr->plane_id;
1012 break; 1102 break;
1013 } 1103 }
1014 } 1104 }
1015 1105
1016 if (i == dev->resources->plane_res->count_planes) { 1106 if (i == dev->resources->plane_res->count_planes) {
1017 fprintf(stderr, "no unused plane available for CRTC %u\n", 1107 fprintf(stderr, "no unused plane available for CRTC %u\n",
1018 crtc->crtc->crtc_id); 1108 crtc->crtc->crtc_id);
1019 return -1; 1109 return -1;
1020 } 1110 }
1021 1111
1022 fprintf(stderr, "testing %dx%d@%s overlay plane %u\n", 1112 fprintf(stderr, "testing %dx%d@%s overlay plane %u\n",
1023 p->w, p->h, p->format_str, plane_id); 1113 p->w, p->h, p->format_str, plane_id);