drm/i915: Type safe register read/write
[deliverable/linux.git] / drivers / gpu / drm / i915 / intel_ringbuffer.h
index 2e85fda949638079d2c7c4c9f8ac9daf39f97f5f..5d1eb206151ddb9451d698cbb61166bece5436c8 100644 (file)
@@ -100,6 +100,7 @@ struct intel_ringbuffer {
        void __iomem *virtual_start;
 
        struct intel_engine_cs *ring;
+       struct list_head link;
 
        u32 head;
        u32 tail;
@@ -157,6 +158,7 @@ struct  intel_engine_cs {
        u32             mmio_base;
        struct          drm_device *dev;
        struct intel_ringbuffer *buffer;
+       struct list_head buffers;
 
        /*
         * A pool of objects to use as shadow copies of client batch buffers
@@ -247,7 +249,7 @@ struct  intel_engine_cs {
                                /* our mbox written by others */
                                u32             wait[I915_NUM_RINGS];
                                /* mboxes this ring signals to */
-                               u32             signal[I915_NUM_RINGS];
+                               i915_reg_t      signal[I915_NUM_RINGS];
                        } mbox;
                        u64             signal_ggtt[I915_NUM_RINGS];
                };
@@ -377,6 +379,13 @@ intel_ring_sync_index(struct intel_engine_cs *ring,
        return idx;
 }
 
+static inline void
+intel_flush_status_page(struct intel_engine_cs *ring, int reg)
+{
+       drm_clflush_virt_range(&ring->status_page.page_addr[reg],
+                              sizeof(uint32_t));
+}
+
 static inline u32
 intel_read_status_page(struct intel_engine_cs *ring,
                       int reg)
@@ -413,12 +422,12 @@ intel_write_status_page(struct intel_engine_cs *ring,
 #define I915_GEM_HWS_SCRATCH_INDEX     0x40
 #define I915_GEM_HWS_SCRATCH_ADDR (I915_GEM_HWS_SCRATCH_INDEX << MI_STORE_DWORD_INDEX_SHIFT)
 
-void intel_unpin_ringbuffer_obj(struct intel_ringbuffer *ringbuf);
+struct intel_ringbuffer *
+intel_engine_create_ringbuffer(struct intel_engine_cs *engine, int size);
 int intel_pin_and_map_ringbuffer_obj(struct drm_device *dev,
                                     struct intel_ringbuffer *ringbuf);
-void intel_destroy_ringbuffer_obj(struct intel_ringbuffer *ringbuf);
-int intel_alloc_ringbuffer_obj(struct drm_device *dev,
-                              struct intel_ringbuffer *ringbuf);
+void intel_unpin_ringbuffer_obj(struct intel_ringbuffer *ringbuf);
+void intel_ringbuffer_free(struct intel_ringbuffer *ring);
 
 void intel_stop_ring_buffer(struct intel_engine_cs *ring);
 void intel_cleanup_ring_buffer(struct intel_engine_cs *ring);
@@ -434,6 +443,11 @@ static inline void intel_ring_emit(struct intel_engine_cs *ring,
        iowrite32(data, ringbuf->virtual_start + ringbuf->tail);
        ringbuf->tail += 4;
 }
+static inline void intel_ring_emit_reg(struct intel_engine_cs *ring,
+                                      i915_reg_t reg)
+{
+       intel_ring_emit(ring, i915_mmio_reg_offset(reg));
+}
 static inline void intel_ring_advance(struct intel_engine_cs *ring)
 {
        struct intel_ringbuffer *ringbuf = ring->buffer;
This page took 0.024962 seconds and 5 git commands to generate.