xref: /csrg-svn/sys/vax/include/cpu.h (revision 24887)
1 /*
2  * Copyright (c) 1982 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)cpu.h	6.5 (Berkeley) 09/17/85
7  */
8 
9 #ifndef LOCORE
10 /*
11  * Cpu identification, from SID register.
12  */
13 union cpusid {
14 	int	cpusid;
15 	struct cpuany {
16 		u_int	:24,
17 			cp_type:8;
18 	} cpuany;
19 	struct cpu8600 {
20 		u_int	cp_sno:12,		/* serial number */
21 			cp_plant:4,		/* plant number */
22 			cp_eco:8,		/* eco level */
23 			cp_type:8;		/* VAX_8600 */
24 	} cpu8600;
25 	struct cpu780 {
26 		u_int	cp_sno:12,		/* serial number */
27 			cp_plant:3,		/* plant number */
28 			cp_eco:9,		/* eco level */
29 			cp_type:8;		/* VAX_780 */
30 	} cpu780;
31 	struct cpu750 {
32 		u_int	cp_hrev:8,		/* hardware rev level */
33 			cp_urev:8,		/* ucode rev level */
34 			:8,
35 			cp_type:8;		/* VAX_750 */
36 	} cpu750;
37 	struct cpu730 {
38 		u_int	:8,			/* reserved */
39 			cp_urev:8,		/* ucode rev level */
40 			:8,			/* reserved */
41 			cp_type:8;		/* VAX_730 */
42 	} cpu730;
43 };
44 #endif
45 #define	VAX_780		1
46 #define	VAX_750		2
47 #define	VAX_730		3
48 #define VAX_8600	4
49 
50 #define	VAX_MAX		4
51 
52 #ifndef LOCORE
53 /*
54  * Per-cpu information for system.
55  */
56 struct	percpu {
57 	short	pc_cputype;		/* cpu type code */
58 	short	pc_cpuspeed;		/* relative speed of cpu */
59 	short	pc_nioa;		/* number of IO adaptors/SBI's */
60 	caddr_t	*pc_ioaaddr;		/* phys addresses of IO adaptors */
61 	int	pc_ioasize;		/* size of an IO adaptor */
62 	short	*pc_ioatype;		/* io adaptor types if no cfg reg */
63 };
64 
65 struct persbi {
66 	short	psb_nnexus;		/* number of nexus slots */
67 	struct	nexus *psb_nexbase;	/* base of nexus space */
68 /* we should be able to have just one address for the unibus memories */
69 /* and calculate successive addresses by adding to the base, but the 750 */
70 /* doesn't obey the sensible rule: uba1 has a lower address than uba0! */
71 	caddr_t	*psb_umaddr;		/* unibus memory addresses */
72 	short	psb_nubabdp;		/* number of bdp's per uba */
73 	short	psb_haveubasr;		/* have uba status register */
74 /* the 750 has some slots which don't promise to tell you their types */
75 /* if this pointer is non-zero, then you get the type from this array */
76 /* rather than from the (much more sensible) low byte of the config register */
77 	short	*psb_nextype;		/* botch */
78 };
79 
80 #ifdef KERNEL
81 int	cpu;
82 struct	percpu percpu[];
83 #if VAX730
84 struct persbi xxx730;
85 #endif
86 #if VAX750
87 struct persbi cmi750;
88 #endif
89 #if VAX780
90 struct persbi sbi780;
91 #endif
92 #if VAX8600
93 struct persbi sbi8600[];
94 #endif
95 #endif
96 #endif
97