aetables.c revision 1.1 1 1.1 jruoho /******************************************************************************
2 1.1 jruoho *
3 1.1 jruoho * Module Name: aetables - Miscellaneous ACPI tables for acpiexec utility
4 1.1 jruoho *
5 1.1 jruoho *****************************************************************************/
6 1.1 jruoho
7 1.1 jruoho /******************************************************************************
8 1.1 jruoho *
9 1.1 jruoho * 1. Copyright Notice
10 1.1 jruoho *
11 1.1 jruoho * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
12 1.1 jruoho * All rights reserved.
13 1.1 jruoho *
14 1.1 jruoho * 2. License
15 1.1 jruoho *
16 1.1 jruoho * 2.1. This is your license from Intel Corp. under its intellectual property
17 1.1 jruoho * rights. You may have additional license terms from the party that provided
18 1.1 jruoho * you this software, covering your right to use that party's intellectual
19 1.1 jruoho * property rights.
20 1.1 jruoho *
21 1.1 jruoho * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22 1.1 jruoho * copy of the source code appearing in this file ("Covered Code") an
23 1.1 jruoho * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24 1.1 jruoho * base code distributed originally by Intel ("Original Intel Code") to copy,
25 1.1 jruoho * make derivatives, distribute, use and display any portion of the Covered
26 1.1 jruoho * Code in any form, with the right to sublicense such rights; and
27 1.1 jruoho *
28 1.1 jruoho * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29 1.1 jruoho * license (with the right to sublicense), under only those claims of Intel
30 1.1 jruoho * patents that are infringed by the Original Intel Code, to make, use, sell,
31 1.1 jruoho * offer to sell, and import the Covered Code and derivative works thereof
32 1.1 jruoho * solely to the minimum extent necessary to exercise the above copyright
33 1.1 jruoho * license, and in no event shall the patent license extend to any additions
34 1.1 jruoho * to or modifications of the Original Intel Code. No other license or right
35 1.1 jruoho * is granted directly or by implication, estoppel or otherwise;
36 1.1 jruoho *
37 1.1 jruoho * The above copyright and patent license is granted only if the following
38 1.1 jruoho * conditions are met:
39 1.1 jruoho *
40 1.1 jruoho * 3. Conditions
41 1.1 jruoho *
42 1.1 jruoho * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43 1.1 jruoho * Redistribution of source code of any substantial portion of the Covered
44 1.1 jruoho * Code or modification with rights to further distribute source must include
45 1.1 jruoho * the above Copyright Notice, the above License, this list of Conditions,
46 1.1 jruoho * and the following Disclaimer and Export Compliance provision. In addition,
47 1.1 jruoho * Licensee must cause all Covered Code to which Licensee contributes to
48 1.1 jruoho * contain a file documenting the changes Licensee made to create that Covered
49 1.1 jruoho * Code and the date of any change. Licensee must include in that file the
50 1.1 jruoho * documentation of any changes made by any predecessor Licensee. Licensee
51 1.1 jruoho * must include a prominent statement that the modification is derived,
52 1.1 jruoho * directly or indirectly, from Original Intel Code.
53 1.1 jruoho *
54 1.1 jruoho * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55 1.1 jruoho * Redistribution of source code of any substantial portion of the Covered
56 1.1 jruoho * Code or modification without rights to further distribute source must
57 1.1 jruoho * include the following Disclaimer and Export Compliance provision in the
58 1.1 jruoho * documentation and/or other materials provided with distribution. In
59 1.1 jruoho * addition, Licensee may not authorize further sublicense of source of any
60 1.1 jruoho * portion of the Covered Code, and must include terms to the effect that the
61 1.1 jruoho * license from Licensee to its licensee is limited to the intellectual
62 1.1 jruoho * property embodied in the software Licensee provides to its licensee, and
63 1.1 jruoho * not to intellectual property embodied in modifications its licensee may
64 1.1 jruoho * make.
65 1.1 jruoho *
66 1.1 jruoho * 3.3. Redistribution of Executable. Redistribution in executable form of any
67 1.1 jruoho * substantial portion of the Covered Code or modification must reproduce the
68 1.1 jruoho * above Copyright Notice, and the following Disclaimer and Export Compliance
69 1.1 jruoho * provision in the documentation and/or other materials provided with the
70 1.1 jruoho * distribution.
71 1.1 jruoho *
72 1.1 jruoho * 3.4. Intel retains all right, title, and interest in and to the Original
73 1.1 jruoho * Intel Code.
74 1.1 jruoho *
75 1.1 jruoho * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76 1.1 jruoho * Intel shall be used in advertising or otherwise to promote the sale, use or
77 1.1 jruoho * other dealings in products derived from or relating to the Covered Code
78 1.1 jruoho * without prior written authorization from Intel.
79 1.1 jruoho *
80 1.1 jruoho * 4. Disclaimer and Export Compliance
81 1.1 jruoho *
82 1.1 jruoho * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83 1.1 jruoho * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84 1.1 jruoho * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85 1.1 jruoho * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86 1.1 jruoho * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87 1.1 jruoho * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88 1.1 jruoho * PARTICULAR PURPOSE.
89 1.1 jruoho *
90 1.1 jruoho * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91 1.1 jruoho * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92 1.1 jruoho * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93 1.1 jruoho * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94 1.1 jruoho * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95 1.1 jruoho * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96 1.1 jruoho * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97 1.1 jruoho * LIMITED REMEDY.
98 1.1 jruoho *
99 1.1 jruoho * 4.3. Licensee shall not export, either directly or indirectly, any of this
100 1.1 jruoho * software or system incorporating such software without first obtaining any
101 1.1 jruoho * required license or other approval from the U. S. Department of Commerce or
102 1.1 jruoho * any other agency or department of the United States Government. In the
103 1.1 jruoho * event Licensee exports any such software from the United States or
104 1.1 jruoho * re-exports any such software from a foreign destination, Licensee shall
105 1.1 jruoho * ensure that the distribution and export/re-export of the software is in
106 1.1 jruoho * compliance with all laws, regulations, orders, or other restrictions of the
107 1.1 jruoho * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108 1.1 jruoho * any of its subsidiaries will export/re-export any technical data, process,
109 1.1 jruoho * software, or service, directly or indirectly, to any country for which the
110 1.1 jruoho * United States government or any agency thereof requires an export license,
111 1.1 jruoho * other governmental approval, or letter of assurance, without first obtaining
112 1.1 jruoho * such license, approval or letter.
113 1.1 jruoho *
114 1.1 jruoho *****************************************************************************/
115 1.1 jruoho
116 1.1 jruoho #include "aecommon.h"
117 1.1 jruoho
118 1.1 jruoho #define _COMPONENT ACPI_TOOLS
119 1.1 jruoho ACPI_MODULE_NAME ("aetables")
120 1.1 jruoho
121 1.1 jruoho /* Local prototypes */
122 1.1 jruoho
123 1.1 jruoho void
124 1.1 jruoho AeTableOverride (
125 1.1 jruoho ACPI_TABLE_HEADER *ExistingTable,
126 1.1 jruoho ACPI_TABLE_HEADER **NewTable);
127 1.1 jruoho
128 1.1 jruoho ACPI_PHYSICAL_ADDRESS
129 1.1 jruoho AeLocalGetRootPointer (
130 1.1 jruoho void);
131 1.1 jruoho
132 1.1 jruoho /*
133 1.1 jruoho * Misc ACPI tables to be installed
134 1.1 jruoho */
135 1.1 jruoho
136 1.1 jruoho /* Default DSDT. This will be replaced with the input DSDT */
137 1.1 jruoho
138 1.1 jruoho unsigned char DsdtCode[] =
139 1.1 jruoho {
140 1.1 jruoho 0x44,0x53,0x44,0x54,0x24,0x00,0x00,0x00, /* 00000000 "DSDT$..." */
141 1.1 jruoho 0x02,0x6F,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".oIntel." */
142 1.1 jruoho 0x4E,0x75,0x6C,0x6C,0x44,0x53,0x44,0x54, /* 00000010 "NullDSDT" */
143 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
144 1.1 jruoho 0x04,0x12,0x08,0x20,
145 1.1 jruoho };
146 1.1 jruoho
147 1.1 jruoho unsigned char LocalDsdtCode[] =
148 1.1 jruoho {
149 1.1 jruoho 0x44,0x53,0x44,0x54,0x24,0x00,0x00,0x00, /* 00000000 "DSDT$..." */
150 1.1 jruoho 0x02,0x2C,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".,Intel." */
151 1.1 jruoho 0x4C,0x6F,0x63,0x61,0x6C,0x00,0x00,0x00, /* 00000010 "Local..." */
152 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
153 1.1 jruoho 0x30,0x07,0x09,0x20,
154 1.1 jruoho };
155 1.1 jruoho
156 1.1 jruoho /* Several example SSDTs */
157 1.1 jruoho
158 1.1 jruoho unsigned char Ssdt1Code[] = /* Has method _T98 */
159 1.1 jruoho {
160 1.1 jruoho 0x53,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "SSDT0..." */
161 1.1 jruoho 0x01,0xB8,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */
162 1.1 jruoho 0x4D,0x61,0x6E,0x79,0x00,0x00,0x00,0x00, /* 00000010 "Many...." */
163 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
164 1.1 jruoho 0x24,0x04,0x03,0x20,0x14,0x0B,0x5F,0x54, /* 00000020 "$.. .._T" */
165 1.1 jruoho 0x39,0x38,0x00,0x70,0x0A,0x04,0x60,0xA4, /* 00000028 "98.p..`." */
166 1.1 jruoho };
167 1.1 jruoho
168 1.1 jruoho unsigned char Ssdt2Code[] = /* Has method _T99 */
169 1.1 jruoho {
170 1.1 jruoho 0x53,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "SSDT0..." */
171 1.1 jruoho 0x01,0xB7,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */
172 1.1 jruoho 0x4D,0x61,0x6E,0x79,0x00,0x00,0x00,0x00, /* 00000010 "Many...." */
173 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
174 1.1 jruoho 0x24,0x04,0x03,0x20,0x14,0x0B,0x5F,0x54, /* 00000020 "$.. .._T" */
175 1.1 jruoho 0x39,0x39,0x00,0x70,0x0A,0x04,0x60,0xA4, /* 00000028 "99.p..`." */
176 1.1 jruoho };
177 1.1 jruoho
178 1.1 jruoho unsigned char Ssdt3Code[] = /* Has method _T97 */
179 1.1 jruoho {
180 1.1 jruoho 0x54,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "TSDT0..." */
181 1.1 jruoho 0x01,0xB8,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */
182 1.1 jruoho 0x4D,0x61,0x6E,0x79,0x00,0x00,0x00,0x00, /* 00000010 "Many...." */
183 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
184 1.1 jruoho 0x24,0x04,0x03,0x20,0x14,0x0B,0x5F,0x54, /* 00000020 "$.. .._T" */
185 1.1 jruoho 0x39,0x37,0x00,0x70,0x0A,0x04,0x60,0xA4, /* 00000028 "97.p..`." */
186 1.1 jruoho };
187 1.1 jruoho
188 1.1 jruoho /* Example OEM table */
189 1.1 jruoho
190 1.1 jruoho unsigned char Oem1Code[] =
191 1.1 jruoho {
192 1.1 jruoho 0x4F,0x45,0x4D,0x31,0x38,0x00,0x00,0x00, /* 00000000 "OEM18..." */
193 1.1 jruoho 0x01,0x4B,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".KIntel." */
194 1.1 jruoho 0x4D,0x61,0x6E,0x79,0x00,0x00,0x00,0x00, /* 00000010 "Many...." */
195 1.1 jruoho 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
196 1.1 jruoho 0x18,0x09,0x03,0x20,0x08,0x5F,0x58,0x54, /* 00000020 "... ._XT" */
197 1.1 jruoho 0x32,0x0A,0x04,0x14,0x0C,0x5F,0x58,0x54, /* 00000028 "2...._XT" */
198 1.1 jruoho 0x31,0x00,0x70,0x01,0x5F,0x58,0x54,0x32, /* 00000030 "1.p._XT2" */
199 1.1 jruoho };
200 1.1 jruoho
201 1.1 jruoho /* ASL source for this table is at the end of this file */
202 1.1 jruoho
203 1.1 jruoho unsigned char OemxCode[] =
204 1.1 jruoho {
205 1.1 jruoho 0x4F,0x45,0x4D,0x58,0xB0,0x00,0x00,0x00, /* 00000000 "OEMX...." */
206 1.1 jruoho 0x02,0x54,0x4D,0x79,0x4F,0x45,0x4D,0x00, /* 00000008 ".TMyOEM." */
207 1.1 jruoho 0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x00, /* 00000010 "Test...." */
208 1.1 jruoho 0x32,0x04,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "2...INTL" */
209 1.1 jruoho 0x31,0x03,0x10,0x20,0x14,0x1D,0x5F,0x49, /* 00000020 "1.. .._I" */
210 1.1 jruoho 0x4E,0x49,0x00,0x70,0x0D,0x54,0x61,0x62, /* 00000028 "NI.p.Tab" */
211 1.1 jruoho 0x6C,0x65,0x20,0x4F,0x45,0x4D,0x58,0x20, /* 00000030 "le OEMX " */
212 1.1 jruoho 0x72,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x00, /* 00000038 "running." */
213 1.1 jruoho 0x5B,0x31,0x10,0x22,0x5C,0x5F,0x47,0x50, /* 00000040 "[1."\_GP" */
214 1.1 jruoho 0x45,0x14,0x06,0x5F,0x45,0x30,0x37,0x00, /* 00000048 "E.._E07." */
215 1.1 jruoho 0x14,0x06,0x5F,0x45,0x32,0x32,0x00,0x14, /* 00000050 ".._E22.." */
216 1.1 jruoho 0x06,0x5F,0x4C,0x33,0x31,0x00,0x14,0x06, /* 00000058 "._L31..." */
217 1.1 jruoho 0x5F,0x4C,0x36,0x36,0x00,0x5B,0x82,0x10, /* 00000060 "_L66.[.." */
218 1.1 jruoho 0x4F,0x45,0x4D,0x31,0x08,0x5F,0x50,0x52, /* 00000068 "OEM1._PR" */
219 1.1 jruoho 0x57,0x12,0x05,0x02,0x0A,0x07,0x00,0x5B, /* 00000070 "W......[" */
220 1.1 jruoho 0x82,0x10,0x4F,0x45,0x4D,0x32,0x08,0x5F, /* 00000078 "..OEM2._" */
221 1.1 jruoho 0x50,0x52,0x57,0x12,0x05,0x02,0x0A,0x66, /* 00000080 "PRW....f" */
222 1.1 jruoho 0x00,0x10,0x26,0x5C,0x47,0x50,0x45,0x32, /* 00000088 "..&\GPE2" */
223 1.1 jruoho 0x14,0x06,0x5F,0x4C,0x30,0x31,0x00,0x14, /* 00000090 ".._L01.." */
224 1.1 jruoho 0x06,0x5F,0x45,0x30,0x37,0x00,0x08,0x5F, /* 00000098 "._E07.._" */
225 1.1 jruoho 0x50,0x52,0x57,0x12,0x0C,0x02,0x12,0x08, /* 000000A0 "PRW....." */
226 1.1 jruoho 0x02,0x5C,0x47,0x50,0x45,0x32,0x01,0x00 /* 000000A8 ".\GPE2.." */
227 1.1 jruoho };
228 1.1 jruoho
229 1.1 jruoho /*
230 1.1 jruoho * Example installable control method
231 1.1 jruoho *
232 1.1 jruoho * DefinitionBlock ("", "DSDT", 2, "Intel", "MTHDTEST", 0x20090512)
233 1.1 jruoho * {
234 1.1 jruoho * Method (\_SI_._T97, 1, Serialized)
235 1.1 jruoho * {
236 1.1 jruoho * Store ("Example installed method", Debug)
237 1.1 jruoho * Store (Arg0, Debug)
238 1.1 jruoho * Return ()
239 1.1 jruoho * }
240 1.1 jruoho * }
241 1.1 jruoho *
242 1.1 jruoho * Compiled byte code below.
243 1.1 jruoho */
244 1.1 jruoho unsigned char MethodCode[] =
245 1.1 jruoho {
246 1.1 jruoho 0x44,0x53,0x44,0x54,0x53,0x00,0x00,0x00, /* 00000000 "DSDTS..." */
247 1.1 jruoho 0x02,0xF9,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */
248 1.1 jruoho 0x4D,0x54,0x48,0x44,0x54,0x45,0x53,0x54, /* 00000010 "MTHDTEST" */
249 1.1 jruoho 0x12,0x05,0x09,0x20,0x49,0x4E,0x54,0x4C, /* 00000018 "... INTL" */
250 1.1 jruoho 0x22,0x04,0x09,0x20,0x14,0x2E,0x2E,0x5F, /* 00000020 "".. ..._" */
251 1.1 jruoho 0x54,0x49,0x5F,0x5F,0x54,0x39,0x37,0x09, /* 00000028 "SI__T97." */
252 1.1 jruoho 0x70,0x0D,0x45,0x78,0x61,0x6D,0x70,0x6C, /* 00000030 "p.Exampl" */
253 1.1 jruoho 0x65,0x20,0x69,0x6E,0x73,0x74,0x61,0x6C, /* 00000038 "e instal" */
254 1.1 jruoho 0x6C,0x65,0x64,0x20,0x6D,0x65,0x74,0x68, /* 00000040 "led meth" */
255 1.1 jruoho 0x6F,0x64,0x00,0x5B,0x31,0x70,0x68,0x5B, /* 00000048 "od.[1ph[" */
256 1.1 jruoho 0x31,0xA4,0x00,
257 1.1 jruoho };
258 1.1 jruoho
259 1.1 jruoho
260 1.1 jruoho /*
261 1.1 jruoho * We need a local FADT so that the hardware subcomponent will function,
262 1.1 jruoho * even though the underlying OSD HW access functions don't do
263 1.1 jruoho * anything.
264 1.1 jruoho */
265 1.1 jruoho ACPI_TABLE_HEADER *DsdtToInstallOverride;
266 1.1 jruoho ACPI_TABLE_RSDP LocalRSDP;
267 1.1 jruoho ACPI_TABLE_FADT LocalFADT;
268 1.1 jruoho ACPI_TABLE_FACS LocalFACS;
269 1.1 jruoho ACPI_TABLE_HEADER LocalTEST;
270 1.1 jruoho ACPI_TABLE_HEADER LocalBADTABLE;
271 1.1 jruoho ACPI_TABLE_RSDT *LocalRSDT;
272 1.1 jruoho
273 1.1 jruoho #define BASE_RSDT_TABLES 7
274 1.1 jruoho #define BASE_RSDT_SIZE (sizeof (ACPI_TABLE_RSDT) + ((BASE_RSDT_TABLES -1) * sizeof (UINT32)))
275 1.1 jruoho
276 1.1 jruoho #define ACPI_MAX_INIT_TABLES (32)
277 1.1 jruoho static ACPI_TABLE_DESC Tables[ACPI_MAX_INIT_TABLES];
278 1.1 jruoho
279 1.1 jruoho
280 1.1 jruoho /******************************************************************************
281 1.1 jruoho *
282 1.1 jruoho * FUNCTION: AeTableOverride
283 1.1 jruoho *
284 1.1 jruoho * DESCRIPTION: Local implementation of AcpiOsTableOverride.
285 1.1 jruoho * Exercise the override mechanism
286 1.1 jruoho *
287 1.1 jruoho *****************************************************************************/
288 1.1 jruoho
289 1.1 jruoho void
290 1.1 jruoho AeTableOverride (
291 1.1 jruoho ACPI_TABLE_HEADER *ExistingTable,
292 1.1 jruoho ACPI_TABLE_HEADER **NewTable)
293 1.1 jruoho {
294 1.1 jruoho
295 1.1 jruoho /* This code exercises the table override mechanism in the core */
296 1.1 jruoho
297 1.1 jruoho if (ACPI_COMPARE_NAME (ExistingTable->Signature, ACPI_SIG_DSDT))
298 1.1 jruoho {
299 1.1 jruoho *NewTable = DsdtToInstallOverride;
300 1.1 jruoho }
301 1.1 jruoho
302 1.1 jruoho /* This code tests override of dynamically loaded tables */
303 1.1 jruoho
304 1.1 jruoho else if (ACPI_COMPARE_NAME (ExistingTable->Signature, "TSDT"))
305 1.1 jruoho {
306 1.1 jruoho *NewTable = ACPI_CAST_PTR (ACPI_TABLE_HEADER, Ssdt3Code);
307 1.1 jruoho }
308 1.1 jruoho }
309 1.1 jruoho
310 1.1 jruoho
311 1.1 jruoho /******************************************************************************
312 1.1 jruoho *
313 1.1 jruoho * FUNCTION: AeBuildLocalTables
314 1.1 jruoho *
315 1.1 jruoho * PARAMETERS: TableCount - Number of tables on the command line
316 1.1 jruoho * TableList - List of actual tables from files
317 1.1 jruoho *
318 1.1 jruoho * RETURN: Status
319 1.1 jruoho *
320 1.1 jruoho * DESCRIPTION: Build a complete ACPI table chain, with a local RSDP, RSDT,
321 1.1 jruoho * FADT, and several other test tables.
322 1.1 jruoho *
323 1.1 jruoho *****************************************************************************/
324 1.1 jruoho
325 1.1 jruoho ACPI_STATUS
326 1.1 jruoho AeBuildLocalTables (
327 1.1 jruoho UINT32 TableCount,
328 1.1 jruoho AE_TABLE_DESC *TableList)
329 1.1 jruoho {
330 1.1 jruoho ACPI_PHYSICAL_ADDRESS DsdtAddress = 0;
331 1.1 jruoho UINT32 RsdtSize;
332 1.1 jruoho AE_TABLE_DESC *NextTable;
333 1.1 jruoho UINT32 NextIndex;
334 1.1 jruoho ACPI_TABLE_FADT *ExternalFadt = NULL;
335 1.1 jruoho
336 1.1 jruoho
337 1.1 jruoho /*
338 1.1 jruoho * Update the table count. For DSDT, it is not put into the RSDT. For
339 1.1 jruoho * FADT, this is already accounted for since we usually install a
340 1.1 jruoho * local FADT.
341 1.1 jruoho */
342 1.1 jruoho NextTable = TableList;
343 1.1 jruoho while (NextTable)
344 1.1 jruoho {
345 1.1 jruoho if (ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_DSDT) ||
346 1.1 jruoho ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_FADT))
347 1.1 jruoho {
348 1.1 jruoho TableCount--;
349 1.1 jruoho }
350 1.1 jruoho NextTable = NextTable->Next;
351 1.1 jruoho }
352 1.1 jruoho
353 1.1 jruoho RsdtSize = BASE_RSDT_SIZE + (TableCount * sizeof (UINT32));
354 1.1 jruoho
355 1.1 jruoho /* Build an RSDT */
356 1.1 jruoho
357 1.1 jruoho LocalRSDT = AcpiOsAllocate (RsdtSize);
358 1.1 jruoho if (!LocalRSDT)
359 1.1 jruoho {
360 1.1 jruoho return AE_NO_MEMORY;
361 1.1 jruoho }
362 1.1 jruoho
363 1.1 jruoho ACPI_MEMSET (LocalRSDT, 0, RsdtSize);
364 1.1 jruoho ACPI_STRNCPY (LocalRSDT->Header.Signature, ACPI_SIG_RSDT, 4);
365 1.1 jruoho LocalRSDT->Header.Length = RsdtSize;
366 1.1 jruoho
367 1.1 jruoho LocalRSDT->TableOffsetEntry[0] = ACPI_PTR_TO_PHYSADDR (&LocalTEST);
368 1.1 jruoho LocalRSDT->TableOffsetEntry[1] = ACPI_PTR_TO_PHYSADDR (&LocalBADTABLE);
369 1.1 jruoho LocalRSDT->TableOffsetEntry[2] = ACPI_PTR_TO_PHYSADDR (&LocalFADT);
370 1.1 jruoho
371 1.1 jruoho /* Install two SSDTs to test multiple table support */
372 1.1 jruoho
373 1.1 jruoho LocalRSDT->TableOffsetEntry[3] = ACPI_PTR_TO_PHYSADDR (&Ssdt1Code);
374 1.1 jruoho LocalRSDT->TableOffsetEntry[4] = ACPI_PTR_TO_PHYSADDR (&Ssdt2Code);
375 1.1 jruoho
376 1.1 jruoho /* Install the OEM1 table to test LoadTable */
377 1.1 jruoho
378 1.1 jruoho LocalRSDT->TableOffsetEntry[5] = ACPI_PTR_TO_PHYSADDR (&Oem1Code);
379 1.1 jruoho
380 1.1 jruoho /* Install the OEMx table to test LoadTable */
381 1.1 jruoho
382 1.1 jruoho LocalRSDT->TableOffsetEntry[6] = ACPI_PTR_TO_PHYSADDR (&OemxCode);
383 1.1 jruoho
384 1.1 jruoho /*
385 1.1 jruoho * Install the user tables. The DSDT must be installed in the FADT.
386 1.1 jruoho * All other tables are installed directly into the RSDT.
387 1.1 jruoho */
388 1.1 jruoho NextIndex = BASE_RSDT_TABLES;
389 1.1 jruoho NextTable = TableList;
390 1.1 jruoho while (NextTable)
391 1.1 jruoho {
392 1.1 jruoho /*
393 1.1 jruoho * Incoming DSDT or FADT are special cases. All other tables are
394 1.1 jruoho * just immediately installed into the RSDT.
395 1.1 jruoho */
396 1.1 jruoho if (ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_DSDT))
397 1.1 jruoho {
398 1.1 jruoho if (DsdtAddress)
399 1.1 jruoho {
400 1.1 jruoho printf ("Already found a DSDT, only one allowed\n");
401 1.1 jruoho return AE_ALREADY_EXISTS;
402 1.1 jruoho }
403 1.1 jruoho
404 1.1 jruoho /* The incoming user table is a DSDT */
405 1.1 jruoho
406 1.1 jruoho DsdtAddress = ACPI_PTR_TO_PHYSADDR (&DsdtCode);
407 1.1 jruoho DsdtToInstallOverride = NextTable->Table;
408 1.1 jruoho }
409 1.1 jruoho else if (ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_FADT))
410 1.1 jruoho {
411 1.1 jruoho ExternalFadt = ACPI_CAST_PTR (ACPI_TABLE_FADT, NextTable->Table);
412 1.1 jruoho LocalRSDT->TableOffsetEntry[2] = ACPI_PTR_TO_PHYSADDR (NextTable->Table);
413 1.1 jruoho }
414 1.1 jruoho else
415 1.1 jruoho {
416 1.1 jruoho /* Install the table in the RSDT */
417 1.1 jruoho
418 1.1 jruoho LocalRSDT->TableOffsetEntry[NextIndex] = ACPI_PTR_TO_PHYSADDR (NextTable->Table);
419 1.1 jruoho NextIndex++;
420 1.1 jruoho }
421 1.1 jruoho
422 1.1 jruoho NextTable = NextTable->Next;
423 1.1 jruoho }
424 1.1 jruoho
425 1.1 jruoho /* Build an RSDP */
426 1.1 jruoho
427 1.1 jruoho ACPI_MEMSET (&LocalRSDP, 0, sizeof (ACPI_TABLE_RSDP));
428 1.1 jruoho ACPI_MEMCPY (LocalRSDP.Signature, ACPI_SIG_RSDP, 8);
429 1.1 jruoho ACPI_MEMCPY (LocalRSDP.OemId, "I_TEST", 6);
430 1.1 jruoho LocalRSDP.Revision = 1;
431 1.1 jruoho LocalRSDP.RsdtPhysicalAddress = ACPI_PTR_TO_PHYSADDR (LocalRSDT);
432 1.1 jruoho LocalRSDP.Length = sizeof (ACPI_TABLE_RSDT);
433 1.1 jruoho
434 1.1 jruoho /* Set checksums for both RSDT and RSDP */
435 1.1 jruoho
436 1.1 jruoho LocalRSDT->Header.Checksum = (UINT8) -AcpiTbChecksum (
437 1.1 jruoho (void *) LocalRSDT, LocalRSDT->Header.Length);
438 1.1 jruoho LocalRSDP.Checksum = (UINT8) -AcpiTbChecksum (
439 1.1 jruoho (void *) &LocalRSDP, ACPI_RSDP_CHECKSUM_LENGTH);
440 1.1 jruoho
441 1.1 jruoho if (!DsdtAddress)
442 1.1 jruoho {
443 1.1 jruoho /* Use the local DSDT because incoming table(s) are all SSDT(s) */
444 1.1 jruoho
445 1.1 jruoho DsdtAddress = ACPI_PTR_TO_PHYSADDR (LocalDsdtCode);
446 1.1 jruoho DsdtToInstallOverride = ACPI_CAST_PTR (ACPI_TABLE_HEADER, LocalDsdtCode);
447 1.1 jruoho }
448 1.1 jruoho
449 1.1 jruoho if (ExternalFadt)
450 1.1 jruoho {
451 1.1 jruoho /*
452 1.1 jruoho * Use the external FADT, but we must update the DSDT/FACS addresses
453 1.1 jruoho * as well as the checksum
454 1.1 jruoho */
455 1.1 jruoho ExternalFadt->Dsdt = DsdtAddress;
456 1.1 jruoho ExternalFadt->Facs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
457 1.1 jruoho
458 1.1 jruoho if (ExternalFadt->Header.Length > ACPI_PTR_DIFF (&ExternalFadt->XDsdt, ExternalFadt))
459 1.1 jruoho {
460 1.1 jruoho ExternalFadt->XDsdt = DsdtAddress;
461 1.1 jruoho ExternalFadt->XFacs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
462 1.1 jruoho }
463 1.1 jruoho /* Complete the FADT with the checksum */
464 1.1 jruoho
465 1.1 jruoho ExternalFadt->Header.Checksum = 0;
466 1.1 jruoho ExternalFadt->Header.Checksum = (UINT8) -AcpiTbChecksum (
467 1.1 jruoho (void *) ExternalFadt, ExternalFadt->Header.Length);
468 1.1 jruoho }
469 1.1 jruoho else
470 1.1 jruoho {
471 1.1 jruoho /*
472 1.1 jruoho * Build a local FADT so we can test the hardware/event init
473 1.1 jruoho */
474 1.1 jruoho ACPI_MEMSET (&LocalFADT, 0, sizeof (ACPI_TABLE_FADT));
475 1.1 jruoho ACPI_STRNCPY (LocalFADT.Header.Signature, ACPI_SIG_FADT, 4);
476 1.1 jruoho
477 1.1 jruoho /* Setup FADT header and DSDT/FACS addresses */
478 1.1 jruoho
479 1.1 jruoho LocalFADT.Dsdt = DsdtAddress;
480 1.1 jruoho LocalFADT.Facs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
481 1.1 jruoho
482 1.1 jruoho LocalFADT.XDsdt = DsdtAddress;
483 1.1 jruoho LocalFADT.XFacs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
484 1.1 jruoho
485 1.1 jruoho LocalFADT.Header.Revision = 3;
486 1.1 jruoho LocalFADT.Header.Length = sizeof (ACPI_TABLE_FADT);
487 1.1 jruoho
488 1.1 jruoho /* Miscellaneous FADT fields */
489 1.1 jruoho
490 1.1 jruoho LocalFADT.Gpe0BlockLength = 16;
491 1.1 jruoho LocalFADT.Gpe1BlockLength = 6;
492 1.1 jruoho LocalFADT.Gpe1Base = 96;
493 1.1 jruoho
494 1.1 jruoho LocalFADT.Pm1EventLength = 4;
495 1.1 jruoho LocalFADT.Pm1ControlLength = 2;
496 1.1 jruoho LocalFADT.PmTimerLength = 4;
497 1.1 jruoho
498 1.1 jruoho LocalFADT.Gpe0Block = 0x00001234;
499 1.1 jruoho LocalFADT.Gpe1Block = 0x00005678;
500 1.1 jruoho
501 1.1 jruoho LocalFADT.Pm1aEventBlock = 0x00001aaa;
502 1.1 jruoho LocalFADT.Pm1bEventBlock = 0x00001bbb;
503 1.1 jruoho LocalFADT.PmTimerBlock = 0xA0;
504 1.1 jruoho LocalFADT.Pm1aControlBlock = 0xB0;
505 1.1 jruoho
506 1.1 jruoho /* Setup one example X-64 field */
507 1.1 jruoho
508 1.1 jruoho LocalFADT.XPm1bEventBlock.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
509 1.1 jruoho LocalFADT.XPm1bEventBlock.Address = LocalFADT.Pm1bEventBlock;
510 1.1 jruoho LocalFADT.XPm1bEventBlock.BitWidth = (UINT8) ACPI_MUL_8 (LocalFADT.Pm1EventLength);
511 1.1 jruoho
512 1.1 jruoho /* Complete the FADT with the checksum */
513 1.1 jruoho
514 1.1 jruoho LocalFADT.Header.Checksum = 0;
515 1.1 jruoho LocalFADT.Header.Checksum = (UINT8) -AcpiTbChecksum (
516 1.1 jruoho (void *) &LocalFADT, LocalFADT.Header.Length);
517 1.1 jruoho }
518 1.1 jruoho
519 1.1 jruoho /* Build a FACS */
520 1.1 jruoho
521 1.1 jruoho ACPI_MEMSET (&LocalFACS, 0, sizeof (ACPI_TABLE_FACS));
522 1.1 jruoho ACPI_STRNCPY (LocalFACS.Signature, ACPI_SIG_FACS, 4);
523 1.1 jruoho
524 1.1 jruoho LocalFACS.Length = sizeof (ACPI_TABLE_FACS);
525 1.1 jruoho LocalFACS.GlobalLock = 0x11AA0011;
526 1.1 jruoho
527 1.1 jruoho /* Build a fake table [TEST] so that we make sure that the CA core ignores it */
528 1.1 jruoho
529 1.1 jruoho ACPI_MEMSET (&LocalTEST, 0, sizeof (ACPI_TABLE_HEADER));
530 1.1 jruoho ACPI_STRNCPY (LocalTEST.Signature, "TEST", 4);
531 1.1 jruoho
532 1.1 jruoho LocalTEST.Revision = 1;
533 1.1 jruoho LocalTEST.Length = sizeof (ACPI_TABLE_HEADER);
534 1.1 jruoho LocalTEST.Checksum = (UINT8) -AcpiTbChecksum (
535 1.1 jruoho (void *) &LocalTEST, LocalTEST.Length);
536 1.1 jruoho
537 1.1 jruoho /* Build a fake table with a bad signature [BAD!] so that we make sure that the CA core ignores it */
538 1.1 jruoho
539 1.1 jruoho ACPI_MEMSET (&LocalBADTABLE, 0, sizeof (ACPI_TABLE_HEADER));
540 1.1 jruoho ACPI_STRNCPY (LocalBADTABLE.Signature, "BAD!", 4);
541 1.1 jruoho
542 1.1 jruoho LocalBADTABLE.Revision = 1;
543 1.1 jruoho LocalBADTABLE.Length = sizeof (ACPI_TABLE_HEADER);
544 1.1 jruoho LocalBADTABLE.Checksum = (UINT8) -AcpiTbChecksum (
545 1.1 jruoho (void *) &LocalBADTABLE, LocalBADTABLE.Length);
546 1.1 jruoho
547 1.1 jruoho return (AE_OK);
548 1.1 jruoho }
549 1.1 jruoho
550 1.1 jruoho
551 1.1 jruoho /******************************************************************************
552 1.1 jruoho *
553 1.1 jruoho * FUNCTION: AeInstallTables
554 1.1 jruoho *
555 1.1 jruoho * PARAMETERS: None
556 1.1 jruoho *
557 1.1 jruoho * RETURN: Status
558 1.1 jruoho *
559 1.1 jruoho * DESCRIPTION: Install the various ACPI tables
560 1.1 jruoho *
561 1.1 jruoho *****************************************************************************/
562 1.1 jruoho
563 1.1 jruoho ACPI_STATUS
564 1.1 jruoho AeInstallTables (
565 1.1 jruoho void)
566 1.1 jruoho {
567 1.1 jruoho ACPI_STATUS Status;
568 1.1 jruoho
569 1.1 jruoho Status = AcpiInitializeTables (Tables, ACPI_MAX_INIT_TABLES, TRUE);
570 1.1 jruoho Status = AcpiReallocateRootTable ();
571 1.1 jruoho Status = AcpiLoadTables ();
572 1.1 jruoho
573 1.1 jruoho /*
574 1.1 jruoho * Test run-time control method installation. Do it twice to test code
575 1.1 jruoho * for an existing name.
576 1.1 jruoho */
577 1.1 jruoho Status = AcpiInstallMethod (MethodCode);
578 1.1 jruoho if (ACPI_FAILURE (Status))
579 1.1 jruoho {
580 1.1 jruoho AcpiOsPrintf ("%s, Could not install method\n",
581 1.1 jruoho AcpiFormatException (Status));
582 1.1 jruoho }
583 1.1 jruoho
584 1.1 jruoho Status = AcpiInstallMethod (MethodCode);
585 1.1 jruoho if (ACPI_FAILURE (Status))
586 1.1 jruoho {
587 1.1 jruoho AcpiOsPrintf ("%s, Could not install method\n",
588 1.1 jruoho AcpiFormatException (Status));
589 1.1 jruoho }
590 1.1 jruoho
591 1.1 jruoho return (AE_OK);
592 1.1 jruoho }
593 1.1 jruoho
594 1.1 jruoho
595 1.1 jruoho /******************************************************************************
596 1.1 jruoho *
597 1.1 jruoho * FUNCTION: AeLocalGetRootPointer
598 1.1 jruoho *
599 1.1 jruoho * PARAMETERS: Flags - not used
600 1.1 jruoho * Address - Where the root pointer is returned
601 1.1 jruoho *
602 1.1 jruoho * RETURN: Status
603 1.1 jruoho *
604 1.1 jruoho * DESCRIPTION: Return a local RSDP, used to dynamically load tables via the
605 1.1 jruoho * standard ACPI mechanism.
606 1.1 jruoho *
607 1.1 jruoho *****************************************************************************/
608 1.1 jruoho
609 1.1 jruoho ACPI_PHYSICAL_ADDRESS
610 1.1 jruoho AeLocalGetRootPointer (
611 1.1 jruoho void)
612 1.1 jruoho {
613 1.1 jruoho
614 1.1 jruoho return ((ACPI_PHYSICAL_ADDRESS) &LocalRSDP);
615 1.1 jruoho }
616 1.1 jruoho
617 1.1 jruoho
618 1.1 jruoho #if 0
619 1.1 jruoho /******************************************************************************
620 1.1 jruoho *
621 1.1 jruoho * DESCRIPTION: ASL tables that are used in RSDT/XSDT, also used to test
622 1.1 jruoho * Load/LoadTable operators.
623 1.1 jruoho *
624 1.1 jruoho *****************************************************************************/
625 1.1 jruoho
626 1.1 jruoho DefinitionBlock ("", "OEMX", 2, "MyOEM", "Test", 0x00000432)
627 1.1 jruoho {
628 1.1 jruoho External (GPE2, DeviceObj)
629 1.1 jruoho
630 1.1 jruoho Method (_INI)
631 1.1 jruoho {
632 1.1 jruoho Store ("Table OEMX running", Debug)
633 1.1 jruoho }
634 1.1 jruoho
635 1.1 jruoho Scope (\_GPE)
636 1.1 jruoho {
637 1.1 jruoho Method (_E07) {}
638 1.1 jruoho Method (_E22) {}
639 1.1 jruoho Method (_L31) {}
640 1.1 jruoho Method (_L66) {}
641 1.1 jruoho }
642 1.1 jruoho
643 1.1 jruoho Device (OEM1)
644 1.1 jruoho {
645 1.1 jruoho Name (_PRW, Package(){7,0})
646 1.1 jruoho }
647 1.1 jruoho Device (OEM2)
648 1.1 jruoho {
649 1.1 jruoho Name (_PRW, Package(){0x66,0})
650 1.1 jruoho }
651 1.1 jruoho
652 1.1 jruoho Scope (\GPE2)
653 1.1 jruoho {
654 1.1 jruoho Method (_L01) {}
655 1.1 jruoho Method (_E07) {}
656 1.1 jruoho
657 1.1 jruoho Name (_PRW, Package() {Package() {\GPE2, 1}, 0})
658 1.1 jruoho }
659 1.1 jruoho }
660 1.1 jruoho
661 1.1 jruoho /* Parent gr.asl file */
662 1.1 jruoho
663 1.1 jruoho DefinitionBlock ("", "DSDT", 2, "Intel", "Many", 0x00000001)
664 1.1 jruoho {
665 1.1 jruoho Name (BUF1, Buffer()
666 1.1 jruoho {
667 1.1 jruoho 0x4F,0x45,0x4D,0x58,0xB0,0x00,0x00,0x00, /* 00000000 "OEMX...." */
668 1.1 jruoho 0x02,0x54,0x4D,0x79,0x4F,0x45,0x4D,0x00, /* 00000008 ".TMyOEM." */
669 1.1 jruoho 0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x00, /* 00000010 "Test...." */
670 1.1 jruoho 0x32,0x04,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "2...INTL" */
671 1.1 jruoho 0x31,0x03,0x10,0x20,0x14,0x1D,0x5F,0x49, /* 00000020 "1.. .._I" */
672 1.1 jruoho 0x4E,0x49,0x00,0x70,0x0D,0x54,0x61,0x62, /* 00000028 "NI.p.Tab" */
673 1.1 jruoho 0x6C,0x65,0x20,0x4F,0x45,0x4D,0x58,0x20, /* 00000030 "le OEMX " */
674 1.1 jruoho 0x72,0x75,0x6E,0x6E,0x69,0x6E,0x67,0x00, /* 00000038 "running." */
675 1.1 jruoho 0x5B,0x31,0x10,0x22,0x5C,0x5F,0x47,0x50, /* 00000040 "[1."\_GP" */
676 1.1 jruoho 0x45,0x14,0x06,0x5F,0x45,0x30,0x37,0x00, /* 00000048 "E.._E07." */
677 1.1 jruoho 0x14,0x06,0x5F,0x45,0x32,0x32,0x00,0x14, /* 00000050 ".._E22.." */
678 1.1 jruoho 0x06,0x5F,0x4C,0x33,0x31,0x00,0x14,0x06, /* 00000058 "._L31..." */
679 1.1 jruoho 0x5F,0x4C,0x36,0x36,0x00,0x5B,0x82,0x10, /* 00000060 "_L66.[.." */
680 1.1 jruoho 0x4F,0x45,0x4D,0x31,0x08,0x5F,0x50,0x52, /* 00000068 "OEM1._PR" */
681 1.1 jruoho 0x57,0x12,0x05,0x02,0x0A,0x07,0x00,0x5B, /* 00000070 "W......[" */
682 1.1 jruoho 0x82,0x10,0x4F,0x45,0x4D,0x32,0x08,0x5F, /* 00000078 "..OEM2._" */
683 1.1 jruoho 0x50,0x52,0x57,0x12,0x05,0x02,0x0A,0x66, /* 00000080 "PRW....f" */
684 1.1 jruoho 0x00,0x10,0x26,0x5C,0x47,0x50,0x45,0x32, /* 00000088 "..&\GPE2" */
685 1.1 jruoho 0x14,0x06,0x5F,0x4C,0x30,0x31,0x00,0x14, /* 00000090 ".._L01.." */
686 1.1 jruoho 0x06,0x5F,0x45,0x30,0x37,0x00,0x08,0x5F, /* 00000098 "._E07.._" */
687 1.1 jruoho 0x50,0x52,0x57,0x12,0x0C,0x02,0x12,0x08, /* 000000A0 "PRW....." */
688 1.1 jruoho 0x02,0x5C,0x47,0x50,0x45,0x32,0x01,0x00 /* 000000A8 ".\GPE2.." */
689 1.1 jruoho })
690 1.1 jruoho
691 1.1 jruoho Name (HNDL, 0)
692 1.1 jruoho Method (LD)
693 1.1 jruoho {
694 1.1 jruoho Load (BUF1, HNDL)
695 1.1 jruoho Store ("Load operator, handle:", Debug)
696 1.1 jruoho Store (HNDL, Debug)
697 1.1 jruoho }
698 1.1 jruoho
699 1.1 jruoho Method (MAIN, 0, NotSerialized)
700 1.1 jruoho {
701 1.1 jruoho Store ("Loading OEMX table", Debug)
702 1.1 jruoho Store (LoadTable ("OEMX", "MyOEM", "Test"), Debug)
703 1.1 jruoho }
704 1.1 jruoho
705 1.1 jruoho Scope (\_GPE)
706 1.1 jruoho {
707 1.1 jruoho Method (_L08) {}
708 1.1 jruoho Method (_E08) {}
709 1.1 jruoho Method (_L0B) {}
710 1.1 jruoho }
711 1.1 jruoho
712 1.1 jruoho Device (DEV0)
713 1.1 jruoho {
714 1.1 jruoho Name (_PRW, Package() {0x11, 0})
715 1.1 jruoho }
716 1.1 jruoho
717 1.1 jruoho Device (\GPE2)
718 1.1 jruoho {
719 1.1 jruoho Method (_L00) {}
720 1.1 jruoho }
721 1.1 jruoho }
722 1.1 jruoho
723 1.1 jruoho #endif
724 1.1 jruoho
725