]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/dma/mv_xor.h
dma: mv_xor: Remove all interrupt magic numbers
[karo-tx-linux.git] / drivers / dma / mv_xor.h
index d0749229c875187a454c498964155c37e765d314..ae41c31c6ea5a7773ce44f8cdb8e3b12d106bd48 100644 (file)
@@ -34,6 +34,9 @@
 #define XOR_OPERATION_MODE_MEMCPY      2
 #define XOR_DESCRIPTOR_SWAP            BIT(14)
 
+#define XOR_DESC_DMA_OWNED             BIT(31)
+#define XOR_DESC_EOD_INT_EN            BIT(31)
+
 #define XOR_CURR_DESC(chan)    (chan->mmr_high_base + 0x10 + (chan->idx * 4))
 #define XOR_NEXT_DESC(chan)    (chan->mmr_high_base + 0x00 + (chan->idx * 4))
 #define XOR_BYTE_COUNT(chan)   (chan->mmr_high_base + 0x20 + (chan->idx * 4))
 #define XOR_INTR_MASK(chan)    (chan->mmr_base + 0x40)
 #define XOR_ERROR_CAUSE(chan)  (chan->mmr_base + 0x50)
 #define XOR_ERROR_ADDR(chan)   (chan->mmr_base + 0x60)
-#define XOR_INTR_MASK_VALUE    0x3F5
+
+#define XOR_INT_END_OF_DESC    BIT(0)
+#define XOR_INT_END_OF_CHAIN   BIT(1)
+#define XOR_INT_STOPPED                BIT(2)
+#define XOR_INT_PAUSED         BIT(3)
+#define XOR_INT_ERR_DECODE     BIT(4)
+#define XOR_INT_ERR_RDPROT     BIT(5)
+#define XOR_INT_ERR_WRPROT     BIT(6)
+#define XOR_INT_ERR_OWN                BIT(7)
+#define XOR_INT_ERR_PAR                BIT(8)
+#define XOR_INT_ERR_MBUS       BIT(9)
+
+#define XOR_INTR_ERRORS                (XOR_INT_ERR_DECODE | XOR_INT_ERR_RDPROT | \
+                                XOR_INT_ERR_WRPROT | XOR_INT_ERR_OWN    | \
+                                XOR_INT_ERR_PAR    | XOR_INT_ERR_MBUS)
+
+#define XOR_INTR_MASK_VALUE    (XOR_INT_END_OF_DESC | \
+                                XOR_INT_STOPPED     | XOR_INTR_ERRORS)
 
 #define WINDOW_BASE(w)         (0x50 + ((w) << 2))
 #define WINDOW_SIZE(w)         (0x70 + ((w) << 2))
@@ -110,9 +130,7 @@ struct mv_xor_chan {
  * @completed_node: node on the mv_xor_chan.completed_slots list
  * @hw_desc: virtual address of the hardware descriptor chain
  * @phys: hardware address of the hardware descriptor chain
- * @group_head: first operation in a transaction
- * @slot_cnt: total slots used in an transaction (group of operations)
- * @slots_per_op: number of slots per operation
+ * @slot_used: slot in use or not
  * @idx: pool index
  * @unmap_src_cnt: number of xor sources
  * @unmap_len: transaction bytecount
@@ -127,14 +145,11 @@ struct mv_xor_desc_slot {
        struct list_head        completed_node;
        enum dma_transaction_type       type;
        void                    *hw_desc;
-       struct mv_xor_desc_slot *group_head;
-       u16                     slot_cnt;
-       u16                     slots_per_op;
+       u16                     slot_used;
        u16                     idx;
        u16                     unmap_src_cnt;
        u32                     value;
        size_t                  unmap_len;
-       struct list_head        tx_list;
        struct dma_async_tx_descriptor  async_tx;
        union {
                u32             *xor_check_result;