* Copyright (c) 1988 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* @(#)ka630.c 7.6 (Berkeley) %G%
extern struct pte Clockmap
[];
extern struct pte Ka630map
[];
struct ka630clock ka630clock
;
struct ka630cpu ka630cpu
;
* Map in the clock and the CPU.
ioaccess((caddr_t
)0x200b8000, &Clockmap
[0], sizeof(struct ka630clock
));
ioaccess((caddr_t
)0x20080000, &Ka630map
[0], sizeof(struct ka630cpu
));
* Clear restart and boot in progress flags in the CPMBX.
ka630clock
.cpmbx
= (ka630clock
.cpmbx
& KA630CLK_LANG
) | KA630CLK_REBOOT
;
* Enable memory parity error detection.
ka630cpu
.ka630_mser
= KA630MSER_PAREN
;
/* Start the real-time clock */
/* init system time from tod clock */
register struct ka630clock
*claddr
= &ka630clock
;
claddr
->csr1
= KA630CLK_SET
;
while ((claddr
->csr0
& KA630CLK_UIP
) != 0)
/* If the clock is valid, use it. */
if ((claddr
->csr3
& KA630CLK_VRT
) != 0 &&
(claddr
->csr1
& KA630CLK_ENABLE
) == KA630CLK_ENABLE
) {
{ int t
= claddr
->csr2
; } /* ??? */
claddr
->csr0
= KA630CLK_RATE
;
claddr
->csr1
= KA630CLK_ENABLE
;
time
.tv_sec
= chiptotime(&c
);
return (time
.tv_sec
? CLKREAD_OK
: CLKREAD_BAD
);
printf("WARNING: TOY clock invalid");
/* Set the time of day clock, called via. stime system call.. */
register struct ka630clock
*claddr
= &ka630clock
;
claddr
->csr1
= KA630CLK_SET
;
while ((claddr
->csr0
& KA630CLK_UIP
) != 0)
{ int t
= claddr
->csr2
; } /* ??? */
{ int t
= claddr
->csr3
; } /* ??? */
claddr
->csr0
= KA630CLK_RATE
;
claddr
->csr1
= KA630CLK_ENABLE
;
0, "immcr (fsd)", "immcr (ssd)", "fpu err 0",
"fpu err 7", "mmu st(tb)", "mmu st(m=0)", "pte in p0",
"pte in p1", "un intr id",
int mc63_bcnt
; /* byte count == 0xc */
int mc63_summary
; /* summary parameter */
int mc63_mrvaddr
; /* most recent vad */
int mc63_istate
; /* internal state */
int mc63_pc
; /* trapped pc */
int mc63_psl
; /* trapped psl */
register struct ka630cpu
*ka630addr
= &ka630cpu
;
register struct mc630frame
*mcf
= (struct mc630frame
*)cmcf
;
register u_int type
= mcf
->mc63_summary
;
printf("machine check %x", type
);
if (type
< NMC630
&& mc630
[type
])
printf(": %s", mc630
[type
]);
printf("\n\tvap %x istate %x pc %x psl %x\n",
mcf
->mc63_mrvaddr
, mcf
->mc63_istate
,
mcf
->mc63_pc
, mcf
->mc63_psl
);
if (ka630addr
->ka630_mser
& KA630MSER_MERR
) {
printf("\tmser=0x%x ", ka630addr
->ka630_mser
);
if (ka630addr
->ka630_mser
& KA630MSER_CPUER
)
printf("page=%d", ka630addr
->ka630_cear
);
if (ka630addr
->ka630_mser
& KA630MSER_DQPE
)
printf("page=%d", ka630addr
->ka630_dear
);