rpms/libdrm/devel libdrm-nouveau.patch, 1.1, 1.2 libdrm-radeon.patch, 1.4, 1.5 libdrm.spec, 1.59, 1.60
Dave Airlie
airlied at fedoraproject.org
Tue Feb 17 23:46:52 UTC 2009
- Previous message (by thread): rpms/ssmtp/devel ssmtp.spec,1.22,1.23
- Next message (by thread): rpms/mono/devel .cvsignore, 1.37, 1.38 import.log, 1.36, 1.37 mono.spec, 1.109, 1.110 sources, 1.43, 1.44
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: airlied
Update of /cvs/pkgs/rpms/libdrm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv30063
Modified Files:
libdrm-nouveau.patch libdrm-radeon.patch libdrm.spec
Log Message:
* Wed Feb 18 2009 Dave Airlie <airlied at redhat.com> 2.4.4-5
- update libdrm_radeon again
libdrm-nouveau.patch:
Index: libdrm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/libdrm-nouveau.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- libdrm-nouveau.patch 7 Feb 2009 00:28:39 -0000 1.1
+++ libdrm-nouveau.patch 17 Feb 2009 23:46:51 -0000 1.2
@@ -1,10 +1,10 @@
-diff -Nur libdrm-2.4.4.orig/configure.ac libdrm-2.4.4/configure.ac
---- libdrm-2.4.4.orig/configure.ac 2009-02-05 15:18:37.000000000 +1000
-+++ libdrm-2.4.4/configure.ac 2009-02-05 15:19:56.000000000 +1000
-@@ -125,6 +125,8 @@
- libdrm/Makefile
+diff -up libdrm-2.4.4/configure.ac.nouveau libdrm-2.4.4/configure.ac
+--- libdrm-2.4.4/configure.ac.nouveau 2009-02-18 09:37:36.000000000 +1000
++++ libdrm-2.4.4/configure.ac 2009-02-18 09:37:42.000000000 +1000
+@@ -126,6 +126,8 @@ AC_OUTPUT([
libdrm/intel/Makefile
libdrm/radeon/Makefile
+ libdrm/radeon/libdrm_radeon.pc
+ libdrm/nouveau/Makefile
+ libdrm/nouveau/libdrm_nouveau.pc
shared-core/Makefile
libdrm-radeon.patch:
Index: libdrm-radeon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/libdrm-radeon.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- libdrm-radeon.patch 5 Feb 2009 00:52:26 -0000 1.4
+++ libdrm-radeon.patch 17 Feb 2009 23:46:52 -0000 1.5
@@ -1,17 +1,18 @@
-diff -up libdrm-2.4.3/configure.ac.dave libdrm-2.4.3/configure.ac
---- libdrm-2.4.3/configure.ac.dave 2008-12-19 14:33:38.000000000 +1000
-+++ libdrm-2.4.3/configure.ac 2008-12-22 12:05:48.000000000 +1000
-@@ -117,6 +117,7 @@ AC_OUTPUT([
+diff -up libdrm-2.4.4/configure.ac.radeon libdrm-2.4.4/configure.ac
+--- libdrm-2.4.4/configure.ac.radeon 2009-01-15 10:12:09.000000000 +1000
++++ libdrm-2.4.4/configure.ac 2009-02-18 09:29:20.000000000 +1000
+@@ -124,6 +124,8 @@ AC_OUTPUT([
Makefile
libdrm/Makefile
libdrm/intel/Makefile
+ libdrm/radeon/Makefile
++ libdrm/radeon/libdrm_radeon.pc
shared-core/Makefile
tests/Makefile
tests/modeprint/Makefile
-diff -up libdrm-2.4.3/libdrm/Makefile.am.dave libdrm-2.4.3/libdrm/Makefile.am
---- libdrm-2.4.3/libdrm/Makefile.am.dave 2008-12-19 14:33:38.000000000 +1000
-+++ libdrm-2.4.3/libdrm/Makefile.am 2008-12-22 12:05:57.000000000 +1000
+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.
@@ -21,194 +22,24 @@
libdrm_la_LTLIBRARIES = libdrm.la
libdrm_ladir = $(libdir)
-diff -up libdrm-2.4.3/shared-core/radeon_drm.h.dave libdrm-2.4.3/shared-core/radeon_drm.h
---- libdrm-2.4.3/shared-core/radeon_drm.h.dave 2008-12-19 14:33:38.000000000 +1000
-+++ libdrm-2.4.3/shared-core/radeon_drm.h 2008-12-22 12:05:48.000000000 +1000
-@@ -453,8 +453,18 @@ typedef struct {
- int pfCurrentPage; /* which buffer is being displayed? */
- int crtc2_base; /* CRTC2 frame offset */
- int tiling_enabled; /* set by drm, read by 2d + 3d clients */
-+
-+ unsigned int last_fence;
-+
-+ uint32_t front_handle;
-+ uint32_t back_handle;
-+ uint32_t depth_handle;
-+ uint32_t front_pitch;
-+ uint32_t back_pitch;
-+ uint32_t depth_pitch;
- } drm_radeon_sarea_t;
-
-+
- /* WARNING: If you change any of these defines, make sure to change the
- * defines in the Xserver file (xf86drmRadeon.h)
- *
-@@ -493,6 +503,18 @@ typedef struct {
- #define DRM_RADEON_SURF_ALLOC 0x1a
- #define DRM_RADEON_SURF_FREE 0x1b
-
-+#define DRM_RADEON_GEM_INFO 0x1c
-+#define DRM_RADEON_GEM_CREATE 0x1d
-+#define DRM_RADEON_GEM_MMAP 0x1e
-+#define DRM_RADEON_GEM_PIN 0x1f
-+#define DRM_RADEON_GEM_UNPIN 0x20
-+#define DRM_RADEON_GEM_PREAD 0x21
-+#define DRM_RADEON_GEM_PWRITE 0x22
-+#define DRM_RADEON_GEM_SET_DOMAIN 0x23
-+#define DRM_RADEON_GEM_WAIT_RENDERING 0x24
-+
-+#define DRM_RADEON_CS 0x26
-+
- #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)
- #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START)
- #define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t)
-@@ -521,6 +543,17 @@ typedef struct {
- #define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t)
- #define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t)
-
-+#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info)
-+#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create)
-+#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap)
-+#define DRM_IOCTL_RADEON_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PIN, struct drm_radeon_gem_pin)
-+#define DRM_IOCTL_RADEON_GEM_UNPIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_UNPIN, struct drm_radeon_gem_unpin)
-+#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread)
-+#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite)
-+#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain)
-+#define DRM_IOCTL_RADEON_GEM_WAIT_RENDERING DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_RENDERING, struct drm_radeon_gem_wait_rendering)
-+#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs)
-+
- typedef struct drm_radeon_init {
- enum {
- RADEON_INIT_CP = 0x01,
-@@ -677,6 +710,7 @@ typedef struct drm_radeon_indirect {
- #define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */
- #define RADEON_PARAM_FB_LOCATION 14 /* FB location */
- #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */
-+#define RADEON_PARAM_KERNEL_MM 16
-
- typedef struct drm_radeon_getparam {
- int param;
-@@ -732,6 +766,7 @@ typedef struct drm_radeon_setparam {
- #define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */
- #define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */
- #define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */
-+#define RADEON_SETPARAM_MM_INIT 7 /* Initialise the mm */
- /* 1.14: Clients can allocate/free a surface
- */
- typedef struct drm_radeon_surface_alloc {
-@@ -747,4 +782,106 @@ typedef struct drm_radeon_surface_free {
- #define DRM_RADEON_VBLANK_CRTC1 1
- #define DRM_RADEON_VBLANK_CRTC2 2
-
-+#define RADEON_GEM_DOMAIN_CPU 0x1 // Cached CPU domain
-+#define RADEON_GEM_DOMAIN_GTT 0x2 // GTT or cache flushed
-+#define RADEON_GEM_DOMAIN_VRAM 0x4 // VRAM domain
-+
-+/* return to userspace start/size of gtt and vram apertures */
-+struct drm_radeon_gem_info {
-+ uint64_t gart_start;
-+ uint64_t gart_size;
-+ uint64_t vram_start;
-+ uint64_t vram_size;
-+ uint64_t vram_visible;
-+};
-+
-+struct drm_radeon_gem_create {
-+ uint64_t size;
-+ uint64_t alignment;
-+ uint32_t handle;
-+ uint32_t initial_domain; // to allow VRAM to be created
-+ uint32_t no_backing_store; // for VRAM objects - select whether they need backing store
-+ // pretty much front/back/depth don't need it - other things do
-+};
-+
-+struct drm_radeon_gem_mmap {
-+ uint32_t handle;
-+ uint32_t pad;
-+ uint64_t offset;
-+ uint64_t size;
-+ uint64_t addr_ptr;
-+};
-+
-+struct drm_radeon_gem_set_domain {
-+ uint32_t handle;
-+ uint32_t read_domains;
-+ uint32_t write_domain;
-+};
-+
-+struct drm_radeon_gem_wait_rendering {
-+ uint32_t handle;
-+};
-+
-+struct drm_radeon_gem_pin {
-+ uint32_t handle;
-+ uint32_t pin_domain;
-+ uint64_t alignment;
-+ uint64_t offset;
-+};
-+
-+struct drm_radeon_gem_unpin {
-+ uint32_t handle;
-+ uint32_t pad;
-+};
-+
-+struct drm_radeon_gem_busy {
-+ uint32_t handle;
-+ uint32_t busy;
-+};
-+
-+struct drm_radeon_gem_pread {
-+ /** Handle for the object being read. */
-+ uint32_t handle;
-+ uint32_t pad;
-+ /** Offset into the object to read from */
-+ uint64_t offset;
-+ /** Length of data to read */
-+ uint64_t size;
-+ /** Pointer to write the data into. */
-+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
-+};
-+
-+struct drm_radeon_gem_pwrite {
-+ /** Handle for the object being written to. */
-+ uint32_t handle;
-+ uint32_t pad;
-+ /** Offset into the object to write to */
-+ uint64_t offset;
-+ /** Length of data to write */
-+ uint64_t size;
-+ /** Pointer to read the data from. */
-+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
-+};
-+
-+
-+/* New interface which obsolete all previous interface.
-+ */
-+
-+#define RADEON_CHUNK_ID_RELOCS 0x01
-+#define RADEON_CHUNK_ID_IB 0x02
-+
-+struct drm_radeon_cs_chunk {
-+ uint32_t chunk_id;
-+ uint32_t length_dw;
-+ uint64_t chunk_data;
-+};
-+
-+struct drm_radeon_cs {
-+ uint32_t num_chunks;
-+ uint32_t cs_id;
-+ uint64_t chunks; /* this points to uint64_t * which point to
-+ cs chunks */
-+};
-+
-+
- #endif
-diff --git a/libdrm/radeon/Makefile.am b/libdrm/radeon/Makefile.am
-new file mode 100644
-index 0000000..32ca559
---- /dev/null
-+++ b/libdrm/radeon/Makefile.am
-@@ -0,0 +1,48 @@
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/libdrm_radeon.pc.in
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/libdrm_radeon.pc.in 2009-02-18 09:27:49.000000000 +1000
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: libdrm_radeon
++Description: Userspace interface to kernel DRM services for radeon
++Version: 1.0.1
++Libs: -L${libdir} -ldrm_radeon
++Cflags: -I${includedir} -I${includedir}/drm
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/Makefile.am
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/Makefile.am 2009-02-18 09:27:49.000000000 +1000
+@@ -0,0 +1,53 @@
+# Copyright © 2008 Jérôme Glisse
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
@@ -250,203 +81,21 @@
+ radeon_cs_gem.c \
+ radeon_track.c
+
-+libdrm_radeonincludedir = ${includedir}/drm
-+libdrm_radeoninclude_HEADERS = \
-+ radeon_bo.h \
-+ radeon_cs.h \
-+ radeon_bo_gem.h \
-+ radeon_cs_gem.h \
-+ radeon_track.h
-diff --git a/libdrm/radeon/radeon_bo.h b/libdrm/radeon/radeon_bo.h
-new file mode 100644
-index 0000000..3cabdfc
---- /dev/null
-+++ b/libdrm/radeon/radeon_bo.h
-@@ -0,0 +1,179 @@
-+/*
-+ * Copyright © 2008 Jérôme Glisse
-+ * All Rights Reserved.
-+ *
-+ * 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, sub license, 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 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
-+ * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
-+ * AND/OR ITS SUPPLIERS 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.
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial portions
-+ * of the Software.
-+ */
-+/*
-+ * Authors:
-+ * Jérôme Glisse <glisse at freedesktop.org>
-+ */
-+#ifndef RADEON_BO_H
-+#define RADEON_BO_H
-+
-+#include <stdio.h>
-+#include <stdint.h>
-+#include "radeon_track.h"
-+
-+/* bo object */
-+#define RADEON_BO_FLAGS_MACRO_TILE 1
-+#define RADEON_BO_FLAGS_MICRO_TILE 2
-+
-+struct radeon_bo_manager;
-+
-+struct radeon_bo {
-+ uint32_t alignment;
-+ uint32_t handle;
-+ uint32_t size;
-+ uint32_t domains;
-+ uint32_t flags;
-+ unsigned cref;
-+#ifdef RADEON_BO_TRACK
-+ struct radeon_track *track;
-+#endif
-+ void *ptr;
-+ struct radeon_bo_manager *bom;
-+ uint32_t space_accounted;
-+};
-+
-+/* bo functions */
-+struct radeon_bo_funcs {
-+ struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom,
-+ uint32_t handle,
-+ uint32_t size,
-+ uint32_t alignment,
-+ uint32_t domains,
-+ uint32_t flags);
-+ void (*bo_ref)(struct radeon_bo *bo);
-+ struct radeon_bo *(*bo_unref)(struct radeon_bo *bo);
-+ int (*bo_map)(struct radeon_bo *bo, int write);
-+ int (*bo_unmap)(struct radeon_bo *bo);
-+ int (*bo_wait)(struct radeon_bo *bo);
-+};
-+
-+struct radeon_bo_manager {
-+ struct radeon_bo_funcs *funcs;
-+ int fd;
-+ struct radeon_tracker tracker;
-+};
-+
-+static inline void _radeon_bo_debug(struct radeon_bo *bo,
-+ const char *op,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ fprintf(stderr, "%s %p 0x%08X 0x%08X 0x%08X [%s %s %d]\n",
-+ op, bo, bo->handle, bo->size, bo->cref, file, func, line);
-+}
-+
-+static inline struct radeon_bo *_radeon_bo_open(struct radeon_bo_manager *bom,
-+ uint32_t handle,
-+ uint32_t size,
-+ uint32_t alignment,
-+ uint32_t domains,
-+ uint32_t flags,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ struct radeon_bo *bo;
-+
-+ bo = bom->funcs->bo_open(bom, handle, size, alignment, domains, flags);
-+#ifdef RADEON_BO_TRACK
-+ if (bo) {
-+ bo->track = radeon_tracker_add_track(&bom->tracker, bo->handle);
-+ radeon_track_add_event(bo->track, file, func, "open", line);
-+ }
-+#endif
-+ return bo;
-+}
-+
-+static inline void _radeon_bo_ref(struct radeon_bo *bo,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ bo->cref++;
-+#ifdef RADEON_BO_TRACK
-+ radeon_track_add_event(bo->track, file, func, "ref", line);
-+#endif
-+ bo->bom->funcs->bo_ref(bo);
-+}
-+
-+static inline struct radeon_bo *_radeon_bo_unref(struct radeon_bo *bo,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ bo->cref--;
-+#ifdef RADEON_BO_TRACK
-+ radeon_track_add_event(bo->track, file, func, "unref", line);
-+ if (bo->cref <= 0) {
-+ radeon_tracker_remove_track(&bo->bom->tracker, bo->track);
-+ bo->track = NULL;
-+ }
-+#endif
-+ return bo->bom->funcs->bo_unref(bo);
-+}
-+
-+static inline int _radeon_bo_map(struct radeon_bo *bo,
-+ int write,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ return bo->bom->funcs->bo_map(bo, write);
-+}
-+
-+static inline int _radeon_bo_unmap(struct radeon_bo *bo,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ return bo->bom->funcs->bo_unmap(bo);
-+}
-+
-+static inline int _radeon_bo_wait(struct radeon_bo *bo,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ return bo->bom->funcs->bo_wait(bo);
-+}
++libdrm_radeonincludedir = ${includedir}/drm
++libdrm_radeoninclude_HEADERS = \
++ radeon_bo.h \
++ radeon_cs.h \
++ radeon_bo_gem.h \
++ radeon_cs_gem.h \
++ radeon_track.h
+
-+#define radeon_bo_open(bom, h, s, a, d, f)\
-+ _radeon_bo_open(bom, h, s, a, d, f, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_ref(bo)\
-+ _radeon_bo_ref(bo, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_unref(bo)\
-+ _radeon_bo_unref(bo, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_map(bo, w)\
-+ _radeon_bo_map(bo, w, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_unmap(bo)\
-+ _radeon_bo_unmap(bo, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_debug(bo, opcode)\
-+ _radeon_bo_debug(bo, opcode, __FILE__, __FUNCTION__, __LINE__)
-+#define radeon_bo_wait(bo) \
-+ _radeon_bo_wait(bo, __FILE__, __func__, __LINE__)
++pkgconfigdir = @pkgconfigdir@
++pkgconfig_DATA = libdrm_radeon.pc
+
-+#endif
-diff --git a/libdrm/radeon/radeon_bo_gem.c b/libdrm/radeon/radeon_bo_gem.c
-new file mode 100644
-index 0000000..932afeb
---- /dev/null
-+++ b/libdrm/radeon/radeon_bo_gem.c
++EXTRA_DIST = libdrm_radeon.pc.in
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_bo_gem.c
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_bo_gem.c 2009-02-18 09:27:49.000000000 +1000
@@ -0,0 +1,223 @@
+/*
+ * Copyright © 2008 Dave Airlie
@@ -671,11 +320,9 @@
+ }
+ free(bomg);
+}
-diff --git a/libdrm/radeon/radeon_bo_gem.h b/libdrm/radeon/radeon_bo_gem.h
-new file mode 100644
-index 0000000..c0f68e6
---- /dev/null
-+++ b/libdrm/radeon/radeon_bo_gem.h
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_bo_gem.h
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_bo_gem.h 2009-02-18 09:27:49.000000000 +1000
@@ -0,0 +1,40 @@
+/*
+ * Copyright © 2008 Dave Airlie
@@ -717,31 +364,29 @@
+void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom);
+
+#endif
-diff --git a/libdrm/radeon/radeon_cs.h b/libdrm/radeon/radeon_cs.h
-new file mode 100644
-index 0000000..7cc75d4
---- /dev/null
-+++ b/libdrm/radeon/radeon_cs.h
-@@ -0,0 +1,198 @@
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_bo.h
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_bo.h 2009-02-18 09:27:49.000000000 +1000
+@@ -0,0 +1,179 @@
+/*
-+ * Copyright © 2008 Nicolai Haehnle
+ * Copyright © 2008 Jérôme Glisse
+ * All Rights Reserved.
+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the
++ * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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
++ * 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
++ * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
++ * AND/OR ITS SUPPLIERS 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.
+ *
+ * The above copyright notice and this permission notice (including the
@@ -750,182 +395,161 @@
+ */
+/*
+ * Authors:
-+ * Aapo Tahkola <aet at rasterburn.org>
-+ * Nicolai Haehnle <prefect_ at gmx.net>
+ * Jérôme Glisse <glisse at freedesktop.org>
+ */
-+#ifndef RADEON_CS_H
-+#define RADEON_CS_H
++#ifndef RADEON_BO_H
++#define RADEON_BO_H
+
++#include <stdio.h>
+#include <stdint.h>
-+#include "drm.h"
-+#include "radeon_drm.h"
-+#include "radeon_bo.h"
-+
-+struct radeon_cs_reloc {
-+ struct radeon_bo *bo;
-+ uint32_t read_domain;
-+ uint32_t write_domain;
-+ uint32_t flags;
-+};
-+
-+
-+#define RADEON_CS_SPACE_OK 0
-+#define RADEON_CS_SPACE_OP_TO_BIG 1
-+#define RADEON_CS_SPACE_FLUSH 2
-+
-+struct radeon_cs_space_check {
-+ struct radeon_bo *bo;
-+ uint32_t read_domains;
-+ uint32_t write_domain;
-+ uint32_t new_accounted;
-+};
++#include "radeon_track.h"
+
-+struct radeon_cs_manager;
++/* bo object */
++#define RADEON_BO_FLAGS_MACRO_TILE 1
++#define RADEON_BO_FLAGS_MICRO_TILE 2
+
-+struct radeon_cs {
-+ struct radeon_cs_manager *csm;
-+ void *relocs;
-+ uint32_t *packets;
-+ unsigned crelocs;
-+ unsigned relocs_total_size;
-+ unsigned cdw;
-+ unsigned ndw;
-+ int section;
-+ unsigned section_ndw;
-+ unsigned section_cdw;
-+ const char *section_file;
-+ const char *section_func;
-+ int section_line;
++struct radeon_bo_manager;
+
++struct radeon_bo {
++ uint32_t alignment;
++ uint32_t handle;
++ uint32_t size;
++ uint32_t domains;
++ uint32_t flags;
++ unsigned cref;
++#ifdef RADEON_BO_TRACK
++ struct radeon_track *track;
++#endif
++ void *ptr;
++ struct radeon_bo_manager *bom;
++ uint32_t space_accounted;
+};
+
-+/* cs functions */
-+struct radeon_cs_funcs {
-+ struct radeon_cs *(*cs_create)(struct radeon_cs_manager *csm,
-+ uint32_t ndw);
-+ int (*cs_write_reloc)(struct radeon_cs *cs,
-+ struct radeon_bo *bo,
-+ uint32_t read_domain,
-+ uint32_t write_domain,
-+ uint32_t flags);
-+ int (*cs_begin)(struct radeon_cs *cs,
-+ uint32_t ndw,
-+ const char *file,
-+ const char *func,
-+ int line);
-+ int (*cs_end)(struct radeon_cs *cs,
-+ const char *file,
-+ const char *func,
-+ int line);
-+ int (*cs_emit)(struct radeon_cs *cs);
-+ int (*cs_destroy)(struct radeon_cs *cs);
-+ int (*cs_erase)(struct radeon_cs *cs);
-+ int (*cs_need_flush)(struct radeon_cs *cs);
-+ void (*cs_print)(struct radeon_cs *cs, FILE *file);
-+ int (*cs_space_check)(struct radeon_cs *cs, struct radeon_cs_space_check *bos,
-+ int num_bo);
++/* bo functions */
++struct radeon_bo_funcs {
++ struct radeon_bo *(*bo_open)(struct radeon_bo_manager *bom,
++ uint32_t handle,
++ uint32_t size,
++ uint32_t alignment,
++ uint32_t domains,
++ uint32_t flags);
++ void (*bo_ref)(struct radeon_bo *bo);
++ struct radeon_bo *(*bo_unref)(struct radeon_bo *bo);
++ int (*bo_map)(struct radeon_bo *bo, int write);
++ int (*bo_unmap)(struct radeon_bo *bo);
++ int (*bo_wait)(struct radeon_bo *bo);
+};
+
-+struct radeon_cs_manager {
-+ struct radeon_cs_funcs *funcs;
++struct radeon_bo_manager {
++ struct radeon_bo_funcs *funcs;
+ int fd;
-+ uint32_t vram_limit, gart_limit;
-+ uint32_t vram_write_used, gart_write_used;
-+ uint32_t read_used;
++ struct radeon_tracker tracker;
+};
-+
-+static inline struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm,
-+ uint32_t ndw)
++
++static inline void _radeon_bo_debug(struct radeon_bo *bo,
++ const char *op,
++ const char *file,
++ const char *func,
++ int line)
+{
-+ return csm->funcs->cs_create(csm, ndw);
++ fprintf(stderr, "%s %p 0x%08X 0x%08X 0x%08X [%s %s %d]\n",
++ op, bo, bo->handle, bo->size, bo->cref, file, func, line);
+}
+
-+static inline int radeon_cs_write_reloc(struct radeon_cs *cs,
-+ struct radeon_bo *bo,
-+ uint32_t read_domain,
-+ uint32_t write_domain,
-+ uint32_t flags)
++static inline struct radeon_bo *_radeon_bo_open(struct radeon_bo_manager *bom,
++ uint32_t handle,
++ uint32_t size,
++ uint32_t alignment,
++ uint32_t domains,
++ uint32_t flags,
++ const char *file,
++ const char *func,
++ int line)
+{
-+ return cs->csm->funcs->cs_write_reloc(cs,
-+ bo,
-+ read_domain,
-+ write_domain,
-+ flags);
++ struct radeon_bo *bo;
++
++ bo = bom->funcs->bo_open(bom, handle, size, alignment, domains, flags);
++#ifdef RADEON_BO_TRACK
++ if (bo) {
++ bo->track = radeon_tracker_add_track(&bom->tracker, bo->handle);
++ radeon_track_add_event(bo->track, file, func, "open", line);
++ }
++#endif
++ return bo;
+}
+
-+static inline int radeon_cs_begin(struct radeon_cs *cs,
-+ uint32_t ndw,
++static inline void _radeon_bo_ref(struct radeon_bo *bo,
+ const char *file,
+ const char *func,
+ int line)
+{
-+ return cs->csm->funcs->cs_begin(cs, ndw, file, func, line);
-+}
-+
-+static inline int radeon_cs_end(struct radeon_cs *cs,
-+ const char *file,
-+ const char *func,
-+ int line)
-+{
-+ return cs->csm->funcs->cs_end(cs, file, func, line);
-+}
-+
-+static inline int radeon_cs_emit(struct radeon_cs *cs)
-+{
-+ return cs->csm->funcs->cs_emit(cs);
-+}
-+
-+static inline int radeon_cs_destroy(struct radeon_cs *cs)
-+{
-+ return cs->csm->funcs->cs_destroy(cs);
-+}
-+
-+static inline int radeon_cs_erase(struct radeon_cs *cs)
-+{
-+ return cs->csm->funcs->cs_erase(cs);
-+}
-+
-+static inline int radeon_cs_need_flush(struct radeon_cs *cs)
-+{
-+ return cs->csm->funcs->cs_need_flush(cs);
++ bo->cref++;
++#ifdef RADEON_BO_TRACK
++ radeon_track_add_event(bo->track, file, func, "ref", line);
++#endif
++ bo->bom->funcs->bo_ref(bo);
+}
+
-+static inline void radeon_cs_print(struct radeon_cs *cs, FILE *file)
++static inline struct radeon_bo *_radeon_bo_unref(struct radeon_bo *bo,
++ const char *file,
++ const char *func,
++ int line)
+{
-+ cs->csm->funcs->cs_print(cs, file);
++ bo->cref--;
++#ifdef RADEON_BO_TRACK
++ radeon_track_add_event(bo->track, file, func, "unref", line);
++ if (bo->cref <= 0) {
++ radeon_tracker_remove_track(&bo->bom->tracker, bo->track);
++ bo->track = NULL;
++ }
++#endif
++ return bo->bom->funcs->bo_unref(bo);
+}
+
-+static inline int radeon_cs_space_check(struct radeon_cs *cs,
-+ struct radeon_cs_space_check *bos,
-+ int num_bo)
++static inline int _radeon_bo_map(struct radeon_bo *bo,
++ int write,
++ const char *file,
++ const char *func,
++ int line)
+{
-+ return cs->csm->funcs->cs_space_check(cs, bos, num_bo);
++ return bo->bom->funcs->bo_map(bo, write);
+}
+
-+static inline void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
++static inline int _radeon_bo_unmap(struct radeon_bo *bo,
++ const char *file,
++ const char *func,
++ int line)
+{
-+
-+ if (domain == RADEON_GEM_DOMAIN_VRAM)
-+ cs->csm->vram_limit = limit;
-+ else
-+ cs->csm->gart_limit = limit;
++ return bo->bom->funcs->bo_unmap(bo);
+}
+
-+static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword)
++static inline int _radeon_bo_wait(struct radeon_bo *bo,
++ const char *file,
++ const char *func,
++ int line)
+{
-+ cs->packets[cs->cdw++] = dword;
-+ if (cs->section) {
-+ cs->section_cdw++;
-+ }
++ return bo->bom->funcs->bo_wait(bo);
+}
+
++#define radeon_bo_open(bom, h, s, a, d, f)\
++ _radeon_bo_open(bom, h, s, a, d, f, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_ref(bo)\
++ _radeon_bo_ref(bo, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_unref(bo)\
++ _radeon_bo_unref(bo, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_map(bo, w)\
++ _radeon_bo_map(bo, w, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_unmap(bo)\
++ _radeon_bo_unmap(bo, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_debug(bo, opcode)\
++ _radeon_bo_debug(bo, opcode, __FILE__, __FUNCTION__, __LINE__)
++#define radeon_bo_wait(bo) \
++ _radeon_bo_wait(bo, __FILE__, __func__, __LINE__)
++
+#endif
-diff --git a/libdrm/radeon/radeon_cs_gem.c b/libdrm/radeon/radeon_cs_gem.c
-new file mode 100644
-index 0000000..dc14a8a
---- /dev/null
-+++ b/libdrm/radeon/radeon_cs_gem.c
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_cs_gem.c
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_cs_gem.c 2009-02-18 09:27:49.000000000 +1000
@@ -0,0 +1,537 @@
+/*
+ * Copyright © 2008 Jérôme Glisse
@@ -1446,76 +1070,284 @@
+ cs_gem_check_space,
+};
+
-+struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
++struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
++{
++ struct radeon_cs_manager *csm;
++
++ csm = (struct radeon_cs_manager*)calloc(1,
++ sizeof(struct radeon_cs_manager));
++ if (csm == NULL) {
++ return NULL;
++ }
++ csm->funcs = &radeon_cs_gem_funcs;
++ csm->fd = fd;
++ return csm;
++}
++
++void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)
++{
++ free(csm);
++}
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_cs_gem.h
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_cs_gem.h 2009-02-18 09:27:49.000000000 +1000
+@@ -0,0 +1,41 @@
++/*
++ * Copyright © 2008 Nicolai Haehnle
++ * Copyright © 2008 Jérôme Glisse
++ * All Rights Reserved.
++ *
++ * 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, sub license, 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 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
++ * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
++ * AND/OR ITS SUPPLIERS 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.
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial portions
++ * of the Software.
++ */
++/*
++ * Authors:
++ * Aapo Tahkola <aet at rasterburn.org>
++ * Nicolai Haehnle <prefect_ at gmx.net>
++ * Jérôme Glisse <glisse at freedesktop.org>
++ */
++#ifndef RADEON_CS_GEM_H
++#define RADEON_CS_GEM_H
++
++#include "radeon_cs.h"
++
++struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd);
++void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm);
++
++#endif
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_cs.h
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_cs.h 2009-02-18 09:27:49.000000000 +1000
+@@ -0,0 +1,208 @@
++/*
++ * Copyright © 2008 Nicolai Haehnle
++ * Copyright © 2008 Jérôme Glisse
++ * All Rights Reserved.
++ *
++ * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial portions
++ * of the Software.
++ */
++/*
++ * Authors:
++ * Aapo Tahkola <aet at rasterburn.org>
++ * Nicolai Haehnle <prefect_ at gmx.net>
++ * Jérôme Glisse <glisse at freedesktop.org>
++ */
++#ifndef RADEON_CS_H
++#define RADEON_CS_H
++
++#include <stdint.h>
++#include <string.h>
++#include "drm.h"
++#include "radeon_drm.h"
++#include "radeon_bo.h"
++
++struct radeon_cs_reloc {
++ struct radeon_bo *bo;
++ uint32_t read_domain;
++ uint32_t write_domain;
++ uint32_t flags;
++};
++
++
++#define RADEON_CS_SPACE_OK 0
++#define RADEON_CS_SPACE_OP_TO_BIG 1
++#define RADEON_CS_SPACE_FLUSH 2
++
++struct radeon_cs_space_check {
++ struct radeon_bo *bo;
++ uint32_t read_domains;
++ uint32_t write_domain;
++ uint32_t new_accounted;
++};
++
++struct radeon_cs_manager;
++
++struct radeon_cs {
++ struct radeon_cs_manager *csm;
++ void *relocs;
++ uint32_t *packets;
++ unsigned crelocs;
++ unsigned relocs_total_size;
++ unsigned cdw;
++ unsigned ndw;
++ int section;
++ unsigned section_ndw;
++ unsigned section_cdw;
++ const char *section_file;
++ const char *section_func;
++ int section_line;
++
++};
++
++/* cs functions */
++struct radeon_cs_funcs {
++ struct radeon_cs *(*cs_create)(struct radeon_cs_manager *csm,
++ uint32_t ndw);
++ int (*cs_write_reloc)(struct radeon_cs *cs,
++ struct radeon_bo *bo,
++ uint32_t read_domain,
++ uint32_t write_domain,
++ uint32_t flags);
++ int (*cs_begin)(struct radeon_cs *cs,
++ uint32_t ndw,
++ const char *file,
++ const char *func,
++ int line);
++ int (*cs_end)(struct radeon_cs *cs,
++ const char *file,
++ const char *func,
++ int line);
++ int (*cs_emit)(struct radeon_cs *cs);
++ int (*cs_destroy)(struct radeon_cs *cs);
++ int (*cs_erase)(struct radeon_cs *cs);
++ int (*cs_need_flush)(struct radeon_cs *cs);
++ void (*cs_print)(struct radeon_cs *cs, FILE *file);
++ int (*cs_space_check)(struct radeon_cs *cs, struct radeon_cs_space_check *bos,
++ int num_bo);
++};
++
++struct radeon_cs_manager {
++ struct radeon_cs_funcs *funcs;
++ int fd;
++ uint32_t vram_limit, gart_limit;
++ uint32_t vram_write_used, gart_write_used;
++ uint32_t read_used;
++};
++
++static inline struct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm,
++ uint32_t ndw)
++{
++ return csm->funcs->cs_create(csm, ndw);
++}
++
++static inline int radeon_cs_write_reloc(struct radeon_cs *cs,
++ struct radeon_bo *bo,
++ uint32_t read_domain,
++ uint32_t write_domain,
++ uint32_t flags)
++{
++ return cs->csm->funcs->cs_write_reloc(cs,
++ bo,
++ read_domain,
++ write_domain,
++ flags);
++}
++
++static inline int radeon_cs_begin(struct radeon_cs *cs,
++ uint32_t ndw,
++ const char *file,
++ const char *func,
++ int line)
++{
++ return cs->csm->funcs->cs_begin(cs, ndw, file, func, line);
++}
++
++static inline int radeon_cs_end(struct radeon_cs *cs,
++ const char *file,
++ const char *func,
++ int line)
++{
++ return cs->csm->funcs->cs_end(cs, file, func, line);
++}
++
++static inline int radeon_cs_emit(struct radeon_cs *cs)
++{
++ return cs->csm->funcs->cs_emit(cs);
++}
++
++static inline int radeon_cs_destroy(struct radeon_cs *cs)
++{
++ return cs->csm->funcs->cs_destroy(cs);
++}
++
++static inline int radeon_cs_erase(struct radeon_cs *cs)
++{
++ return cs->csm->funcs->cs_erase(cs);
++}
++
++static inline int radeon_cs_need_flush(struct radeon_cs *cs)
+{
-+ struct radeon_cs_manager *csm;
++ return cs->csm->funcs->cs_need_flush(cs);
++}
+
-+ csm = (struct radeon_cs_manager*)calloc(1,
-+ sizeof(struct radeon_cs_manager));
-+ if (csm == NULL) {
-+ return NULL;
-+ }
-+ csm->funcs = &radeon_cs_gem_funcs;
-+ csm->fd = fd;
-+ return csm;
++static inline void radeon_cs_print(struct radeon_cs *cs, FILE *file)
++{
++ cs->csm->funcs->cs_print(cs, file);
+}
+
-+void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)
++static inline int radeon_cs_space_check(struct radeon_cs *cs,
++ struct radeon_cs_space_check *bos,
++ int num_bo)
+{
-+ free(csm);
++ return cs->csm->funcs->cs_space_check(cs, bos, num_bo);
+}
-diff --git a/libdrm/radeon/radeon_cs_gem.h b/libdrm/radeon/radeon_cs_gem.h
-new file mode 100644
-index 0000000..5efd146
---- /dev/null
-+++ b/libdrm/radeon/radeon_cs_gem.h
-@@ -0,0 +1,41 @@
-+/*
-+ * Copyright © 2008 Nicolai Haehnle
-+ * Copyright © 2008 Jérôme Glisse
-+ * All Rights Reserved.
-+ *
-+ * 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, sub license, 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 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
-+ * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS
-+ * AND/OR ITS SUPPLIERS 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.
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial portions
-+ * of the Software.
-+ */
-+/*
-+ * Authors:
-+ * Aapo Tahkola <aet at rasterburn.org>
-+ * Nicolai Haehnle <prefect_ at gmx.net>
-+ * Jérôme Glisse <glisse at freedesktop.org>
-+ */
-+#ifndef RADEON_CS_GEM_H
-+#define RADEON_CS_GEM_H
+
-+#include "radeon_cs.h"
++static inline void radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
++{
++
++ if (domain == RADEON_GEM_DOMAIN_VRAM)
++ cs->csm->vram_limit = limit;
++ else
++ cs->csm->gart_limit = limit;
++}
+
-+struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd);
-+void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm);
++static inline void radeon_cs_write_dword(struct radeon_cs *cs, uint32_t dword)
++{
++ cs->packets[cs->cdw++] = dword;
++ if (cs->section) {
++ cs->section_cdw++;
++ }
++}
++
++static inline void radeon_cs_write_qword(struct radeon_cs *cs, uint64_t qword)
++{
++ memcpy(cs->packets + cs->cdw, &qword, sizeof(uint64_t));
++ cs->cdw += 2;
++ if (cs->section) {
++ cs->section_cdw += 2;
++ }
++}
+
+#endif
-diff --git a/libdrm/radeon/radeon_track.c b/libdrm/radeon/radeon_track.c
-new file mode 100644
-index 0000000..1623906
---- /dev/null
-+++ b/libdrm/radeon/radeon_track.c
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_track.c
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_track.c 2009-02-18 09:27:49.000000000 +1000
@@ -0,0 +1,140 @@
+/*
+ * Copyright © 2008 Jérôme Glisse
@@ -1657,11 +1489,9 @@
+ free(tmp);
+ }
+}
-diff --git a/libdrm/radeon/radeon_track.h b/libdrm/radeon/radeon_track.h
-new file mode 100644
-index 0000000..838d1f3
---- /dev/null
-+++ b/libdrm/radeon/radeon_track.h
+diff -up /dev/null libdrm-2.4.4/libdrm/radeon/radeon_track.h
+--- /dev/null 2009-02-17 18:26:02.221005894 +1000
++++ libdrm-2.4.4/libdrm/radeon/radeon_track.h 2009-02-18 09:27:49.000000000 +1000
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2008 Jérôme Glisse
@@ -1727,3 +1557,186 @@
+ FILE *file);
+
+#endif
+diff -up libdrm-2.4.4/shared-core/radeon_drm.h.radeon libdrm-2.4.4/shared-core/radeon_drm.h
+--- libdrm-2.4.4/shared-core/radeon_drm.h.radeon 2008-10-10 05:02:11.000000000 +1000
++++ libdrm-2.4.4/shared-core/radeon_drm.h 2009-02-18 09:27:49.000000000 +1000
+@@ -453,8 +453,18 @@ typedef struct {
+ int pfCurrentPage; /* which buffer is being displayed? */
+ int crtc2_base; /* CRTC2 frame offset */
+ int tiling_enabled; /* set by drm, read by 2d + 3d clients */
++
++ unsigned int last_fence;
++
++ uint32_t front_handle;
++ uint32_t back_handle;
++ uint32_t depth_handle;
++ uint32_t front_pitch;
++ uint32_t back_pitch;
++ uint32_t depth_pitch;
+ } drm_radeon_sarea_t;
+
++
+ /* WARNING: If you change any of these defines, make sure to change the
+ * defines in the Xserver file (xf86drmRadeon.h)
+ *
+@@ -493,6 +503,18 @@ typedef struct {
+ #define DRM_RADEON_SURF_ALLOC 0x1a
+ #define DRM_RADEON_SURF_FREE 0x1b
+
++#define DRM_RADEON_GEM_INFO 0x1c
++#define DRM_RADEON_GEM_CREATE 0x1d
++#define DRM_RADEON_GEM_MMAP 0x1e
++#define DRM_RADEON_GEM_PIN 0x1f
++#define DRM_RADEON_GEM_UNPIN 0x20
++#define DRM_RADEON_GEM_PREAD 0x21
++#define DRM_RADEON_GEM_PWRITE 0x22
++#define DRM_RADEON_GEM_SET_DOMAIN 0x23
++#define DRM_RADEON_GEM_WAIT_RENDERING 0x24
++
++#define DRM_RADEON_CS 0x26
++
+ #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)
+ #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START)
+ #define DRM_IOCTL_RADEON_CP_STOP DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t)
+@@ -521,6 +543,17 @@ typedef struct {
+ #define DRM_IOCTL_RADEON_SURF_ALLOC DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, drm_radeon_surface_alloc_t)
+ #define DRM_IOCTL_RADEON_SURF_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, drm_radeon_surface_free_t)
+
++#define DRM_IOCTL_RADEON_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_INFO, struct drm_radeon_gem_info)
++#define DRM_IOCTL_RADEON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_CREATE, struct drm_radeon_gem_create)
++#define DRM_IOCTL_RADEON_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_MMAP, struct drm_radeon_gem_mmap)
++#define DRM_IOCTL_RADEON_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PIN, struct drm_radeon_gem_pin)
++#define DRM_IOCTL_RADEON_GEM_UNPIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_UNPIN, struct drm_radeon_gem_unpin)
++#define DRM_IOCTL_RADEON_GEM_PREAD DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PREAD, struct drm_radeon_gem_pread)
++#define DRM_IOCTL_RADEON_GEM_PWRITE DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_PWRITE, struct drm_radeon_gem_pwrite)
++#define DRM_IOCTL_RADEON_GEM_SET_DOMAIN DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_DOMAIN, struct drm_radeon_gem_set_domain)
++#define DRM_IOCTL_RADEON_GEM_WAIT_RENDERING DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_GEM_WAIT_RENDERING, struct drm_radeon_gem_wait_rendering)
++#define DRM_IOCTL_RADEON_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_CS, struct drm_radeon_cs)
++
+ typedef struct drm_radeon_init {
+ enum {
+ RADEON_INIT_CP = 0x01,
+@@ -677,6 +710,8 @@ typedef struct drm_radeon_indirect {
+ #define RADEON_PARAM_VBLANK_CRTC 13 /* VBLANK CRTC */
+ #define RADEON_PARAM_FB_LOCATION 14 /* FB location */
+ #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */
++#define RADEON_PARAM_KERNEL_MM 16
++#define RADEON_PARAM_DEVICE_ID 17
+
+ typedef struct drm_radeon_getparam {
+ int param;
+@@ -732,6 +767,7 @@ typedef struct drm_radeon_setparam {
+ #define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */
+ #define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */
+ #define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */
++#define RADEON_SETPARAM_MM_INIT 7 /* Initialise the mm */
+ /* 1.14: Clients can allocate/free a surface
+ */
+ typedef struct drm_radeon_surface_alloc {
+@@ -747,4 +783,106 @@ typedef struct drm_radeon_surface_free {
+ #define DRM_RADEON_VBLANK_CRTC1 1
+ #define DRM_RADEON_VBLANK_CRTC2 2
+
++#define RADEON_GEM_DOMAIN_CPU 0x1 // Cached CPU domain
++#define RADEON_GEM_DOMAIN_GTT 0x2 // GTT or cache flushed
++#define RADEON_GEM_DOMAIN_VRAM 0x4 // VRAM domain
++
++/* return to userspace start/size of gtt and vram apertures */
++struct drm_radeon_gem_info {
++ uint64_t gart_start;
++ uint64_t gart_size;
++ uint64_t vram_start;
++ uint64_t vram_size;
++ uint64_t vram_visible;
++};
++
++struct drm_radeon_gem_create {
++ uint64_t size;
++ uint64_t alignment;
++ uint32_t handle;
++ uint32_t initial_domain; // to allow VRAM to be created
++ uint32_t no_backing_store; // for VRAM objects - select whether they need backing store
++ // pretty much front/back/depth don't need it - other things do
++};
++
++struct drm_radeon_gem_mmap {
++ uint32_t handle;
++ uint32_t pad;
++ uint64_t offset;
++ uint64_t size;
++ uint64_t addr_ptr;
++};
++
++struct drm_radeon_gem_set_domain {
++ uint32_t handle;
++ uint32_t read_domains;
++ uint32_t write_domain;
++};
++
++struct drm_radeon_gem_wait_rendering {
++ uint32_t handle;
++};
++
++struct drm_radeon_gem_pin {
++ uint32_t handle;
++ uint32_t pin_domain;
++ uint64_t alignment;
++ uint64_t offset;
++};
++
++struct drm_radeon_gem_unpin {
++ uint32_t handle;
++ uint32_t pad;
++};
++
++struct drm_radeon_gem_busy {
++ uint32_t handle;
++ uint32_t busy;
++};
++
++struct drm_radeon_gem_pread {
++ /** Handle for the object being read. */
++ uint32_t handle;
++ uint32_t pad;
++ /** Offset into the object to read from */
++ uint64_t offset;
++ /** Length of data to read */
++ uint64_t size;
++ /** Pointer to write the data into. */
++ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
++};
++
++struct drm_radeon_gem_pwrite {
++ /** Handle for the object being written to. */
++ uint32_t handle;
++ uint32_t pad;
++ /** Offset into the object to write to */
++ uint64_t offset;
++ /** Length of data to write */
++ uint64_t size;
++ /** Pointer to read the data from. */
++ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
++};
++
++
++/* New interface which obsolete all previous interface.
++ */
++
++#define RADEON_CHUNK_ID_RELOCS 0x01
++#define RADEON_CHUNK_ID_IB 0x02
++
++struct drm_radeon_cs_chunk {
++ uint32_t chunk_id;
++ uint32_t length_dw;
++ uint64_t chunk_data;
++};
++
++struct drm_radeon_cs {
++ uint32_t num_chunks;
++ uint32_t cs_id;
++ uint64_t chunks; /* this points to uint64_t * which point to
++ cs chunks */
++};
++
++
+ #endif
Index: libdrm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libdrm/devel/libdrm.spec,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- libdrm.spec 7 Feb 2009 00:28:39 -0000 1.59
+++ libdrm.spec 17 Feb 2009 23:46:52 -0000 1.60
@@ -3,7 +3,7 @@
Summary: Direct Rendering Manager runtime library
Name: libdrm
Version: 2.4.4
-Release: 4%{?dist}
+Release: 5%{?dist}
License: MIT
Group: System Environment/Libraries
URL: http://dri.sourceforge.net
@@ -104,9 +104,13 @@
%{_libdir}/libdrm_radeon.so
%{_libdir}/libdrm_nouveau.so
%{_libdir}/pkgconfig/libdrm.pc
+%{_libdir}/pkgconfig/libdrm_radeon.pc
%{_libdir}/pkgconfig/libdrm_nouveau.pc
%changelog
+* Wed Feb 18 2009 Dave Airlie <airlied at redhat.com> 2.4.4-5
+- update libdrm_radeon again
+
* Thu Feb 05 2009 Ben Skeggs <bskeggs at redhat.com> 2.4.4-4
- nouveau: pull in updates from upstream
- Previous message (by thread): rpms/ssmtp/devel ssmtp.spec,1.22,1.23
- Next message (by thread): rpms/mono/devel .cvsignore, 1.37, 1.38 import.log, 1.36, 1.37 mono.spec, 1.109, 1.110 sources, 1.43, 1.44
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list