]> git.saurik.com Git - apple/xnu.git/blob - bsd/dev/i386/kern_machdep.c
dab7011e0ab663d17c422db3c204250d49790129
[apple/xnu.git] / bsd / dev / i386 / kern_machdep.c
1 /*
2 * Copyright (c) 2006 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_OSREFERENCE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the
10 * License may not be used to create, or enable the creation or
11 * redistribution of, unlawful or unlicensed copies of an Apple operating
12 * system, or to circumvent, violate, or enable the circumvention or
13 * violation of, any terms of an Apple operating system software license
14 * agreement.
15 *
16 * Please obtain a copy of the License at
17 * http://www.opensource.apple.com/apsl/ and read it before using this
18 * file.
19 *
20 * The Original Code and all software distributed under the License are
21 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
22 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
23 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
25 * Please see the License for the specific language governing rights and
26 * limitations under the License.
27 *
28 * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
29 */
30 /*
31 * Copyright (C) 1990, NeXT, Inc.
32 *
33 * File: next/kern_machdep.c
34 * Author: John Seamons
35 *
36 * Machine-specific kernel routines.
37 */
38
39 #include <sys/types.h>
40 #include <mach/machine.h>
41 #include <kern/cpu_number.h>
42
43 extern int grade_binary(cpu_type_t exectype, cpu_subtype_t execsubtype);
44
45 /**********************************************************************
46 * Routine: grade_binary()
47 *
48 * Function: Return a relative preference for exectypes and
49 * execsubtypes in fat executable files. The higher the
50 * grade, the higher the preference. A grade of 0 means
51 * not acceptable.
52 **********************************************************************/
53 int
54 grade_binary(__unused cpu_type_t exectype, cpu_subtype_t execsubtype)
55 {
56 int cpusubtype = cpu_subtype();
57
58 switch (cpusubtype) {
59 case CPU_SUBTYPE_386:
60 switch (execsubtype) {
61 case CPU_SUBTYPE_386:
62 return 1;
63 default:
64 return 0;
65 }
66
67 case CPU_SUBTYPE_486:
68 switch (execsubtype) {
69 case CPU_SUBTYPE_386:
70 return 1;
71
72 case CPU_SUBTYPE_486SX:
73 return 2;
74
75 case CPU_SUBTYPE_486:
76 return 3;
77
78 default:
79 return 0;
80 }
81
82 case CPU_SUBTYPE_486SX:
83 switch (execsubtype) {
84 case CPU_SUBTYPE_386:
85 return 1;
86
87 case CPU_SUBTYPE_486:
88 return 2;
89
90 case CPU_SUBTYPE_486SX:
91 return 3;
92
93 default:
94 return 0;
95 }
96
97 case CPU_SUBTYPE_586:
98 switch (execsubtype) {
99 case CPU_SUBTYPE_386:
100 return 1;
101
102 case CPU_SUBTYPE_486SX:
103 return 2;
104
105 case CPU_SUBTYPE_486:
106 return 3;
107
108 case CPU_SUBTYPE_586:
109 return 4;
110
111 default:
112 return 0;
113 }
114
115 default:
116 if ( CPU_SUBTYPE_INTEL_MODEL(execsubtype) ==
117 CPU_SUBTYPE_INTEL_MODEL_ALL) {
118 if ( CPU_SUBTYPE_INTEL_FAMILY(cpusubtype) >=
119 CPU_SUBTYPE_INTEL_FAMILY(execsubtype))
120 return CPU_SUBTYPE_INTEL_FAMILY_MAX -
121 CPU_SUBTYPE_INTEL_FAMILY(cpusubtype) -
122 CPU_SUBTYPE_INTEL_FAMILY(execsubtype);
123 }
124 else {
125 if ( cpusubtype == execsubtype)
126 return CPU_SUBTYPE_INTEL_FAMILY_MAX + 1;
127 }
128 return 0;
129 }
130 }
131
132 extern void md_prepare_for_shutdown(int, int, char *);
133
134 void
135 md_prepare_for_shutdown(
136 __unused int paniced,
137 __unused int howto,
138 __unused char * command)
139 {
140 }