17 #include <linux/types.h>
18 #include <linux/kernel.h>
21 #include <linux/tty.h>
23 #include <linux/linkage.h>
27 #include <linux/rtc.h>
29 #include <linux/module.h>
31 #include <asm/bootinfo.h>
32 #include <asm/pgtable.h>
33 #include <asm/setup.h>
35 #include <asm/traps.h>
37 #include <asm/machdep.h>
44 static void mvme16x_get_model(
char *model);
73 printk (
"\r\n\nCalled mvme16x_reset\r\n"
74 "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r");
77 *(
volatile char *)0xfff40107 = 0x80;
80 static void mvme16x_get_model(
char *model)
88 suf[0] = suf[1] ?
'-' :
'\0';
94 static void mvme16x_get_hardware_list(
struct seq_file *
m)
117 static void __init mvme16x_init_IRQ (
void)
122 #define pcc2chip ((volatile u_char *)0xfff42000)
123 #define PccSCCMICR 0x1d
124 #define PccSCCTICR 0x1e
125 #define PccSCCRICR 0x1f
126 #define PccTPIACKR 0x25
128 #ifdef CONFIG_EARLY_PRINTK
131 #define CD2401_ADDR (0xfff45000)
133 #define CyGFRCR (0x81)
135 #define CyCLR_CHAN (0x40)
136 #define CyINIT_CHAN (0x20)
137 #define CyCHIP_RESET (0x10)
138 #define CyENB_XMTR (0x08)
139 #define CyDIS_XMTR (0x04)
140 #define CyENB_RCVR (0x02)
141 #define CyDIS_RCVR (0x01)
144 #define CyMdmCh (0x80)
145 #define CyRxExc (0x20)
146 #define CyRxData (0x08)
147 #define CyTxMpty (0x02)
148 #define CyTxRdy (0x01)
149 #define CyLICR (0x26)
150 #define CyRISR (0x89)
151 #define CyTIMEOUT (0x80)
152 #define CySPECHAR (0x70)
153 #define CyOVERRUN (0x08)
154 #define CyPARITY (0x04)
155 #define CyFRAME (0x02)
156 #define CyBREAK (0x01)
157 #define CyREOIR (0x84)
158 #define CyTEOIR (0x85)
159 #define CyMEOIR (0x86)
160 #define CyNOTRANS (0x08)
161 #define CyRFOC (0x30)
164 #define CyMISR (0x8b)
165 #define CyRISR (0x89)
166 #define CyTISR (0x8a)
167 #define CyMSVR1 (0xde)
168 #define CyMSVR2 (0xdf)
174 #define CyRTPRL (0x25)
175 #define CyRTPRH (0x24)
176 #define CyCOR1 (0x10)
177 #define CyPARITY_NONE (0x00)
178 #define CyPARITY_E (0x40)
179 #define CyPARITY_O (0xC0)
180 #define Cy_5_BITS (0x04)
181 #define Cy_6_BITS (0x05)
182 #define Cy_7_BITS (0x06)
183 #define Cy_8_BITS (0x07)
184 #define CyCOR2 (0x17)
186 #define CyCtsAE (0x02)
187 #define CyCOR3 (0x16)
188 #define Cy_1_STOP (0x02)
189 #define Cy_2_STOP (0x04)
190 #define CyCOR4 (0x15)
191 #define CyREC_FIFO (0x0F)
192 #define CyCOR5 (0x14)
193 #define CyCOR6 (0x18)
194 #define CyCOR7 (0x07)
195 #define CyRBPR (0xcb)
196 #define CyRCOR (0xc8)
197 #define CyTBPR (0xc3)
198 #define CyTCOR (0xc0)
199 #define CySCHR1 (0x1f)
200 #define CySCHR2 (0x1e)
202 #define CyPILR1 (0xe3)
203 #define CyPILR2 (0xe0)
204 #define CyPILR3 (0xe1)
206 #define CyASYNC (0x02)
207 #define CyLICR (0x26)
208 #define CyLIVR (0x09)
209 #define CySCRL (0x23)
210 #define CySCRH (0x22)
211 #define CyTFTC (0x80)
213 static void cons_write(
struct console *co,
const char *
str,
unsigned count)
215 volatile unsigned char *base_addr = (
u_char *)CD2401_ADDR;
226 while (base_addr[
CyCCR])
230 ier = base_addr[CyIER];
238 if ((base_addr[CyLICR] >> 2) ==
port) {
241 base_addr[CyTEOIR] = CyNOTRANS;
245 base_addr[
CyTDR] =
'\n';
250 else if (*str ==
'\n') {
251 base_addr[
CyTDR] =
'\r';
255 base_addr[
CyTDR] = *str++;
258 base_addr[CyTEOIR] = 0;
261 base_addr[CyTEOIR] = CyNOTRANS;
265 base_addr[CyIER] =
ier;
268 static struct console cons_info =
276 static void __init mvme16x_early_console(
void)
303 printk (
"\n\nBug call .BRD_ID returned garbage - giving up\n\n");
308 if (vme_brdtype == 0)
309 vme_brdtype = p->
brdno;
311 mvme16x_get_model(
id);
312 printk (
"\nBRD_ID: %s BUG %x.%x %02x/%02x/%02x\n",
id, p->
rev>>4,
321 printk (
" CPU Type 68%s040\n",
323 printk (
" CPU clock %dMHz\n",
325 printk (
" VMEchip2 %spresent\n",
327 printk (
" SCSI interface %spresent\n",
329 printk (
" Ethernet interface %spresent\n",
342 #ifdef CONFIG_EARLY_PRINTK
343 mvme16x_early_console();
351 unsigned long *
new = (
unsigned long *)
vectors;
352 unsigned long *old = (
unsigned long *)0xffe00000;
353 volatile unsigned char uc, *ucp;
357 ucp = (
volatile unsigned char *)0xfff42043;
363 *(
volatile unsigned long *)0xfff40074 = 0x40000000;
367 *(
new+47) = *(old+47);
370 *(
new+0x5e) = *(old+0x5e);
372 *(
new+0x6e) = *(old+0x6e);
376 static irqreturn_t mvme16x_timer_int (
int irq,
void *dev_id)
378 *(
volatile unsigned char *)0xfff4201b |= 8;
389 *(
volatile unsigned long *)0xfff42008 = 0;
390 *(
volatile unsigned long *)0xfff42004 = 10000;
391 *(
volatile unsigned char *)0xfff42017 |= 3;
392 *(
volatile unsigned char *)0xfff4201b = 0x16;
394 "timer", mvme16x_timer_int))
395 panic (
"Couldn't register timer int");
402 "abort", mvme16x_abort_int))
403 panic (
"Couldn't register abort int");
410 return (*(
volatile unsigned long *)0xfff42008);
415 return ((b>>4)*10 + (b&15));