* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* 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 by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)cpudata.c 7.7 (Berkeley) 5/9/91
#include "../include/pte.h"
#include "../include/cpu.h"
#include "../uba/ubareg.h"
* Initialization of per-cpu data structures.
* These are the (fixed) physical addresses of the
* unibus memory for each of the possible unibus adapters.
* Note that on some machines the unibus memory addresses
* are actually indexed by the unibus adapter type code.
caddr_t umaddr8600a
[4] = {
(caddr_t
) UMEMA8600(0), (caddr_t
) UMEMA8600(1),
(caddr_t
) UMEMA8600(2), (caddr_t
) UMEMA8600(3),
caddr_t umaddr8600b
[4] = {
(caddr_t
) UMEMB8600(0), (caddr_t
) UMEMB8600(1),
(caddr_t
) UMEMB8600(2), (caddr_t
) UMEMB8600(3),
(caddr_t
) UMEM780(0), (caddr_t
) UMEM780(1),
(caddr_t
) UMEM780(2), (caddr_t
) UMEM780(3)
(caddr_t
) UMEM750(0), (caddr_t
) UMEM750(1),
* Information to patch around the stupidity of configuration
* registers not returning types on some of the processors.
short nexty750
[NNEX750
] = {
NEX_MEM16
, NEX_MEM16
, NEX_MEM16
, NEX_MEM16
,
NEX_MBA
, NEX_MBA
, NEX_MBA
, NEX_MBA
,
NEX_UBA0
, NEX_UBA1
, NEX_ANY
, NEX_ANY
,
NEX_ANY
, NEX_ANY
, NEX_ANY
, NEX_ANY
short nexty730
[NNEX730
] = {
NEX_MEM16
, NEX_ANY
, NEX_ANY
, NEX_ANY
,
NEX_ANY
, NEX_ANY
, NEX_ANY
, NEX_ANY
,
/* I think this is how the thing is shaped: */
struct bibus bi8800
[] = {
{ IO_BIA
, somewhere
, somesize
, (caddr_t
)&bi8800
[0] },
{ IO_BIA
, somewhere
, somesize
, (caddr_t
)&bi8800
[1] },
/* but you will have to make it work yourself (sorry) */
struct nexusconnect sbi8600
[] = {
{ NNEX8600
, NEXA8600
, DW780
, NBDP8600
, umaddr8600a
, 0 },
{ NNEX8600
, NEXB8600
, DW780
, NBDP8600
, umaddr8600b
, 0 },
struct iobus io8600
[] = {
{ IO_ABUS
, IOA8600(0), IOAMAPSIZ
, (caddr_t
)&sbi8600
[0] },
{ IO_ABUS
, IOA8600(1), IOAMAPSIZ
, (caddr_t
)&sbi8600
[1] },
/* BEWARE, this is all limited to one BI for now */
struct bibus bi8200
[] = {
struct iobus io8200
[] = {
{ IO_BI
, 0, 0, (caddr_t
)&bi8200
[0] },
struct nexusconnect sbi780
= {
NNEX780
, NEX780
, DW780
, NBDP780
, umaddr780
, 0,
struct iobus io780
[] = { IO_SBI780
, 0, 0, (caddr_t
)&sbi780
};
struct nexusconnect cmi750
= {
NNEX750
, NEX750
, DW750
, NBDP750
, umaddr750
, nexty750
,
struct iobus io750
[] = { IO_CMI750
, 0, 0, (caddr_t
)&cmi750
};
struct nexusconnect xxx730
= {
NNEX730
, NEX730
, DW730
, NBDP730
, umaddr730
, nexty730
,
struct iobus io730
[] = { IO_XXX730
, 0, 0, (caddr_t
)&xxx730
};
QBA
, QBAPAGES
, QBAMAP630
, (caddr_t
)QMEM630
, (caddr_t
)QIOPAGE630
struct iobus io630
[] = { IO_QBUS
, 0, 0, (caddr_t
)&qbus630
};
#if VAX8600 || VAX780 || VAX750 || VAX730
int vaxstd_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite();
struct clockops vaxstd_clockops
= {
vaxstd_clkstartrt
, vaxstd_clkread
, vaxstd_clkwrite
int vaxstd_clkstartrt(), ka820_clkread(), ka820_clkwrite();
struct clockops ka820_clockops
= {
vaxstd_clkstartrt
, ka820_clkread
, ka820_clkwrite
int ka630_clkstartrt(), ka630_clkread(), ka630_clkwrite();
struct clockops ka630_clockops
= {
ka630_clkstartrt
, ka630_clkread
, ka630_clkwrite
int ka650_clkstartrt(), vaxstd_clkread(), vaxstd_clkwrite();
struct clockops ka650_clockops
= {
ka650_clkstartrt
, vaxstd_clkread
, vaxstd_clkwrite
* CPU dependent routines.
int ka860_memenable(), ka860_memerr(), ka860_mchk();
struct cpuops ka860_ops
= {
&vaxstd_clockops
, ka860_memenable
, ka860_memerr
, ka860_mchk
, NULL
int ka820_memenable(), ka820_memerr(), ka820_mchk(), ka820_init();
struct cpuops ka820_ops
= {
&ka820_clockops
, ka820_memenable
, ka820_memerr
, ka820_mchk
, ka820_init
int ka780_memenable(), ka780_memerr(), ka780_mchk();
struct cpuops ka780_ops
= {
&vaxstd_clockops
, ka780_memenable
, ka780_memerr
, ka780_mchk
, NULL
int ka750_memenable(), ka750_memerr(), ka750_mchk();
struct cpuops ka750_ops
= {
&vaxstd_clockops
, ka750_memenable
, ka750_memerr
, ka750_mchk
, NULL
int ka730_memenable(), ka730_memerr(), ka730_mchk();
struct cpuops ka730_ops
= {
&vaxstd_clockops
, ka730_memenable
, ka730_memerr
, ka730_mchk
, NULL
int ka630_memnop(), ka630_mchk(), ka630_init();
struct cpuops ka630_ops
= {
&ka630_clockops
, ka630_memnop
, ka630_memnop
, ka630_mchk
, ka630_init
int ka650_memnop(), ka650_memerr(), ka650_mchk(), ka650_init();
struct cpuops ka650_ops
= {
&ka650_clockops
, ka650_memnop
, ka650_memerr
, ka650_mchk
, ka650_init
struct percpu percpu
[] = {
{ VAX_8600
, 6, 2, io8600
, &ka860_ops
},
{ VAX_8200
, 2, 1, io8200
, &ka820_ops
},
{ VAX_780
, 2, 1, io780
, &ka780_ops
},
{ VAX_750
, 1, 1, io750
, &ka750_ops
},
{ VAX_730
, 1, 1, io730
, &ka730_ops
},
{ VAX_630
, 2, 1, io630
, &ka630_ops
},
{ VAX_650
, 4, 1, io630
, &ka650_ops
},