Blame view

kernel/linux-rt-4.4.41/arch/frv/include/asm/dma.h 3.63 KB
5113f6f70   김현기   kernel add
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  /* dma.h: FRV DMA controller management
   *
   * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
   * Written by David Howells (dhowells@redhat.com)
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version
   * 2 of the License, or (at your option) any later version.
   */
  
  #ifndef _ASM_DMA_H
  #define _ASM_DMA_H
  
  //#define DMA_DEBUG 1
  
  #include <linux/interrupt.h>
  
  #undef MAX_DMA_CHANNELS		/* don't use kernel/dma.c */
  
  /* under 2.4 this is actually needed by the new bootmem allocator */
  #define MAX_DMA_ADDRESS		PAGE_OFFSET
  
  /*
   * FRV DMA controller management
   */
  typedef irqreturn_t (*dma_irq_handler_t)(int dmachan, unsigned long cstr, void *data);
  
  extern void frv_dma_init(void);
  
  extern int frv_dma_open(const char *devname,
  			unsigned long dmamask,
  			int dmacap,
  			dma_irq_handler_t handler,
  			unsigned long irq_flags,
  			void *data);
  
  /* channels required */
  #define FRV_DMA_MASK_ANY	ULONG_MAX	/* any channel */
  
  /* capabilities required */
  #define FRV_DMA_CAP_DREQ	0x01		/* DMA request pin */
  #define FRV_DMA_CAP_DACK	0x02		/* DMA ACK pin */
  #define FRV_DMA_CAP_DONE	0x04		/* DMA done pin */
  
  extern void frv_dma_close(int dma);
  
  extern void frv_dma_config(int dma, unsigned long ccfr, unsigned long cctr, unsigned long apr);
  
  extern void frv_dma_start(int dma,
  			  unsigned long sba, unsigned long dba,
  			  unsigned long pix, unsigned long six, unsigned long bcl);
  
  extern void frv_dma_restart_circular(int dma, unsigned long six);
  
  extern void frv_dma_stop(int dma);
  
  extern int is_frv_dma_interrupting(int dma);
  
  extern void frv_dma_dump(int dma);
  
  extern void frv_dma_status_clear(int dma);
  
  #define FRV_DMA_NCHANS	8
  #define FRV_DMA_4CHANS	4
  #define FRV_DMA_8CHANS	8
  
  #define DMAC_CCFRx		0x00	/* channel configuration reg */
  #define DMAC_CCFRx_CM_SHIFT	16
  #define DMAC_CCFRx_CM_DA	0x00000000
  #define DMAC_CCFRx_CM_SCA	0x00010000
  #define DMAC_CCFRx_CM_DCA	0x00020000
  #define DMAC_CCFRx_CM_2D	0x00030000
  #define DMAC_CCFRx_ATS_SHIFT	8
  #define DMAC_CCFRx_RS_INTERN	0x00000000
  #define DMAC_CCFRx_RS_EXTERN	0x00000001
  #define DMAC_CCFRx_RS_SHIFT	0
  
  #define DMAC_CSTRx		0x08	/* channel status reg */
  #define DMAC_CSTRx_FS		0x0000003f
  #define DMAC_CSTRx_NE		0x00000100
  #define DMAC_CSTRx_FED		0x00000200
  #define DMAC_CSTRx_WER		0x00000800
  #define DMAC_CSTRx_RER		0x00001000
  #define DMAC_CSTRx_CE		0x00002000
  #define DMAC_CSTRx_INT		0x00800000
  #define DMAC_CSTRx_BUSY		0x80000000
  
  #define DMAC_CCTRx		0x10	/* channel control reg */
  #define DMAC_CCTRx_DSIZ_1	0x00000000
  #define DMAC_CCTRx_DSIZ_2	0x00000001
  #define DMAC_CCTRx_DSIZ_4	0x00000002
  #define DMAC_CCTRx_DSIZ_32	0x00000005
  #define DMAC_CCTRx_DAU_HOLD	0x00000000
  #define DMAC_CCTRx_DAU_INC	0x00000010
  #define DMAC_CCTRx_DAU_DEC	0x00000020
  #define DMAC_CCTRx_SSIZ_1	0x00000000
  #define DMAC_CCTRx_SSIZ_2	0x00000100
  #define DMAC_CCTRx_SSIZ_4	0x00000200
  #define DMAC_CCTRx_SSIZ_32	0x00000500
  #define DMAC_CCTRx_SAU_HOLD	0x00000000
  #define DMAC_CCTRx_SAU_INC	0x00001000
  #define DMAC_CCTRx_SAU_DEC	0x00002000
  #define DMAC_CCTRx_FC		0x08000000
  #define DMAC_CCTRx_ICE		0x10000000
  #define DMAC_CCTRx_IE		0x40000000
  #define DMAC_CCTRx_ACT		0x80000000
  
  #define DMAC_SBAx		0x18	/* source base address reg */
  #define DMAC_DBAx		0x20	/* data base address reg */
  #define DMAC_PIXx		0x28	/* primary index reg */
  #define DMAC_SIXx		0x30	/* secondary index reg */
  #define DMAC_BCLx		0x38	/* byte count limit reg */
  #define DMAC_APRx		0x40	/* alternate pointer reg */
  
  /*
   * required for PCI + MODULES
   */
  #ifdef CONFIG_PCI
  extern int isa_dma_bridge_buggy;
  #else
  #define isa_dma_bridge_buggy 	(0)
  #endif
  
  #endif /* _ASM_DMA_H */