| 1 | /*	$NetBSD: cpu.h,v 1.107 2024/02/28 13:05:40 thorpej Exp $	*/ |
| 2 | |
| 3 | /* |
| 4 | * Copyright (c) 1988 University of Utah. |
| 5 | * Copyright (c) 1982, 1990 The Regents of the University of California. |
| 6 | * All rights reserved. |
| 7 | * |
| 8 | * This code is derived from software contributed to Berkeley by |
| 9 | * the Systems Programming Group of the University of Utah Computer |
| 10 | * Science Department. |
| 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without |
| 13 | * modification, are permitted provided that the following conditions |
| 14 | * are met: |
| 15 | * 1. Redistributions of source code must retain the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer. |
| 17 | * 2. Redistributions in binary form must reproduce the above copyright |
| 18 | * notice, this list of conditions and the following disclaimer in the |
| 19 | * documentation and/or other materials provided with the distribution. |
| 20 | * 3. Neither the name of the University nor the names of its contributors |
| 21 | * may be used to endorse or promote products derived from this software |
| 22 | * without specific prior written permission. |
| 23 | * |
| 24 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| 25 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 30 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 31 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 33 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 34 | * SUCH DAMAGE. |
| 35 | */ |
| 36 | |
| 37 | /* |
| 38 | *	Copyright (c) 1992, 1993 BCDL Labs. All rights reserved. |
| 39 | *	Allen Briggs, Chris Caputo, Michael Finch, Brad Grantham, Lawrence Kesteloot |
| 40 | |
| 41 | *	Redistribution of this source code or any part thereof is permitted, |
| 42 | *	 provided that the following conditions are met: |
| 43 | *	1) Utilized source contains the copyright message above, this list |
| 44 | *	 of conditions, and the following disclaimer. |
| 45 | *	2) Binary objects containing compiled source reproduce the |
| 46 | *	 copyright notice above on startup. |
| 47 | * |
| 48 | *	CAVEAT: This source code is provided "as-is" by BCDL Labs, and any |
| 49 | *	 warranties of ANY kind are disclaimed. We don't even claim that it |
| 50 | *	 won't crash your hard disk. Basically, we want a little credit if |
| 51 | *	 it works, but we don't want to get mail-bombed if it doesn't. |
| 52 | */ |
| 53 | |
| 54 | /* |
| 55 | * from: Utah $Hdr: cpu.h 1.16 91/03/25$ |
| 56 | * |
| 57 | *	@(#)cpu.h	7.7 (Berkeley) 6/27/91 |
| 58 | */ |
| 59 | |
| 60 | #ifndef _CPU_MACHINE_ |
| 61 | #define _CPU_MACHINE_ |
| 62 | |
| 63 | #if defined(_KERNEL_OPT) |
| 64 | #include "opt_lockdebug.h" |
| 65 | #endif |
| 66 | |
| 67 | /* |
| 68 | * Get common m68k definitions. |
| 69 | */ |
| 70 | #include <m68k/cpu.h> |
| 71 | |
| 72 | /* values for machineid -- |
| 73 | * 	These are equivalent to the MacOS Gestalt values. */ |
| 74 | #define MACH_MACII		6 |
| 75 | #define MACH_MACIIX		7 |
| 76 | #define MACH_MACIICX		8 |
| 77 | #define MACH_MACSE30		9 |
| 78 | #define MACH_MACIICI		11 |
| 79 | #define MACH_MACIIFX		13 |
| 80 | #define MACH_MACIISI		18 |
| 81 | #define MACH_MACQ900		20 |
| 82 | #define MACH_MACPB170		21 |
| 83 | #define MACH_MACQ700		22 |
| 84 | #define MACH_MACCLASSICII	23 |
| 85 | #define MACH_MACPB100		24 |
| 86 | #define MACH_MACPB140		25 |
| 87 | #define MACH_MACQ950		26 |
| 88 | #define MACH_MACLCIII		27 |
| 89 | #define MACH_MACPB210		29 |
| 90 | #define MACH_MACC650		30 |
| 91 | #define MACH_MACPB230		32 |
| 92 | #define MACH_MACPB180		33 |
| 93 | #define MACH_MACPB160		34 |
| 94 | #define MACH_MACQ800		35 |
| 95 | #define MACH_MACQ650		36 |
| 96 | #define MACH_MACLCII		37 |
| 97 | #define MACH_MACPB250		38 |
| 98 | #define MACH_MACIIVI		44 |
| 99 | #define MACH_MACP600		45 |
| 100 | #define MACH_MACIIVX		48 |
| 101 | #define MACH_MACCCLASSIC	49 |
| 102 | #define MACH_MACPB165C		50 |
| 103 | #define MACH_MACC610		52 |
| 104 | #define MACH_MACQ610		53 |
| 105 | #define MACH_MACPB145		54 |
| 106 | #define MACH_MACLC520		56 |
| 107 | #define MACH_MACC660AV		60 |
| 108 | #define MACH_MACP460		62 |
| 109 | #define MACH_MACPB180C		71 |
| 110 | #define	MACH_MACPB500		72 |
| 111 | #define MACH_MACPB270		77 |
| 112 | #define MACH_MACQ840AV		78 |
| 113 | #define MACH_MACP550		80 |
| 114 | #define MACH_MACCCLASSICII	83 |
| 115 | #define MACH_MACPB165		84 |
| 116 | #define MACH_MACPB190CS		85 |
| 117 | #define MACH_MACTV		88 |
| 118 | #define MACH_MACLC475		89 |
| 119 | #define MACH_MACLC475_33	90 |
| 120 | #define MACH_MACLC575		92 |
| 121 | #define MACH_MACQ605		94 |
| 122 | #define MACH_MACQ605_33		95 |
| 123 | #define MACH_MACQ630		98 |
| 124 | #define	MACH_MACP580		99 |
| 125 | #define MACH_MACPB280		102 |
| 126 | #define MACH_MACPB280C		103 |
| 127 | #define MACH_MACPB150		115 |
| 128 | #define MACH_MACPB190		122 |
| 129 | |
| 130 | /* |
| 131 | * Machine classes. These define subsets of the above machines. |
| 132 | */ |
| 133 | #define MACH_CLASSH	0x0000	/* Hopeless cases... */ |
| 134 | #define MACH_CLASSII	0x0001	/* MacII class */ |
| 135 | #define MACH_CLASSIIci	0x0004	/* Have RBV, but no Egret */ |
| 136 | #define MACH_CLASSIIsi	0x0005	/* Similar to IIci -- Have Egret. */ |
| 137 | #define MACH_CLASSIIvx	0x0006	/* Similar to IIsi -- different via2 emul? */ |
| 138 | #define MACH_CLASSLC	0x0007	/* Low-Cost/Performa/Wal-Mart Macs. */ |
| 139 | #define MACH_CLASSPB	0x0008	/* Powerbooks. Power management. */ |
| 140 | #define MACH_CLASSDUO	0x0009	/* Powerbooks Duos. More integration/Docks. */ |
| 141 | #define MACH_CLASSIIfx	0x0080	/* The IIfx is in a class by itself. */ |
| 142 | #define MACH_CLASSQ	0x0100	/* non-A/V Centris/Quadras. */ |
| 143 | #define MACH_CLASSAV	0x0101	/* A/V Centris/Quadras. */ |
| 144 | #define MACH_CLASSQ2	0x0102	/* More Centris/Quadras, different sccA. */ |
| 145 | #define MACH_CLASSP580	0x0103	/* Similar to Quadras, but not quite.. */ |
| 146 | |
| 147 | #define MACH_68020	0 |
| 148 | #define MACH_68030	1 |
| 149 | #define MACH_68040	2 |
| 150 | #define MACH_PENTIUM	3	/* 66 and 99 MHz versions *only* */ |
| 151 | |
| 152 | #ifdef _KERNEL |
| 153 | struct mac68k_machine_S { |
| 154 | 	int			cpu_model_index; |
| 155 | 	/* |
| 156 | 	 * Misc. info from booter. |
| 157 | 	 */ |
| 158 | 	int			machineid; |
| 159 | 	int			mach_processor; |
| 160 | 	int			mach_memsize; |
| 161 | 	int			booter_version; |
| 162 | 	/* |
| 163 | 	 * Debugging flags. |
| 164 | 	 */ |
| 165 | 	int			do_graybars; |
| 166 | 	int			serial_boot_echo; |
| 167 | 	int			serial_console; |
| 168 | |
| 169 | 	int			zs_chip;	/* what type of chip we've got */ |
| 170 | 	int			modem_flags; |
| 171 | 	int			modem_cts_clk; |
| 172 | 	int			modem_dcd_clk; |
| 173 | 	int			modem_d_speed; |
| 174 | 	int			print_flags; |
| 175 | 	int			print_cts_clk; |
| 176 | 	int			print_dcd_clk; |
| 177 | 	int			print_d_speed; |
| 178 | 	/* |
| 179 | 	 * Misc. hardware info. |
| 180 | 	 */ |
| 181 | 	int			scsi80;		/* Has NCR 5380 */ |
| 182 | 	int			scsi96;		/* Has NCR 53C96 */ |
| 183 | 	int			scsi96_2;	/* Has 2nd 53C96 */ |
| 184 | 	int			sonic;		/* Has SONIC e-net */ |
| 185 | |
| 186 | 	int			via1_ipl; |
| 187 | 	int			via2_ipl; |
| 188 | 	int			aux_interrupts; |
| 189 | }; |
| 190 | |
| 191 | 	/* What kind of model is this */ |
| 192 | struct cpu_model_info { |
| 193 | 	int	machineid;	/* MacOS Gestalt value. */ |
| 194 | 	const char	*model_major;	/* Make this distinction to save a few */ |
| 195 | 	const char	*model_minor;	/* bytes--might be useful, too. */ |
| 196 | 	int	class;		/* Rough class of machine. */ |
| 197 | 	 /* forwarded romvec_s is defined in mac68k/macrom.h */ |
| 198 | 	struct romvec_s *rom_vectors; /* Pointer to our known rom vectors */ |
| 199 | }; |
| 200 | extern struct cpu_model_info *current_mac_model; |
| 201 | |
| 202 | extern unsigned long		IOBase;		/* Base address of I/O */ |
| 203 | extern unsigned long		NuBusBase;	/* Base address of NuBus */ |
| 204 | |
| 205 | extern struct mac68k_machine_S	mac68k_machine; |
| 206 | extern	unsigned long		load_addr; |
| 207 | #endif /* _KERNEL */ |
| 208 | |
| 209 | /* physical memory sections */ |
| 210 | #define	ROMBASE		(0x40800000) |
| 211 | #define	ROMLEN		(0x00200000)		/* 2MB will work for all 68k */ |
| 212 | #define	ROMMAPSIZE	btoc(ROMLEN)		/* 32k of page tables. */ |
| 213 | |
| 214 | #define IIOMAPSIZE	btoc(0x00100000)	/* 1MB should be enough */ |
| 215 | |
| 216 | /* XXX -- Need to do something about superspace. |
| 217 | * Technically, NuBus superspace starts at 0x60000000, but no |
| 218 | * known Macintosh has used any slot lower numbered than 9, and |
| 219 | * the super space is defined as 0xS000 0000 through 0xSFFF FFFF |
| 220 | * where S is the slot number--ranging from 0x9 - 0xE. |
| 221 | */ |
| 222 | #define	NBSBASE		0x90000000 |
| 223 | #define	NBSTOP		0xF0000000 |
| 224 | #define NBBASE		0xF9000000	/* NUBUS space */ |
| 225 | #define NBTOP		0xFF000000	/* NUBUS space */ |
| 226 | #define NBMAPSIZE	btoc(NBTOP-NBBASE)	/* ~ 96 megs */ |
| 227 | #define NBMEMSIZE	0x01000000	/* 16 megs per card */ |
| 228 | #define NBROMOFFSET	0x00FF0000	/* Last 64K == ROM */ |
| 229 | |
| 230 | #ifdef _KERNEL |
| 231 | |
| 232 | /* machdep.c */ |
| 233 | void	mac68k_set_bell_callback(int (*)(void *, int, int, int), void *); |
| 234 | int	mac68k_ring_bell(int, int, int); |
| 235 | u_int	get_mapping(void); |
| 236 | |
| 237 | /* fpu.c */ |
| 238 | void	initfpu(void); |
| 239 | |
| 240 | #endif |
| 241 | |
| 242 | #endif	/* _CPU_MACHINE_ */ |