rev |
line source |
pascal@21808
|
1 // $Id: vbox-cpuhotplug.dsl $
|
pascal@21808
|
2 /// @file
|
pascal@21808
|
3 //
|
pascal@21808
|
4 // VirtualBox ACPI
|
pascal@21808
|
5 //
|
pascal@21808
|
6 // Copyright (C) 2006-2007 Oracle Corporation
|
pascal@21808
|
7 //
|
pascal@21808
|
8 // This file is part of VirtualBox Open Source Edition (OSE), as
|
pascal@21808
|
9 // available from http://www.virtualbox.org. This file is free software;
|
pascal@21808
|
10 // you can redistribute it and/or modify it under the terms of the GNU
|
pascal@21808
|
11 // General Public License (GPL) as published by the Free Software
|
pascal@21808
|
12 // Foundation, in version 2 as it comes in the "COPYING" file of the
|
pascal@21808
|
13 // VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
pascal@21808
|
14 // hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
pascal@21808
|
15
|
pascal@21808
|
16 DefinitionBlock ("SSDT-cpuhotplug.aml", "SSDT", 1, "VBOX ", "VBOXCPUT", 2)
|
pascal@21808
|
17 {
|
pascal@21808
|
18 External(CPUC)
|
pascal@21808
|
19 External(CPUL)
|
pascal@21808
|
20 External(CPEV)
|
pascal@21808
|
21 External(CPET)
|
pascal@21808
|
22
|
pascal@21808
|
23 // Method to check for the CPU status
|
pascal@21808
|
24 Method(CPCK, 1)
|
pascal@21808
|
25 {
|
pascal@21808
|
26 Store (Arg0, CPUC)
|
pascal@21808
|
27 Return(LEqual(CPUL, 0x01))
|
pascal@21808
|
28 }
|
pascal@21808
|
29
|
pascal@21808
|
30 // Method to notify the VMM that a CPU is not
|
pascal@21808
|
31 // in use anymore and can be safely removed.
|
pascal@21808
|
32 // Using the extra method here because the CPUL
|
pascal@21808
|
33 // register identifer clashes with the CPUL object defined
|
pascal@21808
|
34 // below making iasl starting with version 20150930 fail.
|
pascal@21808
|
35 //
|
pascal@21808
|
36 // Think of CPLO as "CPU Lock Open"
|
pascal@21808
|
37 Method(CPLO, 1)
|
pascal@21808
|
38 {
|
pascal@21808
|
39 Store(Arg0, CPUL)
|
pascal@21808
|
40 }
|
pascal@21808
|
41
|
pascal@21808
|
42 Scope (\_SB)
|
pascal@21808
|
43 {
|
pascal@21808
|
44
|
pascal@21808
|
45 #define GENERATE_CPU_OBJECT(id, sck, sckuid, cpu, cpuuid) \
|
pascal@21808
|
46 Device (sck) \
|
pascal@21808
|
47 { \
|
pascal@21808
|
48 Name (_HID, "ACPI0004") \
|
pascal@21808
|
49 Name (_UID, sckuid) \
|
pascal@21808
|
50 \
|
pascal@21808
|
51 \
|
pascal@21808
|
52 Processor (cpu, /* Name */ \
|
pascal@21808
|
53 id, /* Id */ \
|
pascal@21808
|
54 0x0, /* Processor IO ports range start */ \
|
pascal@21808
|
55 0x0 /* Processor IO ports range length */ \
|
pascal@21808
|
56 ) \
|
pascal@21808
|
57 { \
|
pascal@21808
|
58 Name (_HID, "ACPI0007") \
|
pascal@21808
|
59 Name (_UID, cpuuid) \
|
pascal@21808
|
60 Name (_PXM, 0x00) \
|
pascal@21808
|
61 \
|
pascal@21808
|
62 Method(_MAT, 0, Serialized) \
|
pascal@21808
|
63 { \
|
pascal@21808
|
64 Name (APIC, Buffer (8) {0x00, 0x08, id, id}) \
|
pascal@21808
|
65 IF (CPCK(id)) \
|
pascal@21808
|
66 { \
|
pascal@21808
|
67 Store (One, Index (APIC, 4)) \
|
pascal@21808
|
68 } \
|
pascal@21808
|
69 Else \
|
pascal@21808
|
70 { \
|
pascal@21808
|
71 Store (Zero, Index (APIC, 4)) \
|
pascal@21808
|
72 } \
|
pascal@21808
|
73 Return (APIC) \
|
pascal@21808
|
74 } \
|
pascal@21808
|
75 Method(_STA) /* Used for device presence detection */ \
|
pascal@21808
|
76 { \
|
pascal@21808
|
77 IF (CPCK(id)) \
|
pascal@21808
|
78 { \
|
pascal@21808
|
79 Return (0xF) \
|
pascal@21808
|
80 } \
|
pascal@21808
|
81 Else \
|
pascal@21808
|
82 { \
|
pascal@21808
|
83 Return (0x0) \
|
pascal@21808
|
84 } \
|
pascal@21808
|
85 } \
|
pascal@21808
|
86 Method(_EJ0, 1) \
|
pascal@21808
|
87 { \
|
pascal@21808
|
88 CPLO(id) /* Unlock the CPU */ \
|
pascal@21808
|
89 Return \
|
pascal@21808
|
90 } \
|
pascal@21808
|
91 } \
|
pascal@21808
|
92 } \
|
pascal@21808
|
93
|
pascal@21808
|
94 GENERATE_CPU_OBJECT(0x00, SCK0, "SCKCPU0", CPU0, "SCK0-CPU0")
|
pascal@21808
|
95 GENERATE_CPU_OBJECT(0x01, SCK1, "SCKCPU1", CPU1, "SCK1-CPU0")
|
pascal@21808
|
96 GENERATE_CPU_OBJECT(0x02, SCK2, "SCKCPU2", CPU2, "SCK2-CPU0")
|
pascal@21808
|
97 GENERATE_CPU_OBJECT(0x03, SCK3, "SCKCPU3", CPU3, "SCK3-CPU0")
|
pascal@21808
|
98 GENERATE_CPU_OBJECT(0x04, SCK4, "SCKCPU4", CPU4, "SCK4-CPU0")
|
pascal@21808
|
99 GENERATE_CPU_OBJECT(0x05, SCK5, "SCKCPU5", CPU5, "SCK5-CPU0")
|
pascal@21808
|
100 GENERATE_CPU_OBJECT(0x06, SCK6, "SCKCPU6", CPU6, "SCK6-CPU0")
|
pascal@21808
|
101 GENERATE_CPU_OBJECT(0x07, SCK7, "SCKCPU7", CPU7, "SCK7-CPU0")
|
pascal@21808
|
102 GENERATE_CPU_OBJECT(0x08, SCK8, "SCKCPU8", CPU8, "SCK8-CPU0")
|
pascal@21808
|
103 GENERATE_CPU_OBJECT(0x09, SCK9, "SCKCPU9", CPU9, "SCK9-CPU0")
|
pascal@21808
|
104 GENERATE_CPU_OBJECT(0x0a, SCKA, "SCKCPUA", CPUA, "SCKA-CPU0")
|
pascal@21808
|
105 GENERATE_CPU_OBJECT(0x0b, SCKB, "SCKCPUB", CPUB, "SCKB-CPU0")
|
pascal@21808
|
106 GENERATE_CPU_OBJECT(0x0c, SCKC, "SCKCPUC", CPUC, "SCKC-CPU0")
|
pascal@21808
|
107 GENERATE_CPU_OBJECT(0x0d, SCKD, "SCKCPUD", CPUD, "SCKD-CPU0")
|
pascal@21808
|
108 GENERATE_CPU_OBJECT(0x0e, SCKE, "SCKCPUE", CPUE, "SCKE-CPU0")
|
pascal@21808
|
109 GENERATE_CPU_OBJECT(0x0f, SCKF, "SCKCPUF", CPUF, "SCKF-CPU0")
|
pascal@21808
|
110 GENERATE_CPU_OBJECT(0x10, SCKG, "SCKCPUG", CPUG, "SCKG-CPU0")
|
pascal@21808
|
111 GENERATE_CPU_OBJECT(0x11, SCKH, "SCKCPUH", CPUH, "SCKH-CPU0")
|
pascal@21808
|
112 GENERATE_CPU_OBJECT(0x12, SCKI, "SCKCPUI", CPUI, "SCKI-CPU0")
|
pascal@21808
|
113 GENERATE_CPU_OBJECT(0x13, SCKJ, "SCKCPUJ", CPUJ, "SCKJ-CPU0")
|
pascal@21808
|
114 GENERATE_CPU_OBJECT(0x14, SCKK, "SCKCPUK", CPUK, "SCKK-CPU0")
|
pascal@21808
|
115 GENERATE_CPU_OBJECT(0x15, SCKL, "SCKCPUL", CPUL, "SCKL-CPU0")
|
pascal@21808
|
116 GENERATE_CPU_OBJECT(0x16, SCKM, "SCKCPUM", CPUM, "SCKM-CPU0")
|
pascal@21808
|
117 GENERATE_CPU_OBJECT(0x17, SCKN, "SCKCPUN", CPUN, "SCKN-CPU0")
|
pascal@21808
|
118 GENERATE_CPU_OBJECT(0x18, SCKO, "SCKCPUO", CPUO, "SCKO-CPU0")
|
pascal@21808
|
119 GENERATE_CPU_OBJECT(0x19, SCKP, "SCKCPUP", CPUP, "SCKP-CPU0")
|
pascal@21808
|
120 GENERATE_CPU_OBJECT(0x1a, SCKQ, "SCKCPUQ", CPUQ, "SCKQ-CPU0")
|
pascal@21808
|
121 GENERATE_CPU_OBJECT(0x1b, SCKR, "SCKCPUR", CPUR, "SCKR-CPU0")
|
pascal@21808
|
122 GENERATE_CPU_OBJECT(0x1c, SCKS, "SCKCPUS", CPUS, "SCKS-CPU0")
|
pascal@21808
|
123 GENERATE_CPU_OBJECT(0x1d, SCKT, "SCKCPUT", CPUT, "SCKT-CPU0")
|
pascal@21808
|
124 GENERATE_CPU_OBJECT(0x1e, SCKU, "SCKCPUU", CPUU, "SCKU-CPU0")
|
pascal@21808
|
125 GENERATE_CPU_OBJECT(0x1f, SCKV, "SCKCPUV", CPUV, "SCKV-CPU0")
|
pascal@21808
|
126
|
pascal@21808
|
127 #undef GENERATE_CPU_OBJECT
|
pascal@21808
|
128 }
|
pascal@21808
|
129
|
pascal@21808
|
130 Scope (\_GPE)
|
pascal@21808
|
131 {
|
pascal@21808
|
132
|
pascal@21808
|
133 #define CHECK_CPU(cpu, sck, cpuname) \
|
pascal@21808
|
134 IF (LEqual(Local0, cpu)) \
|
pascal@21808
|
135 { \
|
pascal@21808
|
136 Notify (\_SB.sck.cpuname, Local1) \
|
pascal@21808
|
137 } \
|
pascal@21808
|
138
|
pascal@21808
|
139 // GPE bit 1 handler
|
pascal@21808
|
140 // GPE.1 must be set and SCI raised when
|
pascal@21808
|
141 // processor info changed and CPU must be
|
pascal@21808
|
142 // re-evaluated
|
pascal@21808
|
143 Method (_L01, 0, NotSerialized)
|
pascal@21808
|
144 {
|
pascal@21808
|
145 Store(CPEV, Local0)
|
pascal@21808
|
146 Store(CPET, Local1)
|
pascal@21808
|
147
|
pascal@21808
|
148 CHECK_CPU(0x01, SCK1, CPU1)
|
pascal@21808
|
149 CHECK_CPU(0x02, SCK2, CPU2)
|
pascal@21808
|
150 CHECK_CPU(0x03, SCK3, CPU3)
|
pascal@21808
|
151 CHECK_CPU(0x04, SCK4, CPU4)
|
pascal@21808
|
152 CHECK_CPU(0x05, SCK5, CPU5)
|
pascal@21808
|
153 CHECK_CPU(0x06, SCK6, CPU6)
|
pascal@21808
|
154 CHECK_CPU(0x07, SCK7, CPU7)
|
pascal@21808
|
155 CHECK_CPU(0x08, SCK8, CPU8)
|
pascal@21808
|
156 CHECK_CPU(0x09, SCK9, CPU9)
|
pascal@21808
|
157 CHECK_CPU(0x0a, SCKA, CPUA)
|
pascal@21808
|
158 CHECK_CPU(0x0b, SCKB, CPUB)
|
pascal@21808
|
159 CHECK_CPU(0x0c, SCKC, CPUC)
|
pascal@21808
|
160 CHECK_CPU(0x0d, SCKD, CPUD)
|
pascal@21808
|
161 CHECK_CPU(0x0e, SCKE, CPUE)
|
pascal@21808
|
162 CHECK_CPU(0x0f, SCKF, CPUF)
|
pascal@21808
|
163 CHECK_CPU(0x10, SCKG, CPUG)
|
pascal@21808
|
164 CHECK_CPU(0x11, SCKH, CPUH)
|
pascal@21808
|
165 CHECK_CPU(0x12, SCKI, CPUI)
|
pascal@21808
|
166 CHECK_CPU(0x13, SCKJ, CPUJ)
|
pascal@21808
|
167 CHECK_CPU(0x14, SCKK, CPUK)
|
pascal@21808
|
168 CHECK_CPU(0x15, SCKL, CPUL)
|
pascal@21808
|
169 CHECK_CPU(0x16, SCKM, CPUM)
|
pascal@21808
|
170 CHECK_CPU(0x17, SCKN, CPUN)
|
pascal@21808
|
171 CHECK_CPU(0x18, SCKO, CPUO)
|
pascal@21808
|
172 CHECK_CPU(0x19, SCKP, CPUP)
|
pascal@21808
|
173 CHECK_CPU(0x1a, SCKQ, CPUQ)
|
pascal@21808
|
174 CHECK_CPU(0x1b, SCKR, CPUR)
|
pascal@21808
|
175 CHECK_CPU(0x1c, SCKS, CPUS)
|
pascal@21808
|
176 CHECK_CPU(0x1d, SCKT, CPUT)
|
pascal@21808
|
177 CHECK_CPU(0x1e, SCKU, CPUU)
|
pascal@21808
|
178 CHECK_CPU(0x1f, SCKV, CPUV)
|
pascal@21808
|
179 }
|
pascal@21808
|
180
|
pascal@21808
|
181 #undef CHECK_CPU
|
pascal@21808
|
182 }
|
pascal@21808
|
183
|
pascal@21808
|
184 }
|
pascal@21808
|
185
|
pascal@21808
|
186 /*
|
pascal@21808
|
187 * Local Variables:
|
pascal@21808
|
188 * comment-start: "//"
|
pascal@21808
|
189 * End:
|
pascal@21808
|
190 */
|