diff options
-rw-r--r-- | sys/arch/mvme88k/dev/nvram.c | 27 | ||||
-rw-r--r-- | sys/arch/mvme88k/include/bugio.h | 27 | ||||
-rw-r--r-- | sys/arch/mvme88k/mvme88k/machdep.c | 72 |
3 files changed, 98 insertions, 28 deletions
diff --git a/sys/arch/mvme88k/dev/nvram.c b/sys/arch/mvme88k/dev/nvram.c index 61e9373411a..e231f8ef7ca 100644 --- a/sys/arch/mvme88k/dev/nvram.c +++ b/sys/arch/mvme88k/dev/nvram.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nvram.c,v 1.3 1999/01/11 05:11:43 millert Exp $ */ +/* $OpenBSD: nvram.c,v 1.4 1999/04/11 03:26:27 smurph Exp $ */ /* * Copyright (c) 1995 Theo de Raadt @@ -40,6 +40,7 @@ #include <sys/malloc.h> #include <machine/psl.h> #include <machine/autoconf.h> +#include <machine/bugio.h> #include <machine/cpu.h> #include <machine/mioctl.h> #include <machine/vmparam.h> @@ -70,13 +71,31 @@ int nvrammatch(parent, vcf, args) struct device *parent; void *vcf, *args; - { +{ + int ret; struct cfdata *cf = vcf; struct confargs *ca = args; - + struct bugrtc rtc; /*X*/ if (ca->ca_vaddr == (void *)-1) /*X*/ return (1); - return (!badvaddr(ca->ca_vaddr, 1)); + +#if 0 + bugrtcrd(&rtc); + ret = badvaddr(IIOV(ca->ca_vaddr), 1); + if (ret != 0) + ret = badvaddr(IIOV(ca->ca_vaddr), 2); + if (ret != 0) + ret = badvaddr(IIOV(ca->ca_vaddr), 4); + + if (ret != 0){ + printf("==> nvram: address 0x%x failed check\n", ca->ca_vaddr); + return(0); + } else + return(1); +#else + bugrtcrd(&rtc); + return(1); +#endif } void diff --git a/sys/arch/mvme88k/include/bugio.h b/sys/arch/mvme88k/include/bugio.h index cb8acc2b609..da2d1a7dbef 100644 --- a/sys/arch/mvme88k/include/bugio.h +++ b/sys/arch/mvme88k/include/bugio.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bugio.h,v 1.5 1999/02/09 06:36:25 smurph Exp $ */ +/* $OpenBSD: bugio.h,v 1.6 1999/04/11 03:26:28 smurph Exp $ */ #include "sys/cdefs.h" struct bugdisk_io { @@ -49,6 +49,21 @@ struct bugbrdid { short type; short dev; int option; + char version[4]; + char serial[12]; /* SBC serial number */ + char id[16]; /* SBC id */ + char pwa[16]; /* printed wiring assembly number */ + char speed[4]; /* cpu speed */ + char etheraddr[6]; /* mac address, all zero if no ether */ + char fill[2]; + char scsiid[2]; /* local SCSI id */ + char sysid[8]; /* system id - nothing on mvme187 */ + char brd1_pwb[8]; /* memory board 1 pwb */ + char brd1_serial[8]; /* memory board 1 serial */ + char brd2_pwb[8]; /* memory board 2 pwb */ + char brd2_serial[8]; /* memory board 2 serial */ + char reserved[153]; + char cksum[1]; }; struct bugniocall { @@ -57,11 +72,11 @@ struct bugniocall { unsigned char ci; unsigned char cd; #define NETCTRL_INITDEVICE 0 -#define NETCTRL_GETHDW 1 -#define NETCTRL_TX 2 -#define NETCTRL_RX 3 -#define NETCTRL_FLUSH 4 -#define NETCTRL_RESET 5 +#define NETCTRL_GETHDW 1 +#define NETCTRL_TX 2 +#define NETCTRL_RX 3 +#define NETCTRL_FLUSH 4 +#define NETCTRL_RESET 5 unsigned long cid; unsigned long memaddr; unsigned long nbytes; diff --git a/sys/arch/mvme88k/mvme88k/machdep.c b/sys/arch/mvme88k/mvme88k/machdep.c index 9c9272ef92f..33b121bdcb4 100644 --- a/sys/arch/mvme88k/mvme88k/machdep.c +++ b/sys/arch/mvme88k/mvme88k/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.11 1999/02/09 06:36:29 smurph Exp $ */ +/* $OpenBSD: machdep.c,v 1.12 1999/04/11 03:26:28 smurph Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1996 Nivas Madhur @@ -83,6 +83,7 @@ #include <machine/board.h> #include <machine/trap.h> #include <machine/bug.h> +#include <machine/prom.h> #include <dev/cons.h> @@ -309,11 +310,44 @@ size_memory(void) return(trunc_page((unsigned)look)); } +int +getcpuspeed(void) +{ + struct bugbrdid brdid; + int speed = 0; + int i, c; + bugbrdid(&brdid); + for (i=0; i<4; i++){ + c=(unsigned char)brdid.speed[i]; + c-= '0'; + speed *=10; + speed +=c; + } + speed = speed / 100; + return(speed); +} + +int +getscsiid(void) +{ + struct bugbrdid brdid; + int scsiid = 0; + int i, c; + bugbrdid(&brdid); + for (i=0; i<2; i++){ + c=(unsigned char)brdid.scsiid[i]; + c-= '0'; + scsiid *=10; + scsiid +=c; + } + return(7); +} + void identifycpu() { - /* XXX -take this one out. It can be done in m187_bootstrap() */ - strcpy(cpu_model, "Motorola M88K"); + cpuspeed = getcpuspeed(); + sprintf(cpu_model, "Motorola MVME%x %dMhz", cputyp, cpuspeed); printf("\nModel: %s\n", cpu_model); } @@ -333,9 +367,10 @@ identifycpu() void save_u_area(struct proc *p, vm_offset_t va) { - p->p_md.md_upte[0] = kvtopte(va)->bits; - p->p_md.md_upte[1] = kvtopte(va + NBPG)->bits; - p->p_md.md_upte[2] = kvtopte(va + NBPG + NBPG)->bits; + int i; + for (i=0; i<UPAGES; i++) { + p->p_md.md_upte[i] = kvtopte(va + (i * NBPG))->bits; + } } void @@ -343,15 +378,14 @@ load_u_area(struct proc *p) { pte_template_t *t; - t = kvtopte(UADDR); - t->bits = p->p_md.md_upte[0]; - t = kvtopte(UADDR + NBPG); - t->bits = p->p_md.md_upte[1]; - t = kvtopte(UADDR + NBPG + NBPG); - t->bits = p->p_md.md_upte[2]; - cmmu_flush_tlb(1, UADDR, NBPG); - cmmu_flush_tlb(1, UADDR + NBPG, NBPG); - cmmu_flush_tlb(1, UADDR + NBPG + NBPG, NBPG); + int i; + for (i=0; i<UPAGES; i++) { + t = kvtopte(UADDR + (i * NBPG)); + t->bits = p->p_md.md_upte[i]; +} + for (i=0; i<UPAGES; i++) { + cmmu_flush_tlb(1, UADDR + (i * NBPG), NBPG); + } } void @@ -1516,8 +1550,10 @@ myetheraddr(cp) u_char *cp; { struct bugniocall niocall; - char *cp2 = (char*) 0xFFC1F2C; /* BBRAM Ethernet hw addr */ - + struct bugbrdid brdid; + bugbrdid(&brdid); + bcopy(&brdid.etheraddr, cp, 6); +/* niocall.clun = 0; niocall.dlun = 0; niocall.ci = 0; @@ -1525,8 +1561,8 @@ myetheraddr(cp) niocall.cid = NETCTRL_GETHDW; niocall.memaddr = (unsigned long)cp; niocall.nbytes = 6; - bugnetctrl(&niocall); +*/ /* if (cp[0] == '\0') { strncpy(cp, cp2, 6); |