nouveau: ttm stubs
authorJeremy Kolb <jkolb@brandeis.edu>
Thu, 1 Nov 2007 00:13:01 +0000 (20:13 -0400)
committerJeremy Kolb <jkolb@brandeis.edu>
Thu, 1 Nov 2007 00:13:01 +0000 (20:13 -0400)
linux-core/Makefile.kernel
linux-core/nouveau_drv.c
shared-core/nouveau_drv.h

index f1ae28e..bcbd78f 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_sgdma.o nouveau_dma.o nouveau_buffer.o \
                nv04_timer.o \
                nv04_mc.o nv40_mc.o nv50_mc.o \
                nv04_fb.o nv10_fb.o nv40_fb.o \
index 01de67d..9e6c8f4 100644 (file)
@@ -41,6 +41,25 @@ static struct pci_device_id pciidlist[] = {
        }
 };
 
+#ifdef NOUVEAU_HAVE_BUFFER
+static uint32_t nouveau_mem_prios[]  = { 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_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
+};
+#endif
+
 extern struct drm_ioctl_desc nouveau_ioctls[];
 extern int nouveau_max_ioctl;
 
@@ -80,6 +99,9 @@ static struct drm_driver driver = {
                .probe = probe,
                .remove = __devexit_p(drm_cleanup_pci),
        },
+#ifdef NOUVEAU_HAVE_BUFFER
+       .bo_driver = &nouveau_bo_driver,
+#endif
 
        .name = DRIVER_NAME,
        .desc = DRIVER_DESC,
index e5cef07..41258a5 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"
 
+
 struct mem_block {
        struct mem_block *next;
        struct mem_block *prev;
@@ -553,6 +560,17 @@ 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
+
 #if defined(__powerpc__)
 #define NV_READ(reg)        in_be32((void __iomem *)(dev_priv->mmio)->handle + (reg) )
 #define NV_WRITE(reg,val)   out_be32((void __iomem *)(dev_priv->mmio)->handle + (reg) , (val) )