- upstream released 2.4.17

This commit is contained in:
Dave Airlie 2009-12-21 05:23:07 +00:00
parent 5f40a30649
commit f432f3ca7a
4 changed files with 10 additions and 181 deletions

View File

@ -1 +1 @@
libdrm-20091221.tar.bz2
libdrm-2.4.17.tar.bz2

View File

@ -1,174 +0,0 @@
diff --git a/libdrm/xf86drm.h b/libdrm/xf86drm.h
index c1d173c..67bea37 100644
--- a/libdrm/xf86drm.h
+++ b/libdrm/xf86drm.h
@@ -667,4 +667,22 @@ extern void drmMsg(const char *format, ...);
extern int drmSetMaster(int fd);
extern int drmDropMaster(int fd);
+#define DRM_EVENT_CONTEXT_VERSION 1
+
+typedef struct _drmEventContext {
+
+ /* This struct is versioned so we can add more pointers if we
+ * add more events. */
+ int version;
+
+ void (*page_flip_handler)(int fd,
+ unsigned int frame,
+ unsigned int tv_sec,
+ unsigned int tv_usec,
+ void *user_data);
+
+} drmEventContext, *drmEventContextPtr;
+
+extern int drmHandleEvent(int fd, drmEventContextPtr evctx);
+
#endif
diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c
index ea11207..f601a00 100644
--- a/libdrm/xf86drmMode.c
+++ b/libdrm/xf86drmMode.c
@@ -664,3 +664,56 @@ int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
return 0;
}
+
+int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, void *user_data)
+{
+ struct drm_mode_page_flip flip;
+
+ flip.fb_id = fb_id;
+ flip.crtc_id = crtc_id;
+ flip.user_data = VOID2U64(user_data);
+ flip.flags = 0;
+
+ return drmIoctl(fd, DRM_IOCTL_MODE_PAGE_FLIP, &flip);
+}
+
+int drmHandleEvent(int fd, drmEventContextPtr evctx)
+{
+ char buffer[1024];
+ int len, i;
+ struct drm_event *e;
+ struct drm_event_page_flip *page_flip;
+
+ /* The DRM read semantics guarantees that we always get only
+ * complete events. */
+
+ len = read(fd, buffer, sizeof buffer);
+ if (len == 0)
+ return 0;
+ if (len < sizeof *e)
+ return -1;
+
+ i = 0;
+ while (i < len) {
+ e = (struct drm_event *) &buffer[i];
+ switch (e->type) {
+ case DRM_EVENT_MODE_PAGE_FLIP:
+ if (evctx->version < 1 ||
+ evctx->page_flip_handler == NULL)
+ break;
+ page_flip = (struct drm_event_page_flip *) e;
+ evctx->page_flip_handler(fd,
+ page_flip->frame,
+ page_flip->tv_sec,
+ page_flip->tv_usec,
+ U642VOID (page_flip->user_data));
+ break;
+
+ default:
+ break;
+ }
+ i += e->length;
+ }
+
+ return 0;
+}
diff --git a/libdrm/xf86drmMode.h b/libdrm/xf86drmMode.h
index 62304bb..fe64707 100644
--- a/libdrm/xf86drmMode.h
+++ b/libdrm/xf86drmMode.h
@@ -259,8 +259,6 @@ typedef struct _drmModeConnector {
uint32_t *encoders; /**< List of encoder ids */
} drmModeConnector, *drmModeConnectorPtr;
-
-
extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
extern void drmModeFreeResources( drmModeResPtr ptr );
extern void drmModeFreeFB( drmModeFBPtr ptr );
@@ -362,3 +360,4 @@ extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
uint16_t *red, uint16_t *green, uint16_t *blue);
extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size,
uint16_t *red, uint16_t *green, uint16_t *blue);
+extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id, void *user_data);
diff --git a/shared-core/drm.h b/shared-core/drm.h
index 97fab9a..8b504cb 100644
--- a/shared-core/drm.h
+++ b/shared-core/drm.h
@@ -1113,6 +1113,7 @@ struct drm_gem_open {
#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, uint32_t)
+#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOW( 0xB0, struct drm_mode_page_flip)
/*@}*/
@@ -1128,6 +1129,30 @@ struct drm_gem_open {
#define DRM_COMMAND_BASE 0x40
#define DRM_COMMAND_END 0xA0
+/**
+ * Header for events written back to userspace on the drm fd. The
+ * type defines the type of event, the length specifies the total
+ * length of the event (including the header), and user_data is
+ * typically a 64 bit value passed with the ioctl that triggered the
+ * event. A read on the drm fd will always only return complete
+ * events, that is, if for example the read buffer is 100 bytes, and
+ * there are two 64 byte events pending, only one will be returned.
+ */
+struct drm_event {
+ uint32_t type;
+ uint32_t length;
+};
+
+#define DRM_EVENT_MODE_PAGE_FLIP 0x01
+
+struct drm_event_page_flip {
+ struct drm_event base;
+ uint64_t user_data;
+ uint32_t tv_sec;
+ uint32_t tv_usec;
+ uint32_t frame;
+};
+
/* typedef area */
#ifndef __KERNEL__
typedef struct drm_clip_rect drm_clip_rect_t;
diff --git a/shared-core/drm_mode.h b/shared-core/drm_mode.h
index 9b92733..bebe4e7 100644
--- a/shared-core/drm_mode.h
+++ b/shared-core/drm_mode.h
@@ -270,4 +270,20 @@ struct drm_mode_crtc_lut {
uint64_t blue;
};
+#define DRM_MODE_PAGE_FLIP_WAIT (1<<0) /* block on previous page flip */
+#define DRM_MODE_PAGE_FLIP_FLAGS_MASK (DRM_MODE_PAGE_FLIP_WAIT)
+
+struct drm_mode_page_flip {
+ /** Handle of new front buffer */
+ uint32_t fb_id;
+ uint32_t crtc_id;
+
+ /* 64 bit cookie returned to userspace in the page flip event. */
+ uint64_t user_data;
+ /**
+ * page flip flags (wait on flip only for now)
+ */
+ uint32_t flags;
+};
+
#endif

View File

@ -3,12 +3,12 @@
Summary: Direct Rendering Manager runtime library
Name: libdrm
Version: 2.4.17
Release: 0.1%{?dist}
Release: 1%{?dist}
License: MIT
Group: System Environment/Libraries
URL: http://dri.sourceforge.net
#Source0: http://dri.freedesktop.org/libdrm/%{name}-%{version}.tar.bz2
Source0: %{name}-%{gitdate}.tar.bz2
Source0: http://dri.freedesktop.org/libdrm/%{name}-%{version}.tar.bz2
#Source0: %{name}-%{gitdate}.tar.bz2
Source1: make-git-snapshot.sh
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -42,8 +42,8 @@ Requires: pkgconfig
Direct Rendering Manager development package
%prep
%setup -q -n %{name}-%{gitdate}
#%setup -q
#%setup -q -n %{name}-%{gitdate}
%setup -q
%patch3 -p1 -b .forceperms
%patch4 -p1 -b .no-bc
@ -105,6 +105,9 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/pkgconfig/libdrm_nouveau.pc
%changelog
* Mon Dec 21 2009 Dave Airlie <airlied@redhat.com> 2.4.17-1
- upstream released 2.4.17
* Mon Dec 21 2009 Dave Airlie <airlied@redhat.com> 2.4.17-0.1
- new radeon API from upstream rebase

View File

@ -1 +1 @@
4aa85099bb189436a3325733720cc3ab libdrm-20091221.tar.bz2
667d81f993f7fd8a1b1b1b830a28a748 libdrm-2.4.17.tar.bz2