summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-core/Makefile.kernel2
-rw-r--r--linux-core/nouveau_buffer.c27
-rw-r--r--linux-core/nouveau_drv.c28
-rw-r--r--shared-core/nouveau_drv.h23
4 files changed, 37 insertions, 43 deletions
diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel
index bcbd78f2..d1f3bb7b 100644
--- a/linux-core/Makefile.kernel
+++ b/linux-core/Makefile.kernel
@@ -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 \
diff --git a/linux-core/nouveau_buffer.c b/linux-core/nouveau_buffer.c
index 41c50748..1a210e49 100644
--- a/linux-core/nouveau_buffer.c
+++ b/linux-core/nouveau_buffer.c
@@ -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
+};
+
diff --git a/linux-core/nouveau_drv.c b/linux-core/nouveau_drv.c
index 1bd8d977..ac70d7ae 100644
--- a/linux-core/nouveau_drv.c
+++ b/linux-core/nouveau_drv.c
@@ -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,
diff --git a/shared-core/nouveau_drv.h b/shared-core/nouveau_drv.h
index 41258a50..83836270 100644
--- a/shared-core/nouveau_drv.h
+++ b/shared-core/nouveau_drv.h
@@ -39,12 +39,6 @@
#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) )