Another giant change: Allocate register space dynamic instead of compiled-in.
This is done on a physical page size basis, instead of virtual (as the (on vax yet non-existing) bus_* routines does). This is similar to the way uba allocation is done.
This commit is contained in:
parent
16d7798441
commit
13daba04a1
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: bi.c,v 1.10 1998/11/29 15:12:57 ragge Exp $ */
|
/* $NetBSD: bi.c,v 1.11 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -132,16 +132,20 @@ bi_attach(parent, self, aux)
|
||||||
int nodenr;
|
int nodenr;
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
binode = bi->bi_base = (struct bi_node *)bp->bp_addr;
|
bi->bi_base = (struct bi_node *)bp->bp_addr;
|
||||||
|
|
||||||
ba.ba_intcpu = 1 << mastercpu;
|
ba.ba_intcpu = 1 << mastercpu;
|
||||||
|
#define NODEPGS (sizeof(struct bi_node) / VAX_NBPG)
|
||||||
for (nodenr = 0; nodenr < NNODEBI; nodenr++) {
|
for (nodenr = 0; nodenr < NNODEBI; nodenr++) {
|
||||||
if (badaddr((caddr_t)&binode[nodenr], 4))
|
binode = (struct bi_node *)vax_map_physmem(
|
||||||
continue;
|
(paddr_t)(bi->bi_base + nodenr), NODEPGS);
|
||||||
|
if (badaddr((caddr_t)binode, 4)) {
|
||||||
ba.ba_node = &binode[nodenr];
|
vax_unmap_physmem((vaddr_t)binode, NODEPGS);
|
||||||
ba.ba_nodenr = nodenr;
|
} else {
|
||||||
ba.ba_busnr = 0; /* XXX */
|
ba.ba_node = binode;
|
||||||
config_found(self, &ba, bi_print);
|
ba.ba_nodenr = nodenr;
|
||||||
|
ba.ba_busnr = 0; /* XXX */
|
||||||
|
config_found(self, &ba, bi_print);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: cpu.h,v 1.33 1999/01/19 21:04:48 ragge Exp $ */
|
/* $NetBSD: cpu.h,v 1.34 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden
|
||||||
|
@ -106,6 +106,11 @@ extern int want_resched; /* resched() was called */
|
||||||
*/
|
*/
|
||||||
#define need_proftick(p) {(p)->p_flag |= P_OWEUPC; mtpr(AST_OK,PR_ASTLVL); }
|
#define need_proftick(p) {(p)->p_flag |= P_OWEUPC; mtpr(AST_OK,PR_ASTLVL); }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This defines the I/O device register space size in pages.
|
||||||
|
*/
|
||||||
|
#define IOSPSZ ((1*1024*1024) / VAX_NBPG) /* 1 MB == 2k pages */
|
||||||
|
|
||||||
struct device;
|
struct device;
|
||||||
|
|
||||||
/* Some low-level prototypes */
|
/* Some low-level prototypes */
|
||||||
|
@ -118,6 +123,10 @@ void dumpsys __P((void));
|
||||||
void swapconf __P((void));
|
void swapconf __P((void));
|
||||||
void disk_printtype __P((int, int));
|
void disk_printtype __P((int, int));
|
||||||
void disk_reallymapin __P((struct buf *, struct pte *, int, int));
|
void disk_reallymapin __P((struct buf *, struct pte *, int, int));
|
||||||
|
vaddr_t vax_map_physmem __P((paddr_t, int));
|
||||||
|
void vax_unmap_physmem __P((vaddr_t, int));
|
||||||
|
void ioaccess __P((vaddr_t, paddr_t, int));
|
||||||
|
void iounaccess __P((vaddr_t, int));
|
||||||
#ifdef DDB
|
#ifdef DDB
|
||||||
int kdbrint __P((int));
|
int kdbrint __P((int));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: nexus.h,v 1.12 1996/08/20 14:19:43 ragge Exp $ */
|
/* $NetBSD: nexus.h,v 1.13 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1982, 1986 The Regents of the University of California.
|
* Copyright (c) 1982, 1986 The Regents of the University of California.
|
||||||
|
@ -188,8 +188,4 @@ extern caddr_t *nex_vec;
|
||||||
#define MCHK_PANIC -1
|
#define MCHK_PANIC -1
|
||||||
#define MCHK_RECOVERED 0
|
#define MCHK_RECOVERED 0
|
||||||
|
|
||||||
#ifndef _LOCORE
|
|
||||||
struct nexus *nexus;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _VAX_NEXUS_H_ */
|
#endif /* _VAX_NEXUS_H_ */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: uvax.h,v 1.4 1998/08/11 17:52:59 ragge Exp $ */
|
/* $NetBSD: uvax.h,v 1.5 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -83,5 +83,4 @@ struct vs_cpu {
|
||||||
#define PARCTL_CPEN 2
|
#define PARCTL_CPEN 2
|
||||||
#define PARCTL_DPEN 1
|
#define PARCTL_DPEN 1
|
||||||
|
|
||||||
struct vs_cpu *vs_cpu; /* Common CPU registers */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vmparam.h,v 1.22 1999/01/16 20:49:12 chuck Exp $ */
|
/* $NetBSD: vmparam.h,v 1.23 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990 The Regents of the University of California.
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
@ -42,10 +42,6 @@
|
||||||
#ifndef _VMPARAM_H_
|
#ifndef _VMPARAM_H_
|
||||||
#define _VMPARAM_H_
|
#define _VMPARAM_H_
|
||||||
|
|
||||||
#ifndef _LOCORE
|
|
||||||
#include <vm/vm_param.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Machine dependent constants for VAX.
|
* Machine dependent constants for VAX.
|
||||||
*/
|
*/
|
||||||
|
@ -133,7 +129,6 @@
|
||||||
|
|
||||||
#define SAFERSS 8 /* nominal ``small'' resident set size
|
#define SAFERSS 8 /* nominal ``small'' resident set size
|
||||||
protected against replacement */
|
protected against replacement */
|
||||||
|
|
||||||
#if defined(UVM)
|
#if defined(UVM)
|
||||||
|
|
||||||
#define VM_PHYSSEG_MAX 1
|
#define VM_PHYSSEG_MAX 1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vsbus.h,v 1.5 1999/01/01 21:43:18 ragge Exp $ */
|
/* $NetBSD: vsbus.h,v 1.6 1999/02/02 18:37:22 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -86,6 +86,7 @@ struct vsbus_attach_args {
|
||||||
#define NI_ADDR 0x20090000 /* Ethernet address */
|
#define NI_ADDR 0x20090000 /* Ethernet address */
|
||||||
#define DZ_CSR 0x200a0000 /* DZ11-compatible chip csr */
|
#define DZ_CSR 0x200a0000 /* DZ11-compatible chip csr */
|
||||||
#define VS_CLOCK 0x200b0000 /* clock chip address */
|
#define VS_CLOCK 0x200b0000 /* clock chip address */
|
||||||
|
#define SCA_REGS 0x200c0000 /* disk device addresses */
|
||||||
#define NI_BASE 0x200e0000 /* LANCE CSRs */
|
#define NI_BASE 0x200e0000 /* LANCE CSRs */
|
||||||
#define NI_IOSIZE (128 * VAX_NBPG) /* IO address size */
|
#define NI_IOSIZE (128 * VAX_NBPG) /* IO address size */
|
||||||
#define VS_REGS 0x20080000 /* Misc cpu internal regs */
|
#define VS_REGS 0x20080000 /* Misc cpu internal regs */
|
||||||
|
@ -121,14 +122,7 @@ struct vsbus_attach_args {
|
||||||
#define VS4000_ST 4
|
#define VS4000_ST 4
|
||||||
#define VS4000_NI 1
|
#define VS4000_NI 1
|
||||||
|
|
||||||
caddr_t dz_regs; /* On-board serial line */
|
caddr_t le_iomem; /* base addr of RAM -- CPU's view */
|
||||||
caddr_t le_iomem; /* base addr of RAM -- CPU's view */
|
|
||||||
short *lance_csr; /* LANCE CSR virtual address */
|
|
||||||
int *lance_addr; /* Ethernet address */
|
|
||||||
struct vs_cpu *vs_cpu; /* Common CPU registers */
|
|
||||||
caddr_t sm_addr; /* virtual address of graphic space */
|
|
||||||
caddr_t dma_area; /* DMA area mapping addess */
|
|
||||||
caddr_t sca_regs; /* device registers */
|
|
||||||
int inr_ni, inr_sr, inr_st, inr_vf; /* Interrupt register bit */
|
int inr_ni, inr_sr, inr_st, inr_vf; /* Interrupt register bit */
|
||||||
|
|
||||||
void vsbus_intr_enable __P((int));
|
void vsbus_intr_enable __P((int));
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: uba.c,v 1.41 1999/01/19 22:57:47 ragge Exp $ */
|
/* $NetBSD: uba.c,v 1.42 1999/02/02 18:37:20 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Jonathan Stone.
|
* Copyright (c) 1996 Jonathan Stone.
|
||||||
* Copyright (c) 1994, 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994, 1996 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -408,11 +408,8 @@ qba_attach(parent, self, aux)
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
struct uba_softc *sc = (void *)self;
|
struct uba_softc *sc = (void *)self;
|
||||||
vm_offset_t mini, maxi;
|
|
||||||
|
|
||||||
printf(": Q22\n");
|
printf(": Q22\n");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill in bus specific data.
|
* Fill in bus specific data.
|
||||||
*/
|
*/
|
||||||
|
@ -429,16 +426,8 @@ qba_attach(parent, self, aux)
|
||||||
* Map in the UBA page map into kernel space. On other UBAs,
|
* Map in the UBA page map into kernel space. On other UBAs,
|
||||||
* the map registers are in the bus IO space.
|
* the map registers are in the bus IO space.
|
||||||
*/
|
*/
|
||||||
#if defined(UVM)
|
sc->uh_mr = (void *)vax_map_physmem(QBAMAP,
|
||||||
(void)uvm_km_suballoc(kernel_map, &mini, &maxi,
|
(QBAPAGES * sizeof(struct pte)) / VAX_NBPG);
|
||||||
QBAPAGES * sizeof(struct pte), FALSE, FALSE, NULL);
|
|
||||||
#else
|
|
||||||
(void)kmem_suballoc(kernel_map, &mini, &maxi,
|
|
||||||
QBAPAGES * sizeof(struct pte), FALSE);
|
|
||||||
#endif
|
|
||||||
pmap_map(mini, QBAMAP, QBAMAP + QBAPAGES * sizeof(struct pte),
|
|
||||||
VM_PROT_READ | VM_PROT_WRITE);
|
|
||||||
sc->uh_mr = (void *)mini;
|
|
||||||
|
|
||||||
uba_attach(sc, QIOPAGE);
|
uba_attach(sc, QIOPAGE);
|
||||||
}
|
}
|
||||||
|
@ -804,9 +793,8 @@ qbgetpri()
|
||||||
void
|
void
|
||||||
uba_attach(sc, iopagephys)
|
uba_attach(sc, iopagephys)
|
||||||
struct uba_softc *sc;
|
struct uba_softc *sc;
|
||||||
unsigned long iopagephys;
|
paddr_t iopagephys;
|
||||||
{
|
{
|
||||||
vm_offset_t mini, maxi;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set last free interrupt vector for devices with
|
* Set last free interrupt vector for devices with
|
||||||
|
@ -818,18 +806,10 @@ uba_attach(sc, iopagephys)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate place for unibus memory in virtual space.
|
* Allocate place for unibus memory in virtual space.
|
||||||
* This is done with kmem_suballoc() but after that
|
|
||||||
* never used in the vm system. Is it OK to do so?
|
|
||||||
*/
|
*/
|
||||||
#if defined(UVM)
|
sc->uh_iopage = (caddr_t)vax_map_physmem(iopagephys, UBAIOPAGES);
|
||||||
(void)uvm_km_suballoc(kernel_map, &mini, &maxi, UBAIOPAGES * VAX_NBPG,
|
if (sc->uh_iopage == 0)
|
||||||
FALSE, FALSE, NULL);
|
return; /* vax_map_physmem() will complain for us */
|
||||||
#else
|
|
||||||
(void)kmem_suballoc(kernel_map, &mini, &maxi, UBAIOPAGES * VAX_NBPG, FALSE);
|
|
||||||
#endif
|
|
||||||
pmap_map(mini, iopagephys, iopagephys + UBAIOPAGES * VAX_NBPG,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
sc->uh_iopage = (void *)mini;
|
|
||||||
/*
|
/*
|
||||||
* Initialize the UNIBUS, by freeing the map
|
* Initialize the UNIBUS, by freeing the map
|
||||||
* registers and the buffered data path registers
|
* registers and the buffered data path registers
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: autoconf.c,v 1.36 1998/10/27 21:18:52 matt Exp $ */
|
/* $NetBSD: autoconf.c,v 1.37 1999/02/02 18:37:20 ragge Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -52,12 +52,13 @@
|
||||||
|
|
||||||
#include <vax/vax/gencons.h>
|
#include <vax/vax/gencons.h>
|
||||||
|
|
||||||
|
#include <vax/bi/bireg.h>
|
||||||
|
|
||||||
#include "locators.h"
|
#include "locators.h"
|
||||||
|
|
||||||
void gencnslask __P((void));
|
void gencnslask __P((void));
|
||||||
|
|
||||||
struct cpu_dep *dep_call;
|
struct cpu_dep *dep_call;
|
||||||
struct nexus *nexus;
|
|
||||||
int mastercpu; /* chief of the system */
|
int mastercpu; /* chief of the system */
|
||||||
struct device *booted_from;
|
struct device *booted_from;
|
||||||
|
|
||||||
|
@ -195,9 +196,7 @@ mainbus_attach(parent, self, hej)
|
||||||
switch (vax_cputype) {
|
switch (vax_cputype) {
|
||||||
#if VAX8200
|
#if VAX8200
|
||||||
case VAX_8200: {
|
case VAX_8200: {
|
||||||
extern void *bi_nodebase;
|
bp.bp_addr = BI_BASE(0,0);
|
||||||
|
|
||||||
bp.bp_addr = (int)bi_nodebase;
|
|
||||||
config_found(self, &bp, mainbus_print);
|
config_found(self, &bp, mainbus_print);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -233,13 +232,17 @@ find_sbi(self, bp, print)
|
||||||
{
|
{
|
||||||
volatile int tmp;
|
volatile int tmp;
|
||||||
volatile struct sbia_regs *sbiar;
|
volatile struct sbia_regs *sbiar;
|
||||||
extern struct ioa *ioa;
|
struct ioa *ioa;
|
||||||
int type, i;
|
int type, i;
|
||||||
|
|
||||||
for (i = 0; i < MAXNIOA; i++) {
|
for (i = 0; i < MAXNIOA; i++) {
|
||||||
if (badaddr((caddr_t)&ioa[i], 4))
|
ioa = (struct ioa *)vax_map_physmem((paddr_t)IOA8600(0),
|
||||||
|
(IOAMAPSIZ / VAX_NBPG));
|
||||||
|
if (badaddr((caddr_t)ioa, 4)) {
|
||||||
|
vax_unmap_physmem((vaddr_t)ioa, (IOAMAPSIZ / VAX_NBPG));
|
||||||
continue;
|
continue;
|
||||||
tmp = ioa[i].ioacsr.ioa_csr;
|
}
|
||||||
|
tmp = ioa->ioacsr.ioa_csr;
|
||||||
type = tmp & IOA_TYPMSK;
|
type = tmp & IOA_TYPMSK;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -248,7 +251,7 @@ find_sbi(self, bp, print)
|
||||||
bp->type = "sbi";
|
bp->type = "sbi";
|
||||||
bp->num = i;
|
bp->num = i;
|
||||||
config_found(self, bp, mainbus_print);
|
config_found(self, bp, mainbus_print);
|
||||||
sbiar = (void *)&ioa[i];
|
sbiar = (void *)ioa;
|
||||||
sbiar->sbi_errsum = -1;
|
sbiar->sbi_errsum = -1;
|
||||||
sbiar->sbi_error = 0x1000;
|
sbiar->sbi_error = 0x1000;
|
||||||
sbiar->sbi_fltsts = 0xc0000;
|
sbiar->sbi_fltsts = 0xc0000;
|
||||||
|
@ -258,6 +261,7 @@ find_sbi(self, bp, print)
|
||||||
printf("IOAdapter %x unsupported\n", type);
|
printf("IOAdapter %x unsupported\n", type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
vax_unmap_physmem((vaddr_t)ioa, (IOAMAPSIZ / VAX_NBPG));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: clock.c,v 1.24 1998/08/20 23:52:42 matt Exp $ */
|
/* $NetBSD: clock.c,v 1.25 1999/02/02 18:37:20 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1995 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -63,10 +63,12 @@ microtime(tvp)
|
||||||
|
|
||||||
switch (vax_boardtype) {
|
switch (vax_boardtype) {
|
||||||
#ifdef VAX46
|
#ifdef VAX46
|
||||||
case VAX_BTYP_46:
|
case VAX_BTYP_46: {
|
||||||
i = *(volatile int *)(&vs_cpu->vc_diagtimu);
|
extern struct vs_cpu *ka46_cpu;
|
||||||
|
i = *(volatile int *)(&ka46_cpu->vc_diagtimu);
|
||||||
i = (i >> 16) * 1024 + (i & 0x3ff);
|
i = (i >> 16) * 1024 + (i & 0x3ff);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
i = mfpr(PR_ICR);
|
i = mfpr(PR_ICR);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: intvec.s,v 1.36 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: intvec.s,v 1.37 1999/02/02 18:37:20 ragge Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1997 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994, 1997 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -340,7 +340,7 @@ hardclock: mtpr $0xc1,$PR_ICCS # Reset interrupt flag
|
||||||
#ifdef VAX46
|
#ifdef VAX46
|
||||||
cmpl _vax_boardtype,$VAX_BTYP_46
|
cmpl _vax_boardtype,$VAX_BTYP_46
|
||||||
bneq 1f
|
bneq 1f
|
||||||
movl _vs_cpu,r0
|
movl _ka46_cpu,r0
|
||||||
clrl 0x1c(r0)
|
clrl 0x1c(r0)
|
||||||
#endif
|
#endif
|
||||||
1: pushl sp
|
1: pushl sp
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka410.c,v 1.15 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka410.c,v 1.16 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -53,10 +53,6 @@
|
||||||
#include <machine/clock.h>
|
#include <machine/clock.h>
|
||||||
#include <machine/vsbus.h>
|
#include <machine/vsbus.h>
|
||||||
|
|
||||||
#include "smg.h"
|
|
||||||
#include "ry.h"
|
|
||||||
#include "ncr.h"
|
|
||||||
|
|
||||||
static void ka410_conf __P((struct device*, struct device*, void*));
|
static void ka410_conf __P((struct device*, struct device*, void*));
|
||||||
static void ka410_steal_pages __P((void));
|
static void ka410_steal_pages __P((void));
|
||||||
static void ka410_memerr __P((void));
|
static void ka410_memerr __P((void));
|
||||||
|
@ -64,6 +60,7 @@ static int ka410_mchk __P((caddr_t));
|
||||||
static void ka410_halt __P((void));
|
static void ka410_halt __P((void));
|
||||||
static void ka410_reboot __P((int));
|
static void ka410_reboot __P((int));
|
||||||
static void ka41_cache_enable __P((void));
|
static void ka41_cache_enable __P((void));
|
||||||
|
static void ka410_clrf __P((void));
|
||||||
|
|
||||||
static caddr_t l2cache; /* mapped in address */
|
static caddr_t l2cache; /* mapped in address */
|
||||||
static long *cacr; /* l2csche ctlr reg */
|
static long *cacr; /* l2csche ctlr reg */
|
||||||
|
@ -85,6 +82,7 @@ struct cpu_dep ka410_calls = {
|
||||||
2, /* SCB pages */
|
2, /* SCB pages */
|
||||||
ka410_halt,
|
ka410_halt,
|
||||||
ka410_reboot,
|
ka410_reboot,
|
||||||
|
ka410_clrf,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,21 +91,40 @@ ka410_conf(parent, self, aux)
|
||||||
struct device *parent, *self;
|
struct device *parent, *self;
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
|
extern int clk_adrshift, clk_tweak;
|
||||||
|
struct vs_cpu *ka410_cpu;
|
||||||
|
|
||||||
|
ka410_cpu = (struct vs_cpu *)vax_map_physmem(VS_REGS, 1);
|
||||||
|
|
||||||
switch (vax_cputype) {
|
switch (vax_cputype) {
|
||||||
case VAX_TYP_UV2:
|
case VAX_TYP_UV2:
|
||||||
|
ka410_cpu->vc_410mser = 1;
|
||||||
printf(": KA410\n");
|
printf(": KA410\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VAX_TYP_CVAX:
|
case VAX_TYP_CVAX:
|
||||||
printf(": KA41/42\n");
|
printf(": KA41/42\n");
|
||||||
|
ka410_cpu->vc_vdcorg = 0; /* XXX */
|
||||||
|
ka410_cpu->vc_parctl = PARCTL_CPEN | PARCTL_DPEN ;
|
||||||
printf("%s: Enabling primary cache, ", self->dv_xname);
|
printf("%s: Enabling primary cache, ", self->dv_xname);
|
||||||
mtpr(KA420_CADR_S2E|KA420_CADR_S1E|KA420_CADR_ISE|KA420_CADR_DSE, PR_CADR);
|
mtpr(KA420_CADR_S2E|KA420_CADR_S1E|KA420_CADR_ISE|KA420_CADR_DSE, PR_CADR);
|
||||||
if (vax_confdata & KA420_CFG_CACHPR) {
|
if (vax_confdata & KA420_CFG_CACHPR) {
|
||||||
|
l2cache = (void *)vax_map_physmem(KA420_CH2_BASE,
|
||||||
|
(KA420_CH2_SIZE / VAX_NBPG));
|
||||||
|
cacr = (void *)vax_map_physmem(KA420_CACR, 1);
|
||||||
printf("secondary cache\n");
|
printf("secondary cache\n");
|
||||||
ka41_cache_enable();
|
ka41_cache_enable();
|
||||||
} else
|
} else
|
||||||
printf("no secondary cache present\n");
|
printf("no secondary cache present\n");
|
||||||
}
|
}
|
||||||
|
/* Done with ka410_cpu - release it */
|
||||||
|
vax_unmap_physmem((vaddr_t)ka410_cpu, 1);
|
||||||
|
/*
|
||||||
|
* Setup parameters necessary to read time from clock chip.
|
||||||
|
*/
|
||||||
|
clk_adrshift = 1; /* Addressed at long's... */
|
||||||
|
clk_tweak = 2; /* ...and shift two */
|
||||||
|
clk_page = (short *)vax_map_physmem(KA420_WAT_BASE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -135,110 +152,15 @@ ka410_mchk(addr)
|
||||||
void
|
void
|
||||||
ka410_steal_pages()
|
ka410_steal_pages()
|
||||||
{
|
{
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
extern vaddr_t avail_start;
|
||||||
extern int clk_adrshift, clk_tweak;
|
|
||||||
int junk, parctl = 0;
|
|
||||||
|
|
||||||
/* Interrupt vector number in interrupt mask table */
|
/* Interrupt vector number in interrupt mask table */
|
||||||
inr_ni = VS3100_NI;
|
inr_ni = VS3100_NI;
|
||||||
inr_sr = VS3100_SR;
|
inr_sr = VS3100_SR;
|
||||||
inr_st = VS3100_ST;
|
inr_st = VS3100_ST;
|
||||||
inr_vf = VS3100_VF;
|
inr_vf = VS3100_VF;
|
||||||
/*
|
|
||||||
* SCB is already copied/initialized at addr avail_start
|
|
||||||
* by pmap_bootstrap(), but it's not yet mapped. Thus we use
|
|
||||||
* the MAPPHYS() macro to reserve these two pages and to
|
|
||||||
* perform the mapping. The mapped address is assigned to junk.
|
|
||||||
*/
|
|
||||||
MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup parameters necessary to read time from clock chip.
|
|
||||||
*/
|
|
||||||
clk_adrshift = 1; /* Addressed at long's... */
|
|
||||||
clk_tweak = 2; /* ...and shift two */
|
|
||||||
MAPVIRT(clk_page, 1);
|
|
||||||
pmap_map((vm_offset_t)clk_page, (vm_offset_t)KA410_WAT_BASE,
|
|
||||||
(vm_offset_t)KA410_WAT_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* LANCE CSR & DMA memory */
|
|
||||||
MAPVIRT(lance_csr, 1);
|
|
||||||
pmap_map((vm_offset_t)lance_csr, (vm_offset_t)NI_BASE,
|
|
||||||
(vm_offset_t)NI_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(vs_cpu, 1);
|
|
||||||
pmap_map((vm_offset_t)vs_cpu, (vm_offset_t)VS_REGS,
|
|
||||||
(vm_offset_t)VS_REGS + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(dz_regs, 2);
|
|
||||||
pmap_map((vm_offset_t)dz_regs, (vm_offset_t)DZ_CSR,
|
|
||||||
(vm_offset_t)DZ_CSR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(lance_addr, 1);
|
|
||||||
pmap_map((vm_offset_t)lance_addr, (vm_offset_t)NI_ADDR,
|
|
||||||
(vm_offset_t)NI_ADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
||||||
|
|
||||||
if (((int)le_iomem & ~KERNBASE) > 0xffffff)
|
|
||||||
parctl = PARCTL_DMA;
|
|
||||||
|
|
||||||
#if NSMG > 0
|
|
||||||
if ((vax_confdata & KA420_CFG_MULTU) == 0) {
|
|
||||||
MAPVIRT(sm_addr, (SMSIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)sm_addr, (vm_offset_t)SMADDR,
|
|
||||||
(vm_offset_t)SMADDR + SMSIZE, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
((struct vs_cpu *)VS_REGS)->vc_vdcorg = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if NRD || NRX || NNCR
|
|
||||||
MAPVIRT(sca_regs, 1);
|
|
||||||
pmap_map((vm_offset_t)sca_regs, (vm_offset_t)KA410_DKC_BASE,
|
|
||||||
(vm_offset_t)KA410_DKC_BASE + VAX_NBPG,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
if (vax_boardtype == VAX_BTYP_410) {
|
|
||||||
MAPVIRT(dma_area, (KA410_DMA_SIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)dma_area, (vm_offset_t)KA410_DMA_BASE,
|
|
||||||
(vm_offset_t)KA410_DMA_BASE + KA410_DMA_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
} else {
|
|
||||||
MAPVIRT(dma_area, (KA420_DMA_SIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)dma_area, (vm_offset_t)KA420_DMA_BASE,
|
|
||||||
(vm_offset_t)KA420_DMA_BASE + KA420_DMA_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if ((vax_cputype == VAX_TYP_CVAX) &&
|
|
||||||
(vax_confdata & KA420_CFG_CACHPR)) {
|
|
||||||
MAPVIRT(l2cache, (KA420_CH2_SIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)l2cache, (vm_offset_t)KA420_CH2_BASE,
|
|
||||||
(vm_offset_t)KA420_CH2_BASE + KA420_CH2_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
MAPVIRT(cacr, 1);
|
|
||||||
pmap_map((vm_offset_t)cacr, (vm_offset_t)KA420_CACR,
|
|
||||||
(vm_offset_t)KA420_CACR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear restart and boot in progress flags
|
|
||||||
* in the CPMBX. (ie. clear bits 4 and 5)
|
|
||||||
*/
|
|
||||||
KA410_WAT_BASE->cpmbx = (KA410_WAT_BASE->cpmbx & ~0x30);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable memory parity error detection and clear error bits.
|
|
||||||
*/
|
|
||||||
switch (vax_cputype) {
|
|
||||||
case VAX_TYP_UV2:
|
|
||||||
KA410_CPU_BASE->ka410_mser = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VAX_TYP_CVAX:
|
|
||||||
((struct vs_cpu *)VS_REGS)->vc_parctl =
|
|
||||||
parctl | PARCTL_CPEN | PARCTL_DPEN ;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -255,3 +177,15 @@ ka410_reboot(arg)
|
||||||
asm("movl $0xc, (%0)"::"r"((int)clk_page + 0x38)); /* Don't ask */
|
asm("movl $0xc, (%0)"::"r"((int)clk_page + 0x38)); /* Don't ask */
|
||||||
asm("halt");
|
asm("halt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ka410_clrf()
|
||||||
|
{
|
||||||
|
struct ka410_clock *clk = (void *)clk_page;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear restart and boot in progress flags
|
||||||
|
* in the CPMBX. (ie. clear bits 4 and 5)
|
||||||
|
*/
|
||||||
|
clk->cpmbx = (clk->cpmbx & ~0x30);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka43.c,v 1.13 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka43.c,v 1.14 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -52,22 +52,23 @@
|
||||||
#include <machine/ka43.h>
|
#include <machine/ka43.h>
|
||||||
#include <machine/clock.h>
|
#include <machine/clock.h>
|
||||||
|
|
||||||
#include "smg.h"
|
static void ka43_conf __P((struct device*, struct device*, void*));
|
||||||
#include "ncr.h"
|
static void ka43_steal_pages __P((void));
|
||||||
|
|
||||||
void ka43_conf __P((struct device*, struct device*, void*));
|
static int ka43_mchk __P((caddr_t));
|
||||||
void ka43_steal_pages __P((void));
|
static void ka43_memerr __P((void));
|
||||||
|
#if 0
|
||||||
|
static void ka43_clear_errors __P((void));
|
||||||
|
#endif
|
||||||
|
static int ka43_cache_init __P((void)); /* "int mapen" as argument? */
|
||||||
|
static int ka43_cache_reset __P((void));
|
||||||
|
static int ka43_cache_enable __P((void));
|
||||||
|
static int ka43_cache_disable __P((void));
|
||||||
|
static int ka43_cache_invalidate __P((void));
|
||||||
|
static void ka43_halt __P((void));
|
||||||
|
static void ka43_reboot __P((int));
|
||||||
|
static void ka43_clrf __P((void));
|
||||||
|
|
||||||
int ka43_mchk __P((caddr_t));
|
|
||||||
void ka43_memerr __P((void));
|
|
||||||
|
|
||||||
void ka43_clear_errors __P((void));
|
|
||||||
|
|
||||||
int ka43_cache_init __P((void)); /* "int mapen" as argument? */
|
|
||||||
int ka43_cache_reset __P((void));
|
|
||||||
int ka43_cache_enable __P((void));
|
|
||||||
int ka43_cache_disable __P((void));
|
|
||||||
int ka43_cache_invalidate __P((void));
|
|
||||||
|
|
||||||
struct cpu_dep ka43_calls = {
|
struct cpu_dep ka43_calls = {
|
||||||
ka43_steal_pages,
|
ka43_steal_pages,
|
||||||
|
@ -79,6 +80,9 @@ struct cpu_dep ka43_calls = {
|
||||||
chip_clkwrite,
|
chip_clkwrite,
|
||||||
7, /* 7.6 VUP */
|
7, /* 7.6 VUP */
|
||||||
2, /* SCB pages */
|
2, /* SCB pages */
|
||||||
|
ka43_halt,
|
||||||
|
ka43_reboot,
|
||||||
|
ka43_clrf,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -87,6 +91,7 @@ struct cpu_dep ka43_calls = {
|
||||||
* but before leving ka43_steal_pages() we reset them to virtual addresses.
|
* but before leving ka43_steal_pages() we reset them to virtual addresses.
|
||||||
*/
|
*/
|
||||||
struct ka43_cpu *ka43_cpu = (void*)KA43_CPU_BASE;
|
struct ka43_cpu *ka43_cpu = (void*)KA43_CPU_BASE;
|
||||||
|
extern short *clk_page;
|
||||||
|
|
||||||
u_int *ka43_creg = (void*)KA43_CH2_CREG;
|
u_int *ka43_creg = (void*)KA43_CH2_CREG;
|
||||||
u_int *ka43_ctag = (void*)KA43_CT2_BASE;
|
u_int *ka43_ctag = (void*)KA43_CT2_BASE;
|
||||||
|
@ -188,6 +193,7 @@ ka43_cache_init()
|
||||||
return (ka43_cache_reset());
|
return (ka43_cache_reset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
void
|
void
|
||||||
ka43_clear_errors()
|
ka43_clear_errors()
|
||||||
{
|
{
|
||||||
|
@ -195,6 +201,7 @@ ka43_clear_errors()
|
||||||
val |= KA43_SESR_SERR | KA43_SESR_LERR | KA43_SESR_CERR;
|
val |= KA43_SESR_SERR | KA43_SESR_LERR | KA43_SESR_CERR;
|
||||||
*ka43_creg = val;
|
*ka43_creg = val;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
ka43_cache_reset()
|
ka43_cache_reset()
|
||||||
|
@ -299,13 +306,24 @@ ka43_conf(parent, self, aux)
|
||||||
struct device *parent, *self;
|
struct device *parent, *self;
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
|
extern int clk_adrshift, clk_tweak;
|
||||||
|
|
||||||
printf(": KA43\n");
|
printf(": KA43\n");
|
||||||
|
ka43_cpu = (void *)vax_map_physmem(VS_REGS, 1);
|
||||||
|
|
||||||
|
ka43_creg = (void *)vax_map_physmem(KA43_CH2_CREG, 1);
|
||||||
|
ka43_ctag = (void *)vax_map_physmem(KA43_CT2_BASE,
|
||||||
|
(KA43_CT2_SIZE/VAX_NBPG));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ka43_conf() gets called with MMU enabled, now it's save to
|
* ka43_conf() gets called with MMU enabled, now it's save to
|
||||||
* init/reset the caches.
|
* init/reset the caches.
|
||||||
*/
|
*/
|
||||||
ka43_cache_init();
|
ka43_cache_init();
|
||||||
|
|
||||||
|
clk_adrshift = 1; /* Addressed at long's... */
|
||||||
|
clk_tweak = 2; /* ...and shift two */
|
||||||
|
clk_page = (short *)vax_map_physmem(VS_CLOCK, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -318,93 +336,28 @@ ka43_conf(parent, self, aux)
|
||||||
void
|
void
|
||||||
ka43_steal_pages()
|
ka43_steal_pages()
|
||||||
{
|
{
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
extern vaddr_t avail_start;
|
||||||
extern short *clk_page;
|
int val;
|
||||||
extern int clk_adrshift, clk_tweak;
|
|
||||||
int junk, val;
|
|
||||||
|
|
||||||
/* Interrupt vector number in interrupt mask table */
|
/* Interrupt vector number in interrupt mask table */
|
||||||
inr_ni = VS3100_NI;
|
inr_ni = VS3100_NI;
|
||||||
inr_sr = VS3100_SR;
|
inr_sr = VS3100_SR;
|
||||||
inr_st = VS3100_ST;
|
inr_st = VS3100_ST;
|
||||||
inr_vf = VS3100_VF;
|
inr_vf = VS3100_VF;
|
||||||
/*
|
|
||||||
* SCB is already copied/initialized at addr avail_start
|
|
||||||
* by pmap_bootstrap(), but it's not yet mapped. Thus we use
|
|
||||||
* the MAPPHYS() macro to reserve these two pages and to
|
|
||||||
* perform the mapping. The mapped address is assigned to junk.
|
|
||||||
*/
|
|
||||||
MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
clk_adrshift = 1; /* Addressed at long's... */
|
/*
|
||||||
clk_tweak = 2; /* ...and shift two */
|
* Oh holy shit! It took me over one year(!) to find out that
|
||||||
MAPVIRT(clk_page, 2);
|
* the 3100/76 has to use diag-mem instead of physical memory
|
||||||
pmap_map((vm_offset_t)clk_page, (vm_offset_t)KA43_WAT_BASE,
|
* for communication with LANCE (using phys-mem results in
|
||||||
(vm_offset_t)KA43_WAT_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
* parity errors and mchk exceptions with code 17 (0x11)).
|
||||||
|
*
|
||||||
/* LANCE CSR */
|
* Many thanks to Matt Thomas, without his help it could have
|
||||||
MAPVIRT(lance_csr, 1);
|
* been some more years... ;-)
|
||||||
pmap_map((vm_offset_t)lance_csr, (vm_offset_t)NI_BASE,
|
*/
|
||||||
(vm_offset_t)NI_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
#define LEMEM (((int)le_iomem & ~KERNBASE)|KA43_DIAGMEM)
|
||||||
|
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
||||||
MAPVIRT(vs_cpu, 1);
|
pmap_map((vm_offset_t)le_iomem, LEMEM, LEMEM + NI_IOSIZE,
|
||||||
pmap_map((vm_offset_t)vs_cpu, (vm_offset_t)VS_REGS,
|
VM_PROT_READ|VM_PROT_WRITE);
|
||||||
(vm_offset_t)VS_REGS + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(dz_regs, 2);
|
|
||||||
pmap_map((vm_offset_t)dz_regs, (vm_offset_t)DZ_CSR,
|
|
||||||
(vm_offset_t)DZ_CSR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(lance_addr, 1);
|
|
||||||
pmap_map((vm_offset_t)lance_addr, (vm_offset_t)NI_ADDR,
|
|
||||||
(vm_offset_t)NI_ADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* 2nd level CCR */
|
|
||||||
MAPVIRT(ka43_creg, 1);
|
|
||||||
pmap_map((vm_offset_t)ka43_creg, (vm_offset_t)KA43_CH2_CREG,
|
|
||||||
(vm_offset_t)KA43_CH2_CREG + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* 2nd level CTA */
|
|
||||||
MAPVIRT(ka43_ctag, KA43_CT2_SIZE/VAX_NBPG);
|
|
||||||
pmap_map((vm_offset_t)ka43_ctag, (vm_offset_t)KA43_CT2_BASE,
|
|
||||||
(vm_offset_t)KA43_CT2_BASE + KA43_CT2_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
#if NNCR > 0
|
|
||||||
/* SCSI controller */
|
|
||||||
MAPVIRT(sca_regs, (KA43_SCS_SIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)sca_regs, (vm_offset_t)KA43_SCS_BASE,
|
|
||||||
(vm_offset_t)KA43_SCS_BASE + KA43_SCS_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* SCSI DMA. Not used right now, untested. */
|
|
||||||
MAPVIRT(dma_area, (KA43_DMA_SIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)dma_area, (vm_offset_t)KA43_DMA_BASE,
|
|
||||||
(vm_offset_t)KA43_DMA_BASE + KA43_DMA_SIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Oh holy shit! It took me over one year(!) to find out that
|
|
||||||
* the 3100/76 has to use diag-mem instead of physical memory
|
|
||||||
* for communication with LANCE (using phys-mem results in
|
|
||||||
* parity errors and mchk exceptions with code 17 (0x11)).
|
|
||||||
*
|
|
||||||
* Many thanks to Matt Thomas, without his help it could have
|
|
||||||
* been some more years... ;-)
|
|
||||||
*/
|
|
||||||
#define LEMEM (((int)le_iomem & ~KERNBASE)|KA43_DIAGMEM)
|
|
||||||
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
pmap_map((vm_offset_t)le_iomem, LEMEM, LEMEM + NI_IOSIZE,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
#if NSMG > 0
|
|
||||||
if ((vax_confdata & 0x80) == 0) {
|
|
||||||
MAPVIRT(sm_addr, (SMSIZE / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)sm_addr, (vm_offset_t)SMADDR,
|
|
||||||
(vm_offset_t)SMADDR + SMSIZE, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
((struct vs_cpu *)VS_REGS)->vc_vdcorg = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if LANCE\'s io-buffer is above 16 MB, then the appropriate flag
|
* if LANCE\'s io-buffer is above 16 MB, then the appropriate flag
|
||||||
|
@ -418,12 +371,6 @@ ka43_steal_pages()
|
||||||
val |= KA43_PCTL_DMA;
|
val |= KA43_PCTL_DMA;
|
||||||
ka43_cpu->parctl = val; /* and write new value */
|
ka43_cpu->parctl = val; /* and write new value */
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear restart and boot in progress flags in the CPMBX.
|
|
||||||
*/
|
|
||||||
((struct ka43_clock *)KA43_WAT_BASE)->cpmbx =
|
|
||||||
((struct ka43_clock *)KA43_WAT_BASE)->cpmbx & 0xF0;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/*
|
/*
|
||||||
* Clear all error flags, not really neccessary here, this will
|
* Clear all error flags, not really neccessary here, this will
|
||||||
|
@ -431,10 +378,31 @@ ka43_steal_pages()
|
||||||
*/
|
*/
|
||||||
ka43_clear_errors();
|
ka43_clear_errors();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* MM is not yet enabled, thus we still used the physical addresses,
|
|
||||||
* but before leaving this routine, we need to reset them to virtual.
|
|
||||||
*/
|
|
||||||
ka43_cpu = (void *)vs_cpu;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ka43_clrf()
|
||||||
|
{
|
||||||
|
struct ka43_clock *clk = (void *)clk_page;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear restart and boot in progress flags in the CPMBX.
|
||||||
|
*/
|
||||||
|
clk->cpmbx = (clk->cpmbx & ~0xf0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ka43_halt()
|
||||||
|
{
|
||||||
|
asm("movl $0xc, (%0)"::"r"((int)clk_page + 0x38)); /* Don't ask */
|
||||||
|
asm("halt");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ka43_reboot(arg)
|
||||||
|
int arg;
|
||||||
|
{
|
||||||
|
asm("movl $0xc, (%0)"::"r"((int)clk_page + 0x38)); /* Don't ask */
|
||||||
|
asm("halt");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka46.c,v 1.4 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka46.c,v 1.5 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -62,6 +62,7 @@ static void ka46_halt __P((void));
|
||||||
static void ka46_reboot __P((int));
|
static void ka46_reboot __P((int));
|
||||||
static void ka46_cache_enable __P((void));
|
static void ka46_cache_enable __P((void));
|
||||||
|
|
||||||
|
struct vs_cpu *ka46_cpu;
|
||||||
extern short *clk_page;
|
extern short *clk_page;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -87,9 +88,18 @@ ka46_conf(parent, self, aux)
|
||||||
struct device *parent, *self;
|
struct device *parent, *self;
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
|
extern int clk_adrshift, clk_tweak;
|
||||||
|
|
||||||
printf(": KA46\n");
|
printf(": KA46\n");
|
||||||
|
ka46_cpu = (void *)vax_map_physmem(VS_REGS, 1);
|
||||||
printf("%s: turning on floating point chip\n", self->dv_xname);
|
printf("%s: turning on floating point chip\n", self->dv_xname);
|
||||||
mtpr(2, PR_ACCS); /* Enable floating points */
|
mtpr(2, PR_ACCS); /* Enable floating points */
|
||||||
|
/*
|
||||||
|
* Setup parameters necessary to read time from clock chip.
|
||||||
|
*/
|
||||||
|
clk_adrshift = 1; /* Addressed at long's... */
|
||||||
|
clk_tweak = 2; /* ...and shift two */
|
||||||
|
clk_page = (short *)vax_map_physmem(VS_CLOCK, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -142,46 +152,12 @@ void
|
||||||
ka46_steal_pages()
|
ka46_steal_pages()
|
||||||
{
|
{
|
||||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||||
extern int clk_adrshift, clk_tweak;
|
int i;
|
||||||
int junk, i;
|
|
||||||
|
|
||||||
/* Interrupt vector number in interrupt mask table */
|
/* Interrupt vector number in interrupt mask table */
|
||||||
inr_ni = VS4000_NI;
|
inr_ni = VS4000_NI;
|
||||||
inr_sr = VS4000_SR;
|
inr_sr = VS4000_SR;
|
||||||
inr_st = VS4000_ST;
|
inr_st = VS4000_ST;
|
||||||
/*
|
|
||||||
* SCB is already copied/initialized at addr avail_start
|
|
||||||
* by pmap_bootstrap(), but it's not yet mapped. Thus we use
|
|
||||||
* the MAPPHYS() macro to reserve these two pages and to
|
|
||||||
* perform the mapping. The mapped address is assigned to junk.
|
|
||||||
*/
|
|
||||||
MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup parameters necessary to read time from clock chip.
|
|
||||||
*/
|
|
||||||
clk_adrshift = 1; /* Addressed at long's... */
|
|
||||||
clk_tweak = 2; /* ...and shift two */
|
|
||||||
MAPVIRT(clk_page, 1);
|
|
||||||
pmap_map((vm_offset_t)clk_page, (vm_offset_t)KA410_WAT_BASE,
|
|
||||||
(vm_offset_t)KA410_WAT_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* LANCE CSR & DMA memory */
|
|
||||||
MAPVIRT(lance_csr, 1);
|
|
||||||
pmap_map((vm_offset_t)lance_csr, (vm_offset_t)NI_BASE,
|
|
||||||
(vm_offset_t)NI_BASE + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(vs_cpu, 1);
|
|
||||||
pmap_map((vm_offset_t)vs_cpu, (vm_offset_t)VS_REGS,
|
|
||||||
(vm_offset_t)VS_REGS + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(dz_regs, 2);
|
|
||||||
pmap_map((vm_offset_t)dz_regs, (vm_offset_t)DZ_CSR,
|
|
||||||
(vm_offset_t)DZ_CSR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(lance_addr, 1);
|
|
||||||
pmap_map((vm_offset_t)lance_addr, (vm_offset_t)NI_ADDR,
|
|
||||||
(vm_offset_t)NI_ADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
MAPPHYS(le_iomem, (NI_IOSIZE/VAX_NBPG), VM_PROT_READ|VM_PROT_WRITE);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka630.c,v 1.13 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka630.c,v 1.14 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1982, 1988, 1990, 1993
|
* Copyright (c) 1982, 1988, 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
@ -48,13 +48,13 @@
|
||||||
#include <machine/pmap.h>
|
#include <machine/pmap.h>
|
||||||
#include <machine/ka630.h>
|
#include <machine/ka630.h>
|
||||||
#include <machine/clock.h>
|
#include <machine/clock.h>
|
||||||
|
#include <machine/vsbus.h>
|
||||||
|
|
||||||
static struct uvaxIIcpu *uvaxIIcpu_ptr;
|
static struct uvaxIIcpu *uvaxIIcpu_ptr;
|
||||||
|
|
||||||
static void ka630_conf __P((struct device *, struct device *, void *));
|
static void ka630_conf __P((struct device *, struct device *, void *));
|
||||||
static void ka630_memerr __P((void));
|
static void ka630_memerr __P((void));
|
||||||
static int ka630_mchk __P((caddr_t));
|
static int ka630_mchk __P((caddr_t));
|
||||||
static void ka630_steal_pages __P((void));
|
|
||||||
static void ka630_halt __P((void));
|
static void ka630_halt __P((void));
|
||||||
static void ka630_reboot __P((int));
|
static void ka630_reboot __P((int));
|
||||||
static void ka630_clrf __P((void));
|
static void ka630_clrf __P((void));
|
||||||
|
@ -62,7 +62,7 @@ static void ka630_clrf __P((void));
|
||||||
extern short *clk_page;
|
extern short *clk_page;
|
||||||
|
|
||||||
struct cpu_dep ka630_calls = {
|
struct cpu_dep ka630_calls = {
|
||||||
ka630_steal_pages,
|
0,
|
||||||
no_nicr_clock,
|
no_nicr_clock,
|
||||||
ka630_mchk,
|
ka630_mchk,
|
||||||
ka630_memerr,
|
ka630_memerr,
|
||||||
|
@ -84,6 +84,19 @@ ka630_conf(parent, self, aux)
|
||||||
struct device *parent, *self;
|
struct device *parent, *self;
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
|
extern int clk_adrshift, clk_tweak;
|
||||||
|
|
||||||
|
clk_adrshift = 0; /* Addressed at short's... */
|
||||||
|
clk_tweak = 0; /* ...and no shifting */
|
||||||
|
clk_page = (short *)vax_map_physmem((paddr_t)KA630CLK, 1);
|
||||||
|
|
||||||
|
uvaxIIcpu_ptr = (void *)vax_map_physmem(VS_REGS, 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable memory parity error detection and clear error bits.
|
||||||
|
*/
|
||||||
|
uvaxIIcpu_ptr->uvaxII_mser = (UVAXIIMSER_PEN | UVAXIIMSER_MERR |
|
||||||
|
UVAXIIMSER_LEB);
|
||||||
|
|
||||||
printf(": %s\n", "KA630");
|
printf(": %s\n", "KA630");
|
||||||
}
|
}
|
||||||
|
@ -135,35 +148,6 @@ ka630_mchk(cmcf)
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ka630_steal_pages()
|
|
||||||
{
|
|
||||||
extern vaddr_t avail_start, virtual_avail;
|
|
||||||
extern int clk_adrshift, clk_tweak;
|
|
||||||
int junk;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* MicroVAX II: map in cpu and clock registers.
|
|
||||||
*/
|
|
||||||
MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(uvaxIIcpu_ptr, 1);
|
|
||||||
pmap_map((vaddr_t)uvaxIIcpu_ptr, (vaddr_t)UVAXIICPU,
|
|
||||||
(vaddr_t)UVAXIICPU + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
clk_adrshift = 0; /* Addressed at short's... */
|
|
||||||
clk_tweak = 0; /* ...and no shifting */
|
|
||||||
MAPVIRT(clk_page, 1);
|
|
||||||
pmap_map((vaddr_t)clk_page, (vaddr_t)KA630CLK,
|
|
||||||
(vaddr_t)KA630CLK + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable memory parity error detection and clear error bits.
|
|
||||||
*/
|
|
||||||
UVAXIICPU->uvaxII_mser = (UVAXIIMSER_PEN | UVAXIIMSER_MERR |
|
|
||||||
UVAXIIMSER_LEB);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ka630_halt()
|
ka630_halt()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka650.c,v 1.16 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka650.c,v 1.17 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 The Regents of the University of California.
|
* Copyright (c) 1988 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -54,7 +54,6 @@
|
||||||
#include <machine/cpu.h>
|
#include <machine/cpu.h>
|
||||||
#include <machine/psl.h>
|
#include <machine/psl.h>
|
||||||
#include <machine/mtpr.h>
|
#include <machine/mtpr.h>
|
||||||
#include <machine/nexus.h>
|
|
||||||
#include <machine/sid.h>
|
#include <machine/sid.h>
|
||||||
|
|
||||||
struct ka650_merr *ka650merr_ptr;
|
struct ka650_merr *ka650merr_ptr;
|
||||||
|
@ -62,7 +61,6 @@ struct ka650_cbd *ka650cbd_ptr;
|
||||||
struct ka650_ssc *ka650ssc_ptr;
|
struct ka650_ssc *ka650ssc_ptr;
|
||||||
struct ka650_ipcr *ka650ipcr_ptr;
|
struct ka650_ipcr *ka650ipcr_ptr;
|
||||||
int *KA650_CACHE_ptr;
|
int *KA650_CACHE_ptr;
|
||||||
static int subtyp;
|
|
||||||
|
|
||||||
#define CACHEOFF 0
|
#define CACHEOFF 0
|
||||||
#define CACHEON 1
|
#define CACHEON 1
|
||||||
|
@ -72,7 +70,7 @@ static void ka650_halt __P((void));
|
||||||
static void ka650_reboot __P((int));
|
static void ka650_reboot __P((int));
|
||||||
|
|
||||||
struct cpu_dep ka650_calls = {
|
struct cpu_dep ka650_calls = {
|
||||||
uvaxIII_steal_pages,
|
0, /* No special page stealing anymore */
|
||||||
no_nicr_clock,
|
no_nicr_clock,
|
||||||
uvaxIII_mchk,
|
uvaxIII_mchk,
|
||||||
uvaxIII_memerr,
|
uvaxIII_memerr,
|
||||||
|
@ -93,12 +91,24 @@ uvaxIII_conf(parent, self, aux)
|
||||||
struct device *parent, *self;
|
struct device *parent, *self;
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
int syssub = GETSYSSUBT(subtyp);
|
int syssub = GETSYSSUBT(vax_siedata);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MicroVAX III: We map in memory error registers,
|
||||||
|
* cache control registers, SSC registers,
|
||||||
|
* interprocessor registers and cache diag space.
|
||||||
|
*/
|
||||||
|
ka650merr_ptr = (void *)vax_map_physmem(KA650_MERR, 1);
|
||||||
|
ka650cbd_ptr = (void *)vax_map_physmem(KA650_CBD, 1);
|
||||||
|
ka650ssc_ptr = (void *)vax_map_physmem(KA650_SSC, 3);
|
||||||
|
ka650ipcr_ptr = (void *)vax_map_physmem(KA650_IPCR, 1);
|
||||||
|
KA650_CACHE_ptr = (void *)vax_map_physmem(KA650_CACHE,
|
||||||
|
(KA650_CACHESIZE/VAX_NBPG));
|
||||||
|
|
||||||
printf(": KA6%d%d, CVAX microcode rev %d Firmware rev %d\n",
|
printf(": KA6%d%d, CVAX microcode rev %d Firmware rev %d\n",
|
||||||
syssub == VAX_SIE_KA640 ? 4 : 5,
|
syssub == VAX_SIE_KA640 ? 4 : 5,
|
||||||
syssub == VAX_SIE_KA655 ? 5 : 0,
|
syssub == VAX_SIE_KA655 ? 5 : 0,
|
||||||
(vax_cpudata & 0xff), GETFRMREV(subtyp));
|
(vax_cpudata & 0xff), GETFRMREV(vax_siedata));
|
||||||
ka650setcache(CACHEON);
|
ka650setcache(CACHEON);
|
||||||
if (ctob(physmem) > ka650merr_ptr->merr_qbmbr) {
|
if (ctob(physmem) > ka650merr_ptr->merr_qbmbr) {
|
||||||
printf("physmem(0x%x) > qbmbr(0x%x)\n",
|
printf("physmem(0x%x) > qbmbr(0x%x)\n",
|
||||||
|
@ -107,43 +117,6 @@ uvaxIII_conf(parent, self, aux)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
uvaxIII_steal_pages()
|
|
||||||
{
|
|
||||||
extern vm_offset_t virtual_avail;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* MicroVAX III: We map in Qbus map registers, memory
|
|
||||||
* error registers, cache control registers, SSC registers,
|
|
||||||
* interprocessor registers and cache diag space.
|
|
||||||
*/
|
|
||||||
MAPVIRT(nexus, vax_btoc(0x400000)); /* Qbus map registers */
|
|
||||||
pmap_map((vm_offset_t)nexus, 0x20088000, 0x20090000,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(ka650merr_ptr, 1); /* mem err & mem config regs */
|
|
||||||
pmap_map((vm_offset_t)ka650merr_ptr, (vm_offset_t)KA650_MERR,
|
|
||||||
KA650_MERR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(ka650cbd_ptr, 1); /* cache control & boot/diag regs */
|
|
||||||
pmap_map((vm_offset_t)ka650cbd_ptr, (vm_offset_t)KA650_CBD,
|
|
||||||
KA650_CBD + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(ka650ssc_ptr, 3); /* SSC regs (& console prog mail box) */
|
|
||||||
pmap_map((vm_offset_t)ka650ssc_ptr, (vm_offset_t)KA650_SSC,
|
|
||||||
KA650_SSC + VAX_NBPG * 3, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(ka650ipcr_ptr, 1); /* InterProcessor Com Regs */
|
|
||||||
pmap_map((vm_offset_t)ka650ipcr_ptr, (vm_offset_t)KA650_IPCR,
|
|
||||||
KA650_IPCR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(KA650_CACHE_ptr, 128); /* Cache Diagnostic space (for flush) */
|
|
||||||
pmap_map((vm_offset_t)KA650_CACHE_ptr, (vm_offset_t)KA650_CACHE,
|
|
||||||
KA650_CACHE + KA650_CACHESIZE, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
subtyp = *(int *)0x20040004;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
uvaxIII_memerr()
|
uvaxIII_memerr()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka750.c,v 1.26 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka750.c,v 1.27 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -63,7 +63,7 @@ void ctuattach __P((void));
|
||||||
void ka750_clrf __P((void));
|
void ka750_clrf __P((void));
|
||||||
|
|
||||||
struct cpu_dep ka750_calls = {
|
struct cpu_dep ka750_calls = {
|
||||||
ka750_steal_pages,
|
0,
|
||||||
generic_clock,
|
generic_clock,
|
||||||
ka750_mchk,
|
ka750_mchk,
|
||||||
ka750_memerr,
|
ka750_memerr,
|
||||||
|
@ -260,23 +260,6 @@ ka750_mchk(cmcf)
|
||||||
return (MCHK_PANIC);
|
return (MCHK_PANIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ka750_steal_pages()
|
|
||||||
{
|
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
|
||||||
int junk;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We take away the pages we need, one for SCB and the rest
|
|
||||||
* for UBA vectors == 1 + 2 will alloc all needed space.
|
|
||||||
* We also set up virtual area for SBI.
|
|
||||||
*/
|
|
||||||
MAPPHYS(junk, V750PGS, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
MAPVIRT(nexus, vax_btoc(NEX750SZ));
|
|
||||||
pmap_map((vm_offset_t)nexus, NEX750, NEX750 + NEX750SZ,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmi_print __P((void *, const char *));
|
static int cmi_print __P((void *, const char *));
|
||||||
static int cmi_match __P((struct device *, struct cfdata *, void *));
|
static int cmi_match __P((struct device *, struct cfdata *, void *));
|
||||||
static void cmi_attach __P((struct device *, struct device *, void*));
|
static void cmi_attach __P((struct device *, struct device *, void*));
|
||||||
|
@ -319,43 +302,57 @@ cmi_attach(parent, self, aux)
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
struct sbi_attach_args sa;
|
struct sbi_attach_args sa;
|
||||||
|
struct nexus *nexusP;
|
||||||
|
|
||||||
printf("I\n");
|
printf("I\n");
|
||||||
/*
|
/*
|
||||||
* Probe for memory, can be in the first 4 slots.
|
* Probe for memory, can be in the first 4 slots.
|
||||||
*/
|
*/
|
||||||
|
#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)
|
||||||
for (sa.nexnum = 0; sa.nexnum < 4; sa.nexnum++) {
|
for (sa.nexnum = 0; sa.nexnum < 4; sa.nexnum++) {
|
||||||
if (badaddr((caddr_t)&nexus[sa.nexnum], 4))
|
nexusP = (struct nexus *)vax_map_physmem(NEX750 +
|
||||||
continue;
|
sizeof(struct nexus) * sa.nexnum, NEXPAGES);
|
||||||
|
if (badaddr((caddr_t)nexusP, 4)) {
|
||||||
sa.nexaddr = nexus + sa.nexnum;
|
vax_unmap_physmem((vaddr_t)nexusP, NEXPAGES);
|
||||||
sa.type = NEX_MEM16;
|
} else {
|
||||||
config_found(self, (void*)&sa, cmi_print);
|
sa.nexaddr = nexusP;
|
||||||
|
sa.type = NEX_MEM16;
|
||||||
|
config_found(self, (void*)&sa, cmi_print);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Probe for mba's, can be in slot 4 - 7.
|
* Probe for mba's, can be in slot 4 - 7.
|
||||||
*/
|
*/
|
||||||
for (sa.nexnum = 4; sa.nexnum < 7; sa.nexnum++) {
|
for (sa.nexnum = 4; sa.nexnum < 7; sa.nexnum++) {
|
||||||
if (badaddr((caddr_t)&nexus[sa.nexnum], 4))
|
nexusP = (struct nexus *)vax_map_physmem(NEX750 +
|
||||||
continue;
|
sizeof(struct nexus) * sa.nexnum, NEXPAGES);
|
||||||
|
if (badaddr((caddr_t)nexusP, 4)) {
|
||||||
sa.nexaddr = nexus + sa.nexnum;
|
vax_unmap_physmem((vaddr_t)nexusP, NEXPAGES);
|
||||||
sa.type = NEX_MBA;
|
} else {
|
||||||
config_found(self, (void*)&sa, cmi_print);
|
sa.nexaddr = nexusP;
|
||||||
|
sa.type = NEX_MBA;
|
||||||
|
config_found(self, (void*)&sa, cmi_print);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There are always one generic UBA, and maybe an optional.
|
* There are always one generic UBA, and maybe an optional.
|
||||||
*/
|
*/
|
||||||
sa.nexnum = 8;
|
sa.nexnum = 8;
|
||||||
sa.nexaddr = nexus + sa.nexnum;
|
sa.nexaddr = (struct nexus *)vax_map_physmem(NEX750 +
|
||||||
|
sizeof(struct nexus) * sa.nexnum, NEXPAGES);
|
||||||
sa.type = NEX_UBA0;
|
sa.type = NEX_UBA0;
|
||||||
config_found(self, (void*)&sa, cmi_print);
|
config_found(self, (void*)&sa, cmi_print);
|
||||||
sa.type = NEX_UBA1;
|
|
||||||
if (badaddr((caddr_t)&nexus[++sa.nexnum], 4) == 0)
|
|
||||||
config_found(self, (void*)&sa, cmi_print);
|
|
||||||
|
|
||||||
|
sa.nexnum = 9;
|
||||||
|
sa.nexaddr = (struct nexus *)vax_map_physmem(NEX750 +
|
||||||
|
sizeof(struct nexus) * sa.nexnum, NEXPAGES);
|
||||||
|
sa.type = NEX_UBA1;
|
||||||
|
if (badaddr((caddr_t)nexusP, 4))
|
||||||
|
vax_unmap_physmem((vaddr_t)sa.nexaddr, NEXPAGES);
|
||||||
|
else
|
||||||
|
config_found(self, (void*)&sa, cmi_print);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka780.c,v 1.11 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka780.c,v 1.12 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -61,13 +61,12 @@ static void ka780_conf __P((struct device *, struct device *, void *));
|
||||||
void ka780_memenable __P((struct sbi_attach_args *, void *));
|
void ka780_memenable __P((struct sbi_attach_args *, void *));
|
||||||
static void ka780_memerr __P((void));
|
static void ka780_memerr __P((void));
|
||||||
static int ka780_mchk __P((caddr_t));
|
static int ka780_mchk __P((caddr_t));
|
||||||
static void ka780_steal_pages __P((void));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Declaration of 780-specific calls.
|
* Declaration of 780-specific calls.
|
||||||
*/
|
*/
|
||||||
struct cpu_dep ka780_calls = {
|
struct cpu_dep ka780_calls = {
|
||||||
ka780_steal_pages,
|
0,
|
||||||
generic_clock,
|
generic_clock,
|
||||||
ka780_mchk,
|
ka780_mchk,
|
||||||
ka780_memerr,
|
ka780_memerr,
|
||||||
|
@ -334,16 +333,3 @@ ka780_conf(parent, self, aux)
|
||||||
printf("no FPA\n");
|
printf("no FPA\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ka780_steal_pages()
|
|
||||||
{
|
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
|
||||||
extern struct nexus *nexus;
|
|
||||||
int junk;
|
|
||||||
|
|
||||||
MAPPHYS(junk, 4, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
MAPVIRT(nexus, vax_btoc(8192*16));
|
|
||||||
pmap_map((vm_offset_t)nexus, 0x20000000, 0x20020000,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka820.c,v 1.13 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka820.c,v 1.14 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988 Regents of the University of California.
|
* Copyright (c) 1988 Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -67,7 +67,6 @@
|
||||||
|
|
||||||
struct ka820port *ka820port_ptr;
|
struct ka820port *ka820port_ptr;
|
||||||
struct rx50device *rx50device_ptr;
|
struct rx50device *rx50device_ptr;
|
||||||
void *bi_nodebase; /* virtual base address for all possible bi nodes */
|
|
||||||
|
|
||||||
static int ka820_match __P((struct device *, struct cfdata *, void *));
|
static int ka820_match __P((struct device *, struct cfdata *, void *));
|
||||||
static void ka820_attach __P((struct device *, struct device *, void*));
|
static void ka820_attach __P((struct device *, struct device *, void*));
|
||||||
|
@ -75,7 +74,7 @@ static void rxcdintr __P((int));
|
||||||
void crxintr __P((int));
|
void crxintr __P((int));
|
||||||
|
|
||||||
struct cpu_dep ka820_calls = {
|
struct cpu_dep ka820_calls = {
|
||||||
ka820_steal_pages,
|
0,
|
||||||
generic_clock,
|
generic_clock,
|
||||||
ka820_mchk,
|
ka820_mchk,
|
||||||
ka820_memerr,
|
ka820_memerr,
|
||||||
|
@ -97,51 +96,6 @@ char bootram[KA820_BRPAGES * VAX_NBPG];
|
||||||
char eeprom[KA820_EEPAGES * VAX_NBPG];
|
char eeprom[KA820_EEPAGES * VAX_NBPG];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
|
||||||
ka820_steal_pages()
|
|
||||||
{
|
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
|
||||||
extern short *clk_page;
|
|
||||||
extern int clk_adrshift, clk_tweak;
|
|
||||||
struct scb *sb;
|
|
||||||
int junk;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* On the ka820, we map in the port CSR, the clock registers
|
|
||||||
* and the console RX50 register. We also map in the BI nodespace
|
|
||||||
* for all possible (16) nodes. It would only be needed with
|
|
||||||
* the existent nodes, but we only loose 1K so...
|
|
||||||
* Another waste of memory is the 8K block after SCB, which is
|
|
||||||
* used for (eventually) DWBUA and KLESI interrupt vectors.
|
|
||||||
* This is only needed for the existing devices, but is allocated
|
|
||||||
* for all possible devices.
|
|
||||||
*/
|
|
||||||
sb = (void *)avail_start;
|
|
||||||
MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE); /* SCB & vectors */
|
|
||||||
MAPPHYS(junk, NNODEBI, VM_PROT_READ|VM_PROT_WRITE); /* BI ivec's */
|
|
||||||
clk_adrshift = 0; /* clk regs are addressed at short's */
|
|
||||||
clk_tweak = 1; /* ...but not exactly in each short */
|
|
||||||
MAPVIRT(clk_page, 1);
|
|
||||||
pmap_map((vm_offset_t)clk_page, (vm_offset_t)KA820_CLOCKADDR,
|
|
||||||
KA820_CLOCKADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(ka820port_ptr, 1);
|
|
||||||
pmap_map((vm_offset_t)ka820port_ptr, (vm_offset_t)KA820_PORTADDR,
|
|
||||||
KA820_PORTADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(rx50device_ptr, 1);
|
|
||||||
pmap_map((vm_offset_t)rx50device_ptr, (vm_offset_t)KA820_RX50ADDR,
|
|
||||||
KA820_RX50ADDR + VAX_NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
MAPVIRT(bi_nodebase, NNODEBI * (sizeof(struct bi_node) / VAX_NBPG));
|
|
||||||
pmap_map((vm_offset_t)bi_nodebase, (vm_offset_t)BI_BASE(0,0),
|
|
||||||
BI_BASE(0,0) + sizeof(struct bi_node) * NNODEBI,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* Steal the interrupt vectors that are unique for us */
|
|
||||||
scb_vecalloc(KA820_INT_RXCD, rxcdintr, 0, SCB_ISTACK);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ka820_match(parent, cf, aux)
|
ka820_match(parent, cf, aux)
|
||||||
struct device *parent;
|
struct device *parent;
|
||||||
|
@ -170,6 +124,8 @@ ka820_attach(parent, self, aux)
|
||||||
{
|
{
|
||||||
struct bi_attach_args *ba = aux;
|
struct bi_attach_args *ba = aux;
|
||||||
register int csr;
|
register int csr;
|
||||||
|
extern short *clk_page;
|
||||||
|
extern int clk_adrshift, clk_tweak;
|
||||||
u_short rev = ba->ba_node->biic.bi_revs;
|
u_short rev = ba->ba_node->biic.bi_revs;
|
||||||
extern char cpu_model[];
|
extern char cpu_model[];
|
||||||
|
|
||||||
|
@ -190,6 +146,16 @@ ka820_attach(parent, self, aux)
|
||||||
|
|
||||||
/* XXX - should be done somewhere else */
|
/* XXX - should be done somewhere else */
|
||||||
scb_vecalloc(SCB_RX50, crxintr, 0, SCB_ISTACK);
|
scb_vecalloc(SCB_RX50, crxintr, 0, SCB_ISTACK);
|
||||||
|
|
||||||
|
clk_adrshift = 0; /* clk regs are addressed at short's */
|
||||||
|
clk_tweak = 1; /* ...but not exactly in each short */
|
||||||
|
clk_page = (short *)vax_map_physmem((paddr_t)KA820_CLOCKADDR, 1);
|
||||||
|
|
||||||
|
/* Steal the interrupt vectors that are unique for us */
|
||||||
|
scb_vecalloc(KA820_INT_RXCD, rxcdintr, 0, SCB_ISTACK);
|
||||||
|
|
||||||
|
rx50device_ptr = (void *)vax_map_physmem(KA820_RX50ADDR, 1);
|
||||||
|
ka820port_ptr = (void *)vax_map_physmem(KA820_PORTADDR, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ka860.c,v 1.12 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: ka860.c,v 1.13 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1986, 1988 Regents of the University of California.
|
* Copyright (c) 1986, 1988 Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -53,20 +53,17 @@
|
||||||
#include <machine/sid.h>
|
#include <machine/sid.h>
|
||||||
#include <vax/vax/gencons.h>
|
#include <vax/vax/gencons.h>
|
||||||
|
|
||||||
struct ioa *ioa;
|
|
||||||
|
|
||||||
void ka86_conf __P((struct device *, struct device *, void *));
|
void ka86_conf __P((struct device *, struct device *, void *));
|
||||||
void ka86_memenable __P((struct sbi_attach_args *, struct device *));
|
void ka86_memenable __P((struct sbi_attach_args *, struct device *));
|
||||||
void ka86_memerr __P((void));
|
void ka86_memerr __P((void));
|
||||||
int ka86_mchk __P((caddr_t));
|
int ka86_mchk __P((caddr_t));
|
||||||
void ka86_steal_pages __P((void));
|
|
||||||
void ka86_reboot __P((int));
|
void ka86_reboot __P((int));
|
||||||
void ka86_clrf __P((void));
|
void ka86_clrf __P((void));
|
||||||
|
|
||||||
void crlattach __P((void));
|
void crlattach __P((void));
|
||||||
|
|
||||||
struct cpu_dep ka860_calls = {
|
struct cpu_dep ka860_calls = {
|
||||||
ka86_steal_pages,
|
0,
|
||||||
generic_clock,
|
generic_clock,
|
||||||
ka86_mchk,
|
ka86_mchk,
|
||||||
ka86_memerr,
|
ka86_memerr,
|
||||||
|
@ -272,35 +269,6 @@ ka86_mchk(cmcf)
|
||||||
return (MCHK_PANIC);
|
return (MCHK_PANIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ka86_steal_pages()
|
|
||||||
{
|
|
||||||
extern vm_offset_t avail_start, virtual_avail;
|
|
||||||
extern struct nexus *nexus;
|
|
||||||
int junk;
|
|
||||||
|
|
||||||
/* 8600 may have 2 SBI's == 4 pages */
|
|
||||||
MAPPHYS(junk, 4, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* Map in ioa register space */
|
|
||||||
MAPVIRT(ioa, MAXNIOA);
|
|
||||||
pmap_map((vm_offset_t)ioa, (u_int)IOA8600(0),
|
|
||||||
(u_int)IOA8600(0) + IOAMAPSIZ, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
pmap_map((vm_offset_t)ioa + IOAMAPSIZ, (u_int)IOA8600(1),
|
|
||||||
(u_int)IOA8600(1) + IOAMAPSIZ, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
pmap_map((vm_offset_t)ioa + 2 * IOAMAPSIZ, (u_int)IOA8600(2),
|
|
||||||
(u_int)IOA8600(2) + IOAMAPSIZ, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
pmap_map((vm_offset_t)ioa + 3 * IOAMAPSIZ, (u_int)IOA8600(3),
|
|
||||||
(u_int)IOA8600(3) + IOAMAPSIZ, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
|
|
||||||
/* Map in possible nexus space */
|
|
||||||
MAPVIRT(nexus, vax_btoc(NEXSIZE * MAXNNEXUS));
|
|
||||||
pmap_map((vm_offset_t)nexus, (u_int)NEXA8600,
|
|
||||||
(u_int)NEXA8600 + NNEX8600 * NEXSIZE, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
pmap_map((vm_offset_t)&nexus[NNEXSBI], (u_int)NEXB8600,
|
|
||||||
(u_int)NEXB8600 + NNEX8600 * NEXSIZE, VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ka86 {
|
struct ka86 {
|
||||||
unsigned snr:12,
|
unsigned snr:12,
|
||||||
plant:4,
|
plant:4,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: machdep.c,v 1.70 1999/01/19 21:04:49 ragge Exp $ */
|
/* $NetBSD: machdep.c,v 1.71 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -144,6 +144,9 @@ int physmem;
|
||||||
int todrstopped = 0;
|
int todrstopped = 0;
|
||||||
int dumpsize = 0;
|
int dumpsize = 0;
|
||||||
|
|
||||||
|
#define IOMAPSZ 100
|
||||||
|
static struct map iomap[IOMAPSZ];
|
||||||
|
|
||||||
caddr_t allocsys __P((caddr_t));
|
caddr_t allocsys __P((caddr_t));
|
||||||
|
|
||||||
#define valloclim(name, type, num, lim) \
|
#define valloclim(name, type, num, lim) \
|
||||||
|
@ -172,6 +175,10 @@ vm_map_t mb_map = NULL;
|
||||||
vm_map_t phys_map = NULL;
|
vm_map_t phys_map = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
int iospace_inited = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
cpu_startup()
|
cpu_startup()
|
||||||
{
|
{
|
||||||
|
@ -477,6 +484,16 @@ void
|
||||||
consinit()
|
consinit()
|
||||||
{
|
{
|
||||||
extern int smgprobe(void), smgcninit(void);
|
extern int smgprobe(void), smgcninit(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Init I/O memory resource map. Must be done before cninit()
|
||||||
|
* is called; we may want to use iospace in the console routines.
|
||||||
|
*/
|
||||||
|
rminit(iomap, IOSPSZ, (long)1, "iomap", IOMAPSZ);
|
||||||
|
#ifdef DEBUG
|
||||||
|
iospace_inited = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
cninit();
|
cninit();
|
||||||
#if NSMG
|
#if NSMG
|
||||||
/* XXX - do this probe after everything else due to wscons trouble */
|
/* XXX - do this probe after everything else due to wscons trouble */
|
||||||
|
@ -488,7 +505,9 @@ consinit()
|
||||||
extern int end; /* Contains pointer to symsize also */
|
extern int end; /* Contains pointer to symsize also */
|
||||||
extern int *esym;
|
extern int *esym;
|
||||||
|
|
||||||
ddb_init(*(int *)&end, ((int *)&end) + 1, esym);
|
extern void ksym_init(int *, int *);
|
||||||
|
ksym_init(&end, esym);
|
||||||
|
// ddb_init(*(int *)&end, ((int *)&end) + 1, esym);
|
||||||
}
|
}
|
||||||
#ifdef donotworkbyunknownreason
|
#ifdef donotworkbyunknownreason
|
||||||
if (boothowto & RB_KDB)
|
if (boothowto & RB_KDB)
|
||||||
|
@ -844,22 +863,61 @@ process_sstep(p, sstep)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef notyet
|
#undef PHYSMEMDEBUG
|
||||||
/*
|
/*
|
||||||
* Allocates a virtual range suitable for mapping in physical memory.
|
* Allocates a virtual range suitable for mapping in physical memory.
|
||||||
* This differs from the bus_space routines in that it allocates on
|
* This differs from the bus_space routines in that it allocates on
|
||||||
* physical page sizes instead of logical sizes.
|
* physical page sizes instead of logical sizes. This implementation
|
||||||
|
* uses resource maps when allocating space, which is allocated from
|
||||||
|
* the IOMAP submap. The implementation is similar to the uba resource
|
||||||
|
* map handling. Size is given in pages.
|
||||||
|
*
|
||||||
|
* It is known that the first page in the iospace area is unused; it may
|
||||||
|
* be use by console device drivers (before the map system is inited).
|
||||||
*/
|
*/
|
||||||
vaddr_t
|
vaddr_t
|
||||||
vax_map_physmem(phys, size)
|
vax_map_physmem(phys, size)
|
||||||
paddr_t phys;
|
paddr_t phys;
|
||||||
psize_t size;
|
int size;
|
||||||
{
|
{
|
||||||
|
extern vaddr_t iospace;
|
||||||
|
vaddr_t addr;
|
||||||
|
int pageno;
|
||||||
|
static int warned = 0;
|
||||||
|
|
||||||
if (size > NBPG) { /* Need to alloc new virtual chunk */
|
#ifdef DEBUG
|
||||||
|
if (!iospace_inited)
|
||||||
} else {
|
panic("vax_map_physmem: called before rminit()?!?");
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
pageno = rmalloc(iomap, size);
|
||||||
|
if (pageno == 0) {
|
||||||
|
if (warned++ == 0) /* Warn only once */
|
||||||
|
printf("vax_map_physmem: iomap too small\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
addr = iospace + (pageno * VAX_NBPG);
|
||||||
|
ioaccess(addr, phys, size);
|
||||||
|
#ifdef PHYSMEMDEBUG
|
||||||
|
printf("vax_map_physmem: alloc'ed %d pages for paddr %lx, at %lx\n",
|
||||||
|
size, phys, addr);
|
||||||
|
#endif
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unmaps the previous mapped (addr, size) pair.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
vax_unmap_physmem(addr, size)
|
||||||
|
vaddr_t addr;
|
||||||
|
int size;
|
||||||
|
{
|
||||||
|
extern vaddr_t iospace;
|
||||||
|
int pageno = (addr - iospace) / VAX_NBPG;
|
||||||
|
#ifdef PHYSMEMDEBUG
|
||||||
|
printf("vax_unmap_physmem: unmapping %d pages at addr %lx\n",
|
||||||
|
size, addr);
|
||||||
|
#endif
|
||||||
|
rmfree(iomap, pageno, size);
|
||||||
|
iounaccess(addr, size);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: pmap.c,v 1.58 1999/01/19 22:57:47 ragge Exp $ */
|
/* $NetBSD: pmap.c,v 1.59 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -87,6 +87,7 @@ struct pmap kernel_pmap_store;
|
||||||
struct pte *Sysmap; /* System page table */
|
struct pte *Sysmap; /* System page table */
|
||||||
struct pv_entry *pv_table; /* array of entries, one per LOGICAL page */
|
struct pv_entry *pv_table; /* array of entries, one per LOGICAL page */
|
||||||
void *scratch;
|
void *scratch;
|
||||||
|
vaddr_t iospace;
|
||||||
|
|
||||||
vaddr_t ptemapstart, ptemapend;
|
vaddr_t ptemapstart, ptemapend;
|
||||||
vm_map_t pte_map;
|
vm_map_t pte_map;
|
||||||
|
@ -160,6 +161,8 @@ pmap_bootstrap()
|
||||||
sysptsize += ((USRPTSIZE * 4) / VAX_NBPG) * maxproc;
|
sysptsize += ((USRPTSIZE * 4) / VAX_NBPG) * maxproc;
|
||||||
/* Kernel stacks per process */
|
/* Kernel stacks per process */
|
||||||
sysptsize += UPAGES * maxproc;
|
sysptsize += UPAGES * maxproc;
|
||||||
|
/* IO device register space */
|
||||||
|
sysptsize += IOSPSZ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -232,11 +235,14 @@ pmap_bootstrap()
|
||||||
MAPVIRT(qd_ubaio, 16);
|
MAPVIRT(qd_ubaio, 16);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
MAPVIRT(iospace, IOSPSZ); /* Device iospace mapping area */
|
||||||
|
|
||||||
/* Init SCB and set up stray vectors. */
|
/* Init SCB and set up stray vectors. */
|
||||||
avail_start = scb_init(avail_start);
|
avail_start = scb_init(avail_start);
|
||||||
bzero(0, VAX_NBPG >> 1);
|
bzero(0, VAX_NBPG >> 1);
|
||||||
|
|
||||||
(*dep_call->cpu_steal_pages)();
|
if (dep_call->cpu_steal_pages)
|
||||||
|
(*dep_call->cpu_steal_pages)();
|
||||||
|
|
||||||
avail_start = ROUND_PAGE(avail_start);
|
avail_start = ROUND_PAGE(avail_start);
|
||||||
virtual_avail = ROUND_PAGE(virtual_avail);
|
virtual_avail = ROUND_PAGE(virtual_avail);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: sbi.c,v 1.18 1998/04/13 12:10:28 ragge Exp $ */
|
/* $NetBSD: sbi.c,v 1.19 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -92,19 +92,24 @@ sbi_attach(parent, self, aux)
|
||||||
* in different ways (if they identifies themselves at all).
|
* in different ways (if they identifies themselves at all).
|
||||||
* We have to fake identifying depending on different CPUs.
|
* We have to fake identifying depending on different CPUs.
|
||||||
*/
|
*/
|
||||||
|
#define NEXPAGES (sizeof(struct nexus) / VAX_NBPG)
|
||||||
minnex = self->dv_unit * NNEXSBI;
|
minnex = self->dv_unit * NNEXSBI;
|
||||||
for (nexnum = minnex; nexnum < minnex + NNEXSBI; nexnum++) {
|
for (nexnum = minnex; nexnum < minnex + NNEXSBI; nexnum++) {
|
||||||
|
struct nexus *nexusP;
|
||||||
volatile int tmp;
|
volatile int tmp;
|
||||||
|
|
||||||
if (badaddr((caddr_t)&nexus[nexnum], 4))
|
nexusP = (struct nexus *)vax_map_physmem((paddr_t)NEXA8600 +
|
||||||
continue;
|
sizeof(struct nexus) * nexnum, NEXPAGES);
|
||||||
|
if (badaddr((caddr_t)nexusP, 4)) {
|
||||||
|
vax_unmap_physmem((vaddr_t)nexusP, NEXPAGES);
|
||||||
|
} else {
|
||||||
|
tmp = nexusP->nexcsr.nex_csr; /* no byte reads */
|
||||||
|
sa.type = tmp & 255;
|
||||||
|
|
||||||
tmp = nexus[nexnum].nexcsr.nex_csr; /* no byte reads */
|
sa.nexnum = nexnum;
|
||||||
sa.type = tmp & 255;
|
sa.nexaddr = nexusP;
|
||||||
|
config_found(self, (void*)&sa, sbi_print);
|
||||||
sa.nexnum = nexnum;
|
}
|
||||||
sa.nexaddr = nexus + nexnum;
|
|
||||||
config_found(self, (void*)&sa, sbi_print);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vm_machdep.c,v 1.44 1999/01/01 21:43:19 ragge Exp $ */
|
/* $NetBSD: vm_machdep.c,v 1.45 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -342,3 +342,35 @@ vunmapbuf(bp, len)
|
||||||
bp->b_saveaddr = 0;
|
bp->b_saveaddr = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Map in a bunch of pages read/writeable for the kernel.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ioaccess(vaddr, paddr, npgs)
|
||||||
|
vaddr_t vaddr;
|
||||||
|
paddr_t paddr;
|
||||||
|
int npgs;
|
||||||
|
{
|
||||||
|
u_int *pte = (u_int *)kvtopte(vaddr);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < npgs; i++)
|
||||||
|
pte[i] = PG_V | PG_KW | (PG_PFNUM(paddr) + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Opposite to the above: just forget their mapping.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
iounaccess(vaddr, npgs)
|
||||||
|
vaddr_t vaddr;
|
||||||
|
int npgs;
|
||||||
|
{
|
||||||
|
u_int *pte = (u_int *)kvtopte(vaddr);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < npgs; i++)
|
||||||
|
pte[i] = 0;
|
||||||
|
mtpr(0, PR_TBIA);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: dz_vsbus.c,v 1.6 1998/08/10 14:47:16 ragge Exp $ */
|
/* $NetBSD: dz_vsbus.c,v 1.7 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -48,6 +48,8 @@
|
||||||
#include <machine/sid.h>
|
#include <machine/sid.h>
|
||||||
#include <machine/uvax.h>
|
#include <machine/uvax.h>
|
||||||
#include <machine/vsbus.h>
|
#include <machine/vsbus.h>
|
||||||
|
#include <machine/cpu.h>
|
||||||
|
|
||||||
#include <machine/../vax/gencons.h>
|
#include <machine/../vax/gencons.h>
|
||||||
|
|
||||||
#include <vax/uba/dzreg.h>
|
#include <vax/uba/dzreg.h>
|
||||||
|
@ -62,6 +64,8 @@ static int dz_print __P((void *, const char *));
|
||||||
static void txon __P((void));
|
static void txon __P((void));
|
||||||
static void rxon __P((void));
|
static void rxon __P((void));
|
||||||
|
|
||||||
|
static vaddr_t dz_regs; /* Used for console */
|
||||||
|
|
||||||
struct cfattach dz_vsbus_ca = {
|
struct cfattach dz_vsbus_ca = {
|
||||||
sizeof(struct dz_softc), dz_vsbus_match, dz_vsbus_attach
|
sizeof(struct dz_softc), dz_vsbus_match, dz_vsbus_attach
|
||||||
};
|
};
|
||||||
|
@ -155,10 +159,12 @@ dzcngetc(dev)
|
||||||
int c = 0;
|
int c = 0;
|
||||||
int mino = minor(dev);
|
int mino = minor(dev);
|
||||||
u_short rbuf;
|
u_short rbuf;
|
||||||
|
#if 0
|
||||||
u_char mask;
|
u_char mask;
|
||||||
|
|
||||||
mask = vs_cpu->vc_intmsk; /* save old state */
|
mask = vs_cpu->vc_intmsk; /* save old state */
|
||||||
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
||||||
|
#endif
|
||||||
|
|
||||||
do {
|
do {
|
||||||
while ((dz->csr & 0x80) == 0)
|
while ((dz->csr & 0x80) == 0)
|
||||||
|
@ -172,8 +178,10 @@ dzcngetc(dev)
|
||||||
if (c == 13)
|
if (c == 13)
|
||||||
c = 10;
|
c = 10;
|
||||||
|
|
||||||
|
#if 0
|
||||||
vs_cpu->vc_intclr = 0x80; /* clear te interrupt request */
|
vs_cpu->vc_intclr = 0x80; /* clear te interrupt request */
|
||||||
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
||||||
|
#endif
|
||||||
|
|
||||||
return (c);
|
return (c);
|
||||||
}
|
}
|
||||||
|
@ -184,6 +192,7 @@ void
|
||||||
dzcnprobe(cndev)
|
dzcnprobe(cndev)
|
||||||
struct consdev *cndev;
|
struct consdev *cndev;
|
||||||
{
|
{
|
||||||
|
extern vaddr_t iospace;
|
||||||
|
|
||||||
switch (vax_boardtype) {
|
switch (vax_boardtype) {
|
||||||
case VAX_BTYP_410:
|
case VAX_BTYP_410:
|
||||||
|
@ -191,6 +200,8 @@ dzcnprobe(cndev)
|
||||||
case VAX_BTYP_43:
|
case VAX_BTYP_43:
|
||||||
case VAX_BTYP_46:
|
case VAX_BTYP_46:
|
||||||
cndev->cn_dev = makedev(DZMAJOR, 3);
|
cndev->cn_dev = makedev(DZMAJOR, 3);
|
||||||
|
dz_regs = iospace;
|
||||||
|
ioaccess(iospace, 0x200A0000, 1);
|
||||||
cndev->cn_pri = CN_NORMAL;
|
cndev->cn_pri = CN_NORMAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -222,13 +233,17 @@ dzcnputc(dev,ch)
|
||||||
int timeout = 1<<15; /* don't hang the machine! */
|
int timeout = 1<<15; /* don't hang the machine! */
|
||||||
int mino = minor(dev);
|
int mino = minor(dev);
|
||||||
u_short tcr;
|
u_short tcr;
|
||||||
|
#if 0
|
||||||
u_char mask;
|
u_char mask;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (mfpr(PR_MAPEN) == 0)
|
if (mfpr(PR_MAPEN) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#if 0
|
||||||
mask = vs_cpu->vc_intmsk; /* save old state */
|
mask = vs_cpu->vc_intmsk; /* save old state */
|
||||||
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
||||||
|
#endif
|
||||||
tcr = dz->tcr; /* remember which lines to scan */
|
tcr = dz->tcr; /* remember which lines to scan */
|
||||||
dz->tcr = (1 << mino);
|
dz->tcr = (1 << mino);
|
||||||
|
|
||||||
|
@ -238,7 +253,9 @@ dzcnputc(dev,ch)
|
||||||
dz->tdr = ch; /* Put the character */
|
dz->tdr = ch; /* Put the character */
|
||||||
|
|
||||||
dz->tcr = tcr;
|
dz->tcr = tcr;
|
||||||
|
#if 0
|
||||||
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -269,10 +286,12 @@ lkccngetc(dev)
|
||||||
{
|
{
|
||||||
int lkc_decode(int);
|
int lkc_decode(int);
|
||||||
int c;
|
int c;
|
||||||
|
#if 0
|
||||||
u_char mask;
|
u_char mask;
|
||||||
|
|
||||||
mask = vs_cpu->vc_intmsk; /* save old state */
|
mask = vs_cpu->vc_intmsk; /* save old state */
|
||||||
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
vs_cpu->vc_intmsk = 0; /* disable all interrupts */
|
||||||
|
#endif
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
while ((dz->csr & 0x80) == 0)
|
while ((dz->csr & 0x80) == 0)
|
||||||
|
@ -282,8 +301,10 @@ loop:
|
||||||
if (c < 1)
|
if (c < 1)
|
||||||
goto loop;
|
goto loop;
|
||||||
|
|
||||||
|
#if 0
|
||||||
vs_cpu->vc_intclr = 0x80; /* clear te interrupt request */
|
vs_cpu->vc_intclr = 0x80; /* clear te interrupt request */
|
||||||
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
vs_cpu->vc_intmsk = mask; /* restore interrupt mask */
|
||||||
|
#endif
|
||||||
|
|
||||||
return (c);
|
return (c);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: if_ln.c,v 1.8 1998/08/15 10:51:17 mycroft Exp $ */
|
/* $NetBSD: if_ln.c,v 1.9 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
|
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
|
||||||
|
@ -215,6 +215,9 @@ static inline void ln_tint __P((struct ln_softc *));
|
||||||
static inline void ln_read __P((struct ln_softc *, caddr_t, int));
|
static inline void ln_read __P((struct ln_softc *, caddr_t, int));
|
||||||
void ln_reset __P((struct ln_softc *));
|
void ln_reset __P((struct ln_softc *));
|
||||||
|
|
||||||
|
static short *lance_csr; /* LANCE CSR virtual address */
|
||||||
|
static int *lance_addr; /* Ethernet address */
|
||||||
|
|
||||||
struct cfattach ln_ca = {
|
struct cfattach ln_ca = {
|
||||||
sizeof(struct ln_softc), lnmatch, lnattach
|
sizeof(struct ln_softc), lnmatch, lnattach
|
||||||
};
|
};
|
||||||
|
@ -232,10 +235,12 @@ lnmatch(parent, cf, aux)
|
||||||
{
|
{
|
||||||
struct vsbus_attach_args *va = aux;
|
struct vsbus_attach_args *va = aux;
|
||||||
|
|
||||||
#ifdef DIAGNOSTIC
|
if (lance_csr == 0)
|
||||||
|
lance_csr = (short *)vax_map_physmem(NI_BASE, 1);
|
||||||
if (lance_csr == 0)
|
if (lance_csr == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
if (lance_addr == 0)
|
||||||
|
lance_addr = (int *)vax_map_physmem(NI_ADDR, 1);
|
||||||
if (va->va_type == inr_ni)
|
if (va->va_type == inr_ni)
|
||||||
return 2;
|
return 2;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: ncr.c,v 1.16 1998/12/06 13:55:09 ragge Exp $ */
|
/* $NetBSD: ncr.c,v 1.17 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1996 The NetBSD Foundation, Inc.
|
* Copyright (c) 1996 The NetBSD Foundation, Inc.
|
||||||
|
@ -98,6 +98,8 @@ static struct scsipi_device si_dev = {
|
||||||
NULL, /* Use default "done" routine. */
|
NULL, /* Use default "done" routine. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static caddr_t sca_regs;
|
||||||
|
|
||||||
static int si_match(struct device *, struct cfdata *, void *);
|
static int si_match(struct device *, struct cfdata *, void *);
|
||||||
static void si_attach(struct device *, struct device *, void *);
|
static void si_attach(struct device *, struct device *, void *);
|
||||||
static void si_minphys(struct buf *);
|
static void si_minphys(struct buf *);
|
||||||
|
@ -124,6 +126,8 @@ si_match(parent, cf, aux)
|
||||||
{
|
{
|
||||||
struct vsbus_attach_args *va = aux;
|
struct vsbus_attach_args *va = aux;
|
||||||
|
|
||||||
|
if (sca_regs == 0)
|
||||||
|
sca_regs = (caddr_t)vax_map_physmem(SCA_REGS, 1);
|
||||||
if (va->va_type == 0x200C0080)
|
if (va->va_type == 0x200C0080)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: smg.c,v 1.11 1999/01/11 21:54:23 drochner Exp $ */
|
/* $NetBSD: smg.c,v 1.12 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1998 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -46,6 +46,7 @@
|
||||||
|
|
||||||
#include <machine/vsbus.h>
|
#include <machine/vsbus.h>
|
||||||
#include <machine/sid.h>
|
#include <machine/sid.h>
|
||||||
|
#include <machine/cpu.h>
|
||||||
|
|
||||||
#include "lkc.h"
|
#include "lkc.h"
|
||||||
|
|
||||||
|
@ -101,6 +102,8 @@ const struct wsscreen_list smg_screenlist = {
|
||||||
_smg_scrlist,
|
_smg_scrlist,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static caddr_t sm_addr;
|
||||||
|
|
||||||
extern char q_font[];
|
extern char q_font[];
|
||||||
#define QCHAR(c) (c < 32 ? 32 : (c > 127 ? c - 66 : c - 32))
|
#define QCHAR(c) (c < 32 ? 32 : (c > 127 ? c - 66 : c - 32))
|
||||||
#define QFONT(c,line) q_font[QCHAR(c) * 15 + line]
|
#define QFONT(c,line) q_font[QCHAR(c) * 15 + line]
|
||||||
|
@ -145,10 +148,11 @@ smg_match(parent, match, aux)
|
||||||
|
|
||||||
if (va->va_type != inr_vf)
|
if (va->va_type != inr_vf)
|
||||||
return 0;
|
return 0;
|
||||||
#ifdef DIAGNOSTIC
|
|
||||||
if (sm_addr == 0)
|
if (sm_addr == 0)
|
||||||
panic("smg: inconsistency in smg address mapping");
|
sm_addr = (caddr_t)vax_map_physmem(SMADDR, (SMSIZE/VAX_NBPG));
|
||||||
#endif
|
if (sm_addr == 0)
|
||||||
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -465,8 +469,9 @@ smgprobe()
|
||||||
case VAX_BTYP_43:
|
case VAX_BTYP_43:
|
||||||
if (vax_confdata & 0x20) /* doesn't use graphics console */
|
if (vax_confdata & 0x20) /* doesn't use graphics console */
|
||||||
break;
|
break;
|
||||||
if (sm_addr == 0) /* Haven't mapped graphic area */
|
sm_addr = (caddr_t)vax_map_physmem(SMADDR, (SMSIZE/VAX_NBPG));
|
||||||
break;
|
if (sm_addr == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: vsbus.c,v 1.13 1998/12/06 14:33:54 ragge Exp $ */
|
/* $NetBSD: vsbus.c,v 1.14 1999/02/02 18:37:21 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -70,6 +70,8 @@ int vsbus_print __P((void *, const char *));
|
||||||
void ka410_attach __P((struct device *, struct device *, void *));
|
void ka410_attach __P((struct device *, struct device *, void *));
|
||||||
void ka43_attach __P((struct device *, struct device *, void *));
|
void ka43_attach __P((struct device *, struct device *, void *));
|
||||||
|
|
||||||
|
static struct vs_cpu *vs_cpu;
|
||||||
|
|
||||||
#define VSBUS_MAXINTR 8
|
#define VSBUS_MAXINTR 8
|
||||||
|
|
||||||
struct vsbus_softc {
|
struct vsbus_softc {
|
||||||
|
@ -127,6 +129,8 @@ vsbus_attach(parent, self, aux)
|
||||||
struct vsbus_attach_args va;
|
struct vsbus_attach_args va;
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
vs_cpu = (void *)vax_map_physmem(VS_REGS, 1);
|
||||||
/*
|
/*
|
||||||
* first setup interrupt-table, so that devices can register
|
* first setup interrupt-table, so that devices can register
|
||||||
* their interrupt-routines...
|
* their interrupt-routines...
|
||||||
|
@ -145,11 +149,9 @@ vsbus_attach(parent, self, aux)
|
||||||
config_found(self, &va, vsbus_print);
|
config_found(self, &va, vsbus_print);
|
||||||
|
|
||||||
/* If sm_addr is set, a monochrome graphics adapter is found */
|
/* If sm_addr is set, a monochrome graphics adapter is found */
|
||||||
/* XXX ckeck for color adapter */
|
/* XXX - fixa! */
|
||||||
if (sm_addr) {
|
va.va_type = inr_vf;
|
||||||
va.va_type = inr_vf;
|
config_found(self, &va, vsbus_print);
|
||||||
config_found(self, &va, vsbus_print);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX - Avoid searching for SCSI on 4000/60 */
|
/* XXX - Avoid searching for SCSI on 4000/60 */
|
||||||
if (vax_boardtype == VAX_BTYP_46)
|
if (vax_boardtype == VAX_BTYP_46)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: uba.c,v 1.41 1999/01/19 22:57:47 ragge Exp $ */
|
/* $NetBSD: uba.c,v 1.42 1999/02/02 18:37:20 ragge Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1996 Jonathan Stone.
|
* Copyright (c) 1996 Jonathan Stone.
|
||||||
* Copyright (c) 1994, 1996 Ludd, University of Lule}, Sweden.
|
* Copyright (c) 1994, 1996 Ludd, University of Lule}, Sweden.
|
||||||
|
@ -408,11 +408,8 @@ qba_attach(parent, self, aux)
|
||||||
void *aux;
|
void *aux;
|
||||||
{
|
{
|
||||||
struct uba_softc *sc = (void *)self;
|
struct uba_softc *sc = (void *)self;
|
||||||
vm_offset_t mini, maxi;
|
|
||||||
|
|
||||||
printf(": Q22\n");
|
printf(": Q22\n");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill in bus specific data.
|
* Fill in bus specific data.
|
||||||
*/
|
*/
|
||||||
|
@ -429,16 +426,8 @@ qba_attach(parent, self, aux)
|
||||||
* Map in the UBA page map into kernel space. On other UBAs,
|
* Map in the UBA page map into kernel space. On other UBAs,
|
||||||
* the map registers are in the bus IO space.
|
* the map registers are in the bus IO space.
|
||||||
*/
|
*/
|
||||||
#if defined(UVM)
|
sc->uh_mr = (void *)vax_map_physmem(QBAMAP,
|
||||||
(void)uvm_km_suballoc(kernel_map, &mini, &maxi,
|
(QBAPAGES * sizeof(struct pte)) / VAX_NBPG);
|
||||||
QBAPAGES * sizeof(struct pte), FALSE, FALSE, NULL);
|
|
||||||
#else
|
|
||||||
(void)kmem_suballoc(kernel_map, &mini, &maxi,
|
|
||||||
QBAPAGES * sizeof(struct pte), FALSE);
|
|
||||||
#endif
|
|
||||||
pmap_map(mini, QBAMAP, QBAMAP + QBAPAGES * sizeof(struct pte),
|
|
||||||
VM_PROT_READ | VM_PROT_WRITE);
|
|
||||||
sc->uh_mr = (void *)mini;
|
|
||||||
|
|
||||||
uba_attach(sc, QIOPAGE);
|
uba_attach(sc, QIOPAGE);
|
||||||
}
|
}
|
||||||
|
@ -804,9 +793,8 @@ qbgetpri()
|
||||||
void
|
void
|
||||||
uba_attach(sc, iopagephys)
|
uba_attach(sc, iopagephys)
|
||||||
struct uba_softc *sc;
|
struct uba_softc *sc;
|
||||||
unsigned long iopagephys;
|
paddr_t iopagephys;
|
||||||
{
|
{
|
||||||
vm_offset_t mini, maxi;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set last free interrupt vector for devices with
|
* Set last free interrupt vector for devices with
|
||||||
|
@ -818,18 +806,10 @@ uba_attach(sc, iopagephys)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate place for unibus memory in virtual space.
|
* Allocate place for unibus memory in virtual space.
|
||||||
* This is done with kmem_suballoc() but after that
|
|
||||||
* never used in the vm system. Is it OK to do so?
|
|
||||||
*/
|
*/
|
||||||
#if defined(UVM)
|
sc->uh_iopage = (caddr_t)vax_map_physmem(iopagephys, UBAIOPAGES);
|
||||||
(void)uvm_km_suballoc(kernel_map, &mini, &maxi, UBAIOPAGES * VAX_NBPG,
|
if (sc->uh_iopage == 0)
|
||||||
FALSE, FALSE, NULL);
|
return; /* vax_map_physmem() will complain for us */
|
||||||
#else
|
|
||||||
(void)kmem_suballoc(kernel_map, &mini, &maxi, UBAIOPAGES * VAX_NBPG, FALSE);
|
|
||||||
#endif
|
|
||||||
pmap_map(mini, iopagephys, iopagephys + UBAIOPAGES * VAX_NBPG,
|
|
||||||
VM_PROT_READ|VM_PROT_WRITE);
|
|
||||||
sc->uh_iopage = (void *)mini;
|
|
||||||
/*
|
/*
|
||||||
* Initialize the UNIBUS, by freeing the map
|
* Initialize the UNIBUS, by freeing the map
|
||||||
* registers and the buffered data path registers
|
* registers and the buffered data path registers
|
||||||
|
|
Loading…
Reference in New Issue