Merge tag 'md/3.17-more-fixes' of git://git.neil.brown.name/md
[firefly-linux-kernel-4.4.55.git] / drivers / dma / fsldma.h
index d56e83599825b16666960f78b91ea08620be4cef..239c20c84382ce4c724858f5af5ed5c92a5c1416 100644 (file)
@@ -134,12 +134,36 @@ struct fsldma_device {
 #define FSL_DMA_CHAN_PAUSE_EXT 0x00001000
 #define FSL_DMA_CHAN_START_EXT 0x00002000
 
+#ifdef CONFIG_PM
+struct fsldma_chan_regs_save {
+       u32 mr;
+};
+
+enum fsldma_pm_state {
+       RUNNING = 0,
+       SUSPENDED,
+};
+#endif
+
 struct fsldma_chan {
        char name[8];                   /* Channel name */
        struct fsldma_chan_regs __iomem *regs;
        spinlock_t desc_lock;           /* Descriptor operation lock */
-       struct list_head ld_pending;    /* Link descriptors queue */
-       struct list_head ld_running;    /* Link descriptors queue */
+       /*
+        * Descriptors which are queued to run, but have not yet been
+        * submitted to the hardware for execution
+        */
+       struct list_head ld_pending;
+       /*
+        * Descriptors which are currently being executed by the hardware
+        */
+       struct list_head ld_running;
+       /*
+        * Descriptors which have finished execution by the hardware. These
+        * descriptors have already had their cleanup actions run. They are
+        * waiting for the ACK bit to be set by the async_tx API.
+        */
+       struct list_head ld_completed;  /* Link descriptors queue */
        struct dma_chan common;         /* DMA common channel */
        struct dma_pool *desc_pool;     /* Descriptors pool */
        struct device *dev;             /* Channel device */
@@ -148,6 +172,10 @@ struct fsldma_chan {
        struct tasklet_struct tasklet;
        u32 feature;
        bool idle;                      /* DMA controller is idle */
+#ifdef CONFIG_PM
+       struct fsldma_chan_regs_save regs_save;
+       enum fsldma_pm_state pm_state;
+#endif
 
        void (*toggle_ext_pause)(struct fsldma_chan *fsl_chan, int enable);
        void (*toggle_ext_start)(struct fsldma_chan *fsl_chan, int enable);