diff options
author | Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> | 2009-02-28 23:45:54 +0000 |
---|---|---|
committer | Chí-Thanh Christopher Nguyễn <chithanh@gentoo.org> | 2009-02-28 23:45:54 +0000 |
commit | 8cc6bb3ee19f61da6aae78f7c94bf1564f8ce01e (patch) | |
tree | 41afa44d81338341b159546ee16b05c672247dcf /x11-libs | |
parent | games-fps/bloodfrontier: Updated to -r1, improved the ebuild (diff) | |
download | sunrise-8cc6bb3ee19f61da6aae78f7c94bf1564f8ce01e.tar.gz sunrise-8cc6bb3ee19f61da6aae78f7c94bf1564f8ce01e.tar.bz2 sunrise-8cc6bb3ee19f61da6aae78f7c94bf1564f8ce01e.zip |
x11-libs/libdrm_nouveau: new ebuild for bug 253705
svn path=/sunrise/; revision=7975
Diffstat (limited to 'x11-libs')
-rw-r--r-- | x11-libs/libdrm_nouveau/ChangeLog | 9 | ||||
-rw-r--r-- | x11-libs/libdrm_nouveau/Manifest | 5 | ||||
-rw-r--r-- | x11-libs/libdrm_nouveau/files/libdrm-2.4.5-nouveau.patch | 379 | ||||
-rw-r--r-- | x11-libs/libdrm_nouveau/libdrm_nouveau-2.4.5.ebuild | 47 | ||||
-rw-r--r-- | x11-libs/libdrm_nouveau/metadata.xml | 5 |
5 files changed, 445 insertions, 0 deletions
diff --git a/x11-libs/libdrm_nouveau/ChangeLog b/x11-libs/libdrm_nouveau/ChangeLog new file mode 100644 index 000000000..08b7a2b69 --- /dev/null +++ b/x11-libs/libdrm_nouveau/ChangeLog @@ -0,0 +1,9 @@ +# ChangeLog for x11-libs/libdrm_nouveau +# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2 +# $Header: $ + + 28 Feb 2009; Chi-Thanh Christopher Nguyen (chithead) + <chithanh@cs.tu-berlin.de> +libdrm_nouveau-2.4.5.ebuild, + +files/libdrm-2.4.5-nouveau.patch, +metadata.xml: + new ebuild for bug 253705 + diff --git a/x11-libs/libdrm_nouveau/Manifest b/x11-libs/libdrm_nouveau/Manifest new file mode 100644 index 000000000..79767e343 --- /dev/null +++ b/x11-libs/libdrm_nouveau/Manifest @@ -0,0 +1,5 @@ +AUX libdrm-2.4.5-nouveau.patch 11195 RMD160 efc11ec89378a734d0fe8d46135c1b0bb16b32ac SHA1 91b1bcbd006c6e512be7ba7f1aa555070e1728c1 SHA256 d349fb017f89439a7d7358efbc877d1849fbb1966e1af321082ed1deb376fb01 +DIST libdrm-2.4.5.tar.gz 563395 RMD160 11a512368c32fb6ed3fa17d7d728e244d61547db SHA1 9e919c4cda6454118ebd288edc3bc65fc6779a51 SHA256 4ada5afa0ac774b9affce9762e703d0a98bfcb3537a5230ef12955b0068259d1 +EBUILD libdrm_nouveau-2.4.5.ebuild 1333 RMD160 a7566439c30a97e2f604f21e33ff3f435fa07715 SHA1 9602735b753e253b4c0d8715d8283350a0d7b541 SHA256 ee1319eb4670346ea9bfa1652194d889c8b977cfa412cb2de86e9bd919fc5876 +MISC ChangeLog 319 RMD160 7ee36d5aeff4bf333772db83c9331ffdc5acc975 SHA1 bc00978e46cc8d683b322cb576ee163052e4ec0d SHA256 ebad56cb90dc306bc059df15d25e1f93ae0e80109d2b1e1f12804cb37b5e1ca6 +MISC metadata.xml 170 RMD160 645927a396fdc21cdeb089fe42c5397332420ea6 SHA1 ac7f48a14fec325926f9ce1be8fbf1f311b4f2e4 SHA256 d797a2ec6f9dc516c9f9c1a758ee87ad3e8c43101b5dc76c2f872d5bd4639b42 diff --git a/x11-libs/libdrm_nouveau/files/libdrm-2.4.5-nouveau.patch b/x11-libs/libdrm_nouveau/files/libdrm-2.4.5-nouveau.patch new file mode 100644 index 000000000..4803e1088 --- /dev/null +++ b/x11-libs/libdrm_nouveau/files/libdrm-2.4.5-nouveau.patch @@ -0,0 +1,379 @@ +diff -urN a/libdrm/nouveau/Makefile.am b/libdrm/nouveau/Makefile.am +--- a/libdrm/nouveau/Makefile.am 2009-02-11 01:09:35.000000000 +0100 ++++ b/libdrm/nouveau/Makefile.am 2009-02-25 11:41:25.074352257 +0100 +@@ -19,7 +19,9 @@ + nouveau_bo.c \ + nouveau_resource.c \ + nouveau_dma.c \ +- nouveau_fence.c ++ nouveau_fence.c \ ++ nouveau_dma.h \ ++ nouveau_private.h + + libdrm_nouveaucommonincludedir = ${includedir}/nouveau + libdrm_nouveaucommoninclude_HEADERS = \ +diff -urN a/libdrm/nouveau/nouveau_dma.h b/libdrm/nouveau/nouveau_dma.h +--- a/libdrm/nouveau/nouveau_dma.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/libdrm/nouveau/nouveau_dma.h 2009-02-25 11:49:50.000000000 +0100 +@@ -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 -urN a/libdrm/nouveau/nouveau_private.h b/libdrm/nouveau/nouveau_private.h +--- a/libdrm/nouveau/nouveau_private.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/libdrm/nouveau/nouveau_private.h 2009-02-25 11:50:03.000000000 +0100 +@@ -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 diff --git a/x11-libs/libdrm_nouveau/libdrm_nouveau-2.4.5.ebuild b/x11-libs/libdrm_nouveau/libdrm_nouveau-2.4.5.ebuild new file mode 100644 index 000000000..834e369e9 --- /dev/null +++ b/x11-libs/libdrm_nouveau/libdrm_nouveau-2.4.5.ebuild @@ -0,0 +1,47 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/x11-libs/libdrm/libdrm-2.4.4.ebuild,v 1.2 2009/02/05 13:33:40 remi Exp $ + +EAPI="2" + +# Must be before x-modular eclass is inherited +#SNAPSHOT="yes" + +inherit x-modular + +DRM_P="${P/_nouveau/}" + +DESCRIPTION="X.Org libdrm nouveau library" +HOMEPAGE="http://dri.freedesktop.org/" +SRC_URI="http://dri.freedesktop.org/libdrm/${DRM_P}.tar.gz" + +LICENSE="libdrm" +KEYWORDS="~amd64 ~x86" +IUSE="" +RESTRICT="test" # see bug #236845 + +RDEPEND="dev-libs/libpthread-stubs + !x11-libs/libdrm[video_cards_nouveau] + ~x11-libs/libdrm-${PV}" +DEPEND="${RDEPEND}" + +S="${WORKDIR}/${DRM_P}" +PATCHES="${FILESDIR}/${DRM_P}-nouveau.patch" +CONFIGURE_OPTIONS="--enable-udev --enable-nouveau-experimental-api" + +# FIXME, we should try to see how we can fit the --enable-udev configure flag + +src_install() { + x-modular_src_install + # do not install files already installed by libdrm + find "${D}" \( -type f -o -type l \) \! -name "*nouveau*" -exec rm '{}' \; + rm "${D}"/usr/include/drm/nouveau_drm.h +} + +pkg_postinst() { + x-modular_pkg_postinst + + ewarn "libdrm's ABI may have changed without change in library name" + ewarn "Please rebuild media-libs/mesa, x11-base/xorg-server and" + ewarn "your video drivers in x11-drivers/*." +} diff --git a/x11-libs/libdrm_nouveau/metadata.xml b/x11-libs/libdrm_nouveau/metadata.xml new file mode 100644 index 000000000..7e3286984 --- /dev/null +++ b/x11-libs/libdrm_nouveau/metadata.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<herd>maintainer-wanted</herd> +</pkgmetadata> |