]> git.saurik.com Git - apple/xnu.git/blob - osfmk/i386/AT386/mp/mp.c
4ea4768278f39291f0149a234506776eb4271082
[apple/xnu.git] / osfmk / i386 / AT386 / mp / mp.c
1 /*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
7 *
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * file.
14 *
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
22 *
23 * @APPLE_LICENSE_HEADER_END@
24 */
25 /*
26 * @OSF_COPYRIGHT@
27 */
28 /*
29 * Mach Operating System
30 * Copyright (c) 1991,1990 Carnegie Mellon University
31 * All Rights Reserved.
32 *
33 * Permission to use, copy, modify and distribute this software and its
34 * documentation is hereby granted, provided that both the copyright
35 * notice and this permission notice appear in all copies of the
36 * software, derivative works or modified versions, and any portions
37 * thereof, and that both notices appear in supporting documentation.
38 *
39 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
40 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
41 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
42 *
43 * Carnegie Mellon requests users of this software to return to
44 *
45 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
46 * School of Computer Science
47 * Carnegie Mellon University
48 * Pittsburgh PA 15213-3890
49 *
50 * any improvements or extensions that they make and grant Carnegie Mellon
51 * the rights to redistribute these changes.
52 */
53
54 /*
55 */
56
57 #include <cpus.h>
58 #include <mp_v1_1.h>
59
60 #if NCPUS > 1
61
62 #include <types.h>
63 #include <mach/machine.h>
64 #include <kern/lock.h>
65 #include <kern/cpu_data.h>
66 #include <kern/processor.h>
67 #include <kern/misc_protos.h>
68 #include <kern/machine.h>
69 #include <i386/db_machdep.h>
70 #include <ddb/db_run.h>
71 #include <i386/AT386/mp/mp.h>
72 #include <i386/setjmp.h>
73 #include <i386/misc_protos.h>
74
75 int cpu_int_word[NCPUS];
76
77 extern void cpu_interrupt(int cpu);
78 extern int get_ncpus(void);
79
80 /*
81 * Generate a clock interrupt on next running cpu
82 *
83 * Instead of having the master processor interrupt
84 * all active processors, each processor in turn interrupts
85 * the next active one. This avoids all slave processors
86 * accessing the same R/W data simultaneously.
87 */
88
89 void
90 slave_clock(void)
91 {
92 }
93
94 void
95 i386_signal_cpus(int event)
96 {
97 }
98
99 /*ARGSUSED*/
100 void
101 init_ast_check(
102 processor_t processor)
103 {
104 }
105
106 void
107 cause_ast_check(
108 processor_t processor)
109 {
110 }
111
112 /*ARGSUSED*/
113 kern_return_t
114 cpu_start(
115 int slot_num)
116 {
117 printf("cpu_start not implemented\n");
118 return (KERN_FAILURE);
119 }
120
121
122 int real_ncpus;
123 int wncpu = -1;
124
125 /*
126 * Find out how many cpus will run
127 */
128
129 void
130 mp_probe_cpus(void)
131 {
132 int i;
133
134 /*
135 * get real number of cpus
136 */
137
138 real_ncpus = get_ncpus();
139
140 if (wncpu <= 0)
141 wncpu = NCPUS;
142
143 /*
144 * Ignore real number of cpus it if number of requested cpus
145 * is smaller.
146 * Keep it if number of requested cpu is null or larger.
147 */
148
149 if (real_ncpus < wncpu)
150 wncpu = real_ncpus;
151 #if MP_V1_1
152 {
153 extern void validate_cpus(int);
154
155 /*
156 * We do NOT have CPUS numbered contiguously.
157 */
158
159 validate_cpus(wncpu);
160 }
161 #else
162 for (i=0; i < wncpu; i++)
163 machine_slot[i].is_cpu = TRUE;
164 #endif
165 }
166
167 /*
168 * invoke kdb on slave processors
169 */
170
171 void
172 remote_kdb(void)
173 {
174 }
175
176 /*
177 * Clear kdb interrupt
178 */
179
180 void
181 clear_kdb_intr(void)
182 {
183 }
184 #else /* NCPUS > 1 */
185 int cpu_int_word[NCPUS];
186 #endif /* NCPUS > 1 */