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 *);
|