Basic change to cpu-config code. This will make support of new
cpu types much easier.
This commit is contained in:
parent
788bcc9857
commit
e86bc96653
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cpu.h,v 1.21 1997/02/12 17:58:57 ragge Exp $ */
|
||||
/* $NetBSD: cpu.h,v 1.22 1997/02/19 10:06:03 ragge Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden
|
||||
@ -30,20 +30,21 @@
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* All bugs are subject to removal without further notice */
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/device.h>
|
||||
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/pcb.h>
|
||||
#include <machine/uvax.h>
|
||||
|
||||
#define enablertclock()
|
||||
#define cpu_wait(p)
|
||||
#define cpu_swapout(p)
|
||||
|
||||
extern struct cpu_dep cpu_calls[];
|
||||
|
||||
/*
|
||||
* All cpu-dependent info is kept in this struct. Pointer to the
|
||||
* struct for the current cpu is set up in locore.c.
|
||||
*/
|
||||
struct cpu_dep {
|
||||
void (*cpu_steal_pages) __P((void)); /* pmap init before mm is on */
|
||||
void (*cpu_clock) __P((void)); /* CPU dep RT clock start */
|
||||
@ -53,8 +54,15 @@ struct cpu_dep {
|
||||
void (*cpu_conf) __P((struct device *, struct device *, void *));
|
||||
int (*cpu_clkread) __P((time_t)); /* Read cpu clock time */
|
||||
void (*cpu_clkwrite) __P((void)); /* Write system time to cpu */
|
||||
int cpu_vups; /* speed of cpu */
|
||||
u_char *cpu_intreq; /* Used on some VAXstations */
|
||||
u_char *cpu_intclr; /* Used on some VAXstations */
|
||||
u_char *cpu_intmsk; /* Used on some VAXstations */
|
||||
struct uc_map *cpu_map; /* Map containing important addresses */
|
||||
};
|
||||
|
||||
extern struct cpu_dep *dep_call; /* Holds pointer to current CPU struct. */
|
||||
|
||||
struct clockframe {
|
||||
int pc;
|
||||
int ps;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka410.h,v 1.1 1996/07/20 17:58:14 ragge Exp $ */
|
||||
/* $NetBSD: ka410.h,v 1.2 1997/02/19 10:06:05 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -64,7 +64,7 @@
|
||||
/*
|
||||
* Other fixed addresses which should be mapped
|
||||
*/
|
||||
#define KA410_CPU_BASE 0x20080000
|
||||
#define KA410_CPU_BASE ((struct ka410_cpu *)0x20080000)
|
||||
#define KA410_CPU_END 0x200800FF
|
||||
#define KA410_CPU_SIZE 0x100
|
||||
#define KA410_NWA_BASE 0x20090000 /* Network Address ROM */
|
||||
@ -73,7 +73,7 @@
|
||||
#define KA410_SER_BASE 0x200A0000 /* Serial line controller */
|
||||
#define KA410_SER_END 0x200A000F
|
||||
#define KA410_SER_SIZE 0x10
|
||||
#define KA410_WAT_BASE 0x200B0000 /* TOY clock and NV-RAM */
|
||||
#define KA410_WAT_BASE ((struct ka410_clock *)0x200B0000)/* TOY clock */
|
||||
#define KA410_WAT_END 0x200B00FF
|
||||
#define KA410_WAT_SIZE 0x100
|
||||
#define KA410_DKC_BASE 0x200C0000 /* Disk Controller Ports */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: uvax.h,v 1.1 1996/07/20 17:58:24 ragge Exp $ */
|
||||
/* $NetBSD: uvax.h,v 1.2 1997/02/19 10:06:07 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -32,6 +32,9 @@
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _VAX_UVAX_H_
|
||||
#define _VAX_UVAX_H_
|
||||
|
||||
/*
|
||||
* generic(?) MicroVAX and VAXstation support
|
||||
*
|
||||
@ -51,26 +54,15 @@ void uvax_steal_pages __P((void));
|
||||
int uvax_setup __P((int mapen));
|
||||
|
||||
struct uvax_calls {
|
||||
u_long (*uc_phys2virt) __P((u_long)); /* most often used! */
|
||||
u_long (*uc_memsize) __P((void));
|
||||
void (*uc_steal_pages) __P((void));
|
||||
void (*uc_conf) __P((struct device*, struct device*, void*));
|
||||
void (*uc_memerr) __P((void));
|
||||
int (*uc_mchk) __P((caddr_t));
|
||||
int (*uc_clkread) __P((time_t));
|
||||
void (*uc_clkwrite) __P((void));
|
||||
|
||||
char *uc_name;
|
||||
u_char *uc_intreq;
|
||||
u_char *uc_intclr;
|
||||
u_char *uc_intmsk;
|
||||
|
||||
void *le_iomem; /* base addr of RAM -- CPU's view */
|
||||
u_long *le_ioaddr; /* base addr of RAM -- LANCE's view */
|
||||
int *le_memsize; /* size of RAM reserved for LANCE */
|
||||
|
||||
void *uc_physmap;
|
||||
int uc_busTypes;
|
||||
int uc_vups; /* used by delay() */
|
||||
|
||||
int uv_flags;
|
||||
@ -113,3 +105,6 @@ extern struct uc_map *uc_physmap;
|
||||
/* Prototypes */
|
||||
int uvax_clkread __P((time_t));
|
||||
void uvax_clkwrite __P((void));
|
||||
void uvax_fillmap __P((void));
|
||||
u_long uvax_phys2virt __P((u_long));
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: autoconf.c,v 1.21 1997/01/31 02:13:40 thorpej Exp $ */
|
||||
/* $NetBSD: autoconf.c,v 1.22 1997/02/19 10:04:09 ragge Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||
@ -30,9 +30,6 @@
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* All bugs are subject to removal without further notice */
|
||||
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/systm.h>
|
||||
@ -40,6 +37,8 @@
|
||||
#include <sys/reboot.h>
|
||||
#include <sys/conf.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/sid.h>
|
||||
#include <machine/param.h>
|
||||
@ -49,106 +48,17 @@
|
||||
#include <machine/ka820.h>
|
||||
#include <machine/ka750.h>
|
||||
#include <machine/ka650.h>
|
||||
#include <machine/uvax.h>
|
||||
#include <machine/clock.h>
|
||||
|
||||
#include <vax/vax/gencons.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
void gencnslask __P((void));
|
||||
|
||||
struct cpu_dep *dep_call;
|
||||
struct nexus *nexus;
|
||||
|
||||
#define BACKPLANE 0
|
||||
#define BIBUSS 1
|
||||
#define SBIBUSS 2
|
||||
#define VSBUSS 4
|
||||
|
||||
int mastercpu; /* chief of the system */
|
||||
|
||||
#if defined(VAX630) || defined(VAX410) || defined(VAX43) || defined(VAX46)
|
||||
#define VAX_uVAX
|
||||
#endif
|
||||
|
||||
#ifdef VAX8600 /* XXX These are in ka860 also */
|
||||
void ka86_conf __P((struct device *, struct device *, void *));
|
||||
void ka86_memenable __P((struct sbi_attach_args *, struct device *));
|
||||
void ka86_memerr __P((void));
|
||||
int ka86_mchk __P((caddr_t));
|
||||
void ka86_steal_pages __P((void));
|
||||
#endif
|
||||
#ifdef VAX780 /* XXX These are in ka780 also */
|
||||
void ka780_conf __P((struct device *, struct device *, void *));
|
||||
void ka780_memenable __P((struct sbi_attach_args *, void *));
|
||||
void ka780_memerr __P((void));
|
||||
int ka780_mchk __P((caddr_t));
|
||||
void ka780_steal_pages __P((void));
|
||||
#endif
|
||||
|
||||
struct cpu_dep cpu_calls[]={
|
||||
/* Type 0,noexist */
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#ifdef VAX780 /* Type 1, 11/{780,782,785} */
|
||||
{ka780_steal_pages,generic_clock, ka780_mchk, ka780_memerr, ka780_conf,
|
||||
generic_clkread, generic_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX750 /* Type 2, 11/750 */
|
||||
{ka750_steal_pages,generic_clock, ka750_mchk, ka750_memerr, ka750_conf,
|
||||
generic_clkread, generic_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX730 /* Type 3, 11/{730,725}, ceauciesco-vax */
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX8600 /* Type 4, 8600/8650 (11/{790,795}) */
|
||||
{ka86_steal_pages, generic_clock, ka86_mchk, ka86_memerr, ka86_conf,
|
||||
generic_clkread, generic_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX8200 /* Type 5, 8200, 8300, 8350 */
|
||||
{ka820_steal_pages, generic_clock, ka820_mchk, ka820_memerr, NULL,
|
||||
ka820_clkread, ka820_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX8800 /* Type 6, 85X0, 8700, 88X0 */
|
||||
{NULL, generic_clock, NULL, NULL, NULL },
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX610 /* Type 7, KA610 */
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX630 /* Type 8, KA630 or KA410 (uVAX II) */
|
||||
{uvax_steal_pages, no_nicr_clock, uvax_mchk, uvax_memerr, uvax_conf,
|
||||
uvax_clkread, uvax_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
/* Type 9, not used */
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#ifdef VAX650 /* Type 10, KA65X (uVAX III) */
|
||||
{uvaxIII_steal_pages, no_nicr_clock, uvaxIII_mchk, uvaxIII_memerr,
|
||||
uvaxIII_conf, generic_clkread, generic_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
#ifdef VAX_uVAX /* Type 11, RIGEL */
|
||||
{uvax_steal_pages, no_nicr_clock, uvax_mchk, uvax_memerr, uvax_conf,
|
||||
uvax_clkread, uvax_clkwrite},
|
||||
#else
|
||||
{NULL, NULL, NULL, NULL, NULL },
|
||||
#endif
|
||||
};
|
||||
|
||||
void gencnslask __P((void));
|
||||
#define BACKPLANE 0
|
||||
|
||||
struct devnametobdevmaj vax_nam2blk[] = {
|
||||
{ "hp", 0 },
|
||||
@ -377,7 +287,7 @@ cpu_attach(parent, self, aux)
|
||||
struct device *parent, *self;
|
||||
void *aux;
|
||||
{
|
||||
(*cpu_calls[vax_cputype].cpu_conf)(parent, self, aux);
|
||||
(*dep_call->cpu_conf)(parent, self, aux);
|
||||
}
|
||||
|
||||
int mem_match __P((struct device *, void *, void *));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: clock.c,v 1.18 1996/10/13 03:35:33 christos Exp $ */
|
||||
/* $NetBSD: clock.c,v 1.19 1997/02/19 10:04:11 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1995 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -37,7 +37,6 @@
|
||||
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/sid.h>
|
||||
#include <machine/uvax.h>
|
||||
#include <machine/clock.h>
|
||||
#include <machine/cpu.h>
|
||||
|
||||
@ -103,7 +102,7 @@ inittodr(fs_time)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = (*cpu_calls[vax_cputype].cpu_clkread) (fs_time);
|
||||
rv = (*dep_call->cpu_clkread) (fs_time);
|
||||
switch (rv) {
|
||||
|
||||
case CLKREAD_BAD: /* No useable information from system clock */
|
||||
@ -138,7 +137,7 @@ inittodr(fs_time)
|
||||
void
|
||||
resettodr()
|
||||
{
|
||||
(*cpu_calls[vax_cputype].cpu_clkwrite)();
|
||||
(*dep_call->cpu_clkwrite)();
|
||||
}
|
||||
/*
|
||||
* A delayloop that delays about the number of milliseconds that is
|
||||
@ -148,32 +147,7 @@ void
|
||||
delay(i)
|
||||
int i;
|
||||
{
|
||||
int mul;
|
||||
|
||||
switch (vax_cputype) {
|
||||
#if VAX750 || VAX630 || VAX410
|
||||
case VAX_750:
|
||||
case VAX_78032:
|
||||
mul = 1; /* <= 1 VUPS */
|
||||
break;
|
||||
#endif
|
||||
#if VAX780 || VAX8200
|
||||
case VAX_780:
|
||||
case VAX_8200:
|
||||
mul = 2; /* <= 2 VUPS */
|
||||
break;
|
||||
#endif
|
||||
#if VAX650
|
||||
case VAX_650:
|
||||
mul = 3; /* <= 3 VUPS */
|
||||
break;
|
||||
#endif
|
||||
default: /* Would be enough... */
|
||||
case VAX_8600:
|
||||
mul = 6; /* <= 6 VUPS */
|
||||
break;
|
||||
}
|
||||
asm ("1: sobgtr %0, 1b" : : "r" (mul * i));
|
||||
asm ("1: sobgtr %0, 1b" : : "r" (dep_call->cpu_vups * i));
|
||||
}
|
||||
|
||||
#if VAX750 || VAX780 || VAX8200 || VAX8600 || VAX8800
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka410.c,v 1.3 1996/10/13 03:35:42 christos Exp $ */
|
||||
/* $NetBSD: ka410.c,v 1.4 1997/02/19 10:04:12 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -15,8 +15,8 @@
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed at Ludd, University of
|
||||
* Lule}, Sweden and its contributors.
|
||||
* This product includes software developed at Ludd, University of
|
||||
* Lule}, Sweden and its contributors.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
@ -32,8 +32,6 @@
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/device.h>
|
||||
@ -42,6 +40,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/pte.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/sid.h>
|
||||
#include <machine/pmap.h>
|
||||
@ -50,70 +49,53 @@
|
||||
#include <machine/ka410.h>
|
||||
#include <machine/clock.h>
|
||||
|
||||
/*
|
||||
* Maybe all these variables/functions should be static or "integrate"
|
||||
*/
|
||||
void ka410_conf __P((struct device*, struct device*, void*));
|
||||
void ka410_memenable __P((struct sbi_attach_args *, struct device *));
|
||||
void ka410_steal_pages __P((void));
|
||||
static void ka410_conf __P((struct device*, struct device*, void*));
|
||||
static void ka410_memenable __P((struct sbi_attach_args*, struct device *));
|
||||
static void ka410_steal_pages __P((void));
|
||||
static void ka410_memerr __P((void));
|
||||
static int ka410_mchk __P((caddr_t));
|
||||
|
||||
#ifdef notyet
|
||||
void ka410_memerr __P((void));
|
||||
int ka410_mchk __P((caddr_t));
|
||||
#endif
|
||||
static struct ka410_clock *ka410_clkptr;
|
||||
|
||||
struct ka410_cpu *ka410_cpuptr = (void*)KA410_CPU_BASE;
|
||||
struct ka410_clock *ka410_clkptr = (void*)KA410_WAT_BASE;
|
||||
|
||||
extern int uVAX_fillmap __P((struct uc_map *));
|
||||
|
||||
struct uc_map ka410_map[] = {
|
||||
static struct uc_map ka410_map[] = {
|
||||
{ KA410_CFGTST, KA410_CFGTST+1023, 1024, 0 },
|
||||
{ KA410_ROM_BASE, KA410_ROM_END, KA410_ROM_SIZE, 0 },
|
||||
{ KA410_CPU_BASE, KA410_CPU_END, KA410_CPU_SIZE, 0 },
|
||||
{ KA410_NWA_BASE, KA410_NWA_END, KA410_NWA_SIZE, 0 },
|
||||
{ KA410_SER_BASE, KA410_SER_END, KA410_SER_SIZE, 0 },
|
||||
{ KA410_WAT_BASE, KA410_WAT_END, KA410_WAT_SIZE, 0 },
|
||||
{ KA410_ROM_BASE, KA410_ROM_END, KA410_ROM_SIZE, 0 },
|
||||
{ (int)KA410_CPU_BASE, KA410_CPU_END, KA410_CPU_SIZE, 0 },
|
||||
{ KA410_NWA_BASE, KA410_NWA_END, KA410_NWA_SIZE, 0 },
|
||||
{ KA410_SER_BASE, KA410_SER_END, KA410_SER_SIZE, 0 },
|
||||
{ (int)KA410_WAT_BASE, KA410_WAT_END, KA410_WAT_SIZE, 0 },
|
||||
#if 0
|
||||
{ KA410_SCS_BASE, KA410_SCS_END, KA410_SCS_SIZE, 0 },
|
||||
{ KA410_SCS_BASE, KA410_SCS_END, KA410_SCS_SIZE, 0 },
|
||||
#else
|
||||
{ 0x200C0000, 0x200C01FF, 0x200, 0 },
|
||||
#endif
|
||||
{ KA410_LAN_BASE, KA410_LAN_END, KA410_LAN_SIZE, 0 },
|
||||
{ KA410_CUR_BASE, KA410_CUR_END, KA410_CUR_SIZE, 0 },
|
||||
{ KA410_DMA_BASE, KA410_DMA_END, KA410_DMA_SIZE, 0 },
|
||||
{ KA410_LAN_BASE, KA410_LAN_END, KA410_LAN_SIZE, 0 },
|
||||
{ KA410_CUR_BASE, KA410_CUR_END, KA410_CUR_SIZE, 0 },
|
||||
{ KA410_DMA_BASE, KA410_DMA_END, KA410_DMA_SIZE, 0 },
|
||||
/*
|
||||
* there's more to come, eg. framebuffers (mono + GPX)
|
||||
*/
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
|
||||
int
|
||||
ka410_setup(uc,flags)
|
||||
struct uvax_calls *uc;
|
||||
int flags;
|
||||
{
|
||||
uc->uc_name = "ka410";
|
||||
/*
|
||||
* Declaration of 410-specific calls.
|
||||
*/
|
||||
struct cpu_dep ka410_calls = {
|
||||
ka410_steal_pages,
|
||||
no_nicr_clock,
|
||||
ka410_mchk,
|
||||
ka410_memerr,
|
||||
ka410_conf,
|
||||
ka410_clkread,
|
||||
ka410_clkwrite,
|
||||
1, /* ~VUPS */
|
||||
(void*)KA410_INTREQ, /* Used by vaxstation */
|
||||
(void*)KA410_INTCLR, /* Used by vaxstation */
|
||||
(void*)KA410_INTMSK, /* Used by vaxstation */
|
||||
ka410_map,
|
||||
};
|
||||
|
||||
uc->uc_phys2virt = NULL; /* ka410_mapaddr; */
|
||||
uc->uc_physmap = ka410_map; /* ptv_map ? p2v_map */
|
||||
|
||||
uc->uc_steal_pages = ka410_steal_pages;
|
||||
uc->uc_conf = ka410_conf;
|
||||
uc->uc_clkread = ka410_clkread;
|
||||
uc->uc_clkwrite = ka410_clkwrite;
|
||||
|
||||
#ifdef notyet
|
||||
uc->uc_memerr = ka410_memerr;
|
||||
uc->uc_mchk = ka410_mchk;
|
||||
#endif
|
||||
|
||||
uc->uc_intreq = (void*)KA410_INTREQ;
|
||||
uc->uc_intclr = (void*)KA410_INTCLR;
|
||||
uc->uc_intmsk = (void*)KA410_INTMSK;
|
||||
|
||||
uc->uc_busTypes = VAX_VSBUS;
|
||||
}
|
||||
|
||||
void
|
||||
ka410_conf(parent, self, aux)
|
||||
@ -130,24 +112,33 @@ ka410_conf(parent, self, aux)
|
||||
printf(": %s\n", cpu_model);
|
||||
}
|
||||
|
||||
void
|
||||
ka410_memerr()
|
||||
{
|
||||
printf("Memory err!\n");
|
||||
}
|
||||
|
||||
int
|
||||
ka410_mchk(addr)
|
||||
caddr_t addr;
|
||||
{
|
||||
panic("Machine check");
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
u_long le_iomem; /* base addr of RAM -- CPU's view */
|
||||
u_long le_ioaddr; /* base addr of RAM -- LANCE's view */
|
||||
|
||||
void
|
||||
ka410_steal_pages()
|
||||
{
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
int junk;
|
||||
|
||||
int i;
|
||||
struct {
|
||||
u_long :2;
|
||||
u_long data:8;
|
||||
u_long :22;
|
||||
u_long :2;
|
||||
u_long data:8;
|
||||
u_long :22;
|
||||
} *p;
|
||||
int *srp; /* Scratch Ram */
|
||||
char *q = (void*)&srp;
|
||||
@ -156,17 +147,17 @@ ka410_steal_pages()
|
||||
p = (void*)KA410_SCR;
|
||||
for (i=0; i<4; i++) {
|
||||
printf("p[%d] = %x, ", i, p[i].data);
|
||||
q[i] = p[i].data;
|
||||
q[i] = p[i].data;
|
||||
}
|
||||
p = (void*)KA410_SCRLEN;
|
||||
printf("\nlen = %d\n", p->data);
|
||||
printf("srp = 0x%x\n", srp);
|
||||
|
||||
for (i=0; i<0x2; i++) {
|
||||
printf("%x:0x%x ", i*4, srp[i]);
|
||||
if ((i & 0x07) == 0x07)
|
||||
printf("\n");
|
||||
}
|
||||
printf("%x:0x%x ", i*4, srp[i]);
|
||||
if ((i & 0x07) == 0x07)
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
/*
|
||||
@ -215,27 +206,21 @@ ka410_steal_pages()
|
||||
* pmap_map(ptr,...) inserts a pair of virtual/physical addresses
|
||||
* into the system maptable (Sysmap)
|
||||
*/
|
||||
uVAX_fillmap(ka410_map);
|
||||
uvax_fillmap();
|
||||
|
||||
/*
|
||||
* Clear restart and boot in progress flags
|
||||
* in the CPMBX. (ie. clear bits 4 and 5)
|
||||
*/
|
||||
ka410_clkptr->cpmbx = (ka410_clkptr->cpmbx & ~0x30);
|
||||
KA410_WAT_BASE->cpmbx = (KA410_WAT_BASE->cpmbx & ~0x30);
|
||||
|
||||
/*
|
||||
* Enable memory parity error detection and clear error bits.
|
||||
*/
|
||||
ka410_cpuptr->ka410_mser = 1;
|
||||
KA410_CPU_BASE->ka410_mser = 1;
|
||||
/* (UVAXIIMSER_PEN | UVAXIIMSER_MERR | UVAXIIMSER_LEB); */
|
||||
|
||||
/*
|
||||
* MM is not yet enabled, thus we still used the physical addresses,
|
||||
* but before leaving this routine, we need to reset them to virtual.
|
||||
*/
|
||||
ka410_cpuptr = (void*)uvax_phys2virt(KA410_CPU_BASE);
|
||||
ka410_clkptr = (void*)uvax_phys2virt(KA410_WAT_BASE);
|
||||
|
||||
ka410_clkptr = (void*)uvax_phys2virt((u_long)KA410_WAT_BASE);
|
||||
}
|
||||
/*
|
||||
* define what we need and overwrite the uVAX_??? names
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka43.c,v 1.3 1996/10/13 03:35:43 christos Exp $ */
|
||||
/* $NetBSD: ka43.c,v 1.4 1997/02/19 10:04:14 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -15,8 +15,8 @@
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed at Ludd, University of
|
||||
* Lule}, Sweden and its contributors.
|
||||
* This product includes software developed at Ludd, University of
|
||||
* Lule}, Sweden and its contributors.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
@ -41,6 +41,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/pte.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/sid.h>
|
||||
#include <machine/pmap.h>
|
||||
@ -50,7 +51,7 @@
|
||||
#include <machine/clock.h>
|
||||
#include <machine/ka650.h> /* cache ??? */
|
||||
|
||||
#define xtrace(x)
|
||||
#define xtrace(x)
|
||||
|
||||
void ka43_conf __P((struct device*, struct device*, void*));
|
||||
void ka43_steal_pages __P((void));
|
||||
@ -58,12 +59,10 @@ void ka43_steal_pages __P((void));
|
||||
void ka43_memerr __P((void));
|
||||
int ka43_mchk __P((caddr_t));
|
||||
|
||||
struct ka43_cpu *ka43_cpuptr = (void*)KA43_CPU_BASE;
|
||||
struct ka43_clock *ka43_clkptr = (void*)KA43_WAT_BASE;
|
||||
struct ka43_clock *ka43_clkptr;
|
||||
|
||||
extern int uVAX_fillmap __P((struct uc_map *));
|
||||
|
||||
struct uc_map ka43_map[] = {
|
||||
static struct uc_map ka43_map[] = {
|
||||
{ KA43_CFGTST, KA43_CFGTST, 4, 0 },
|
||||
{ KA43_ROM_BASE, KA43_ROM_END, KA43_ROM_SIZE, 0 },
|
||||
{ KA43_CPU_BASE, KA43_CPU_END, KA43_CPU_SIZE, 0 },
|
||||
@ -83,6 +82,21 @@ struct uc_map ka43_map[] = {
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
|
||||
struct cpu_dep ka43_calls = {
|
||||
ka43_steal_pages,
|
||||
no_nicr_clock,
|
||||
ka43_mchk,
|
||||
ka43_memerr,
|
||||
ka43_conf,
|
||||
ka43_clkread,
|
||||
ka43_clkwrite,
|
||||
4,
|
||||
(void*)KA43_INTREQ,
|
||||
(void*)KA43_INTCLR,
|
||||
(void*)KA43_INTMSK,
|
||||
ka43_map,
|
||||
};
|
||||
|
||||
#define CH1_BITS \
|
||||
"\020\015BCHIT\014BUSERR\013PPERR\012DPERR\011TPERR\010TRAP1" \
|
||||
"\007TRAP2\006INTR\005HIT\004REFRESH\003FLUSH\002ENABLE\001FORCEHIT"
|
||||
@ -164,22 +178,7 @@ ka43_setup(uc,flags)
|
||||
{
|
||||
uc->uc_name = "ka43";
|
||||
|
||||
uc->uc_phys2virt = NULL;
|
||||
uc->uc_physmap = ka43_map;
|
||||
|
||||
uc->uc_steal_pages = ka43_steal_pages;
|
||||
uc->uc_conf = ka43_conf;
|
||||
uc->uc_clkread = ka43_clkread;
|
||||
uc->uc_clkwrite = ka43_clkwrite;
|
||||
|
||||
uc->uc_memerr = ka43_memerr;
|
||||
uc->uc_mchk = ka43_mchk;
|
||||
|
||||
uc->uc_intreq = (void*)KA43_INTREQ;
|
||||
uc->uc_intclr = (void*)KA43_INTCLR;
|
||||
uc->uc_intmsk = (void*)KA43_INTMSK;
|
||||
|
||||
uc->uc_busTypes = VAX_VSBUS;
|
||||
}
|
||||
|
||||
ka43_discache()
|
||||
@ -315,7 +314,7 @@ u_long le_ioaddr; /* base addr of RAM -- LANCE's view */
|
||||
void
|
||||
ka43_steal_pages()
|
||||
{
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
int junk;
|
||||
int i;
|
||||
struct {
|
||||
@ -337,8 +336,11 @@ ka43_steal_pages()
|
||||
#else
|
||||
*pctl = KA43_PCTL_CPEN;
|
||||
#endif
|
||||
panic("No support for ka43");
|
||||
#if 0
|
||||
printf("new value for parctl: ");
|
||||
gets(line);
|
||||
#endif
|
||||
*pctl = *line - '0';
|
||||
printf("parctl: 0x%x\n", *pctl);
|
||||
|
||||
@ -346,7 +348,7 @@ ka43_steal_pages()
|
||||
p = (void*)KA43_SCR;
|
||||
for (i=0; i<4; i++) {
|
||||
printf("p[%d] = %x, ", i, p[i].data);
|
||||
q[i] = p[i].data;
|
||||
q[i] = p[i].data;
|
||||
}
|
||||
p = (void*)KA43_SCRLEN;
|
||||
printf("\nlen = %d\n", p->data);
|
||||
@ -356,7 +358,7 @@ ka43_steal_pages()
|
||||
printf("%x:0x%x ", i*4, srp[i]);
|
||||
if ((i & 0x07) == 0x07)
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
printf ("ka43_steal_pages: avail_end=0x%x\n", avail_end);
|
||||
@ -405,27 +407,25 @@ ka43_steal_pages()
|
||||
/*
|
||||
* now map in anything listed in ka43_map...
|
||||
*/
|
||||
uVAX_fillmap(ka43_map);
|
||||
uvax_fillmap();
|
||||
|
||||
/*
|
||||
* Clear restart and boot in progress flags in the CPMBX.
|
||||
*/
|
||||
ka43_clkptr->cpmbx = ka43_clkptr->cpmbx & 0xF0;
|
||||
((struct ka43_clock*)ka43_clkptr)->cpmbx =
|
||||
((struct ka43_clock*)ka43_clkptr)->cpmbx & 0xF0;
|
||||
|
||||
/*
|
||||
* Enable memory parity error detection and clear error bits.
|
||||
*/
|
||||
ka43_cpuptr->ka43_mser = 0x01;
|
||||
((struct ka43_cpu *)KA43_CPU_BASE)->ka43_mser = 0x01;
|
||||
/* (UVAXIIMSER_PEN | UVAXIIMSER_MERR | UVAXIIMSER_LEB); */
|
||||
|
||||
/*
|
||||
* 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_cpuptr = (void*)uvax_phys2virt(KA43_CPU_BASE);
|
||||
ka43_clkptr = (void*)uvax_phys2virt(KA43_WAT_BASE);
|
||||
|
||||
printf ("steal_pages done.\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $NetBSD: ka630.c,v 1.4 1996/10/13 03:35:44 christos Exp $ */
|
||||
/* $NetBSD: ka630.c,v 1.5 1997/02/19 10:04:15 ragge Exp $ */
|
||||
/*-
|
||||
* 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.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -31,7 +31,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ka630.c 7.8 (Berkeley) 5/9/91
|
||||
* @(#)ka630.c 7.8 (Berkeley) 5/9/91
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -44,6 +44,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/pte.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/sid.h>
|
||||
#include <machine/pmap.h>
|
||||
@ -52,38 +53,29 @@
|
||||
#include <machine/ka630.h>
|
||||
#include <machine/clock.h>
|
||||
|
||||
struct uvaxIIcpu *uvaxIIcpu_ptr;
|
||||
static struct uvaxIIcpu *uvaxIIcpu_ptr;
|
||||
|
||||
struct ka630clock *ka630_clkptr = KA630CLK;
|
||||
static struct ka630clock *ka630_clkptr = KA630CLK;
|
||||
|
||||
static void ka630_conf __P((struct device *, struct device *, void *));
|
||||
static void ka630_memerr __P((void));
|
||||
static int ka630_mchk __P((caddr_t));
|
||||
static void ka630_steal_pages __P((void));
|
||||
|
||||
struct cpu_dep ka630_calls = {
|
||||
ka630_steal_pages,
|
||||
no_nicr_clock,
|
||||
ka630_mchk,
|
||||
ka630_memerr,
|
||||
ka630_conf,
|
||||
ka630_clkread,
|
||||
ka630_clkwrite,
|
||||
1, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
|
||||
int
|
||||
ka630_setup(uc,flags)
|
||||
struct uvax_calls *uc;
|
||||
int flags;
|
||||
{
|
||||
uc->uc_name = "ka630";
|
||||
|
||||
uc->uc_phys2virt = NULL;
|
||||
uc->uc_physmap = NULL; /* ptv_map ? p2v_map */
|
||||
|
||||
uc->uc_steal_pages = ka630_steal_pages;
|
||||
uc->uc_conf = ka630_conf;
|
||||
uc->uc_clkread = ka630_clkread;
|
||||
uc->uc_clkwrite = ka630_clkwrite;
|
||||
|
||||
#ifdef notyet
|
||||
uc->uc_memerr = ka630_memerr;
|
||||
uc->uc_mchk = ka630_mchk;
|
||||
#endif
|
||||
|
||||
uc->uc_busTypes = VAX_UNIBUS;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* uvaxII_conf() is called by cpu_attach to do the cpu_specific setup.
|
||||
@ -100,7 +92,8 @@ ka630_conf(parent, self, aux)
|
||||
}
|
||||
|
||||
/* log crd errors */
|
||||
uvaxII_memerr()
|
||||
void
|
||||
ka630_memerr()
|
||||
{
|
||||
printf("memory err!\n");
|
||||
}
|
||||
@ -121,7 +114,7 @@ struct mc78032frame {
|
||||
int mc63_psl; /* trapped psl */
|
||||
};
|
||||
|
||||
uvaxII_mchk(cmcf)
|
||||
ka630_mchk(cmcf)
|
||||
caddr_t cmcf;
|
||||
{
|
||||
register struct mc78032frame *mcf = (struct mc78032frame *)cmcf;
|
||||
@ -147,7 +140,7 @@ uvaxII_mchk(cmcf)
|
||||
void
|
||||
ka630_steal_pages()
|
||||
{
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
int junk;
|
||||
|
||||
/*
|
||||
@ -170,24 +163,23 @@ ka630_steal_pages()
|
||||
(vm_offset_t)KA630CLK + NBPG, VM_PROT_READ|VM_PROT_WRITE);
|
||||
|
||||
/*
|
||||
* Clear restart and boot in progress flags
|
||||
* in the CPMBX.
|
||||
/
|
||||
ka630clk_ptr->cpmbx = (ka630clk_ptr->cpmbx & KA630CLK_LANG);
|
||||
* Clear restart and boot in progress flags in the CPMBX.
|
||||
* Note: We are not running virtual yet.
|
||||
*/
|
||||
KA630CLK->cpmbx = (KA630CLK->cpmbx & KA630CLK_LANG);
|
||||
|
||||
/*
|
||||
* Enable memory parity error detection and clear error bits.
|
||||
*/
|
||||
uvaxIIcpu_ptr->uvaxII_mser = (UVAXIIMSER_PEN | UVAXIIMSER_MERR |
|
||||
UVAXIICPU->uvaxII_mser = (UVAXIIMSER_PEN | UVAXIIMSER_MERR |
|
||||
UVAXIIMSER_LEB);
|
||||
|
||||
}
|
||||
#define uVAX_gettodr ka630_gettodr
|
||||
#define uVAX_settodr ka630_settodr
|
||||
#define uVAX_clkptr ka630_clkptr
|
||||
#define uVAX_genclock ka630_genclock
|
||||
#define uVAX_clock ka630clock
|
||||
#define uVAX_clkread ka630_clkread
|
||||
#define uVAX_clkwrite ka630_clkwrite
|
||||
#define uVAX_gettodr ka630_gettodr
|
||||
#define uVAX_settodr ka630_settodr
|
||||
#define uVAX_clkptr ka630_clkptr
|
||||
#define uVAX_genclock ka630_genclock
|
||||
#define uVAX_clock ka630clock
|
||||
#define uVAX_clkread ka630_clkread
|
||||
#define uVAX_clkwrite ka630_clkwrite
|
||||
|
||||
#include <arch/vax/vax/uvax_proto.c>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka650.c,v 1.8 1997/02/12 17:50:40 ragge Exp $ */
|
||||
/* $NetBSD: ka650.c,v 1.9 1997/02/19 10:04:16 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1988 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
@ -50,6 +50,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/ka650.h>
|
||||
#include <machine/clock.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/psl.h>
|
||||
#include <machine/mtpr.h>
|
||||
@ -68,6 +69,21 @@ static int subtyp;
|
||||
|
||||
void ka650setcache __P((int));
|
||||
|
||||
struct cpu_dep ka650_calls = {
|
||||
uvaxIII_steal_pages,
|
||||
no_nicr_clock,
|
||||
uvaxIII_mchk,
|
||||
uvaxIII_memerr,
|
||||
uvaxIII_conf,
|
||||
generic_clkread,
|
||||
generic_clkwrite,
|
||||
4, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* uvaxIII_conf() is called by cpu_attach to do the cpu_specific setup.
|
||||
*/
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* $NetBSD: ka750.c,v 1.17 1996/10/13 03:35:48 christos Exp $ */
|
||||
|
||||
/*-
|
||||
/* $NetBSD: ka750.c,v 1.18 1997/02/19 10:04:17 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -46,6 +45,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/ka750.h>
|
||||
#include <machine/clock.h>
|
||||
#include <machine/pte.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/sid.h>
|
||||
@ -57,6 +57,21 @@
|
||||
|
||||
void ctuattach __P((void));
|
||||
|
||||
struct cpu_dep ka750_calls = {
|
||||
ka750_steal_pages,
|
||||
generic_clock,
|
||||
ka750_mchk,
|
||||
ka750_memerr,
|
||||
ka750_conf,
|
||||
generic_clkread,
|
||||
generic_clkwrite,
|
||||
1, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* ka750_conf() is called by cpu_attach to do the cpu_specific setup.
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka780.c,v 1.6 1996/10/13 03:35:50 christos Exp $ */
|
||||
/* $NetBSD: ka780.c,v 1.7 1997/02/19 10:04:18 ragge Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
@ -47,6 +47,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/pte.h>
|
||||
#include <machine/clock.h>
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/scb.h>
|
||||
@ -56,12 +57,28 @@
|
||||
#include <vax/uba/ubavar.h>
|
||||
#include <vax/uba/ubareg.h>
|
||||
|
||||
/* Prototypes. XXX These should be somewhere else */
|
||||
void ka780_conf __P((struct device *, struct device *, void *));
|
||||
static void ka780_conf __P((struct device *, struct device *, void *));
|
||||
void ka780_memenable __P((struct sbi_attach_args *, void *));
|
||||
void ka780_memerr __P((void));
|
||||
int ka780_mchk __P((caddr_t));
|
||||
void ka780_steal_pages __P((void));
|
||||
static void ka780_memerr __P((void));
|
||||
static int ka780_mchk __P((caddr_t));
|
||||
static void ka780_steal_pages __P((void));
|
||||
|
||||
/*
|
||||
* Declaration of 780-specific calls.
|
||||
*/
|
||||
struct cpu_dep ka780_calls = {
|
||||
ka780_steal_pages,
|
||||
generic_clock,
|
||||
ka780_mchk,
|
||||
ka780_memerr,
|
||||
ka780_conf,
|
||||
generic_clkread,
|
||||
generic_clkwrite,
|
||||
2, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
};
|
||||
|
||||
/*
|
||||
* Memory controller register usage varies per controller.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka820.c,v 1.3 1996/10/13 03:35:51 christos Exp $ */
|
||||
/* $NetBSD: ka820.c,v 1.4 1997/02/19 10:04:19 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1988 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
@ -68,6 +68,21 @@ void *bi_nodebase; /* virtual base address for all possible bi nodes */
|
||||
static int ka820_match __P((struct device *, void *, void *));
|
||||
static void ka820_attach __P((struct device *, struct device *, void*));
|
||||
|
||||
struct cpu_dep ka820_calls = {
|
||||
ka820_steal_pages,
|
||||
generic_clock,
|
||||
ka820_mchk,
|
||||
ka820_memerr,
|
||||
NULL,
|
||||
ka820_clkread,
|
||||
ka820_clkwrite,
|
||||
3, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
|
||||
};
|
||||
|
||||
struct cfattach cpu_bi_ca = {
|
||||
sizeof(struct device), ka820_match, ka820_attach
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ka860.c,v 1.6 1996/10/13 03:35:53 christos Exp $ */
|
||||
/* $NetBSD: ka860.c,v 1.7 1997/02/19 10:04:20 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1986, 1988 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
@ -46,6 +46,7 @@
|
||||
#include <vm/vm_kern.h>
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/clock.h>
|
||||
#include <machine/mtpr.h>
|
||||
#include <machine/nexus.h>
|
||||
#include <machine/ioa.h>
|
||||
@ -53,7 +54,6 @@
|
||||
|
||||
struct ioa *ioa;
|
||||
|
||||
/* XXX These are in autoconf.c also */
|
||||
void ka86_conf __P((struct device *, struct device *, void *));
|
||||
void ka86_memenable __P((struct sbi_attach_args *, struct device *));
|
||||
void ka86_memerr __P((void));
|
||||
@ -62,6 +62,21 @@ void ka86_steal_pages __P((void));
|
||||
|
||||
void crlattach __P((void));
|
||||
|
||||
struct cpu_dep ka860_calls = {
|
||||
ka86_steal_pages,
|
||||
generic_clock,
|
||||
ka86_mchk,
|
||||
ka86_memerr,
|
||||
ka86_conf,
|
||||
generic_clkread,
|
||||
generic_clkwrite,
|
||||
6, /* ~VUPS */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
0, /* Used by vaxstation */
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* 8600 memory register (MERG) bit definitions
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: locore.c,v 1.17 1996/08/20 14:13:54 ragge Exp $ */
|
||||
/* $NetBSD: locore.c,v 1.18 1997/02/19 10:04:22 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -71,6 +71,18 @@ int vax_systype; /* machine dependend identification of the system */
|
||||
int vax_cpudata; /* contents of the SID register */
|
||||
int vax_siedata; /* contents of the SIE register */
|
||||
int vax_confdata; /* machine dependend, configuration/setup data */
|
||||
/*
|
||||
* Also; the strict cpu-dependent information is set up here, in
|
||||
* form of a pointer to a struct that is specific for each cpu.
|
||||
*/
|
||||
extern struct cpu_dep ka780_calls;
|
||||
extern struct cpu_dep ka750_calls;
|
||||
extern struct cpu_dep ka860_calls;
|
||||
extern struct cpu_dep ka820_calls;
|
||||
extern struct cpu_dep ka43_calls;
|
||||
extern struct cpu_dep ka410_calls;
|
||||
extern struct cpu_dep ka630_calls;
|
||||
extern struct cpu_dep ka650_calls;
|
||||
|
||||
/*
|
||||
* Start is called from boot; the first routine that is called
|
||||
@ -153,18 +165,21 @@ tokmem: movw $0xfff, _panic
|
||||
case VAX_TYP_780:
|
||||
vax_bustype = VAX_SBIBUS | VAX_CPUBUS;
|
||||
vax_boardtype = VAX_BTYP_780;
|
||||
dep_call = &ka780_calls;
|
||||
break;
|
||||
#endif
|
||||
#if VAX750
|
||||
case VAX_TYP_750:
|
||||
vax_bustype = VAX_CMIBUS | VAX_CPUBUS;
|
||||
vax_boardtype = VAX_BTYP_750;
|
||||
dep_call = &ka750_calls;
|
||||
break;
|
||||
#endif
|
||||
#if VAX8600
|
||||
case VAX_TYP_790:
|
||||
vax_bustype = VAX_CPUBUS | VAX_MEMBUS;
|
||||
vax_boardtype = VAX_BTYP_790;
|
||||
dep_call = &ka860_calls;
|
||||
break;
|
||||
#endif
|
||||
#if VAX630 || VAX650 || VAX410 || VAX43
|
||||
@ -175,17 +190,32 @@ tokmem: movw $0xfff, _panic
|
||||
vax_boardtype = (vax_cputype<<24) | ((vax_siedata>>24)&0xFF);
|
||||
|
||||
switch (vax_boardtype) {
|
||||
#if VAX410
|
||||
case VAX_BTYP_410:
|
||||
case VAX_BTYP_43:
|
||||
dep_call = &ka410_calls;
|
||||
vax_confdata = *(int *)(0x20020000);
|
||||
vax_bustype = VAX_VSBUS | VAX_CPUBUS;
|
||||
break;
|
||||
|
||||
#endif
|
||||
#if VAX43
|
||||
case VAX_BTYP_43:
|
||||
vax_confdata = *(int *)(0x20020000);
|
||||
vax_bustype = VAX_VSBUS | VAX_CPUBUS;
|
||||
dep_call = &ka43_calls;
|
||||
break;
|
||||
#endif
|
||||
#if VAX630
|
||||
case VAX_BTYP_630:
|
||||
case VAX_BTYP_650:
|
||||
dep_call = &ka630_calls;
|
||||
vax_bustype = VAX_UNIBUS | VAX_CPUBUS;
|
||||
break;
|
||||
|
||||
#endif
|
||||
#if VAX650
|
||||
case VAX_BTYP_650:
|
||||
vax_bustype = VAX_UNIBUS | VAX_CPUBUS;
|
||||
dep_call = &ka650_calls;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -196,6 +226,7 @@ tokmem: movw $0xfff, _panic
|
||||
vax_boardtype = VAX_BTYP_8000;
|
||||
vax_bustype = VAX_BIBUS;
|
||||
mastercpu = mfpr(PR_BINID);
|
||||
dep_call = &ka820_calls;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: machdep.c,v 1.35 1997/01/11 11:31:26 ragge Exp $ */
|
||||
/* $NetBSD: machdep.c,v 1.36 1997/02/19 10:04:23 ragge Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||
@ -368,7 +368,7 @@ dumpconf()
|
||||
void
|
||||
cpu_initclocks()
|
||||
{
|
||||
(cpu_calls[vax_cputype].cpu_clock) ();
|
||||
(*dep_call->cpu_clock) ();
|
||||
}
|
||||
|
||||
int
|
||||
@ -641,9 +641,9 @@ void
|
||||
machinecheck(frame)
|
||||
caddr_t frame;
|
||||
{
|
||||
if ((*cpu_calls[vax_cputype].cpu_mchk) (frame) == 0)
|
||||
if ((*dep_call->cpu_mchk) (frame) == 0)
|
||||
return;
|
||||
(*cpu_calls[vax_cputype].cpu_memerr) ();
|
||||
(*dep_call->cpu_memerr) ();
|
||||
panic("machine check");
|
||||
}
|
||||
|
||||
@ -791,5 +791,5 @@ process_sstep(p, sstep)
|
||||
void
|
||||
cmrerr()
|
||||
{
|
||||
(*cpu_calls[vax_cputype].cpu_memerr) ();
|
||||
(*dep_call->cpu_memerr) ();
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: pmap.c,v 1.31 1997/02/12 17:53:01 ragge Exp $ */
|
||||
/* $NetBSD: pmap.c,v 1.32 1997/02/19 10:04:25 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
@ -240,7 +240,7 @@ pmap_bootstrap()
|
||||
bcopy(0, (void *)avail_start, NBPG >> 1);
|
||||
mtpr(avail_start, PR_SCBB);
|
||||
bzero(0, NBPG >> 1);
|
||||
(cpu_calls[vax_cputype].cpu_steal_pages)();
|
||||
(*dep_call->cpu_steal_pages)();
|
||||
avail_start = ROUND_PAGE(avail_start);
|
||||
virtual_avail = ROUND_PAGE(virtual_avail);
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
/* $NetBSD: uvax.c,v 1.3 1996/10/13 03:36:03 christos Exp $ */
|
||||
/* $NetBSD: uvax.c,v 1.4 1997/02/19 10:04:27 ragge Exp $ */
|
||||
/*
|
||||
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Ludd by Bertram Barth.
|
||||
* Copyright (c) 1982, 1988, 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -15,8 +14,8 @@
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed at Ludd, University of
|
||||
* Lule}, Sweden and its contributors.
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
@ -50,151 +49,7 @@
|
||||
#include <machine/pmap.h>
|
||||
#include <machine/nexus.h>
|
||||
#include <machine/uvax.h>
|
||||
|
||||
#define xtrace(x)
|
||||
#define xdebug(x)
|
||||
|
||||
|
||||
struct uvax_calls guc; /* Generic uVAX Calls */
|
||||
/* struct uvax_calls *ucp = &guc; /* not yet public !!! */
|
||||
static int uvax_callsSetup = 0; /* not yet setup */
|
||||
|
||||
u_long uVAX_phys2virt __P((u_long, struct uc_map *));
|
||||
|
||||
/* u_long uVAX_physmap; /* XXX another ugly hack... */
|
||||
int
|
||||
uvax_notavail(s)
|
||||
char *s;
|
||||
{
|
||||
printf("\"%s()\" not available for uVAX (%s)\n", s, guc.uc_name);
|
||||
/*
|
||||
* should we panic() here???
|
||||
*/
|
||||
return(0);
|
||||
}
|
||||
|
||||
int
|
||||
uvax_setup(flags)
|
||||
int flags;
|
||||
{
|
||||
/*
|
||||
* insert some defaults here !!!
|
||||
*/
|
||||
|
||||
/*
|
||||
* Now call the specific routines to overwrite these defaults
|
||||
*/
|
||||
switch (vax_boardtype) {
|
||||
#ifdef VAX630
|
||||
case VAX_BTYP_630:
|
||||
ka630_setup(&guc, flags);
|
||||
break;
|
||||
#endif
|
||||
#ifdef VAX410
|
||||
case VAX_BTYP_410:
|
||||
ka410_setup(&guc, flags);
|
||||
break;
|
||||
#endif
|
||||
#ifdef VAX43
|
||||
case VAX_BTYP_43:
|
||||
ka43_setup(&guc, flags);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printf("don't know how to handle 0x%x\n", vax_boardtype);
|
||||
printf("Let's try using the defaults...\n");
|
||||
}
|
||||
uvax_callsSetup = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX_steal_pages() is the first cpu/board specific function to be called.
|
||||
* Thus we use this call to setup the dispatch structure for further use.
|
||||
*
|
||||
* We should have a special setup-routine !!!
|
||||
*/
|
||||
void
|
||||
uvax_steal_pages()
|
||||
{
|
||||
if (uvax_callsSetup == 0)
|
||||
uvax_setup(0);
|
||||
|
||||
/*
|
||||
* now that specific functions are inserted, we can call 'em
|
||||
*/
|
||||
if (guc.uc_steal_pages) {
|
||||
(guc.uc_steal_pages)();
|
||||
return;
|
||||
}
|
||||
uvax_notavail("uc_steal_pages");
|
||||
}
|
||||
|
||||
u_long
|
||||
uvax_phys2virt(paddr)
|
||||
u_long paddr;
|
||||
{
|
||||
if (guc.uc_phys2virt)
|
||||
return ((guc.uc_phys2virt)(paddr));
|
||||
if (guc.uc_physmap)
|
||||
return (uVAX_phys2virt(paddr, guc.uc_physmap));
|
||||
uvax_notavail("uc_phys2virt");
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
uvax_conf(parent, self, aux)
|
||||
struct device *parent, *self;
|
||||
void *aux;
|
||||
{
|
||||
if (guc.uc_conf) {
|
||||
(guc.uc_conf)(parent, self, aux);
|
||||
return;
|
||||
}
|
||||
uvax_notavail("uc_conf");
|
||||
}
|
||||
|
||||
void
|
||||
uvax_memerr()
|
||||
{
|
||||
xtrace(("uvax_memerr()\n"));
|
||||
|
||||
if (guc.uc_memerr) {
|
||||
(guc.uc_memerr)();
|
||||
return;
|
||||
}
|
||||
uvax_notavail("uc_memerr");
|
||||
}
|
||||
|
||||
int
|
||||
uvax_mchk(addr)
|
||||
caddr_t addr;
|
||||
{
|
||||
xtrace(("uvax_mchk(0x%x)\n", addr));
|
||||
|
||||
if (guc.uc_mchk)
|
||||
return ((guc.uc_mchk)(addr));
|
||||
uvax_notavail("uc_mchk");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
uvax_clkread(base)
|
||||
time_t base;
|
||||
{
|
||||
if (guc.uc_clkread)
|
||||
return ((guc.uc_clkread)(base));
|
||||
uvax_notavail("uc_clkread");
|
||||
}
|
||||
|
||||
void
|
||||
uvax_clkwrite()
|
||||
{
|
||||
if (guc.uc_clkwrite)
|
||||
(guc.uc_clkwrite)();
|
||||
else
|
||||
uvax_notavail("uc_clkwrite");
|
||||
return;
|
||||
}
|
||||
#include <machine/cpu.h>
|
||||
|
||||
/*
|
||||
* NB: mapping should/must be done in chunks of PAGE_SIZE (ie. 1024),
|
||||
@ -204,46 +59,14 @@ uvax_clkwrite()
|
||||
* the end-address up to be just beyond the next multiple of PAGE_SIZE.
|
||||
* size is the number of bytes between start and end expressed in NBPG.
|
||||
*/
|
||||
int
|
||||
uVAX_old_fillmap(um)
|
||||
struct uc_map *um;
|
||||
{
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
register struct uc_map *p;
|
||||
register u_int base, end, size;
|
||||
|
||||
for (p = um; p->um_base != 0; p++) {
|
||||
base = p->um_base & ~PAGE_SIZE; /* round base down */
|
||||
end = ROUND_PAGE(p->um_end + 1) - 1; /* round end up */
|
||||
size = (end - base + 1) / NBPG; /* size in pages */
|
||||
MAPVIRT(p->um_virt, size);
|
||||
pmap_map((vm_offset_t)p->um_virt, base, end,
|
||||
VM_PROT_READ|VM_PROT_WRITE);
|
||||
|
||||
xdebug(("uVAX_fillmap: %x:%x[%x] (%x:%x[%x]) --> %x\n",
|
||||
p->um_base, p->um_end, p->um_size,
|
||||
base, end, size, p->um_virt));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* NB: mapping should/must be done in chunks of PAGE_SIZE (ie. 1024),
|
||||
* while pmap_map() expects size to be in chunks of NBPG (ie. 512).
|
||||
*
|
||||
* Thus we round down the start-address to be aligned wrt PAGE_SIZE and
|
||||
* the end-address up to be just beyond the next multiple of PAGE_SIZE.
|
||||
* size is the number of bytes between start and end expressed in NBPG.
|
||||
*/
|
||||
int
|
||||
uVAX_fillmap(um)
|
||||
struct uc_map *um;
|
||||
void
|
||||
uvax_fillmap()
|
||||
{
|
||||
extern vm_offset_t avail_start, virtual_avail, avail_end;
|
||||
register struct uc_map *p;
|
||||
register u_int base, end, off, size;
|
||||
|
||||
for (p = um; p->um_base != 0; p++) {
|
||||
for (p = dep_call->cpu_map; p->um_base != 0; p++) {
|
||||
base = TRUNC_PAGE(p->um_base); /* round base down */
|
||||
off = p->um_base - base;
|
||||
size = ROUND_PAGE(off + p->um_size);
|
||||
@ -254,34 +77,28 @@ uVAX_fillmap(um)
|
||||
end = base + size - 1;
|
||||
MAPVIRT(p->um_virt, size/NBPG);
|
||||
pmap_map((vm_offset_t)p->um_virt, base, end,
|
||||
VM_PROT_READ|VM_PROT_WRITE);
|
||||
|
||||
xdebug(("uVAX_fillmap: %x:%x[%x] (%x:%x[%x]) --> %x\n",
|
||||
p->um_base, p->um_end, p->um_size,
|
||||
base, end, size, p->um_virt));
|
||||
VM_PROT_READ|VM_PROT_WRITE);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
u_long
|
||||
uVAX_phys2virt(phys,um)
|
||||
uvax_phys2virt(phys)
|
||||
u_long phys;
|
||||
struct uc_map *um;
|
||||
{
|
||||
register struct uc_map *p;
|
||||
u_long virt = 0;
|
||||
|
||||
for (p = um; p->um_base != 0; p++) {
|
||||
for (p = dep_call->cpu_map; p->um_base != 0; p++) {
|
||||
if (p->um_base > phys || p->um_end < phys)
|
||||
continue;
|
||||
virt = p->um_virt + (phys - trunc_page(p->um_base));
|
||||
break;
|
||||
}
|
||||
|
||||
if (virt == 0) {
|
||||
printf("invalid argument 0x%x to uvax_phys2virt()\n", phys);
|
||||
/* should we panic() here ??? */
|
||||
}
|
||||
|
||||
#ifdef DIAGNOSTIC
|
||||
if (virt == 0)
|
||||
panic("invalid argument %p to uvax_phys2virt()\n", phys);
|
||||
#endif
|
||||
return (virt);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user