summaryrefslogtreecommitdiff
path: root/sys/arch/mac68k/include/cpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mac68k/include/cpu.h')
-rw-r--r--sys/arch/mac68k/include/cpu.h222
1 files changed, 170 insertions, 52 deletions
diff --git a/sys/arch/mac68k/include/cpu.h b/sys/arch/mac68k/include/cpu.h
index a467e5f16d4..c8b7cfdb594 100644
--- a/sys/arch/mac68k/include/cpu.h
+++ b/sys/arch/mac68k/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.18 1998/03/01 00:37:36 niklas Exp $ */
+/* $OpenBSD: cpu.h,v 1.19 1998/05/03 07:10:44 gene Exp $ */
/* $NetBSD: cpu.h,v 1.45 1997/02/10 22:13:40 scottr Exp $ */
/*
@@ -41,9 +41,8 @@
/*
* Copyright (c) 1992, 1993 BCDL Labs. All rights reserved.
- * Allen Briggs, Chris Caputo, Michael Finch, Brad Grantham,
- * Lawrence Kesteloot
- *
+ * Allen Briggs, Chris Caputo, Michael Finch, Brad Grantham, Lawrence Kesteloot
+
* Redistribution of this source code or any part thereof is permitted,
* provided that the following conditions are met:
* 1) Utilized source contains the copyright message above, this list
@@ -63,8 +62,12 @@
* @(#)cpu.h 7.7 (Berkeley) 6/27/91
*/
-#ifndef _MAC68K_CPU_H_
-#define _MAC68K_CPU_H_
+#ifndef _CPU_MACHINE_
+#define _CPU_MACHINE_
+
+/*
+ * Exported definitions unique to mac68k/68k cpu support.
+ */
#include <machine/pcb.h>
@@ -75,25 +78,27 @@
#define M68K_MMU_MOTOROLA
/*
+ * Get interrupt glue.
+ */
+#include <machine/intr.h>
+
+/*
* definitions of cpu-dependent requirements
* referenced in generic code
*/
#define cpu_swapin(p) /* nothing */
#define cpu_wait(p) /* nothing */
#define cpu_swapout(p) /* nothing */
-void cpu_set_kpc __P((struct proc *, void (*)(struct proc *)));
/*
- * Arguments to hardclock, softclock and gatherstats
- * encapsulate the previous machine state in an opaque
- * clockframe; for hp300, use just what the hardware
- * leaves on the stack.
+ * Arguments to hardclock and gatherstats encapsulate the previous
+ * machine state in an opaque clockframe. One the hp300, we use
+ * what the hardware pushes on an interrupt (frame format 0).
*/
-
struct clockframe {
- u_short sr;
- u_long pc;
- u_short vo;
+ u_short sr; /* sr at time of interrupt */
+ u_long pc; /* pc at time of interrupt */
+ u_short vo; /* vector offset (4-word frame) */
};
#define CLKF_USERMODE(framep) (((framep)->sr & PSL_S) == 0)
@@ -105,6 +110,7 @@ struct clockframe {
* Preempt the current process if in interrupt from user mode,
* or after the current trap/syscall if in system mode.
*/
+extern int want_resched; /* resched() was called */
#define need_resched() { want_resched++; aston(); }
/*
@@ -120,34 +126,9 @@ struct clockframe {
*/
#define signotify(p) aston()
+extern int astpending; /* need to trap before returning to user mode */
#define aston() (astpending++)
-int astpending; /* need to trap before returning to user mode */
-int want_resched; /* resched() was called */
-
-/*
- * simulated software interrupt register
- */
-extern volatile u_int8_t ssir;
-
-#define SIR_NET 0x01
-#define SIR_CLOCK 0x02
-#define SIR_SERIAL 0x04
-
-/* Mac-specific SSIR(s) */
-#define SIR_DTMGR 0x80
-
-#define siroff(mask) \
- __asm __volatile ( "andb %0,_ssir" : : "ir" (~(mask) & 0xff));
-#define setsoftnet() \
- __asm __volatile ( "orb %0,_ssir" : : "i" (SIR_NET))
-#define setsoftclock() \
- __asm __volatile ( "orb %0,_ssir" : : "i" (SIR_CLOCK))
-#define setsoftserial() \
- __asm __volatile ( "orb %0,_ssir" : : "i" (SIR_SERIAL))
-#define setsoftdtmgr() \
- __asm __volatile ( "orb %0,_ssir" : : "i" (SIR_DTMGR))
-
#define CPU_CONSDEV 1
#define CPU_MAXID 2
@@ -156,12 +137,144 @@ extern volatile u_int8_t ssir;
{ "console_device", CTLTYPE_STRUCT }, \
}
+/* values for machineid --
+ * These are equivalent to the MacOS Gestalt values. */
+#define MACH_MACII 6
+#define MACH_MACIIX 7
+#define MACH_MACIICX 8
+#define MACH_MACSE30 9
+#define MACH_MACIICI 11
+#define MACH_MACIIFX 13
+#define MACH_MACIISI 18
+#define MACH_MACQ900 20
+#define MACH_MACPB170 21
+#define MACH_MACQ700 22
+#define MACH_MACCLASSICII 23
+#define MACH_MACPB100 24
+#define MACH_MACPB140 25
+#define MACH_MACQ950 26
+#define MACH_MACLCIII 27
+#define MACH_MACPB210 29
+#define MACH_MACC650 30
+#define MACH_MACPB230 32
+#define MACH_MACPB180 33
+#define MACH_MACPB160 34
+#define MACH_MACQ800 35
+#define MACH_MACQ650 36
+#define MACH_MACLCII 37
+#define MACH_MACPB250 38
+#define MACH_MACIIVI 44
+#define MACH_MACP600 45
+#define MACH_MACIIVX 48
+#define MACH_MACCCLASSIC 49
+#define MACH_MACPB165C 50
+#define MACH_MACC610 52
+#define MACH_MACQ610 53
+#define MACH_MACPB145 54
+#define MACH_MACLC520 56
+#define MACH_MACC660AV 60
+#define MACH_MACP460 62
+#define MACH_MACPB180C 71
+#define MACH_MACPB500 72
+#define MACH_MACPB270 77
+#define MACH_MACQ840AV 78
+#define MACH_MACP550 80
+#define MACH_MACCCLASSICII 83
+#define MACH_MACPB165 84
+#define MACH_MACTV 88
+#define MACH_MACLC475 89
+#define MACH_MACLC475_33 90
+#define MACH_MACLC575 92
+#define MACH_MACQ605 94
+#define MACH_MACQ605_33 95
+#define MACH_MACQ630 98
+#define MACH_MACP580 99
+#define MACH_MACPB280 102
+#define MACH_MACPB280C 103
+#define MACH_MACPB150 115
+
+/*
+ * Machine classes. These define subsets of the above machines.
+ */
+#define MACH_CLASSH 0x0000 /* Hopeless cases... */
+#define MACH_CLASSII 0x0001 /* MacII class */
+#define MACH_CLASSIIci 0x0004 /* Have RBV, but no Egret */
+#define MACH_CLASSIIsi 0x0005 /* Similar to IIci -- Have Egret. */
+#define MACH_CLASSIIvx 0x0006 /* Similar to IIsi -- different via2 emul? */
+#define MACH_CLASSLC 0x0007 /* Low-Cost/Performa/Wal-Mart Macs. */
+#define MACH_CLASSPB 0x0008 /* Powerbooks. Power management. */
+#define MACH_CLASSDUO 0x0009 /* Powerbooks Duos. More integration/Docks. */
+#define MACH_CLASSIIfx 0x0080 /* The IIfx is in a class by itself. */
+#define MACH_CLASSQ 0x0100 /* non-A/V Centris/Quadras. */
+#define MACH_CLASSAV 0x0101 /* A/V Centris/Quadras. */
+#define MACH_CLASSQ2 0x0102 /* More Centris/Quadras, different sccA. */
+#define MACH_CLASSP580 0x0103 /* Similar to Quadras, but not quite.. */
+
+#define MACH_68020 0
+#define MACH_68030 1
+#define MACH_68040 2
+#define MACH_PENTIUM 3 /* 66 and 99 MHz versions *only* */
+
+#ifdef _KERNEL
+struct mac68k_machine_S {
+ int cpu_model_index;
+ /*
+ * Misc. info from booter.
+ */
+ int machineid;
+ int mach_processor;
+ int mach_memsize;
+ int booter_version;
+ /*
+ * Debugging flags.
+ */
+ int do_graybars;
+ int serial_boot_echo;
+ int serial_console;
+
+ int zs_chip; /* what type of chip we've got */
+ int sccClkConst; /* Compatibility information */
+ int modem_flags;
+ int modem_cts_clk;
+ int modem_dcd_clk;
+ int modem_d_speed;
+ int print_flags;
+ int print_cts_clk;
+ int print_dcd_clk;
+ int print_d_speed;
+ /*
+ * Misc. hardware info.
+ */
+ int scsi80; /* Has NCR 5380 */
+ int scsi96; /* Has NCR 53C96 */
+ int scsi96_2; /* Has 2nd 53C96 */
+ int sonic; /* Has SONIC e-net */
+};
+
+ /* What kind of model is this */
+struct cpu_model_info {
+ int machineid; /* MacOS Gestalt value. */
+ char *model_major; /* Make this distinction to save a few */
+ char *model_minor; /* bytes--might be useful, too. */
+ int class; /* Rough class of machine. */
+ /* forwarded romvec_s is defined in mac68k/macrom.h */
+ struct romvec_s *rom_vectors; /* Pointer to our known rom vectors */
+};
+extern struct cpu_model_info *current_mac_model;
+
+extern unsigned long IOBase; /* Base address of I/O */
+extern unsigned long NuBusBase; /* Base address of NuBus */
+
+extern struct mac68k_machine_S mac68k_machine;
+extern unsigned long load_addr;
+#endif /* _KERNEL */
+
/* physical memory sections */
#define ROMBASE (0x40800000)
-#define ROMLEN (0x00200000) /* 2MB should be enough! */
+#define ROMLEN (0x00200000) /* 2MB will work for all 68k */
#define ROMMAPSIZE btoc(ROMLEN) /* 32k of page tables. */
-#define IIOMAPSIZE btoc(0x00100000)
+#define IIOMAPSIZE btoc(0x00100000) /* 1MB should be enough */
/* XXX -- Need to do something about superspace.
* Technically, NuBus superspace starts at 0x60000000, but no
@@ -175,8 +288,14 @@ extern volatile u_int8_t ssir;
#define NBTOP 0xFF000000 /* NUBUS space */
#define NBMAPSIZE btoc(NBTOP-NBBASE) /* ~ 96 megs */
#define NBMEMSIZE 0x01000000 /* 16 megs per card */
+#define NBROMOFFSET 0x00FF0000 /* Last 64K == ROM */
+
+#ifdef _KERNEL
+
+struct frame;
+struct fpframe;
+struct pcb;
-__BEGIN_DECLS
/* machdep.c */
void mac68k_set_bell_callback __P((int (*)(void *, int, int, int), void *));
int mac68k_ring_bell __P((int, int, int));
@@ -185,29 +304,28 @@ u_int get_mapping __P((void));
/* locore.s */
void m68881_restore __P((struct fpframe *));
void m68881_save __P((struct fpframe *));
-u_int getsfc __P((void));
-u_int getdfc __P((void));
+u_int getsfc __P((void));
+u_int getdfc __P((void));
void TBIA __P((void));
void TBIAS __P((void));
void TBIS __P((vm_offset_t));
void DCFP __P((vm_offset_t));
void ICPP __P((vm_offset_t));
void DCIU __P((void));
+void DCIS __P((void));
void ICIA __P((void));
void DCFL __P((vm_offset_t));
int suline __P((caddr_t, caddr_t));
void savectx __P((struct pcb *));
void proc_trampoline __P((void));
-/* pmap.c */
-vm_offset_t pmap_map __P((vm_offset_t, vm_offset_t, vm_offset_t, int));
-
/* trap.c */
-void child_return __P((struct proc *, struct frame));
+void child_return __P((struct proc *, struct frame));
/* vm_machdep.c */
void physaccess __P((caddr_t, caddr_t, register int, register int));
+void physunaccess __P((caddr_t, register int));
-__END_DECLS
+#endif
-#endif /* _MAC68K_CPU_H_ */
+#endif /* _CPU_MACHINE_ */