summaryrefslogtreecommitdiff
path: root/sys/arch/mvme68k/dev/lrcreg.h
blob: 3ddd40d250ee5d9b641fb471e58773d6f4dd6912 (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
168
169
170
171
172
173
174
175
/*	$OpenBSD: lrcreg.h,v 1.1 2009/03/01 21:40:49 miod Exp $	*/

/*
 * Copyright (c) 2006, Miodrag Vallat.
 *
 * 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 AUTHOR ``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 AUTHOR 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.
 */

/*
 * LRC Local Resource Controller, found on MVME165
 */

/*
 * Register layout.
 * Note that this chip is 24-bit internally, so the 8 high-order bits of
 * each register are undefined and likely set to ones.
 */
struct lrcreg {
	/* timer constants */
	volatile u_int32_t	lrc_t0base;
	volatile u_int32_t	lrc_t1base;
	volatile u_int32_t	lrc_t2base;
	/* timer counts */
	volatile u_int32_t	lrc_t0cnt;
	volatile u_int32_t	lrc_t1cnt;
	volatile u_int32_t	lrc_t2cnt;
	/* timer control words */
	volatile u_int32_t	lrc_tcr0;
	volatile u_int32_t	lrc_tcr1;
	volatile u_int32_t	lrc_tcr2;
	/* general control */
	volatile u_int32_t	lrc_gcr;
	/* bus control */
	volatile u_int32_t	lrc_bcr;
	/* interrupt control */
	volatile u_int32_t	lrc_icr0;
	volatile u_int32_t	lrc_icr1;
	/* status register */
	volatile u_int32_t	lrc_stat;
	/* RAM address */
	volatile u_int32_t	lrc_ramaddr;
	/* bus error status */
	volatile u_int32_t	lrc_berrstat;
};

/* TCR0 bits */
#define	TCR_TEN0	0x80	/* timer0 enable */
#define	TCR_TLD0	0x40	/* timer0 reload */
#define	TCR_TCYC0	0x20	/* timer0 cycle */
#define	TCR_T0IE	0x10	/* time0 interrupt enable */
#define	TCR_TOS_MASK	0x0c	/* timer output select */
#define	TCR_TOS_TMR0	0x00
#define	TCR_TOS_TMR1	0x04
#define	TCR_TOS_TMR2	0x08
#define	TCR_TOEN	0x02	/* timer output enable */
#define	TCR_TOMD	0x01	/* timer output mode: pulse / square wave */

/* TCR1 bits */
#define	TCR_TEN1	0x80	/* timer1 enable */
#define	TCR_TLD1	0x40	/* timer1 reload */
#define	TCR_TCYC1	0x20	/* timer1 cycle */
#define	TCR_T1IE	0x10	/* timer1 interrupt enable */
#define	TCR_TIS_MASK	0x0c	/* timer input select */
#define	TCR_TIS_TMR0	0x00
#define	TCR_TIS_TMR1	0x04
#define	TCR_TIS_TMR2	0x08
#define	TCR_TIS_NONE	0x0c
#define	TCR_TIEN	0x02	/* timer input enable */
#define	TCR_TIMD	0x01	/* timer input mode */

/* TCR2 bits */
#define	TCR_TEN2	0x80	/* timer2 enable */
#define	TCR_TLD2	0x40	/* timer2 reload */
#define	TCR_TCYC2	0x20	/* timer2 cycle */
#define	TCR_T2IE	0x10	/* timer2 interrupt enable */
#define	TCR_TWD_MASK	0x0c	/* timer watchdog select */
#define	TCR_TWD_TMR0	0x00
#define	TCR_TWD_TMR1	0x04
#define	TCR_TWD_TMR2	0x08
#define	TCR_TWD_NONE	0x0c
#define	TCR_TWDEN	0x02	/* timer watchdog enable */
#define	TCR_TTST	0x01	/* timer test (do not use) */

/* GCR bits */
#define	GCR_SCFREQ	0x10	/* dart serial clock frequency */
#define	GCR_FAST	0x08	/* EPROM fast acknowledge */
#define	GCR_GPCTL1	0x04	/* write wrong parity */
#define	GCR_GPCTL0	0x02	/* parity error enable */
#define	GCR_RSTO	0x01	/* reset output */

/* BCR bits */
#define	BCR_VA24	0x10	/* force VME A24 addressing for low 16MB */
#define	BCR_VSBEN	0x08	/* VSB enable */
#define	BCR_VSBMD	0x04	/* restricted VSB ranges */
#define	BCR_ROEN	0x02	/* VSB read only enable */
#define	BCR_ROMD	0x01	/* VSB read only mode uses VSBRO */

/* ICR0 bits */
#define	ICR0_GIE	0x80	/* global interrupt enable */
#define	ICR0_IRQ3G2IE	0x40	/* DART tick timer, level 3 */
#define	ICR0_IRQ4G2IE	0x20	/* VSBIRQ, level 4 */
#define	ICR0_IRQ5G2IE	0x10	/* DART DUART irq */
#define	ICR0_IRQ6G2IE	0x08	/* DART tick timer, level 6 */
#define	ICR0_IRQ6G4IE	0x04	/* VSBIRQ, level 6 */
#define	ICR0_IRQ7G2IE	0x02	/* unused */
#define	ICR0_IRQ7G4IE	0x01	/* PARERR */

/* ICR1 bits */
#define	ICR1_VEC_MASK	0xf0	/* interrupt vector significant nibble */
#define	ICR1_IRQ7G6IE	0x02	/* ACFAIL */
#define	ICR1_IRQ7G5IE	0x01	/* ABORT */

/* STAT bits */
#define	STAT_WTS	0x020000	/* Watchdog timeout */
#define	STAT_IRQ7G6S	0x010000	/* ACFAIL */
#define	STAT_IRQ7G5S	0x008000	/* ABORT */
#define	STAT_GPSTATL	0x004000	/* SYSFAIL (latched) */
#define	STAT_GPSTATS	0x002000	/* SYSFAIL */
#define	STAT_PORS	0x001000	/* Power On Reset */
#define	STAT_IRQ3G2	0x000800	/* DART tick timer */
#define	STAT_IRQ4G2	0x000400	/* VSBIRQ */
#define	STAT_IRQ5G2	0x000200	/* DART irq */
#define	STAT_IRQ6G2	0x000100	/* DART tick timer */
#define	STAT_IRQ7G2	0x000080	/* unused */
#define	STAT_TMR2	0x000040	/* timer2 timeout */
#define	STAT_TMR1	0x000020	/* timer1 timeout */
#define	STAT_TMR0	0x000010	/* timer0 timeout */
#define	STAT_IRQ6G4	0x000008	/* VSBIRQ */
#define	STAT_IRQ7G4	0x000004	/* PARERR */
#define	STAT_IRQ7G5	0x000002	/* ABORT */
#define	STAT_IRQ7G6	0x000001	/* ACFAIL */

/*
 * Fixed interrupt vectors
 */

#define	LRC_VECBASE	0x40
#define	LRC_NVEC	0x10

#define	LRCVEC_TIMER0	0x00
#define	LRCVEC_TIMER1	0x01
#define	LRCVEC_TIMER2	0x02
#define	LRCVEC_IRQ7G2	0x04	/* not used */
#define	LRCVEC_IRQ6G2	0x05
#define	LRCVEC_IRQ3G2	0x07
#define	LRCVEC_PARERR	0x08
#define	LRCVEC_VSBIRQ	0x09
#define	LRCVEC_ABORT	0x0a
#define	LRCVEC_ACFAIL	0x0b

#define	LRCVEC_DART	0x0c	/* as set up by the BUG; not a fixed value */

int	lrcintr_establish(u_int, struct intrhand *, const char *);
int	lrcspeed(struct lrcreg *);

extern struct lrcreg *sys_lrc;