1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
/* $OpenBSD: board.h,v 1.12 2013/10/09 21:28:33 miod Exp $ */
/*
* Copyright (c) 2006, 2007, Miodrag Vallat
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 SUCH DAMAGE.
*/
#ifndef _MACHINE_BOARD_H_
#define _MACHINE_BOARD_H_
#if !defined(_LOCORE)
/*
* cpuid values
*/
#define AVIION_300_310 0x7904 /* mono Maverick */
#define AVIION_5100_6100 0x7906 /* 20MHz Topgun */
#define AVIION_400_4000 0x7908 /* 16MHz Mav+ */
#define AVIION_410_4100 0x790c /* 20MHz Mav+ */
#define AVIION_300C_310C 0x7910 /* color Maverick */
#define AVIION_5200_6200 0x7912 /* 25MHz Topgun */
#define AVIION_5240_6240 0x7918 /* 25MHz Shotgun */
#define AVIION_300CD_310CD 0x7920 /* dual duart color Maverick */
#define AVIION_300D_310D 0x7924 /* dual duart mono Maverick */
#define AVIION_4600_530 0x7930 /* Rolling Rock */
#define AVIION_4300_25 0x7932 /* 25MHz Terra */
#define AVIION_4300_20 0x7934 /* 20MHz Terra */
#define AVIION_4300_16 0x7936 /* 16MHz Terra */
#define AVIION_5255_6255 0x7942 /* 25MHz Tophat */
#define AVIION_350 0x7944 /* KME */
#define AVIION_6280 0x7946 /* High Noon */
#define AVIION_8500_9500 0x794a /* Odyssey */
#define AVIION_9500_HA 0x794c /* Oz */
#define AVIION_500 0x794e /* Robin Hood */
#define AVIION_5500 0x7950 /* Schooner */
#define AVIION_450 0x7958 /* Inner Tube */
#define AVIION_8500_9500_45_1MB 0x795a /* 45MHz Iliad (1MB L2) */
#define AVIION_10000 0x7960 /* Sierra */
#define AVIION_10000_QT 0x7962 /* Sierra QT */
#define AVIION_5500PLUS 0x7964 /* Schooner+ */
#define AVIION_450PLUS 0x7966 /* Inner Tube+ */
#define AVIION_8500_9500_50_1MB 0x7968 /* 50MHz Iliad (1MB L2) */
#define AVIION_8500_9500_50_2MB 0x796a /* 50MHz Iliad (2MB L2) */
/* did the following ever hit the market? */
#define AVIION_UNKNOWN1 0x7926 /* mono Montezuma */
#define AVIION_UNKNOWN2 0x7928 /* color Montezuma */
#define AVIION_UNKNOWN3 0x7956 /* Flintstone */
#define AVIION_UNKNOWN1_DIS 0xfff0 /* mono disabled Montezuma */
#define AVIION_UNKNOWN2_DIS 0xfff1 /* color disabled Montezuma */
extern int32_t cpuid;
struct pmap_table;
struct vme_range;
struct board {
u_int (*bootstrap)(void);
vaddr_t (*memsize)(void);
void (*startup)(void);
void (*intr)(struct trapframe *);
void (*init_clocks)(void);
u_int (*getipl)(void);
u_int (*setipl)(u_int);
u_int (*raiseipl)(u_int);
#ifdef MULTIPROCESSOR
void (*send_ipi)(int, cpuid_t);
void (*smp_setup)(struct cpu_info *);
#endif
u_int32_t (*intsrc)(int);
u_int32_t (*exintsrc)(int);
const struct vme_range *(*get_vme_ranges)(void);
const struct pmap_table *ptable;
const char *default_boot;
};
#define md_interrupt_func(f) platform->intr(f)
#define DECLARE_BOARD(b) \
extern const struct board board_av##b; \
u_int av##b##_bootstrap(void); \
vaddr_t av##b##_memsize(void); \
void av##b##_startup(void); \
void av##b##_intr(struct trapframe *); \
void av##b##_init_clocks(void); \
u_int av##b##_getipl(void); \
u_int av##b##_setipl(u_int); \
u_int av##b##_raiseipl(u_int); \
void av##b##_send_ipi(int, cpuid_t); \
void av##b##_smp_setup(struct cpu_info *); \
u_int32_t av##b##_intsrc(int); \
u_int32_t av##b##_exintsrc(int); \
const struct vme_range *av##b##_get_vme_ranges(void);
DECLARE_BOARD(400);
DECLARE_BOARD(530);
DECLARE_BOARD(5000);
DECLARE_BOARD(6280);
extern const struct board *platform;/* just to have people confuse both names */
/*
* Logical values for interrupt sources.
* When adding new sources, keep INTSRC_VME as the last item - syscon
* depends on this.
*/
#define INTSRC_ABORT 1 /* abort button */
#define INTSRC_ACFAIL 2 /* AC failure */
#define INTSRC_SYSFAIL 3 /* system failure */
#define INTSRC_CLOCK 4 /* clock chip */
#define INTSRC_DUART1 5 /* console MC68692 */
#define INTSRC_DUART2 6 /* secondary MC68692 */
#define INTSRC_ETHERNET1 7 /* first on-board Ethernet */
#define INTSRC_ETHERNET2 8 /* second on-board Ethernet */
#define INTSRC_SCSI1 9 /* first on-board SCSI controller */
#define INTSRC_SCSI2 10 /* second on-board SCSI controller */
#define NINTSRC_SYSCON 11 /* total number of non-VME sources */
#define INTSRC_VME(lvl) (NINTSRC_SYSCON + (lvl) - 1) /* seven VME levels */
#define IS_VME_INTSRC(intsrc) ((intsrc) >= NINTSRC_SYSCON)
#define VME_INTSRC_LEVEL(intsrc) ((intsrc) - NINTSRC_SYSCON + 1)
void intsrc_enable(u_int, int);
void intsrc_disable(u_int);
void cio_init_clocks(void);
void rtc_init_clocks(void);
#endif /* _LOCORE */
#endif /* _MACHINE_BOARD_H_ */
|