summaryrefslogtreecommitdiff
path: root/sys/arch/mvme68k/dev/mcreg.h
blob: 19765a708b972c4fd0d75c16f60650ec61e7c930 (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
/*	$OpenBSD: mcreg.h,v 1.8 2003/06/02 05:09:14 deraadt Exp $ */

/*
 * Copyright (c) 1995 Theo de Raadt
 * All rights reserved.
 *
 * 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.
 */

/*
 * VME162 MCchip
 */
struct mcreg {
/*0x00*/ 	volatile u_char		mc_chipid;
/*0x01*/ 	volatile u_char		mc_chiprev;
/*0x02*/   	volatile u_char		mc_genctl;
/*0x03*/   	volatile u_char		mc_vecbase;
/*0x04*/   	volatile u_long		mc_t1cmp;
/*0x08*/   	volatile u_long		mc_t1count;
/*0x0C*/   	volatile u_long		mc_t2cmp;
/*0x10*/   	volatile u_long		mc_t2count;
/*0x14*/   	volatile u_char		mc_lsbprescale;
/*0x15*/   	volatile u_char		mc_adjprescale;
/*0x16*/   	volatile u_char		mc_t2ctl;
/*0x17*/   	volatile u_char		mc_t1ctl;
/*0x18*/   	volatile u_char		mc_t4irq;
/*0x19*/   	volatile u_char		mc_t3irq;
/*0x1A*/   	volatile u_char		mc_t2irq;
/*0x1B*/   	volatile u_char		mc_t1irq;
/*0x1C*/   	volatile u_char		mc_parity;
/*0x1D*/   	volatile u_char		mc_zsirq;
/*0x1E*/   	volatile u_char		mc_t4ctl;
/*0x1F*/   	volatile u_char		mc_t3ctl;
/*0x20*/   	volatile u_short	mc_drambase;
/*0x22*/   	volatile u_short	mc_srambase;
/*0x24*/   	volatile u_char		mc_dramsize;
/*0x25*/   	volatile u_char		mc_memoptions;
   #define MC_MEMOPTIONS_SRAMMASK	0x18
   #define MC_MEMOPTIONS_SRAM128K	0x00
   #define MC_MEMOPTIONS_SRAM512K	0x08
   #define MC_MEMOPTIONS_SRAM1M	0x10
   #define MC_MEMOPTIONS_SRAM2M	0x18
   #define MC_MEMOPTIONS_DRAMMASK	0x07
   #define MC_MEMOPTIONS_DRAM1M	0x00
   #define MC_MEMOPTIONS_DRAM2M	0x01
   #define MC_MEMOPTIONS_DRAM4M	0x03
   #define MC_MEMOPTIONS_DRAM4M2	0x04
   #define MC_MEMOPTIONS_DRAM8M	0x05
   #define MC_MEMOPTIONS_DRAM16M	0x07
/*0x26*/   	volatile u_char		mc_sramsize;
/*0x27*/   	volatile u_char		mc_resv1;
/*0x28*/   	volatile u_char		mc_ieerr;
/*0x29*/   	volatile u_char		mc_resv2;
/*0x2A*/   	volatile u_char		mc_ieirq;
/*0x2B*/   	volatile u_char		mc_iefailirq;
/*0x2C*/   	volatile u_char		mc_ncrerr;
/*0x2D*/   	volatile u_char		mc_input;
	#define MC_INPUT_USR1 	0x80
	#define MC_INPUT_USR2 	0x40
	#define MC_INPUT_USR3 	0x20
	#define MC_INPUT_USR4 	0x10
	#define MC_INPUT_PROM 	0x08
	#define MC_INPUT_BUG3 	0x04
	#define MC_INPUT_BUG2 	0x02
	#define MC_INPUT_BUG1 	0x01
/*0x2E*/   	volatile u_char		mc_ver;
/*0x01*/   	volatile u_char		mc_ncrirq;
/*0x01*/   	volatile u_long		mc_t3cmp;
/*0x01*/   	volatile u_long		mc_t3count;
/*0x01*/   	volatile u_long		mc_t4cmp;
/*0x01*/   	volatile u_long		mc_t4count;
/*0x01*/   	volatile u_char		mc_busclock;
/*0x01*/   	volatile u_char		mc_promtime;
/*0x01*/   	volatile u_char		mc_flashctl;
	#define MC_FLASHCTL_WRITE	0x08
/*0x01*/   	volatile u_char		mc_abortirq;
/*0x01*/   	volatile u_char		mc_resetctl;
/*0x01*/   	volatile u_char		mc_watchdogctl;
/*0x01*/   	volatile u_char		mc_watchdogtime;
/*0x01*/   	volatile u_char		mc_resv3;
/*0x01*/   	volatile u_char		mc_dramctl;
/*0x01*/   	volatile u_char		mc_resv4;
/*0x01*/   	volatile u_char		mc_mpustat;
/*0x01*/   	volatile u_char		mc_resv5;
/*0x01*/   	volatile u_long		mc_prescale;
};
#define MC_MCCHIP_OFF		0x42000
#define MC_CHIPID		0x84

/*
 * points to system's MCchip registers
 */
extern struct mcreg *sys_mc;

/*
 * for the console we need zs phys addr
 */
#define ZS0_PHYS_162	(0xfff45000)
#define ZS1_PHYS_162	(0xfff45801)

/*
 * We lock off our interrupt vector at 0x50.
 */
#define MC_VECBASE	0x50
#define MC_NVEC		16

#define MCV_ZS		0x00
#define MCV_TIMER4	0x03
#define MCV_TIMER3	0x04
#define MCV_NCR		0x05
#define MCV_IEFAIL	0x06
#define MCV_IE		0x07
#define MCV_TIMER2	0x08
#define MCV_TIMER1	0x09
#define MCV_PARITY	0x0b
#define MCV_ABORT	0x0e

#define MC_TCTL_CEN	0x01
#define MC_TCTL_COC	0x02
#define MC_TCTL_COVF	0x04
#define MC_TCTL_OVF	0xf0

#define	MC_ABORT_ABS	0x40

#define mc_timer_us2lim(us)	(us)		/* timer increments in "us" */

#define MC_IRQ_IPL	0x07
#define MC_IRQ_ICLR	0x08
#define MC_IRQ_IEN	0x10
#define MC_IRQ_INT	0x20

#define MC_GENCTL_IEN	0x02

#define MC_IEERR_SCLR	0x01

#define MC_SC_INHIBIT	(0 << 6)
#define MC_SC_SNOOP	(1 << 6)
#define MC_SC_INVAL	(2 << 6)
#define MC_SC_RESV	(3 << 6)

#define MC_VER_ISLX	0x40
#define MC_VER_REAL040	0x10
#define MC_VER_NOIE	0x08
#define MC_VER_NONCR	0x04
#define MC_VER_NOVME	0x02
#define MC_VER_33MHZ	0x01

void mc_enableflashwrite(int on);
#define MC_ENAFLASHWRITE_OFFSET	0xcc000
#define MC_DISFLASHWRITE_OFFSET	0xc8000
int mc_hasflash(void);

int  mcintr_establish(int, struct intrhand *);