drm/vmwgfx: Relax irq locking somewhat
[cascardo/linux.git] / drivers / gpu / drm / vmwgfx / vmwgfx_drv.h
index f19fd39..a8ae9df 100644 (file)
@@ -375,7 +375,7 @@ struct vmw_private {
        uint32_t stdu_max_height;
        uint32_t initial_width;
        uint32_t initial_height;
-       u32 __iomem *mmio_virt;
+       u32 *mmio_virt;
        uint32_t capabilities;
        uint32_t max_gmr_ids;
        uint32_t max_gmr_pages;
@@ -440,13 +440,12 @@ struct vmw_private {
        spinlock_t waiter_lock;
        int fence_queue_waiters; /* Protected by waiter_lock */
        int goal_queue_waiters; /* Protected by waiter_lock */
-       int cmdbuf_waiters; /* Protected by irq_lock */
-       int error_waiters; /* Protected by irq_lock */
-       atomic_t fifo_queue_waiters;
+       int cmdbuf_waiters; /* Protected by waiter_lock */
+       int error_waiters; /* Protected by waiter_lock */
+       int fifo_queue_waiters; /* Protected by waiter_lock */
        uint32_t last_read_seqno;
-       spinlock_t irq_lock;
        struct vmw_fence_manager *fman;
-       uint32_t irq_mask;
+       uint32_t irq_mask; /* Updates protected by waiter_lock */
 
        /*
         * Device state
@@ -914,9 +913,9 @@ void vmw_kms_idle_workqueues(struct vmw_master *vmaster);
 bool vmw_kms_validate_mode_vram(struct vmw_private *dev_priv,
                                uint32_t pitch,
                                uint32_t height);
-u32 vmw_get_vblank_counter(struct drm_device *dev, int crtc);
-int vmw_enable_vblank(struct drm_device *dev, int crtc);
-void vmw_disable_vblank(struct drm_device *dev, int crtc);
+u32 vmw_get_vblank_counter(struct drm_device *dev, unsigned int pipe);
+int vmw_enable_vblank(struct drm_device *dev, unsigned int pipe);
+void vmw_disable_vblank(struct drm_device *dev, unsigned int pipe);
 int vmw_kms_present(struct vmw_private *dev_priv,
                    struct drm_file *file_priv,
                    struct vmw_framebuffer *vfb,
@@ -1206,4 +1205,30 @@ static inline void vmw_fifo_resource_dec(struct vmw_private *dev_priv)
 {
        atomic_dec(&dev_priv->num_fifo_resources);
 }
+
+/**
+ * vmw_mmio_read - Perform a MMIO read from volatile memory
+ *
+ * @addr: The address to read from
+ *
+ * This function is intended to be equivalent to ioread32() on
+ * memremap'd memory, but without byteswapping.
+ */
+static inline u32 vmw_mmio_read(u32 *addr)
+{
+       return READ_ONCE(*addr);
+}
+
+/**
+ * vmw_mmio_write - Perform a MMIO write to volatile memory
+ *
+ * @addr: The address to write to
+ *
+ * This function is intended to be equivalent to iowrite32 on
+ * memremap'd memory, but without byteswapping.
+ */
+static inline void vmw_mmio_write(u32 value, u32 *addr)
+{
+       WRITE_ONCE(*addr, value);
+}
 #endif