summaryrefslogtreecommitdiff
path: root/sys/dev/ic/mc68450reg.h
blob: 49140d0b88364db8b8196bc06f23cd774d71e5d0 (plain)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*	$NetBSD: mc68450reg.h,v 1.5 2008/04/28 20:23:50 martin Exp $	*/

/*-
 * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Minoura Makoto.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * Motorola MC68450 DMAC register definition.
 */

#define DMAC_NCHAN	4	/* Number of channels */
#define DMAC_CHAN_SIZE	0x40	/* I/O area size per channes */

/* register location per channel */
#define DMAC_REG_CSR	0x00	/* Channel Status Register  */
#define DMAC_REG_CER	0x01	/* Channel Error Register */
#define DMAC_REG_DCR	0x04	/* Device Control Register */
#define DMAC_REG_OCR	0x05	/* Operation Control Register */
#define DMAC_REG_SCR	0x06	/* Sequence Control Register */
#define DMAC_REG_CCR	0x07	/* Channel Control Register */
#define DMAC_REG_MTCR	0x0a	/* Memory Transfer Count Register */
#define DMAC_REG_MAR	0x0c	/* Memory Address Register */
#define DMAC_REG_DAR	0x14	/* Device Address Register */
#define DMAC_REG_BTCR	0x1a	/* Base Transfer Count Register */
#define DMAC_REG_BAR	0x1c	/* Base Address Register */
#define DMAC_REG_NIVR	0x25	/* Normal Interrupt Vector Register */
#define DMAC_REG_EIVR	0x27	/* Error Interrupt Vector Register */
#define DMAC_REG_MFCR	0x29	/* Memory Function Code Register */
#define DMAC_REG_CPR	0x2d	/* Channel Priority Register */
#define DMAC_REG_DFCR	0x31	/* Device Function Code Register */
#define DMAC_REG_BFCR	0x39	/* Base Function Code Register */
#define DMAC_REG_GCR	0x3f	/* General Control Register */

/* CSR bits */
#define DMAC_CSR_COC	0x80	/* Channel Operation Complete */
#define DMAC_CSR_BTC	0x40	/* Block Transfer Complete */
#define DMAC_CSR_NDT	0x20	/* Normal Device Termination */
#define DMAC_CSR_ERR	0x10	/* Error */
#define DMAC_CSR_ACT	0x08	/* Channel Active */
#define DMAC_CSR_PCT	0x02	/* PCL Transition */
#define DMAC_CSR_PCS	0x01	/* PCL Level */

/* CER meanings */
/*
 * 0x00: No error
 * 0x01: Configuration error
 * 0x02: Operation timing error
 * 0x05: Address error in memory transfer
 * 0x06: Address error in device transfer
 * 0x07: Address error in base address reading
 * 0x09: Bus error in memory transfer
 * 0x0a: Bus error in device transfer
 * 0x0b: Bus error in base address reading
 * 0x0d: Count error in memory transfer count
 * 0x0e: Count error in device transfer count
 * 0x0f: Count error in base address
 * 0x10: External abort
 * 0x11: Software abort
 */

/* DCR bits */
#define DMAC_DCR_XRM_MASK	0xc0
#define DMAC_DCR_XRM_BURST	0x00 /* Burst mode */
#define DMAC_DCR_XRM_CSWOH	0x80 /* Cycle steal w/o hold */
#define DMAC_DCR_XRM_CSWH	0xc0 /* Cycle steal w/ hold */
#define DMAC_DCR_OTYP_MASK	0x30
#define DMAC_DCR_OTYP_EASYNC	0x00 /* Explicit M68000 */
#define DMAC_DCR_OTYP_ESYNC	0x10 /* Explicit M6800 */
#define DMAC_DCR_OTYP_IA	0x20 /* Implicit with ack */
#define DMAC_DCR_OTYP_IAR	0x30 /* Implicit with ack and rdy */
#define DMAC_DCR_OPS_MASK	0x08
#define DMAC_DCR_OPS_8BIT	0x00 /* 8bit */
#define DMAC_DCR_OPS_16BIT	0x08 /* 16bit */
#define DMAC_DCR_PCL_MASK	0x03
#define DMAC_DCR_PCL_STATUS	0x00
#define DMAC_DCR_PCL_INTERRUPT	0x01
#define DMAC_DCR_PCL_STARTPLS	0x02
#define DMAC_DCR_PCL_ABORT	0x03

/* OCR bits */
#define DMAC_OCR_DIR_MASK	0x80
#define DMAC_OCR_DIR_MTD	0x00 /* Direction: memory to device */
#define DMAC_OCR_DIR_DTM	0x80 /* Direction: device to memory */
#define DMAC_OCR_SIZE_MASK 	0x30
#define DMAC_OCR_SIZE_BYTE	0x00 /* Size: byte */
#define DMAC_OCR_SIZE_WORD	0x10 /* Size: word */
#define DMAC_OCR_SIZE_LONGWORD	0x20 /* Size: longword */
#define DMAC_OCR_SIZE_BYTE_NOPACK 0x30 /* Size: byte, no packing */
#define DMAC_OCR_CHAIN_MASK	0x0c
#define DMAC_OCR_CHAIN_DISABLED	0x00 /* Chain mode disabled */
#define DMAC_OCR_CHAIN_ARRAY	0x08 /* Array chain mode */
#define DMAC_OCR_CHAIN_LINKARRAY 0x0c /* Linked array chain mode */
#define DMAC_OCR_REQG_MASK	0x03
#define DMAC_OCR_REQG_LIMITED_RATE 0x00	/* Internal limited rate */
#define DMAC_OCR_REQG_MAXIMUM_RATE 0x01	/* Internal maximum rate */
#define DMAC_OCR_REQG_EXTERNAL	0x02 /* External */
#define DMAC_OCR_REQG_AUTO_START 0x03 /* Auto start, external */

/* SCR bits */
#define DMAC_SCR_MAC_MASK	0x0c
#define DMAC_SCR_MAC_NO_COUNT	0x00 /* Fixed memory address */
#define DMAC_SCR_MAC_COUNT_UP	0x04 /* Memory address count up */
#define DMAC_SCR_MAC_COUNT_DOWN	0x08 /* Memory address count down */
#define DMAC_SCR_DAC_MASK	0x03
#define DMAC_SCR_DAC_NO_COUNT	0x00 /* Fixed device address */
#define DMAC_SCR_DAC_COUNT_UP	0x01 /* Device address count up */
#define DMAC_SCR_DAC_COUNT_DOWN	0x02 /* Device address count down */

/* CCR bits */
#define DMAC_CCR_STR		0x80 /* Start channel */
#define DMAC_CCR_CNT		0x40 /* Continue operation */
#define DMAC_CCR_HLT		0x20 /* Software halt */
#define DMAC_CCR_SAB		0x10 /* Software abort */
#define DMAC_CCR_INT		0x08 /* Interrupt enable */

/* GCR bits */
#define DMAC_GCR_BT_MASK	0x0c
#define DMAC_GCR_BT_16		0x00 /* 16clocks */
#define DMAC_GCR_BT_32		0x04 /* 32clocks */
#define DMAC_GCR_BT_64		0x08 /* 64clocks */
#define DMAC_GCR_BT_128		0x0c /* 128clocks */
#define DMAC_GCR_BR_MASK	0x03
#define DMAC_GCR_BR_50		0x00 /* 50% bandwidth */
#define DMAC_GCR_BR_25		0x01 /* 25% bandwidth */
#define DMAC_GCR_BR_12		0x02 /* 12.5% bandwidth */
#define DMAC_GCR_BR_6		0x03 /* 6.25% bandwidth */

/* MFC/DFC function codes */
#define DMAC_FC_USER_DATA	0x01
#define DMAC_FC_USER_PROGRAM	0x02
#define DMAC_FC_KERNEL_DATA	0x05
#define DMAC_FC_KERNEL_PROGRAM	0x06
#define DMAC_FC_CPU		0x07

/*
 * An element of the array used in DMAC scatter-gather transfer
 * (array chaining mode)
 */
struct dmac_sg_array {
	u_int32_t	da_addr;
	u_int16_t	da_count;
};