rpms/libdrm/devel nouveau-missing-headers.patch, NONE, 1.1 .cvsignore, 1.18, 1.19 libdrm-radeon.patch, 1.6, 1.7 libdrm.spec, 1.64, 1.65 sources, 1.18, 1.19 libdrm-intel.patch, 1.2, NONE

Kristian Høgsberg krh at fedoraproject.org
Tue Feb 24 16:37:59 UTC 2009


Author: krh

Update of /cvs/pkgs/rpms/libdrm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10631

Modified Files:
	.cvsignore libdrm-radeon.patch libdrm.spec sources 
Added Files:
	nouveau-missing-headers.patch 
Removed Files:
	libdrm-intel.patch 
Log Message:
* Tue Feb 24 2009 Kristian Høgsberg <krh at redhat.com> - 2.4.5-0
- Update to 2.4.5, drop nouveau and intel patches, rebase radeon.


nouveau-missing-headers.patch:

--- NEW FILE nouveau-missing-headers.patch ---
commit 407f4d42729488df4722012fcbbff2555a72f033
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Tue Feb 24 11:34:10 2009 -0500

    Add nouveau_private.h and nouveau_dma.h missing from 2.4.5.

diff --git b/libdrm/nouveau/nouveau_dma.h a/libdrm/nouveau/nouveau_dma.h
new file mode 100644
index 0000000..38fe1d6
--- /dev/null
+++ a/libdrm/nouveau/nouveau_dma.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2007 Nouveau Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __NOUVEAU_DMA_H__
+#define __NOUVEAU_DMA_H__
+
+#include <string.h>
+#include "nouveau_private.h"
+
+//#define NOUVEAU_DMA_DEBUG
+//#define NOUVEAU_DMA_TRACE
+//#define NOUVEAU_DMA_DUMP_POSTRELOC_PUSHBUF
+#if defined(__amd64__)
+#define NOUVEAU_DMA_BARRIER asm volatile("lock; addl $0,0(%%rsp)" ::: "memory")
+#elif defined(__i386__)
+#define NOUVEAU_DMA_BARRIER asm volatile("lock; addl $0,0(%%esp)" ::: "memory")
+#else
+#define NOUVEAU_DMA_BARRIER
+#endif
+#define NOUVEAU_DMA_TIMEOUT 2000
+#define NOUVEAU_TIME_MSEC() 0
+#define RING_SKIPS 8
+
+extern int  nouveau_dma_wait(struct nouveau_channel *chan, unsigned size);
+extern void nouveau_dma_subc_bind(struct nouveau_grobj *);
+extern void nouveau_dma_channel_init(struct nouveau_channel *);
+extern void nouveau_dma_kickoff(struct nouveau_channel *);
+
+#ifdef NOUVEAU_DMA_DEBUG
+static char faulty[1024];
+#endif
+
+static inline void
+nouveau_dma_out(struct nouveau_channel *chan, uint32_t data)
+{
+	struct nouveau_channel_priv *nvchan = nouveau_channel(chan);
+	struct nouveau_dma_priv *dma = nvchan->dma;
+
+#ifdef NOUVEAU_DMA_DEBUG
+	if (dma->push_free == 0) {
+		printf("No space left in packet at %s\n", faulty);
+		return;
+	}
+	dma->push_free--;
+#endif
+#ifdef NOUVEAU_DMA_TRACE
+	{
+		uint32_t offset = (dma->cur << 2) + dma->base;
+		printf("\tOUT_RING %d/0x%08x -> 0x%08x\n",
+		       nvchan->drm.channel, offset, data);
+	}
+#endif
+	nvchan->pushbuf[dma->cur + (dma->base - nvchan->drm.put_base)/4] = data;
+	dma->cur++;
+}
+
+static inline void
+nouveau_dma_outp(struct nouveau_channel *chan, uint32_t *ptr, int size)
+{
+	struct nouveau_channel_priv *nvchan = nouveau_channel(chan);
+	struct nouveau_dma_priv *dma = nvchan->dma;
+	(void)dma;
+
+#ifdef NOUVEAU_DMA_DEBUG
+	if (dma->push_free < size) {
+		printf("Packet too small.  Free=%d, Need=%d\n",
+		       dma->push_free, size);
+		return;
+	}
+#endif
+#ifdef NOUVEAU_DMA_TRACE
+	while (size--) {
+		nouveau_dma_out(chan, *ptr);
+		ptr++;
+	}
+#else
+	memcpy(&nvchan->pushbuf[dma->cur], ptr, size << 2);
+#ifdef NOUVEAU_DMA_DEBUG
+	dma->push_free -= size;
+#endif
+	dma->cur += size;
+#endif
+}
+
+static inline void
+nouveau_dma_space(struct nouveau_channel *chan, unsigned size)
+{
+	struct nouveau_channel_priv *nvchan = nouveau_channel(chan);
+	struct nouveau_dma_priv *dma = nvchan->dma;
+
+	if (dma->free < size) {
+		if (nouveau_dma_wait(chan, size) && chan->hang_notify)
+			chan->hang_notify(chan);
+	}
+	dma->free -= size;
+#ifdef NOUVEAU_DMA_DEBUG
+	dma->push_free = size;
+#endif
+}
+
+static inline void
+nouveau_dma_begin(struct nouveau_channel *chan, struct nouveau_grobj *grobj,
+		  int method, int size, const char* file, int line)
+{
+	struct nouveau_channel_priv *nvchan = nouveau_channel(chan);
+	struct nouveau_dma_priv *dma = nvchan->dma;
+	(void)dma;
+
+#ifdef NOUVEAU_DMA_TRACE
+	printf("BEGIN_RING %d/%08x/%d/0x%04x/%d\n", nvchan->drm.channel,
+	       grobj->handle, grobj->subc, method, size);
+#endif
+
+#ifdef NOUVEAU_DMA_DEBUG
+	if (dma->push_free) {
+		printf("Previous packet incomplete: %d left at %s\n",
+		       dma->push_free, faulty);
+		return;
+	}
+	sprintf(faulty,"%s:%d",file,line);
+#endif
+
+	nouveau_dma_space(chan, (size + 1));
+	nouveau_dma_out(chan, (size << 18) | (grobj->subc << 13) | method);
+}
+
+#define RING_SPACE_CH(ch,sz)         nouveau_dma_space((ch), (sz))
+#define BEGIN_RING_CH(ch,gr,m,sz)    nouveau_dma_begin((ch), (gr), (m), (sz), __FUNCTION__, __LINE__ )
+#define OUT_RING_CH(ch, data)        nouveau_dma_out((ch), (data))
+#define OUT_RINGp_CH(ch,ptr,dwords)  nouveau_dma_outp((ch), (void*)(ptr),      \
+						      (dwords))
+#define FIRE_RING_CH(ch)             nouveau_dma_kickoff((ch))
+#define WAIT_RING_CH(ch,sz)          nouveau_dma_wait((ch), (sz))
+		
+#endif
diff --git b/libdrm/nouveau/nouveau_private.h a/libdrm/nouveau/nouveau_private.h
new file mode 100644
index 0000000..9dc1b44
--- /dev/null
+++ a/libdrm/nouveau/nouveau_private.h
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2007 Nouveau Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __NOUVEAU_PRIVATE_H__
+#define __NOUVEAU_PRIVATE_H__
+
+#include <stdint.h>
+#include <xf86drm.h>
+#include <nouveau_drm.h>
+
+#include "nouveau_drmif.h"
+#include "nouveau_device.h"
+#include "nouveau_channel.h"
+#include "nouveau_grobj.h"
+#include "nouveau_notifier.h"
+#include "nouveau_bo.h"
+#include "nouveau_resource.h"
+#include "nouveau_pushbuf.h"
+
+#define NOUVEAU_PUSHBUF_MAX_BUFFERS 1024
+#define NOUVEAU_PUSHBUF_MAX_RELOCS 1024
+struct nouveau_pushbuf_priv {
+	struct nouveau_pushbuf base;
+
+	int use_cal;
+	struct nouveau_bo *buffer;
+
+	unsigned *pushbuf;
+	unsigned  size;
+
+	struct drm_nouveau_gem_pushbuf_bo *buffers;
+	unsigned nr_buffers;
+	struct drm_nouveau_gem_pushbuf_reloc *relocs;
+	unsigned nr_relocs;
+
+	/*XXX: nomm */
+	struct nouveau_fence *fence;
+};
+#define nouveau_pushbuf(n) ((struct nouveau_pushbuf_priv *)(n))
+
+#define pbbo_to_ptr(o) ((uint64_t)(unsigned long)(o))
+#define ptr_to_pbbo(h) ((struct nouveau_pushbuf_bo *)(unsigned long)(h))
+#define pbrel_to_ptr(o) ((uint64_t)(unsigned long)(o))
+#define ptr_to_pbrel(h) ((struct nouveau_pushbuf_reloc *)(unsigned long)(h))
+#define bo_to_ptr(o) ((uint64_t)(unsigned long)(o))
+#define ptr_to_bo(h) ((struct nouveau_bo_priv *)(unsigned long)(h))
+
+int
+nouveau_pushbuf_init(struct nouveau_channel *);
+
+struct nouveau_dma_priv {
+	uint32_t base;
+	uint32_t max;
+	uint32_t cur;
+	uint32_t put;
+	uint32_t free;
+
+	int push_free;
+} dma;
+
+struct nouveau_channel_priv {
+	struct nouveau_channel base;
+
+	struct drm_nouveau_channel_alloc drm;
+
+	void     *notifier_block;
+
+	struct nouveau_pushbuf_priv pb;
+
+	/*XXX: nomm */
+	volatile uint32_t *user, *put, *get, *ref_cnt;
+	uint32_t *pushbuf;
+	struct nouveau_dma_priv struct_dma;
+	struct nouveau_dma_priv *dma;
+	struct nouveau_fence *fence_head;
+	struct nouveau_fence *fence_tail;
+	uint32_t fence_sequence;
+	struct nouveau_grobj *fence_grobj;
+	struct nouveau_notifier *fence_ntfy;
+};
+#define nouveau_channel(n) ((struct nouveau_channel_priv *)(n))
+
+struct nouveau_fence {
+	struct nouveau_channel *channel;
+};
+
+struct nouveau_fence_cb {
+	struct nouveau_fence_cb *next;
+	void (*func)(void *);
+	void *priv;
+};
+
+struct nouveau_fence_priv {
+	struct nouveau_fence base;
+	int refcount;
+
+	struct nouveau_fence *next;
+	struct nouveau_fence_cb *signal_cb;
+
+	uint32_t sequence;
+	int emitted;
+	int signalled;
+};
+#define nouveau_fence(n) ((struct nouveau_fence_priv *)(n))
+
+int
+nouveau_fence_new(struct nouveau_channel *, struct nouveau_fence **);
+
+int
+nouveau_fence_ref(struct nouveau_fence *, struct nouveau_fence **);
+
+int
+nouveau_fence_signal_cb(struct nouveau_fence *, void (*)(void *), void *);
+
+void
+nouveau_fence_emit(struct nouveau_fence *);
+
+int
+nouveau_fence_wait(struct nouveau_fence **);
+
+void
+nouveau_fence_flush(struct nouveau_channel *);
+
+struct nouveau_grobj_priv {
+	struct nouveau_grobj base;
+};
+#define nouveau_grobj(n) ((struct nouveau_grobj_priv *)(n))
+
+struct nouveau_notifier_priv {
+	struct nouveau_notifier base;
+
+	struct drm_nouveau_notifierobj_alloc drm;
+	volatile void *map;
+};
+#define nouveau_notifier(n) ((struct nouveau_notifier_priv *)(n))
+
+struct nouveau_bo_priv {
+	struct nouveau_bo base;
+	int refcount;
+
+	/* Buffer configuration + usage hints */
+	unsigned flags;
+	unsigned size;
+	unsigned align;
+	int user;
+
+	/* Tracking */
+	struct drm_nouveau_gem_pushbuf_bo *pending;
+	struct nouveau_channel *pending_channel;
+	int write_marker;
+
+	/* Userspace object */
+	void *sysmem;
+
+	/* Kernel object */
+	uint32_t global_handle;
+	unsigned handle;
+	void *map;
+
+	/* Last known information from kernel on buffer status */
+	int pinned;
+	uint64_t offset;
+	uint32_t domain;
+
+	/*XXX: nomm stuff */
+	struct nouveau_fence *fence;
+	struct nouveau_fence *wr_fence;
+};
+#define nouveau_bo(n) ((struct nouveau_bo_priv *)(n))
+
+int
+nouveau_bo_init(struct nouveau_device *);
+
+void
+nouveau_bo_takedown(struct nouveau_device *);
+
+struct drm_nouveau_gem_pushbuf_bo *
+nouveau_bo_emit_buffer(struct nouveau_channel *, struct nouveau_bo *);
+
+int
+nouveau_bo_validate_nomm(struct nouveau_bo_priv *, uint32_t);
+
+#include "nouveau_dma.h"
+#endif


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/.cvsignore,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- .cvsignore	30 Jan 2009 08:39:30 -0000	1.18
+++ .cvsignore	24 Feb 2009 16:37:29 -0000	1.19
@@ -1 +1 @@
-libdrm-2.4.4.tar.bz2
+libdrm-2.4.5.tar.bz2

libdrm-radeon.patch:

Index: libdrm-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/libdrm-radeon.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- libdrm-radeon.patch	23 Feb 2009 04:40:16 -0000	1.6
+++ libdrm-radeon.patch	24 Feb 2009 16:37:29 -0000	1.7
@@ -7,18 +7,18 @@
  	libdrm/intel/Makefile
 +	libdrm/radeon/Makefile
 +	libdrm/radeon/libdrm_radeon.pc
+	libdrm/nouveau/Makefile
+	libdrm/nouveau/libdrm_nouveau.pc
  	shared-core/Makefile
- 	tests/Makefile
- 	tests/modeprint/Makefile
 diff -up libdrm-2.4.4/libdrm/Makefile.am.radeon libdrm-2.4.4/libdrm/Makefile.am
 --- libdrm-2.4.4/libdrm/Makefile.am.radeon	2009-01-10 11:08:29.000000000 +1000
 +++ libdrm-2.4.4/libdrm/Makefile.am	2009-02-18 09:27:49.000000000 +1000
 @@ -18,7 +18,7 @@
- #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ NOUVEAU_SUBDIR = nouveau
+ endif
  
--SUBDIRS = . intel
-+SUBDIRS = . intel radeon
+-SUBDIRS = . intel $(NOUVEAU_SUBDIR)
++SUBDIRS = . intel radeon $(NOUVEAU_SUBDIR)
  
  libdrm_la_LTLIBRARIES = libdrm.la
  libdrm_ladir = $(libdir)


Index: libdrm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/libdrm.spec,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- libdrm.spec	23 Feb 2009 22:14:49 -0000	1.64
+++ libdrm.spec	24 Feb 2009 16:37:29 -0000	1.65
@@ -2,8 +2,8 @@
 
 Summary: Direct Rendering Manager runtime library
 Name: libdrm
-Version: 2.4.4
-Release: 9%{?dist}
+Version: 2.4.5
+Release: 0%{?dist}
 License: MIT
 Group: System Environment/Libraries
 URL: http://dri.sourceforge.net
@@ -15,9 +15,7 @@
 Requires: udev
 
 BuildRequires: pkgconfig automake autoconf libtool
-
 BuildRequires: kernel-headers >= 2.6.29-0.145.rc6.fc11
-
 BuildRequires: libxcb-devel
 
 Source2: 91-drm-modeset.rules
@@ -28,10 +26,8 @@
 Patch4: libdrm-2.4.0-no-bc.patch
 # radeon libdrm patches from modesetting-gem branch of upstream
 Patch8: libdrm-radeon.patch
-# nouveau libdrm patches
-Patch9: libdrm-nouveau.patch
-# Add this while waiting for 2.4.5
-Patch10: libdrm-intel.patch
+# 2.4.5 didn't dist nouveau_private.h and nouveau_dma.h, so add them like this
+Patch9: nouveau-missing-headers.patch
 
 %description
 Direct Rendering Manager runtime library
@@ -52,11 +48,10 @@
 %patch4 -p1 -b .no-bc
 %patch8 -p1 -b .radeon
 %patch9 -p1 -b .nouveau
-%patch10 -p1 -b .intel
 
 %build
 autoreconf -v --install || exit 1
-%configure --enable-udev
+%configure --enable-udev --enable-nouveau-experimental-api
 make %{?_smp_mflags}
 
 %install
@@ -107,10 +102,14 @@
 %{_libdir}/libdrm_radeon.so
 %{_libdir}/libdrm_nouveau.so
 %{_libdir}/pkgconfig/libdrm.pc
+%{_libdir}/pkgconfig/libdrm_intel.pc
 %{_libdir}/pkgconfig/libdrm_radeon.pc
 %{_libdir}/pkgconfig/libdrm_nouveau.pc
 
 %changelog
+* Tue Feb 24 2009 Kristian Høgsberg <krh at redhat.com> - 2.4.5-0
+- Update to 2.4.5, drop nouveau and intel patches, rebase radeon.
+
 * Mon Feb 23 2009 Kristian Høgsberg <krh at redhat.com> - 2.4.4-9
 - Pull in intel bufmgr changes while waiting for 2.4.5.
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/sources,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- sources	30 Jan 2009 08:39:30 -0000	1.18
+++ sources	24 Feb 2009 16:37:29 -0000	1.19
@@ -1 +1 @@
-c183ee614b25f61ea325d57882a2fab2  libdrm-2.4.4.tar.bz2
+0d09025f069ff1a986cf3339e51908b3  libdrm-2.4.5.tar.bz2


--- libdrm-intel.patch DELETED ---




More information about the fedora-extras-commits mailing list