nouveau: put it all together.
authorJeremy Kolb <jkolb@brandeis.edu>
Fri, 2 Nov 2007 23:44:30 +0000 (19:44 -0400)
committerJeremy Kolb <jkolb@brandeis.edu>
Fri, 2 Nov 2007 23:47:48 +0000 (19:47 -0400)
linux-core/Makefile.kernel
linux-core/nouveau_buffer.c
linux-core/nouveau_drv.c
shared-core/nouveau_drv.h

index bcbd78f..d1f3bb7 100644 (file)
@@ -22,7 +22,7 @@ i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_fence.o \
                i915_buffer.o i915_compat.o
 nouveau-objs := nouveau_drv.o nouveau_state.o nouveau_fifo.o nouveau_mem.o \
                nouveau_object.o nouveau_irq.o nouveau_notifier.o nouveau_swmthd.o \
-               nouveau_sgdma.o nouveau_dma.o nouveau_buffer.o \
+               nouveau_sgdma.o nouveau_dma.o nouveau_buffer.o nouveau_fence.o \
                nv04_timer.o \
                nv04_mc.o nv40_mc.o nv50_mc.o \
                nv04_fb.o nv10_fb.o nv40_fb.o \
index 41c5074..1a210e4 100644 (file)
@@ -230,3 +230,30 @@ void nouveau_flush_ttm(struct drm_ttm *ttm)
 
 }
 
+static uint32_t nouveau_mem_prios[]  = {
+        DRM_BO_MEM_PRIV0,
+        DRM_BO_MEM_VRAM,
+        DRM_BO_MEM_TT,
+        DRM_BO_MEM_LOCAL
+};
+static uint32_t nouveau_busy_prios[] = {
+        DRM_BO_MEM_TT,
+        DRM_BO_MEM_PRIV0,
+        DRM_BO_MEM_VRAM,
+        DRM_BO_MEM_LOCAL
+};
+
+struct drm_bo_driver nouveau_bo_driver = {
+       .mem_type_prio = nouveau_mem_prios,
+       .mem_busy_prio = nouveau_busy_prios,
+       .num_mem_type_prio = sizeof(nouveau_mem_prios)/sizeof(uint32_t),
+       .num_mem_busy_prio = sizeof(nouveau_busy_prios)/sizeof(uint32_t),
+       .create_ttm_backend_entry = nouveau_create_ttm_backend_entry,
+       .fence_type = nouveau_fence_types,
+       .invalidate_caches = nouveau_invalidate_caches,
+       .init_mem_type = nouveau_init_mem_type,
+       .evict_mask = nouveau_evict_mask,
+       .move = nouveau_move,
+       .ttm_cache_flush= nouveau_flush_ttm
+};
+
index 1bd8d97..ac70d7a 100644 (file)
@@ -41,33 +41,6 @@ static struct pci_device_id pciidlist[] = {
        }
 };
 
-static uint32_t nouveau_mem_prios[]  = {
-        DRM_BO_MEM_PRIV0,
-        DRM_BO_MEM_VRAM,
-        DRM_BO_MEM_TT,
-        DRM_BO_MEM_LOCAL
-};
-static uint32_t nouveau_busy_prios[] = {
-        DRM_BO_MEM_TT,
-        DRM_BO_MEM_PRIV0,
-        DRM_BO_MEM_VRAM,
-        DRM_BO_MEM_LOCAL
-};
-
-static struct drm_bo_driver nouveau_bo_driver = {
-       .mem_type_prio = nouveau_mem_prios,
-       .mem_busy_prio = nouveau_busy_prios,
-       .num_mem_type_prio = sizeof(nouveau_mem_prios)/sizeof(uint32_t),
-       .num_mem_busy_prio = sizeof(nouveau_busy_prios)/sizeof(uint32_t),
-       .create_ttm_backend_entry = nouveau_create_ttm_backend_entry,
-       .fence_type = nouveau_fence_types,
-       .invalidate_caches = nouveau_invalidate_caches,
-       .init_mem_type = nouveau_init_mem_type,
-       .evict_mask = nouveau_evict_mask,
-       .move = nouveau_move,
-       .ttm_cache_flush= nouveau_flush_ttm
-};
-
 extern struct drm_ioctl_desc nouveau_ioctls[];
 extern int nouveau_max_ioctl;
 
@@ -109,6 +82,7 @@ static struct drm_driver driver = {
        },
         
         .bo_driver = &nouveau_bo_driver,
+        .fence_driver = &nouveau_fence_driver,
 
        .name = DRIVER_NAME,
        .desc = DRIVER_DESC,
index 41258a5..8383627 100644 (file)
 #define NOUVEAU_FAMILY   0x0000FFFF
 #define NOUVEAU_FLAGS    0xFFFF0000
 
-#if 0
-#if defined(__linux__)
-#define NOUVEAU_HAVE_BUFFER
-#endif
-#endif
-
 #include "nouveau_drm.h"
 #include "nouveau_reg.h"
 
@@ -153,6 +147,9 @@ struct nouveau_drm_channel {
        /* Notifiers */
        uint32_t notify0_offset;
 
+        /* Fences */
+        uint32_t next_sequence;
+
        /* Buffer moves */
        uint32_t m2mf_dma_source;
        uint32_t m2mf_dma_destin;
@@ -560,16 +557,12 @@ extern void nv04_timer_takedown(struct drm_device *);
 extern long nouveau_compat_ioctl(struct file *file, unsigned int cmd,
                                 unsigned long arg);
 
-#ifdef NOUVEAU_HAVE_BUFFER
 /* nouveau_buffer.c */
-extern struct drm_ttm_backend *nouveau_create_ttm_backend_entry(struct drm_device *dev);
-extern int nouveau_fence_types(struct drm_buffer_object *bo, uint32_t *fclass, uint32_t *type);
-extern int nouveau_invalidate_caches(struct drm_device *dev, uint64_t buffer_flags);
-extern int nouveau_init_mem_type(struct drm_device *dev, uint32_t type, struct drm_mem_type_manager *man);
-extern uint32_t nouveau_evict_mask(struct drm_buffer_object *bo);
-extern int nouveau_move(struct drm_buffer_object *bo, int evict, int no_wait, struct drm_bo_mem_reg *new_mem);
-void nouveau_flush_ttm(struct drm_ttm *ttm);
-#endif
+extern struct drm_bo_driver nouveau_bo_driver;
+
+/* nouveau_fence.c */
+extern struct drm_fence_driver nouveau_fence_driver;
+extern void nouveau_fence_handler(struct drm_device *dev, int channel);
 
 #if defined(__powerpc__)
 #define NV_READ(reg)        in_be32((void __iomem *)(dev_priv->mmio)->handle + (reg) )