Blame view

arch/blackfin/include/asm/bfin_dma.h 2.64 KB
6c8e75a06   Mike Frysinger   Blackfin: bfin_dm...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  /*
   * bfin_dma.h - Blackfin DMA defines/structures/etc...
   *
   * Copyright 2004-2010 Analog Devices Inc.
   *
   * Licensed under the GPL-2 or later.
   */
  
  #ifndef __ASM_BFIN_DMA_H__
  #define __ASM_BFIN_DMA_H__
  
  #include <linux/types.h>
  
  /* DMA_CONFIG Masks */
  #define DMAEN			0x0001	/* DMA Channel Enable */
  #define WNR				0x0002	/* Channel Direction (W/R*) */
  #define WDSIZE_8		0x0000	/* Transfer Word Size = 8 */
  #define WDSIZE_16		0x0004	/* Transfer Word Size = 16 */
  #define WDSIZE_32		0x0008	/* Transfer Word Size = 32 */
  #define DMA2D			0x0010	/* DMA Mode (2D/1D*) */
  #define RESTART			0x0020	/* DMA Buffer Clear */
  #define DI_SEL			0x0040	/* Data Interrupt Timing Select */
  #define DI_EN			0x0080	/* Data Interrupt Enable */
  #define NDSIZE_0		0x0000	/* Next Descriptor Size = 0 (Stop/Autobuffer) */
  #define NDSIZE_1		0x0100	/* Next Descriptor Size = 1 */
  #define NDSIZE_2		0x0200	/* Next Descriptor Size = 2 */
  #define NDSIZE_3		0x0300	/* Next Descriptor Size = 3 */
  #define NDSIZE_4		0x0400	/* Next Descriptor Size = 4 */
  #define NDSIZE_5		0x0500	/* Next Descriptor Size = 5 */
  #define NDSIZE_6		0x0600	/* Next Descriptor Size = 6 */
  #define NDSIZE_7		0x0700	/* Next Descriptor Size = 7 */
  #define NDSIZE_8		0x0800	/* Next Descriptor Size = 8 */
  #define NDSIZE_9		0x0900	/* Next Descriptor Size = 9 */
  #define NDSIZE			0x0f00	/* Next Descriptor Size */
  #define DMAFLOW			0x7000	/* Flow Control */
  #define DMAFLOW_STOP	0x0000	/* Stop Mode */
  #define DMAFLOW_AUTO	0x1000	/* Autobuffer Mode */
  #define DMAFLOW_ARRAY	0x4000	/* Descriptor Array Mode */
  #define DMAFLOW_SMALL	0x6000	/* Small Model Descriptor List Mode */
  #define DMAFLOW_LARGE	0x7000	/* Large Model Descriptor List Mode */
  
  /* DMA_IRQ_STATUS Masks */
  #define DMA_DONE		0x0001	/* DMA Completion Interrupt Status */
  #define DMA_ERR			0x0002	/* DMA Error Interrupt Status */
  #define DFETCH			0x0004	/* DMA Descriptor Fetch Indicator */
  #define DMA_RUN			0x0008	/* DMA Channel Running Indicator */
  
  /*
   * All Blackfin system MMRs are padded to 32bits even if the register
   * itself is only 16bits.  So use a helper macro to streamline this.
   */
  #define __BFP(m) u16 m; u16 __pad_##m
  
  /*
   * bfin dma registers layout
   */
  struct bfin_dma_regs {
  	u32 next_desc_ptr;
  	u32 start_addr;
  	__BFP(config);
  	u32 __pad0;
  	__BFP(x_count);
  	__BFP(x_modify);
  	__BFP(y_count);
  	__BFP(y_modify);
  	u32 curr_desc_ptr;
  	u32 curr_addr;
  	__BFP(irq_status);
  	__BFP(peripheral_map);
  	__BFP(curr_x_count);
  	u32 __pad1;
  	__BFP(curr_y_count);
  	u32 __pad2;
  };
  
  /*
   * bfin handshake mdma registers layout
   */
  struct bfin_hmdma_regs {
  	__BFP(control);
  	__BFP(ecinit);
  	__BFP(bcinit);
  	__BFP(ecurgent);
  	__BFP(ecoverflow);
  	__BFP(ecount);
  	__BFP(bcount);
  };
  
  #undef __BFP
  
  #endif