1    /*
2     * Some or all of this work - Copyright (c) 2006 - 2021, Intel Corp.
3     * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without modification,
6     * are permitted provided that the following conditions are met:
7     *
8     * Redistributions of source code must retain the above copyright notice,
9     * this list of conditions and the following disclaimer.
10     * Redistributions in binary form must reproduce the above copyright notice,
11     * this list of conditions and the following disclaimer in the documentation
12     * and/or other materials provided with the distribution.
13     * Neither the name of Intel Corporation nor the names of its contributors
14     * may be used to endorse or promote products derived from this software
15     * without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    /*
29     * LoadTable ASL operator functionality
30     */
31    /*
32     * This sub-test is intended to comprehensively verify
33     * the LoadTable ASL operator functionality.
34     *
35     * Performs a run-time load of a Definition Block from the XSDT.
36     *
37     *    17.5.68   LoadTable (Load Definition Block From XSDT)
38     *    Syntax
39     * LoadTable (SignatureString, OEMIDString, OEMTableIDString,
40     *   RootPathString, ParameterPathString, ParameterData) => DDBHandle
41     *
42     * On testing the following issues should be covered:
43     *
44     * - loading from the XSDT of a Definition Block in which the Signature
45     *   field (should differ from "DSDT" and "SSDT") matches SignatureString,
46     *   the OEM ID field matches OEMIDString, and the OEM Table ID matches
47     *   OEMTableIDString,
48     *
49     * - all comparisons are case sensitive,
50     *
51     * - the result of the LoadTable operator is an Object of the DDBHandle type,
52     *
53     * - if no table matches the specified parameters, then 0 is returned,
54     *
55     * - the DDBHandle Object returned from the LoadTable operator can be used
56     *   to unload the table,
57     *
58     * - any of the optional parameters (RootPathString, ParameterPathString,
59     *   and ParameterData) can be omitted,
60     *
61     * - different sources of the String parameters: literals, Named Objects,
62     *   LocalX, ArgX, elements of Packages, results of functions, any TermArg
63     *
64     * - different sources of the optional parameters: literals, Named Objects,
65     *   LocalX, ArgX, elements of Packages, results of functions, any TermArg
66     *
67     * - implicit operand conversion of the parameters specified to be strings,
68     *
69     * - namespace location to load the Definition Block is determined by the
70     *   RootPathString parameter,
71     *
72     * - the RootPathString is evaluated using normal scoping rules, assuming
73     *   that the scope of the LoadTable operator is the current scope,
74     *
75     * - if RootPathString is not specified, "\" is assumed,
76     *
77     * - if ParameterPathString and ParameterData are specified, the data object
78     *   specified by ParameterData is stored into the object specified by
79     *   ParameterPathString after the table has been added into the namespace,
80     *
81     * - if the first character of ParameterPathString is a backslash or caret
82     *   character, then the path of the object is ParameterPathString. Otherwise,
83     *   it is RootPathString.ParameterPathString,
84     *
85     * - if some SSDT matching the LoadTable parameters is originally not listed
86     *   in XSDT, LoadTable returns 0,
87     *
88     * - exceptional conditions caused by inappropriate data:
89     *   = the SignatureString is greater than four characters,
90     *   = the OEMIDString is greater than six characters,
91     *   = the OEMTableID is greater than eight characters,
92     *   = incorrect types of the parameters,
93     *   = some DSDT or SSDT matching the LoadTable parameters is already loaded
94     *     (actually on initial loading of tables listed in XSDT),
95     *   = the matched table is already loaded,
96     *   = there already is an previously loaded Object referred by the path
97     *     in the Namespace,
98     *   = the object specified by the ParameterPathString does not exist,
99     *   = storing of data of the ParameterData data type is not allowed,
100     *   = AE_OWNER_ID_LIMIT exception when too many Tables loaded.
101     *
102     * Can not be tested following issues:
103     * - providing of the table matched the LoadTable parameters to be "in memory
104     *   marked by AddressRangeReserved or AddressRangeNVS",
105     * - overriding the supplied table with "a newer revision Definition Block
106     *   of the same OEM Table ID" by the OS,
107     * - loading a Definition Block to be a synchronous operation ("the control
108     *   methods defined in the Definition Block are not executed during load
109     *   time").
110     *
111     * Note: the tests is based on the current representation of the auxiliary
112     *       OEM1 table in the artificial set of tables in the RSDT of acpiexec.
113     */
114    Name (Z176, 0xB0)
115    Device (DTM2)
116    {
117        Device (DEVR)
118        {
119            Name (S000, "DEVR")
120        }
121
122        /* Contents of the OEM1 signature table addressed by the RSDT in acpiexec */
123
124        Name (OEMT, Buffer (0x38)
125        {
126            /* 0000 */  0x4F, 0x45, 0x4D, 0x31, 0x38, 0x00, 0x00, 0x00,  // OEM18...
127            /* 0008 */  0x01, 0x4B, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x00,  // .KIntel.
128            /* 0010 */  0x4D, 0x61, 0x6E, 0x79, 0x00, 0x00, 0x00, 0x00,  // Many....
129            /* 0018 */  0x01, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x54, 0x4C,  // ....INTL
130            /* 0020 */  0x18, 0x09, 0x03, 0x20, 0x08, 0x5F, 0x58, 0x54,  // ... ._XT
131            /* 0028 */  0x32, 0x0A, 0x04, 0x14, 0x0C, 0x5F, 0x58, 0x54,  // 2...._XT
132            /* 0030 */  0x31, 0x00, 0x70, 0x01, 0x5F, 0x58, 0x54, 0x32   // 1.p._XT2
133        })
134        CreateField (OEMT, 0x00, 0x20, FOEM)
135        CreateField (OEMT, 0x50, 0x30, FOID)
136        CreateField (OEMT, 0x80, 0x40, FTID)
137        Name (SOEM, "OEM1")
138        Name (SOID, "Intel")
139        Name (STID, "Many")
140        Name (POEM, Package (0x03)
141        {
142            "OEM1",
143            "Intel",
144            "Many"
145        })
146        Name (RPST, "\\DTM2")
147        Name (PLDT, 0x00)
148        Name (PPST, "\\DTM2.PLDT")
149        Name (DDBH, 0x00)
150        /* Check DataTable Region */
151
152        Method (CHDR, 1, Serialized)
153        {
154            DataTableRegion (DR00, "OEM1", "", "")
155            Field (DR00, AnyAcc, NoLock, Preserve)
156            {
157                FU00,   448
158            }
159
160            Concatenate (Arg0, "-tst0", Arg0)
161            If ((OEMT != FU00))
162            {
163                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, FU00, OEMT)
164                Return (0x01)
165            }
166
167            Return (0x00)
168        }
169
170        /* Simple Loadtable test */
171
172        Method (TST0, 1, Serialized)
173        {
174            Name (DDBH, 0x00)
175            Concatenate (Arg0, "-tst0", Arg0)
176            If (CHDR (Arg0))
177            {
178                Return (0x01)
179            }
180
181            If (CondRefOf (\_XT2, Local0))
182            {
183                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
184                Return (0x01)
185            }
186
187            \DTM2.PLDT = 0x00
188            DDBH = LoadTable ("OEM1", "", "", "\\", PPST, 0x01)
189            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
190            {
191                Return (0x01)
192            }
193
194            Local1 = ObjectType (DDBH)
195            If ((Local1 != C017))
196            {
197                /* DDB Handle */
198
199                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
200                Return (0x01)
201            }
202
203            If ((0x01 != \DTM2.PLDT))
204            {
205                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
206            }
207
208            If (CondRefOf (\_XT2, Local0)){}
209            Else
210            {
211                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
212            }
213
214            Unload (DDBH)
215            Debug = "OEM1 unloaded"
216            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
217            {
218                Return (0x01)
219            }
220
221            If (CondRefOf (\_XT2, Local0))
222            {
223                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
224            }
225
226            Return (0x00)
227        }
228
229        /* All comparisons of Loadtable parameters are case sensitive, */
230        /* if no table matches the specified parameters, then 0 is returned */
231        Method (TST1, 1, Serialized)
232        {
233            Name (DDBH, 0x00)
234            Concatenate (Arg0, "-tst1", Arg0)
235            If (CondRefOf (\_XT2, Local0))
236            {
237                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
238                Return (0x01)
239            }
240
241            /* Successful comparison */
242
243            \DTM2.PLDT = 0x00
244            If (Y281)
245            {
246                DDBH = LoadTable ("OEM1", "Intel", "Many", "\\", PPST, 0x01)
247            }
248            Else
249            {
250                DDBH = LoadTable ("OEM1", "", "", "\\", PPST, 0x01)
251            }
252
253            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
254            {
255                Return (0x01)
256            }
257
258            Local1 = ObjectType (DDBH)
259            If ((Local1 != C017))
260            {
261                /* DDB Handle */
262
263                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
264                Return (0x01)
265            }
266
267            If ((0x01 != \DTM2.PLDT))
268            {
269                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
270            }
271
272            If (CondRefOf (\_XT2, Local0)){}
273            Else
274            {
275                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
276            }
277
278            Unload (DDBH)
279            Debug = "OEM1 unloaded"
280            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
281            {
282                Return (0x01)
283            }
284
285            If (CondRefOf (\_XT2, Local0))
286            {
287                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
288            }
289
290            /* Unhappy comparison due to the SignatureString */
291
292            \DTM2.PLDT = 0x00
293            Local1 = ObjectType (Local2)
294            If ((Local1 != C008))
295            {
296                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C008)
297            }
298
299            Local2 = LoadTable ("OeM1", "Intel", "Many", "\\", PPST, 0x01)
300            If (Y281)
301            {
302                /* No exception */
303
304                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
305                {
306                    Return (0x01)
307                }
308            }
309            ElseIf            /* Exception: AE_BAD_SIGNATURE */
310
311 (CH04 (Arg0, 0x01, 0x25, Z176, __LINE__, 0x00, 0x00))
312            {
313                Return (0x01)
314            }
315
316            Local1 = ObjectType (Local2)
317            If (Y281)
318            {
319                If ((Local1 != C009))
320                {
321                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C009)
322                }
323
324                If ((Local2 != 0x00))
325                {
326                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local2, 0x00)
327                }
328            }
329            ElseIf ((Local1 != C008))
330            {
331                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C008)
332            }
333
334            If ((0x00 != \DTM2.PLDT))
335            {
336                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
337            }
338
339            If (CondRefOf (\_XT2, Local0))
340            {
341                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
342            }
343
344            /* Unhappy comparison due to the OEMIDString */
345
346            \DTM2.PLDT = 0x00
347            Local1 = ObjectType (Local3)
348            If ((Local1 != C008))
349            {
350                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C008)
351            }
352
353            Local3 = LoadTable ("OEM1", "InteL", "Many", "\\", PPST, 0x01)
354            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
355            {
356                Return (0x01)
357            }
358
359            Local1 = ObjectType (Local3)
360            If ((Local1 != C009))
361            {
362                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C009)
363            }
364
365            If ((Local3 != 0x00))
366            {
367                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local3, 0x00)
368            }
369
370            If ((0x00 != \DTM2.PLDT))
371            {
372                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
373            }
374
375            If (CondRefOf (\_XT2, Local0))
376            {
377                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
378            }
379
380            /* Unhappy comparison due to the OEMTableIDString */
381
382            \DTM2.PLDT = 0x00
383            Local1 = ObjectType (Local4)
384            If ((Local1 != C008))
385            {
386                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C008)
387            }
388
389            Local4 = LoadTable ("OEM1", "Intel", "many", "\\", PPST, 0x01)
390            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
391            {
392                Return (0x01)
393            }
394
395            Local1 = ObjectType (Local4)
396            If ((Local1 != C009))
397            {
398                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C009)
399            }
400
401            If ((Local4 != 0x00))
402            {
403                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local4, 0x00)
404            }
405
406            If ((0x00 != \DTM2.PLDT))
407            {
408                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
409            }
410
411            If (CondRefOf (\_XT2, Local0))
412            {
413                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
414            }
415
416            Return (0x00)
417        }
418
419        /* Any of the RootPathString, ParameterPathString, and ParameterData */
420        /* parameters in LoadTable expression can be omitted */
421        Method (TST2, 1, Serialized)
422        {
423            Name (DDB0, 0x00)
424            Name (DDB1, 0x00)
425            Name (DDB2, 0x00)
426            Name (DDB3, 0x00)
427            Concatenate (Arg0, "-tst2", Arg0)
428            If (CondRefOf (\_XT2, Local0))
429            {
430                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
431                Return (0x01)
432            }
433
434            /* Check when RootPathString omitted */
435
436            \DTM2.PLDT = 0x00
437            DDB0 = LoadTable ("OEM1", "", "", "", PPST, 0x01)
438            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
439            {
440                Return (0x01)
441            }
442
443            Local1 = ObjectType (DDB0)
444            If ((Local1 != C017))
445            {
446                /* DDB Handle */
447
448                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
449                Return (0x01)
450            }
451
452            If ((0x01 != \DTM2.PLDT))
453            {
454                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
455            }
456
457            If (CondRefOf (\_XT2, Local0)){}
458            Else
459            {
460                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
461            }
462
463            Unload (DDB0)
464            Debug = "OEM1 unloaded"
465            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
466            {
467                Return (0x01)
468            }
469
470            If (CondRefOf (\_XT2, Local0))
471            {
472                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
473            }
474
475            /* Check when ParameterPathString omitted */
476
477            \DTM2.PLDT = 0x00
478            DDB1 = LoadTable ("OEM1", "", "", "\\", "", 0x01)
479            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
480            {
481                Return (0x01)
482            }
483
484            Local1 = ObjectType (DDB1)
485            If ((Local1 != C017))
486            {
487                /* DDB Handle */
488
489                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
490                Return (0x01)
491            }
492
493            If ((0x00 != \DTM2.PLDT))
494            {
495                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
496            }
497
498            If (CondRefOf (\_XT2, Local0)){}
499            Else
500            {
501                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
502            }
503
504            Unload (DDB1)
505            Debug = "OEM1 unloaded"
506            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
507            {
508                Return (0x01)
509            }
510
511            If (CondRefOf (\_XT2, Local0))
512            {
513                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
514            }
515
516            /* Check when ParameterData omitted */
517
518            \DTM2.PLDT = 0x00
519            DDB2 = LoadTable ("OEM1", "", "", "\\", PPST, Zero)
520            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
521            {
522                Return (0x01)
523            }
524
525            Local1 = ObjectType (DDB2)
526            If ((Local1 != C017))
527            {
528                /* DDB Handle */
529
530                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
531                Return (0x01)
532            }
533
534            If ((0x00 != \DTM2.PLDT))
535            {
536                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
537            }
538
539            If (CondRefOf (\_XT2, Local0)){}
540            Else
541            {
542                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
543            }
544
545            Unload (DDB2)
546            Debug = "OEM1 unloaded"
547            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
548            {
549                Return (0x01)
550            }
551
552            If (CondRefOf (\_XT2, Local0))
553            {
554                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
555            }
556
557            /* Check when all optional parameters omitted */
558
559            \DTM2.PLDT = 0x00
560            DDB3 = LoadTable ("OEM1", "", "", "", "", Zero)
561            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
562            {
563                Return (0x01)
564            }
565
566            Local1 = ObjectType (DDB3)
567            If ((Local1 != C017))
568            {
569                /* DDB Handle */
570
571                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
572                Return (0x01)
573            }
574
575            If ((0x00 != \DTM2.PLDT))
576            {
577                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
578            }
579
580            If (CondRefOf (\_XT2, Local0)){}
581            Else
582            {
583                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
584            }
585
586            Unload (DDB3)
587            Debug = "OEM1 unloaded"
588            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
589            {
590                Return (0x01)
591            }
592
593            If (CondRefOf (\_XT2, Local0))
594            {
595                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
596            }
597
598            Return (0x00)
599        }
600
601        /* Different sources of the String parameters: Named Objects, LocalX, */
602        /* ArgX, elements of Packages, results of functions, any TermArg */
603        Method (TST3, 1, Serialized)
604        {
605            Name (DDB0, 0x00)
606            Name (DDB1, 0x00)
607            Name (DDB2, 0x00)
608            Name (DDB3, 0x00)
609            Name (DDB4, 0x00)
610            Name (DDB5, 0x00)
611            Name (DDB6, 0x00)
612            Name (SOID, "")
613            Name (STID, "")
614            Name (POEM, Package (0x03)
615            {
616                "OEM1",
617                "",
618                ""
619            })
620            Method (M000, 1, NotSerialized)
621            {
622                Return (Arg0)
623            }
624
625            Method (M001, 3, NotSerialized)
626            {
627                Concatenate (Arg0, Arg2, Arg0)
628                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
629                {
630                    Return (0x01)
631                }
632
633                Local1 = ObjectType (Arg1)
634                If ((Local1 != C017))
635                {
636                    /* DDB Handle */
637
638                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
639                    Return (0x01)
640                }
641
642                If ((0x00 != \DTM2.PLDT))
643                {
644                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
645                }
646
647                If (CondRefOf (\_XT2, Local0)){}
648                Else
649                {
650                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x00)
651                }
652
653                Unload (Arg1)
654                Debug = "OEM1 unloaded"
655                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
656                {
657                    Return (0x01)
658                }
659
660                If (CondRefOf (\_XT2, Local0))
661                {
662                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x01)
663                    Return (0x01)
664                }
665
666                Return (0x00)
667            }
668
669            Method (M002, 3, NotSerialized)
670            {
671                Return (LoadTable (Arg0, DerefOf (Arg1), DerefOf (Arg2), "", "", Zero))
672            }
673
674            Method (M003, 3, NotSerialized)
675            {
676                Return (LoadTable (DerefOf (Arg0), Arg1, DerefOf (Arg2), "", "", Zero))
677            }
678
679            Method (M004, 3, NotSerialized)
680            {
681                Return (LoadTable (DerefOf (Arg0), DerefOf (Arg1), Arg2, "", "", Zero))
682            }
683
684            Concatenate (Arg0, "-tst3", Arg0)
685            If (Y281)
686            {
687                SOID = ^SOID /* \DTM2.SOID */
688                STID = ^STID /* \DTM2.STID */
689                POEM = ^POEM /* \DTM2.POEM */
690            }
691
692            If (CondRefOf (\DTM2._XT2, Local0))
693            {
694                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
695                Return (0x01)
696            }
697
698            /* Check LoadTable(Named, LocalX, Method(), , , ) */
699
700            \DTM2.PLDT = 0x00
701            Local2 = SOID /* \DTM2.TST3.SOID */
702            DDB0 = LoadTable (SOEM, Local2, M000 (STID), "", "", Zero)
703            If (M001 (Arg0, DDB0, ".NLM"))
704            {
705                Return (0x01)
706            }
707
708            /* Check LoadTable(Method(), Named, LocalX, , , ) */
709
710            \DTM2.PLDT = 0x00
711            Local2 = STID /* \DTM2.TST3.STID */
712            DDB1 = LoadTable (M000 (SOEM), SOID, Local2, "", "", Zero)
713            If (M001 (Arg0, DDB1, ".MNL"))
714            {
715                Return (0x01)
716            }
717
718            /* Check LoadTable(LocalX, Method(), Named, , , ) */
719
720            \DTM2.PLDT = 0x00
721            Local2 = SOEM /* \DTM2.SOEM */
722            DDB2 = LoadTable (Local2, M000 (SOID), STID, "", "", Zero)
723            If (M001 (Arg0, DDB2, ".LMN"))
724            {
725                Return (0x01)
726            }
727
728            /* Check LoadTable(ArgX, Derefof(Refof), Derefof(Index), , , ) */
729
730            \DTM2.PLDT = 0x00
731            Local2 = RefOf (SOID)
732            Store (POEM [0x02], Local3)
733            DDB3 = M002 (SOEM, Local2, Local3)
734            If (M001 (Arg0, DDB3, ".ARI"))
735            {
736                Return (0x01)
737            }
738
739            /* Check LoadTable(Derefof(Index), ArgX, Derefof(Refof), , , ) */
740
741            \DTM2.PLDT = 0x00
742            Local2 = RefOf (STID)
743            Store (POEM [0x00], Local3)
744            DDB4 = M003 (Local3, SOID, Local2)
745            If (M001 (Arg0, DDB4, ".IAR"))
746            {
747                Return (0x01)
748            }
749
750            /* Check LoadTable(Derefof(Refof), Derefof(Index), ArgX, , , ) */
751
752            \DTM2.PLDT = 0x00
753            Local2 = RefOf (SOEM)
754            Store (POEM [0x01], Local3)
755            DDB5 = M004 (Local2, Local3, STID)
756            If (M001 (Arg0, DDB5, ".RIA"))
757            {
758                Return (0x01)
759            }
760
761            /* Check LoadTable(TermArg, TermArg, TermArg, , , ) */
762
763            \DTM2.PLDT = 0x00
764            Local2 = Concatenate ("term", SOEM)
765            Local2 = ToBuffer (Local2)
766            Local3 = ToBuffer (SOID)
767            Local4 = ""
768            DDB6 = LoadTable (Mid (ToString (Local2, Ones), 0x04, 0x04), ToString (
769                M000 (Local3), Ones), Concatenate (M000 (STID), Local4), "", "", Zero)
770            If (M001 (Arg0, DDB6, ".TTT"))
771            {
772                Return (0x01)
773            }
774
775            Return (0x00)
776        }
777
778        /* Different sources of the optional parameters (RootPathString, */
779        /* ParameterPathString, and ParameterData): Named Objects, LocalX, */
780        /* ArgX, elements of Packages, results of functions, any TermArg */
781        Method (TST4, 1, Serialized)
782        {
783            Name (DDB0, 0x00)
784            Name (DDB1, 0x00)
785            Name (DDB2, 0x00)
786            Name (DDB3, 0x00)
787            Name (DDB4, 0x00)
788            Name (DDB5, 0x00)
789            Name (DDB6, 0x00)
790            Name (RPST, "\\DTM2")
791            Name (PPST, "\\DTM2.PLDT")
792            Name (NVAL, 0x01)
793            Name (POPT, Package (0x03)
794            {
795                "\\DTM2",
796                "\\DTM2.PLDT",
797                0x01
798            })
799            Method (M000, 1, NotSerialized)
800            {
801                Return (Arg0)
802            }
803
804            Method (M001, 3, NotSerialized)
805            {
806                Concatenate (Arg0, Arg2, Arg0)
807                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
808                {
809                    Return (0x01)
810                }
811
812                Local1 = ObjectType (Arg1)
813                If ((Local1 != C017))
814                {
815                    /* DDB Handle */
816
817                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
818                    Return (0x01)
819                }
820
821                If ((0x01 != \DTM2.PLDT))
822                {
823                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
824                }
825
826                If (CondRefOf (\DTM2._XT2, Local0)){}
827                Else
828                {
829                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x00)
830                }
831
832                Unload (Arg1)
833                Debug = "OEM1 unloaded"
834                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
835                {
836                    Return (0x01)
837                }
838
839                If (CondRefOf (\DTM2._XT2, Local0))
840                {
841                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x01)
842                    Return (0x01)
843                }
844
845                Return (0x00)
846            }
847
848            Method (M002, 3, NotSerialized)
849            {
850                /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
851                /*			return (LoadTable("OEM1", "", "", Arg0, Derefof(Arg1), Derefof(Arg2))) */
852                /*	                                        parse error, expecting `')'' ^ */
853                Return (LoadTable ("OEM1", "", "", Arg0, DerefOf (Arg1), 0x01))
854            }
855
856            Method (M003, 3, NotSerialized)
857            {
858                /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
859                /*			return (LoadTable("OEM1", "", "", Derefof(Arg0), Arg1, Derefof(Arg2))) */
860                /*	                                        parse error, expecting `')'' ^ */
861                Return (LoadTable ("OEM1", "", "", DerefOf (Arg0), Arg1, 0x01))
862            }
863
864            Method (M004, 3, NotSerialized)
865            {
866                /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
867                /*			return (LoadTable("OEM1", "", "", Derefof(Arg0), Derefof(Arg1), Arg2)) */
868                /*	                                              parse error, expecting `')'' ^ */
869                Return (LoadTable ("OEM1", "", "", DerefOf (Arg0), DerefOf (Arg1), 0x01))
870            }
871
872            Concatenate (Arg0, "-tst4", Arg0)
873            If (CondRefOf (\DTM2._XT2, Local0))
874            {
875                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x01)
876                Return (0x01)
877            }
878
879            /* Check LoadTable(..., Named, LocalX, Method()) */
880
881            \DTM2.PLDT = 0x00
882            Local2 = PPST /* \DTM2.TST4.PPST */
883            /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
884            /*		Store(LoadTable("OEM1", "", "", RPST, Local2, m000(1)), DDB0) */
885            /*	                         parse error, expecting `')'' ^ */
886            DDB0 = LoadTable ("OEM1", "", "", RPST, Local2, 0x01)
887            If (M001 (Arg0, DDB0, ".NLM"))
888            {
889                Return (0x01)
890            }
891
892            /* Check LoadTable(..., Method(), Named, LocalX) */
893
894            \DTM2.PLDT = 0x00
895            Local2 = 0x01
896            /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
897            /*		Store(LoadTable("OEM1", "", "", m000(RPST), PPST, Local2), DDB1) */
898            /*	                              parse error, expecting `')'' ^ */
899            DDB1 = LoadTable ("OEM1", "", "", M000 (RPST), PPST, 0x01)
900            If (M001 (Arg0, DDB1, ".MNL"))
901            {
902                Return (0x01)
903            }
904
905            /* Check LoadTable(..., LocalX, Method(), Named) */
906
907            \DTM2.PLDT = 0x00
908            Local2 = RPST /* \DTM2.TST4.RPST */
909            DDB2 = LoadTable ("OEM1", "", "", Local2, M000 (PPST), NVAL)
910            If (M001 (Arg0, DDB2, ".LMN"))
911            {
912                Return (0x01)
913            }
914
915            /* Check LoadTable(..., ArgX, Derefof(Refof), Derefof(Index)) */
916
917            \DTM2.PLDT = 0x00
918            Local2 = RefOf (PPST)
919            Store (POPT [0x02], Local3)
920            DDB3 = M002 (RPST, Local2, Local3)
921            If (M001 (Arg0, DDB3, ".ARI"))
922            {
923                Return (0x01)
924            }
925
926            /* Check LoadTable(..., Derefof(Index), ArgX, Derefof(Refof)) */
927
928            \DTM2.PLDT = 0x00
929            Local2 = RefOf (NVAL)
930            Store (POPT [0x00], Local3)
931            DDB4 = M003 (Local3, PPST, Local2)
932            If (M001 (Arg0, DDB4, ".ARI"))
933            {
934                Return (0x01)
935            }
936
937            /* Check LoadTable(..., Derefof(Refof), Derefof(Index), ArgX) */
938
939            \DTM2.PLDT = 0x00
940            Local2 = RefOf (RPST)
941            Store (POPT [0x01], Local3)
942            DDB5 = M004 (Local2, Local3, NVAL)
943            If (M001 (Arg0, DDB5, ".ARI"))
944            {
945                Return (0x01)
946            }
947
948            /* Check LoadTable(..., TermArg, TermArg, TermArg) */
949
950            \DTM2.PLDT = 0x00
951            Local2 = Concatenate ("term", RPST)
952            Local2 = ToBuffer (Local2)
953            Local3 = ToBuffer (PPST)
954            Local4 = 0x03
955            DDB6 = LoadTable ("OEM1", "", "", Mid (ToString (Local2, Ones), 0x04,
956                0x05), ToString (M000 (Local3), Ones),                     /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
957                    /*				Subtract(m000(Local4), 2)), */
958(0x03 - 0x02))
959            If (M001 (Arg0, DDB6, ".TTT"))
960            {
961                Return (0x01)
962            }
963
964            Return (0x00)
965        }
966
967        /* Namespace location to load the Definition Block is determined */
968        /* by the RootPathString parameter of Loadtable */
969        /* Arg1: RootPathString */
970        Method (TST5, 2, Serialized)
971        {
972            Name (DDBH, 0x00)
973            Concatenate (Arg0, "-tst5", Arg0)
974            If (CondRefOf (\_XT2, Local0))
975            {
976                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
977                Return (0x01)
978            }
979
980            If (CondRefOf (\DTM2.DEVR._XT2, Local0))
981            {
982                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2.DEVR._XT2", 0x01)
983                Return (0x01)
984            }
985
986            \DTM2.PLDT = 0x00
987            DDBH = LoadTable ("OEM1", "", "", Arg1, PPST, 0x01)
988            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
989            {
990                Return (0x01)
991            }
992
993            Local1 = ObjectType (DDBH)
994            If ((Local1 != C017))
995            {
996                /* DDB Handle */
997
998                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
999                Return (0x01)
1000            }
1001
1002            If ((0x01 != \DTM2.PLDT))
1003            {
1004                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1005            }
1006
1007            If (CondRefOf (\_XT2, Local0))
1008            {
1009                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1010            }
1011
1012            If (CondRefOf (\DTM2.DEVR._XT2, Local0)){}
1013            Else
1014            {
1015                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2.DEVR._XT2", 0x00)
1016            }
1017
1018            Unload (DDBH)
1019            Debug = "OEM1 unloaded"
1020            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1021            {
1022                Return (0x01)
1023            }
1024
1025            If (CondRefOf (\_XT2, Local0))
1026            {
1027                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1028            }
1029
1030            If (CondRefOf (\DTM2.DEVR._XT2, Local0))
1031            {
1032                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2.DEVR._XT2", 0x01)
1033            }
1034
1035            Return (0x00)
1036        }
1037
1038        /* "\" is assumed to be Namespace location to load the Definition */
1039        /* Block if RootPathString parameter is not specified */
1040        Method (TST6, 1, Serialized)
1041        {
1042            Name (DDBH, 0x00)
1043            Concatenate (Arg0, "-tst6", Arg0)
1044            If (CondRefOf (\_XT2, Local0))
1045            {
1046                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1047                Return (0x01)
1048            }
1049
1050            \DTM2.PLDT = 0x00
1051            DDBH = LoadTable ("OEM1", "", "", "", PPST, 0x01)
1052            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1053            {
1054                Return (0x01)
1055            }
1056
1057            Local1 = ObjectType (DDBH)
1058            If ((Local1 != C017))
1059            {
1060                /* DDB Handle */
1061
1062                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
1063                Return (0x01)
1064            }
1065
1066            If ((0x01 != \DTM2.PLDT))
1067            {
1068                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1069            }
1070
1071            If (CondRefOf (\_XT2, Local0)){}
1072            Else
1073            {
1074                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
1075            }
1076
1077            Unload (DDBH)
1078            Debug = "OEM1 unloaded"
1079            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1080            {
1081                Return (0x01)
1082            }
1083
1084            If (CondRefOf (\_XT2, Local0))
1085            {
1086                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1087            }
1088
1089            Return (0x00)
1090        }
1091
1092        /* If the first character of ParameterPathString is a backslash */
1093        /* or caret character, then the path of the object set up on success */
1094        /* is ParameterPathString. It is RootPathString.ParameterPathString */
1095        /* in any case. */
1096        Method (TST7, 1, Serialized)
1097        {
1098            Name (DDBH, 0x00)
1099            Name (PLDT, 0x00)
1100            Concatenate (Arg0, "-tst7", Arg0)
1101            DDBH = LoadTable ("OEM1", "", "", RPST, "^TST7.PLDT", 0x01)
1102            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1103            {
1104                Return (0x01)
1105            }
1106
1107            Local1 = ObjectType (DDBH)
1108            If ((Local1 != C017))
1109            {
1110                /* DDB Handle */
1111
1112                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
1113                Return (0x01)
1114            }
1115
1116            If ((0x01 != PLDT))
1117            {
1118                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, PLDT, 0x01)
1119            }
1120
1121            Unload (DDBH)
1122            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1123            {
1124                Return (0x01)
1125            }
1126
1127            PLDT = 0x00
1128            \DTM2.PLDT = 0x00
1129            DDBH = LoadTable ("OEM1", "", "", RPST, "PLDT", 0x01)
1130            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1131            {
1132                Return (0x01)
1133            }
1134
1135            Local1 = ObjectType (DDBH)
1136            If ((Local1 != C017))
1137            {
1138                /* DDB Handle */
1139
1140                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
1141                Return (0x01)
1142            }
1143
1144            If ((0x00 != PLDT))
1145            {
1146                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, PLDT, 0x00)
1147            }
1148
1149            If ((0x01 != \DTM2.PLDT))
1150            {
1151                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1152            }
1153
1154            Unload (DDBH)
1155            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1156            {
1157                Return (0x01)
1158            }
1159
1160            Return (0x00)
1161        }
1162
1163        /* Exceptions when the SignatureString is greater than four characters, */
1164        /* the OEMIDString is greater than six characters, or the OEMTableID is */
1165        /* greater than eight characters */
1166        Method (TST8, 1, Serialized)
1167        {
1168            Name (DDBH, 0x00)
1169            Concatenate (Arg0, "-tst8", Arg0)
1170            \DTM2.PLDT = 0x00
1171            /* SignatureString is greater than four characters */
1172
1173            If (Y287)
1174            {
1175                DDBH = LoadTable ("OEM1X", "", "", RPST, PPST, 0x01)
1176            }
1177            Else
1178            {
1179                LoadTable ("OEM1X", "", "", RPST, PPST, 0x01)
1180            }
1181
1182            CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1183            If ((0x00 != \DTM2.PLDT))
1184            {
1185                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1186                If (Y287)
1187                {
1188                    Return (0x01)
1189                }
1190                Else
1191                {
1192                    /* Cleanup */
1193
1194                    Unload (DDBH)
1195                    \DTM2.PLDT = 0x00
1196                }
1197            }
1198
1199            /* OEMIDString is greater than six characters */
1200
1201            LoadTable ("OEM1", "IntelXX", "", RPST, PPST, 0x01)
1202            CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1203            If ((0x00 != \DTM2.PLDT))
1204            {
1205                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1206                Return (0x01)
1207            }
1208
1209            /* OEMTableID is greater than eight characters */
1210
1211            LoadTable ("OEM1", "", "ManyXXXXX", RPST, PPST, 0x01)
1212            CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1213            If ((0x00 != \DTM2.PLDT))
1214            {
1215                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1216                Return (0x01)
1217            }
1218
1219            Return (0x00)
1220        }
1221
1222        /* Exceptions when some DSDT or SSDT matching the LoadTable parameters */
1223        /* is already loaded (actually on initial loading of tables listed in XSDT) */
1224        Method (TST9, 1, NotSerialized)
1225        {
1226            Concatenate (Arg0, "-tst9", Arg0)
1227            \DTM2.PLDT = 0x00
1228            /* SignatureString is "DSDT" */
1229
1230            LoadTable ("DSDT", "", "", RPST, PPST, 0x01)
1231            CH04 (Arg0, 0x00, 0x07, Z176, __LINE__, 0x00, 0x00)  /* AE_ALREADY_EXISTS */
1232            If ((0x00 != \DTM2.PLDT))
1233            {
1234                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1235            }
1236
1237            /* SignatureString is "SSDT" */
1238
1239            LoadTable ("SSDT", "", "", RPST, PPST, 0x01)
1240            CH04 (Arg0, 0x00, 0x07, Z176, __LINE__, 0x00, 0x00)  /* AE_ALREADY_EXISTS */
1241            If ((0x00 != \DTM2.PLDT))
1242            {
1243                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1244            }
1245
1246            Return (0x00)
1247        }
1248
1249        /* Exceptions when the matched table is already loaded */
1250
1251        Method (TSTA, 1, Serialized)
1252        {
1253            Name (DDBH, 0x00)
1254            Concatenate (Arg0, "-tsta", Arg0)
1255            If (CondRefOf (\_XT2, Local0))
1256            {
1257                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1258                Return (0x01)
1259            }
1260
1261            \DTM2.PLDT = 0x00
1262            DDBH = LoadTable ("OEM1", "", "", "\\", PPST, 0x01)
1263            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1264            {
1265                Return (0x01)
1266            }
1267
1268            Local1 = ObjectType (DDBH)
1269            If ((Local1 != C017))
1270            {
1271                /* DDB Handle */
1272
1273                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
1274                Return (0x01)
1275            }
1276
1277            If ((0x01 != \DTM2.PLDT))
1278            {
1279                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1280            }
1281
1282            If (CondRefOf (\_XT2, Local0)){}
1283            Else
1284            {
1285                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
1286            }
1287
1288            \DTM2.PLDT = 0x00
1289            LoadTable ("OEM1", "", "", "\\DTM2", PPST, 0x01)
1290            CH04 (Arg0, 0x00, 0x07, Z176, __LINE__, 0x00, 0x00)  /* AE_ALREADY_EXISTS */
1291            If ((0x00 != \DTM2.PLDT))
1292            {
1293                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
1294            }
1295
1296            If (CondRefOf (\DTM2._XT2, Local0))
1297            {
1298                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\DTM2._XT2", 0x01)
1299            }
1300
1301            If (CondRefOf (\_XT2, Local0)){}
1302            Else
1303            {
1304                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
1305            }
1306
1307            Unload (DDBH)
1308            Debug = "OEM1 unloaded"
1309            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1310            {
1311                Return (0x01)
1312            }
1313
1314            If (CondRefOf (\_XT2, Local0))
1315            {
1316                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1317            }
1318
1319            Return (0x00)
1320        }
1321
1322        /* Originated from ssdt4.asl: iasl -tc ssdt4.asl */
1323
1324        Name (BUF4, Buffer (0x44)
1325        {
1326            /* 0000 */  0x53, 0x53, 0x44, 0x54, 0x44, 0x00, 0x00, 0x00,  // SSDTD...
1327            /* 0008 */  0x02, 0x08, 0x69, 0x41, 0x53, 0x4C, 0x54, 0x53,  // ..iASLTS
1328            /* 0010 */  0x4C, 0x54, 0x42, 0x4C, 0x30, 0x30, 0x30, 0x31,  // LTBL0001
1329            /* 0018 */  0x01, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x54, 0x4C,  // ....INTL
1330            /* 0020 */  0x15, 0x12, 0x06, 0x20, 0x10, 0x1F, 0x5C, 0x00,  // ... ..\.
1331            /* 0028 */  0x08, 0x5F, 0x58, 0x54, 0x32, 0x0D, 0x61, 0x62,  // ._XT2.ab
1332            /* 0030 */  0x73, 0x6F, 0x6C, 0x75, 0x74, 0x65, 0x20, 0x6C,  // solute l
1333            /* 0038 */  0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20,  // ocation
1334            /* 0040 */  0x6F, 0x62, 0x6A, 0x00                           // obj.
1335        })
1336        OperationRegion (IST4, SystemMemory, 0x0600, 0x44)
1337        Field (IST4, ByteAcc, NoLock, Preserve)
1338        {
1339            RFU4,   544
1340        }
1341
1342        /* Exceptions when there already is an previously loaded Object */
1343        /* referred by the path in the Namespace */
1344        Method (TSTB, 1, Serialized)
1345        {
1346            Name (DDBH, 0x00)
1347            Concatenate (Arg0, "-tstb", Arg0)
1348            If (CondRefOf (\_XT2, Local0))
1349            {
1350                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1351                Return (0x01)
1352            }
1353
1354            RFU4 = BUF4 /* \DTM2.BUF4 */
1355            Load (RFU4, DDBH) /* \DTM2.TSTB.DDBH */
1356            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1357            {
1358                Return (0x01)
1359            }
1360
1361            Local1 = ObjectType (DDBH)
1362            If ((Local1 != C017))
1363            {
1364                /* DDB Handle */
1365
1366                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, C017)
1367                Return (0x01)
1368            }
1369
1370            If (CondRefOf (\_XT2, Local0)){}
1371            Else
1372            {
1373                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
1374            }
1375
1376            \DTM2.PLDT = 0x00
1377            LoadTable ("OEM1", "", "", "\\", PPST, 0x01)
1378            CH04 (Arg0, 0x00, 0x07, Z176, __LINE__, 0x00, 0x00)  /* AE_ALREADY_EXISTS */
1379            If ((0x00 != \DTM2.PLDT))
1380            {
1381                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
1382            }
1383
1384            If (CondRefOf (\_XT2, Local0)){}
1385            Else
1386            {
1387                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x00)
1388            }
1389
1390            Unload (DDBH)
1391            Debug = "SSDT unloaded"
1392            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1393            {
1394                Return (0x01)
1395            }
1396
1397            If (CondRefOf (\_XT2, Local0))
1398            {
1399                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1400            }
1401
1402            Return (0x00)
1403        }
1404
1405        /* Exceptions when the object specified by the ParameterPathString */
1406        /* does not exist */
1407        Method (TSTC, 1, NotSerialized)
1408        {
1409            Concatenate (Arg0, "-tstc", Arg0)
1410            LoadTable ("DSDT", "", "", RPST, "\\DTM2.NULL", 0x01)
1411            CH04 (Arg0, 0x00, 0x05, Z176, __LINE__, 0x00, 0x00)  /* AE_NOT_FOUND */
1412            Return (0x00)
1413        }
1414
1415        /* Exceptions when storing of data of the ParameterData data type */
1416        /* to the specified object is not allowed. */
1417        Method (TSTD, 1, NotSerialized)
1418        {
1419            Concatenate (Arg0, "-tstd", Arg0)
1420            \DTM2.PLDT = 0x00
1421            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \DTM2.DEVR)
1422            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1423            If ((0x00 != \DTM2.PLDT))
1424            {
1425                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
1426            }
1427
1428            If (CondRefOf (\_XT2, Local0))
1429            {
1430                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1431            }
1432
1433            Return (0x00)
1434        }
1435
1436        /* Implicit operand conversion of the parameters specified to be strings */
1437
1438        Method (TSTE, 1, Serialized)
1439        {
1440            Name (DDBH, 0x02)
1441            Name (SOID, "")
1442            Name (STID, "")
1443            Name (RPST, "\\")
1444            Name (PPST, "DTM2.PLDT")
1445            Name (DSTR, "01234")
1446            Method (M000, 3, Serialized)
1447            {
1448                Name (DDBH, 0x02)
1449                \DTM2.PLDT = 0x00
1450                Concatenate (Arg0, "-m000.", Arg0)
1451                Concatenate (Arg0, Mid (DSTR, Arg2, 0x01), Arg0)
1452                Switch (ToInteger (Arg2))
1453                {
1454                    Case (0x00)
1455                    {
1456                        LoadTable (Arg1, SOID, STID, RPST, PPST, 0x01)
1457                        Return (CH04 (Arg0, 0x00, 0x25, Z176, __LINE__, 0x00, 0x00))/* AE_BAD_SIGNATURE */
1458                    }
1459                    Case (0x01)
1460                    {
1461                        DDBH = LoadTable (SOEM, Arg1, STID, RPST, PPST, 0x01)
1462                    }
1463                    Case (0x02)
1464                    {
1465                        DDBH = LoadTable (SOEM, SOID, Arg1, RPST, PPST, 0x01)
1466                    }
1467                    Case (0x03)
1468                    {
1469                        LoadTable (SOEM, SOID, STID, Arg1, PPST, 0x01)
1470                        Return (CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00)) /* AE_BAD_PATHNAME */
1471                    }
1472                    Case (0x04)
1473                    {
1474                        LoadTable (SOEM, SOID, STID, RPST, Arg1, 0x01)
1475                        Return (CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00)) /* AE_BAD_PATHNAME */
1476                    }
1477
1478                }
1479
1480                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1481                {
1482                    Return (0x01)
1483                }
1484
1485                If ((0x00 != \DTM2.PLDT))
1486                {
1487                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x00)
1488                    Return (0x01)
1489                }
1490
1491                Local5 = ObjectType (DDBH)
1492                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1493                {
1494                    Return (0x01)
1495                }
1496
1497                If ((Local5 != C009))
1498                {
1499                    /* Integer */
1500
1501                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local5, C009)
1502                    Return (0x01)
1503                }
1504
1505                If ((0x00 != DDBH))
1506                {
1507                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, DDBH, 0x00)
1508                    Return (0x01)
1509                }
1510
1511                Return (0x00)
1512            }
1513
1514            Concatenate (Arg0, "-tste", Arg0)
1515            If (Y281)
1516            {
1517                SOID = ^SOID /* \DTM2.SOID */
1518                STID = ^STID /* \DTM2.STID */
1519            }
1520
1521            /* Buffer to String implicit conversion, only check that then */
1522            /* no exception occurs. Actually due to the conversion rule */
1523            /* resulting strings will not match the table fields */
1524            ToBuffer (SOEM, Local0)
1525            ToBuffer (SOID, Local1)
1526            ToBuffer (STID, Local2)
1527            ToBuffer (RPST, Local3)
1528            ToBuffer (PPST, Local4)
1529            If (M000 (Arg0, Local0, 0x00))
1530            {
1531                Return (0x01)
1532            }
1533
1534            If (M000 (Arg0, Local1, 0x01))
1535            {
1536                Return (0x01)
1537            }
1538
1539            If (M000 (Arg0, Local2, 0x02))
1540            {
1541                Return (0x01)
1542            }
1543
1544            If (M000 (Arg0, Local3, 0x03))
1545            {
1546                Return (0x01)
1547            }
1548
1549            If (M000 (Arg0, Local4, 0x04))
1550            {
1551                Return (0x01)
1552            }
1553
1554            /* Check consistency of the parameters */
1555
1556            If ((ToBuffer (SOEM) != Local0))
1557            {
1558                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, ToBuffer (SOEM))
1559                Return (0x01)
1560            }
1561
1562            If ((ToBuffer (SOID) != Local1))
1563            {
1564                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local1, ToBuffer (SOID))
1565                Return (0x01)
1566            }
1567
1568            If ((ToBuffer (STID) != Local2))
1569            {
1570                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local2, ToBuffer (STID))
1571                Return (0x01)
1572            }
1573
1574            If ((ToBuffer (RPST) != Local3))
1575            {
1576                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local3, ToBuffer (RPST))
1577                Return (0x01)
1578            }
1579
1580            If ((ToBuffer (PPST) != Local4))
1581            {
1582                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local4, ToBuffer (PPST))
1583                Return (0x01)
1584            }
1585
1586            /* Integer to String implicit conversion */
1587
1588            ToInteger (Local0, Local0)
1589            ToInteger (Local1, Local1)
1590            ToInteger (Local2, Local2)
1591            ToInteger (Local3, Local3)
1592            ToInteger (Local4, Local4)
1593            /*if (m000(arg0, Local0, 0)) {return (1)} */
1594            /*if (m000(arg0, Local1, 1)) {return (1)} */
1595            /*if (m000(arg0, Local2, 2)) {return (1)} */
1596            If (M000 (Arg0, Local3, 0x03))
1597            {
1598                Return (0x01)
1599            }
1600
1601            If (M000 (Arg0, Local4, 0x04))
1602            {
1603                Return (0x01)
1604            }
1605
1606            /* Actual trivial Buffer to String implicit conversion */
1607
1608            If (Y293)
1609            {
1610                If (CondRefOf (\_XT2, Local0))
1611                {
1612                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1613                    Return (0x01)
1614                }
1615
1616                Local0 = 0x00
1617                Local1 = Buffer (Local0){}
1618                \DTM2.PLDT = 0x00
1619                DDBH = LoadTable (SOEM, Local1, Local1, RPST, PPST, 0x01)
1620                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1621                {
1622                    Return (0x01)
1623                }
1624
1625                If ((0x01 != \DTM2.PLDT))
1626                {
1627                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, 0x01)
1628                    Return (0x01)
1629                }
1630
1631                If (CondRefOf (\_XT2, Local0)){}
1632                Else
1633                {
1634                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1635                    Return (0x01)
1636                }
1637
1638                Unload (DDBH)
1639                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1640                {
1641                    Return (0x01)
1642                }
1643
1644                If (CondRefOf (\_XT2, Local0))
1645                {
1646                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, "\\_XT2", 0x01)
1647                    Return (0x01)
1648                }
1649            }
1650
1651            Return (0x00)
1652        }
1653
1654        /* LoadTable returns 0 if some SSDT matching the LoadTable */
1655        /* parameters is originally not listed in XSDT */
1656        /*
1657         * This test should never happen in real ASL code. So it is removed.
1658         *
1659         * The Load operation will add a table to global table list, which is
1660         * the master list that can be find in XSDT.
1661         *
1662         * The Unload operation will just delete the namespace owned by the table,
1663         * release OwnerId and reset the table flag, but the table remains in
1664         * global table list.
1665         *
1666         * So, LoadTable after Load and UnLoad operation will cause exception.
1667         *
1668         * Nothing like this should happen in real ASL code. The BIOS writer
1669         * knows whether the table is in the XSDT or not.
1670         */
1671        /*
1672         Method(tstf, 1)
1673         {
1674         Name(DDBH, 0)
1675         Concatenate(arg0, "-tstf", arg0)
1676         if (CondRefof(\_XT2, Local0)) {
1677         err(arg0, z176, __LINE__, 0, 0, "\\_XT2", 1)
1678         return (1)
1679         }
1680         Store(BUF4, RFU4)
1681         Load(RFU4, DDBH)
1682         if (CH03(arg0, z176, 0x0f2, __LINE__, 0)) {
1683         return (1)
1684         }
1685         Store(ObjectType(DDBH), Local1)
1686         if (LNotEqual(Local1, c017)) { // DDB Handle
1687         err(arg0, z176, __LINE__, 0, 0, Local1, c017)
1688         return (1)
1689         }
1690         if (CondRefof(\_XT2, Local0)) {
1691         } else {
1692         err(arg0, z176, __LINE__, 0, 0, "\\_XT2", 0)
1693         }
1694         UnLoad(DDBH)
1695         Store("SSDT unloaded", Debug)
1696         if (CH03(arg0, z176, 0x0f5, __LINE__, 0)) {
1697         return (1)
1698         }
1699         if (CondRefof(\_XT2, Local0)) {
1700         err(arg0, z176, __LINE__, 0, 0, "\\_XT2", 1)
1701         return (1)
1702         }
1703         Store(0, \DTM2.PLDT)
1704         if (y289) {
1705         LoadTable("SSDT", "iASLTS", "LTBL0001", "\\", PPST, 1)
1706         } else {
1707         Store(LoadTable("SSDT", "iASLTS", "LTBL0001", "\\", PPST, 1), DDBH)
1708         }
1709         CH04(arg0, 0, 28, z176, __LINE__, 0, 0)	// AE_BAD_PARAMETER
1710         if (LNotEqual(0, \DTM2.PLDT)) {
1711         err(arg0, z176, __LINE__, 0, 0, \DTM2.PLDT, 0)
1712         }
1713         if (CondRefof(\_XT2, Local0)) {
1714         err(arg0, z176, __LINE__, 0, 0, "\\_XT2", 1)
1715         if (y289) {
1716         // Cleanup
1717         UnLoad(DDBH)
1718         }
1719         }
1720         return (0)
1721         }
1722         */
1723        /* AE_OWNER_ID_LIMIT exception when too many Tables loaded */
1724        Method (TSTG, 1, NotSerialized)
1725        {
1726            Concatenate (Arg0, "-tstg-\\DTM0", Arg0)
1727            \DTM0.TSTH (Arg0, 0x01)
1728        }
1729
1730        /* Exceptions when the parameter of the Loadtable operator */
1731        /* is of incorrect types */
1732        Method (TSTH, 1, Serialized)
1733        {
1734            Name (DDB0, 0x00)
1735            Name (DDB1, 0x00)
1736            Name (BTYP, Buffer (0x10)
1737            {
1738                /* 0000 */  0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00,  // ........
1739                /* 0008 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00   // ........
1740            })
1741            Method (M000, 4, NotSerialized)
1742            {
1743                Concatenate (Arg0, "-m000.", Arg0)
1744                Concatenate (Arg0, Arg1, Arg0)
1745                Local0 = ObjectType (Arg2)
1746                If ((Arg3 != Local0))
1747                {
1748                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, Arg3)
1749                    Return (0x01)
1750                }
1751
1752                LoadTable (DerefOf (Arg2), "", "", "\\", "\\DTM2.PLDT", 0x01)
1753                CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1754                Return (0x00)
1755            }
1756
1757            Method (M001, 4, NotSerialized)
1758            {
1759                Concatenate (Arg0, "-m001.", Arg0)
1760                Concatenate (Arg0, Arg1, Arg0)
1761                Local0 = ObjectType (Arg2)
1762                If ((Arg3 != Local0))
1763                {
1764                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, Arg3)
1765                    Return (0x01)
1766                }
1767
1768                LoadTable ("OEM1", DerefOf (Arg2), "", "\\", "\\DTM2.PLDT", 0x01)
1769                CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1770                Return (0x00)
1771            }
1772
1773            Method (M002, 4, NotSerialized)
1774            {
1775                Concatenate (Arg0, "-m002.", Arg0)
1776                Concatenate (Arg0, Arg1, Arg0)
1777                Local0 = ObjectType (Arg2)
1778                If ((Arg3 != Local0))
1779                {
1780                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, Arg3)
1781                    Return (0x01)
1782                }
1783
1784                LoadTable ("OEM1", "", DerefOf (Arg2), "\\", "\\DTM2.PLDT", 0x01)
1785                CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1786                Return (0x00)
1787            }
1788
1789            Method (M003, 4, NotSerialized)
1790            {
1791                Concatenate (Arg0, "-m003.", Arg0)
1792                Concatenate (Arg0, Arg1, Arg0)
1793                Local0 = ObjectType (Arg2)
1794                If ((Arg3 != Local0))
1795                {
1796                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, Arg3)
1797                    Return (0x01)
1798                }
1799
1800                LoadTable ("OEM1", "", "", DerefOf (Arg2), "\\DTM2.PLDT", 0x01)
1801                If (DerefOf (BTYP [Arg3]))
1802                {
1803                    CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00) /* AE_BAD_PATHNAME */
1804                }
1805                Else
1806                {
1807                    CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1808                }
1809
1810                Return (0x00)
1811            }
1812
1813            Method (M004, 4, NotSerialized)
1814            {
1815                Concatenate (Arg0, "-m004.", Arg0)
1816                Concatenate (Arg0, Arg1, Arg0)
1817                Local0 = ObjectType (Arg2)
1818                If ((Arg3 != Local0))
1819                {
1820                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, Arg3)
1821                    Return (0x01)
1822                }
1823
1824                LoadTable ("OEM1", "", "", "\\", DerefOf (Arg2), 0x01)
1825                If (DerefOf (BTYP [Arg3]))
1826                {
1827                    CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00) /* AE_BAD_PATHNAME */
1828                }
1829                Else
1830                {
1831                    CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1832                }
1833
1834                Return (0x00)
1835            }
1836
1837            Concatenate (Arg0, "-tsth", Arg0)
1838            /* Load Auxiliry table */
1839
1840            \DTM0.RFU3 = \DTM0.BUF3
1841            Load (\DTM0.RFU3, DDB0) /* \DTM2.TSTH.DDB0 */
1842            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
1843            {
1844                Return (0x01)
1845            }
1846
1847            /* Uninitialized */
1848
1849            If (0x00)
1850            {
1851                Local1 = 0x00
1852            }
1853
1854            Local0 = ObjectType (Local1)
1855            If ((C008 != Local0))
1856            {
1857                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C008)
1858            }
1859            Else
1860            {
1861                LoadTable (Local1, "", "", "\\", "\\DTM2.PLDT", 0x01)
1862                If (SLCK)
1863                {
1864                    CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1865                }
1866                Else
1867                {
1868                    CH04 (Arg0, 0x00, 0x31, Z176, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
1869                }
1870
1871                LoadTable ("OEM1", Local1, "", "\\", "\\DTM2.PLDT", 0x01)
1872                If (SLCK)
1873                {
1874                    CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1875                }
1876                Else
1877                {
1878                    CH04 (Arg0, 0x00, 0x31, Z176, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
1879                }
1880
1881                LoadTable ("OEM1", "", Local1, "\\", "\\DTM2.PLDT", 0x01)
1882                If (SLCK)
1883                {
1884                    /* ACPI_OEM_TABLE_ID_SIZE should be less than 8. */
1885                    /* The size of the "Integer" converted from "Any" is ISZ0*2. */
1886                    If ((ISZ0 <= 0x04))
1887                    {
1888                        CH03 (Arg0, Z176, __LINE__, 0x00, 0x00) /* No exception */
1889                    }
1890                    Else
1891                    {
1892                        CH04 (Arg0, 0x00, 0x3D, Z176, __LINE__, 0x00, 0x00) /* AE_AML_STRING_LIMIT */
1893                    }
1894                }
1895                Else
1896                {
1897                    CH04 (Arg0, 0x00, 0x31, Z176, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
1898                }
1899
1900                LoadTable ("OEM1", "", "", Local1, "\\DTM2.PLDT", 0x01)
1901                If (SLCK)
1902                {
1903                    CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00) /* AE_BAD_PATHNAME */
1904                }
1905                Else
1906                {
1907                    CH04 (Arg0, 0x00, 0x31, Z176, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
1908                }
1909
1910                LoadTable ("OEM1", "", "", "\\", Local1, 0x01)
1911                If (SLCK)
1912                {
1913                    CH04 (Arg0, 0x00, 0x1E, Z176, __LINE__, 0x00, 0x00) /* AE_BAD_PATHNAME */
1914                }
1915                Else
1916                {
1917                    CH04 (Arg0, 0x00, 0x31, Z176, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
1918                }
1919            }
1920
1921            /* Integer */
1922
1923            M003 (Arg0, "int", RefOf (\AUXD.INT0), C009)
1924            M004 (Arg0, "int", RefOf (\AUXD.INT0), C009)
1925            /* String */
1926
1927            M003 (Arg0, "str", RefOf (\AUXD.STR0), C00A)
1928            M004 (Arg0, "str", RefOf (\AUXD.STR0), C00A)
1929            /* Buffer */
1930
1931            M003 (Arg0, "buf", RefOf (\AUXD.BUF0), C00B)
1932            M004 (Arg0, "buf", RefOf (\AUXD.BUF0), C00B)
1933            /* Package */
1934
1935            If (Y286)
1936            {
1937                M000 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
1938                M001 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
1939                M002 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
1940                M003 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
1941                M004 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
1942            }
1943
1944            LoadTable (\AUXD.PAC0, "", "", "\\", "\\DTM2.PLDT", 0x01)
1945            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1946            LoadTable ("OEM1", \AUXD.PAC0, "", "\\", "\\DTM2.PLDT", 0x01)
1947            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1948            LoadTable ("OEM1", "", \AUXD.PAC0, "\\", "\\DTM2.PLDT", 0x01)
1949            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1950            LoadTable ("OEM1", "", "", \AUXD.PAC0, "\\DTM2.PLDT", 0x01)
1951            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1952            LoadTable ("OEM1", "", "", "\\", \AUXD.PAC0, 0x01)
1953            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1954            Local0 = ObjectType (\AUXD.PAC0)
1955            If ((C00C != Local0))
1956            {
1957                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00C)
1958            }
1959
1960            /* Field Unit */
1961
1962            M003 (Arg0, "flu", RefOf (\AUXD.FLU0), C00D)
1963            M004 (Arg0, "flu", RefOf (\AUXD.FLU0), C00D)
1964            /* Device */
1965
1966            LoadTable (\AUXD.DEV0, "", "", "\\", "\\DTM2.PLDT", 0x01)
1967            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1968            LoadTable ("OEM1", \AUXD.DEV0, "", "\\", "\\DTM2.PLDT", 0x01)
1969            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1970            LoadTable ("OEM1", "", \AUXD.DEV0, "\\", "\\DTM2.PLDT", 0x01)
1971            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1972            LoadTable ("OEM1", "", "", \AUXD.DEV0, "\\DTM2.PLDT", 0x01)
1973            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1974            LoadTable ("OEM1", "", "", "\\", \AUXD.DEV0, 0x01)
1975            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
1976            Local0 = ObjectType (\AUXD.DEV0)
1977            If ((C00E != Local0))
1978            {
1979                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00E)
1980            }
1981
1982            /* Event */
1983
1984            M000 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
1985            M001 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
1986            M002 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
1987            M003 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
1988            M004 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
1989            /* Method */
1990
1991            M000 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
1992            M001 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
1993            M002 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
1994            M003 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
1995            M004 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
1996            /* Mutex */
1997
1998            M000 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
1999            M001 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
2000            M002 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
2001            M003 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
2002            M004 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
2003            /* OpRegion */
2004
2005            M000 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
2006            M001 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
2007            M002 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
2008            M003 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
2009            M004 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
2010            /* Power Resource */
2011
2012            M000 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
2013            M001 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
2014            M002 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
2015            M003 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
2016            M004 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
2017            /* Processor */
2018
2019            M000 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
2020            M001 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
2021            M002 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
2022            M003 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
2023            M004 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
2024            /* Thermal Zone */
2025
2026            LoadTable (\AUXD.TZN0, "", "", "\\", "\\DTM2.PLDT", 0x01)
2027            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2028            LoadTable ("OEM1", \AUXD.TZN0, "", "\\", "\\DTM2.PLDT", 0x01)
2029            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2030            LoadTable ("OEM1", "", \AUXD.TZN0, "\\", "\\DTM2.PLDT", 0x01)
2031            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2032            LoadTable ("OEM1", "", "", \AUXD.TZN0, "\\DTM2.PLDT", 0x01)
2033            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2034            LoadTable ("OEM1", "", "", "\\", \AUXD.TZN0, 0x01)
2035            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2036            Local0 = ObjectType (\AUXD.TZN0)
2037            If ((C015 != Local0))
2038            {
2039                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C015)
2040            }
2041
2042            /* Buffer Field */
2043
2044            M003 (Arg0, "bfl", RefOf (\AUXD.BFL0), C016)
2045            M004 (Arg0, "bfl", RefOf (\AUXD.BFL0), C016)
2046            Unload (DDB0)
2047            CH03 (Arg0, Z176, __LINE__, 0x00, 0x00)
2048            Return (0x00)
2049        }
2050
2051        /* Exceptions when the ParameterData parameter of the Loadtable operator */
2052        /* can not be saved into the Object referred by ParameterPathString */
2053        Method (TSTI, 1, Serialized)
2054        {
2055            Name (DDB0, 0x00)
2056            Name (DDB1, 0x00)
2057            Concatenate (Arg0, "-tsti", Arg0)
2058            /* Load Auxiliry table */
2059
2060            \DTM0.RFU3 = \DTM0.BUF3
2061            Load (\DTM0.RFU3, DDB0) /* \DTM2.TSTI.DDB0 */
2062            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2063            {
2064                Return (0x01)
2065            }
2066
2067            /* Uninitialized */
2068
2069            If (0x00)
2070            {
2071                Local1 = 0x00
2072            }
2073
2074            Local0 = ObjectType (Local1)
2075            If ((C008 != Local0))
2076            {
2077                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C008)
2078            }
2079            /* Bug 288: iASL unexpectedly forbids ParameterData of Loadtable to be LocalX or UserTerm */
2080            /*
2081             LoadTable("OEM1", "", "", "\\", "\\DTM2.PLDT", Local1)
2082             if (SLCK) {
2083             CH04(arg0, 0, 47, z176, __LINE__, 0, 0) // AE_AML_OPERAND_TYPE
2084             } else {
2085             CH04(arg0, 0, 49, z176, __LINE__, 0, 0) // AE_AML_UNINITIALIZED_LOCAL
2086             }
2087             */
2088            Else
2089            {
2090            }
2091
2092            /* Integer */
2093
2094            Local0 = ObjectType (\DTM2.PLDT)
2095            If ((C009 != Local0))
2096            {
2097                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2098                Return (0x01)
2099            }
2100
2101            DDB1 = LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.INT0)
2102            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2103            {
2104                Return (0x01)
2105            }
2106
2107            Local0 = ObjectType (\DTM2.PLDT)
2108            If ((C009 != Local0))
2109            {
2110                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2111                Return (0x01)
2112            }
2113
2114            If ((\DTM2.PLDT != \AUXD.INT0))
2115            {
2116                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, \AUXD.INT0)
2117                Return (0x01)
2118            }
2119
2120            Unload (DDB1)
2121            If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2122            {
2123                Return (0x01)
2124            }
2125
2126            Local0 = ObjectType (\AUXD.INT0)
2127            If ((C009 != Local0))
2128            {
2129                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2130            }
2131
2132            /* String */
2133
2134            If (Y296)
2135            {
2136                Local0 = ObjectType (\DTM2.PLDT)
2137                If ((C009 != Local0))
2138                {
2139                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2140                    Return (0x01)
2141                }
2142
2143                DDB1 = LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.STR0)
2144                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2145                {
2146                    Return (0x01)
2147                }
2148
2149                Local0 = ObjectType (\DTM2.PLDT)
2150                If ((C009 != Local0))
2151                {
2152                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2153                    Return (0x01)
2154                }
2155
2156                If ((\DTM2.PLDT != \AUXD.STR0))
2157                {
2158                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, \AUXD.STR0)
2159                    Return (0x01)
2160                }
2161
2162                Unload (DDB1)
2163                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2164                {
2165                    Return (0x01)
2166                }
2167
2168                Local0 = ObjectType (\AUXD.STR0)
2169                If ((C00A != Local0))
2170                {
2171                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00A)
2172                }
2173            }
2174
2175            /* Buffer */
2176
2177            If (Y296)
2178            {
2179                Local0 = ObjectType (\DTM2.PLDT)
2180                If ((C009 != Local0))
2181                {
2182                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2183                    Return (0x01)
2184                }
2185
2186                DDB1 = LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.BUF0)
2187                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2188                {
2189                    Return (0x01)
2190                }
2191
2192                Local0 = ObjectType (\DTM2.PLDT)
2193                If ((C009 != Local0))
2194                {
2195                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2196                    Return (0x01)
2197                }
2198
2199                If ((\DTM2.PLDT != \AUXD.BUF0))
2200                {
2201                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, \AUXD.BUF0)
2202                    Return (0x01)
2203                }
2204
2205                Unload (DDB1)
2206                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2207                {
2208                    Return (0x01)
2209                }
2210
2211                Local0 = ObjectType (\AUXD.BUF0)
2212                If ((C00B != Local0))
2213                {
2214                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00B)
2215                }
2216            }
2217
2218            /* Package */
2219
2220            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.PAC0)
2221            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2222            Local0 = ObjectType (\AUXD.PAC0)
2223            If ((C00C != Local0))
2224            {
2225                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00C)
2226            }
2227
2228            /* Field Unit */
2229
2230            If (Y296)
2231            {
2232                Local0 = ObjectType (\DTM2.PLDT)
2233                If ((C009 != Local0))
2234                {
2235                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2236                    Return (0x01)
2237                }
2238
2239                DDB1 = LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.FLU0)
2240                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2241                {
2242                    Return (0x01)
2243                }
2244
2245                Local0 = ObjectType (\DTM2.PLDT)
2246                If ((C009 != Local0))
2247                {
2248                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2249                    Return (0x01)
2250                }
2251
2252                If ((\DTM2.PLDT != \AUXD.FLU0))
2253                {
2254                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, \AUXD.FLU0)
2255                    Return (0x01)
2256                }
2257
2258                Unload (DDB1)
2259                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2260                {
2261                    Return (0x01)
2262                }
2263
2264                Local0 = ObjectType (\AUXD.FLU0)
2265                If ((C00D != Local0))
2266                {
2267                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00D)
2268                }
2269            }
2270
2271            /* Device */
2272
2273            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.DEV0)
2274            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2275            Local0 = ObjectType (\AUXD.DEV0)
2276            If ((C00E != Local0))
2277            {
2278                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00E)
2279            }
2280
2281            /* Event */
2282
2283            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.EVE0)
2284            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2285            Local0 = ObjectType (\AUXD.EVE0)
2286            If ((C00F != Local0))
2287            {
2288                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C00F)
2289            }
2290
2291            /* Method */
2292
2293            If (Y288)
2294            {
2295                LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.MMM0)
2296                CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2297                Local0 = ObjectType (\AUXD.MMM0)
2298                If ((C010 != Local0))
2299                {
2300                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C010)
2301                }
2302            }
2303
2304            /* Mutex */
2305
2306            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.MTX0)
2307            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2308            Local0 = ObjectType (\AUXD.MTX0)
2309            If ((C011 != Local0))
2310            {
2311                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C011)
2312            }
2313
2314            /* OpRegion */
2315
2316            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.OPR0)
2317            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2318            Local0 = ObjectType (\AUXD.OPR0)
2319            If ((C012 != Local0))
2320            {
2321                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C012)
2322            }
2323
2324            /* Power Resource */
2325
2326            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.PWR0)
2327            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2328            Local0 = ObjectType (\AUXD.PWR0)
2329            If ((C013 != Local0))
2330            {
2331                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C013)
2332            }
2333
2334            /* Processor */
2335
2336            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.CPU0)
2337            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2338            Local0 = ObjectType (\AUXD.CPU0)
2339            If ((C014 != Local0))
2340            {
2341                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C014)
2342            }
2343
2344            /* Thermal Zone */
2345
2346            LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.TZN0)
2347            CH04 (Arg0, 0x00, 0x2F, Z176, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
2348            Local0 = ObjectType (\AUXD.TZN0)
2349            If ((C015 != Local0))
2350            {
2351                ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C015)
2352            }
2353
2354            /* Buffer Field */
2355
2356            If (Y296)
2357            {
2358                Local0 = ObjectType (\DTM2.PLDT)
2359                If ((C009 != Local0))
2360                {
2361                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2362                    Return (0x01)
2363                }
2364
2365                DDB1 = LoadTable ("OEM1", "", "", "\\", "\\DTM2.PLDT", \AUXD.BFL0)
2366                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2367                {
2368                    Return (0x01)
2369                }
2370
2371                Local0 = ObjectType (\DTM2.PLDT)
2372                If ((C009 != Local0))
2373                {
2374                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C009)
2375                    Return (0x01)
2376                }
2377
2378                If ((\DTM2.PLDT != \AUXD.BFL0))
2379                {
2380                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, \DTM2.PLDT, \AUXD.BFL0)
2381                    Return (0x01)
2382                }
2383
2384                Unload (DDB1)
2385                If (CH03 (Arg0, Z176, __LINE__, 0x00, 0x00))
2386                {
2387                    Return (0x01)
2388                }
2389
2390                Local0 = ObjectType (\AUXD.BFL0)
2391                If ((C016 != Local0))
2392                {
2393                    ERR (Arg0, Z176, __LINE__, 0x00, 0x00, Local0, C016)
2394                }
2395            }
2396
2397            Unload (DDB0)
2398            CH03 (Arg0, Z176, __LINE__, 0x00, 0x00)
2399            Return (0x00)
2400        }
2401    }
2402
2403    Method (TLT0, 0, Serialized)
2404    {
2405        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2406        /* Simple Loadtable test */
2407
2408        SRMT ("TLT0.tst0")
2409        \DTM2.TST0 (__METHOD__)
2410        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2411        /* All comparisons of Loadtable parameters are case sensitive, */
2412        /* if no table matches the specified parameters, then 0 is returned */
2413        SRMT ("TLT0.tst1")
2414        \DTM2.TST1 (__METHOD__)
2415        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2416        /* Any of the RootPathString, ParameterPathString, and ParameterData */
2417        /* parameters in LoadTable expression can be omitted */
2418        SRMT ("TLT0.tst2")
2419        \DTM2.TST2 (__METHOD__)
2420        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2421        /* Different sources of the String parameters: Named Objects, LocalX, */
2422        /* ArgX, elements of Packages, results of functions, any TermArg */
2423        SRMT ("TLT0.tst3")
2424        \DTM2.TST3 (__METHOD__)
2425        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2426        /* Different sources of the optional parameters (RootPathString, */
2427        /* ParameterPathString, and ParameterData): Named Objects, LocalX, */
2428        /* ArgX, elements of Packages, results of functions, any TermArg */
2429        SRMT ("TLT0.tst4")
2430        \DTM2.TST4 (__METHOD__)
2431        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2432        /* Namespace location to load the Definition Block is determined */
2433        /* by the RootPathString parameter of Loadtable */
2434        SRMT ("TLT0.tst5.0")
2435        \DTM2.TST5 (__METHOD__, "\\DTM2.DEVR")
2436        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2437        /* The RootPathString value is evaluated using normal scoping rules, */
2438        /* assuming that the scope of the LoadTable operator is the current */
2439        /* scope */
2440        SRMT ("TLT0.tst5.1")
2441        \DTM2.TST5 (__METHOD__, "^DEVR")
2442        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2443        /* "\" is assumed to be Namespace location to load the Definition */
2444        /* Block if RootPathString parameter is not specified */
2445        SRMT ("TLT0.tst6")
2446        \DTM2.TST6 (__METHOD__)
2447        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2448        /* If the first character of ParameterPathString is a backslash */
2449        /* or caret character, then the path of the object set up on success */
2450        /* is ParameterPathString. It is RootPathString.ParameterPathString */
2451        /* in any case. */
2452        SRMT ("TLT0.tst7")
2453        \DTM2.TST7 (__METHOD__)
2454        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2455        /* Implicit operand conversion of the parameters specified to be strings */
2456
2457        SRMT ("TLT0.tste")
2458        \DTM2.TSTE (__METHOD__)
2459        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2460        /* LoadTable returns 0 if some SSDT matching the LoadTable */
2461        /* parameters is originally not listed in XSDT */
2462        /*SRMT("TLT0.tstf") */
2463        /*\DTM2.tstf(ts) */
2464        CH03 (__METHOD__, Z176, __LINE__, 0x00, 0x00)
2465    }
2466
2467    /* Exceptional conditions */
2468
2469    Method (TLT1, 0, Serialized)
2470    {
2471        /* Exceptions when the SignatureString is greater than four characters, */
2472        /* the OEMIDString is greater than six characters, or the OEMTableID is */
2473        /* greater than eight characters */
2474        SRMT ("TLT1.tst8")
2475        \DTM2.TST8 (__METHOD__)
2476        /* Exceptions when some DSDT or SSDT matching the LoadTable parameters */
2477        /* is already loaded (actually on initial loading of tables listed in XSDT) */
2478        SRMT ("TLT1.tst9")
2479        \DTM2.TST9 (__METHOD__)
2480        /* Exceptions when the matched table is already loaded */
2481
2482        SRMT ("TLT1.tsta")
2483        \DTM2.TSTA (__METHOD__)
2484        /* Exceptions when there already is an previously loaded Object */
2485        /* referred by the path in the Namespace */
2486        SRMT ("TLT1.tstb")
2487        \DTM2.TSTB (__METHOD__)
2488        /* Exceptions when the object specified by the ParameterPathString */
2489        /* does not exist */
2490        SRMT ("TLT1.tstc")
2491        \DTM2.TSTC (__METHOD__)
2492        /* Exceptions when storing of data of the ParameterData data type */
2493        /* to the specified object is not allowed. */
2494        SRMT ("TLT1.tstd")
2495        \DTM2.TSTD (__METHOD__)
2496        /* AE_OWNER_ID_LIMIT exception when too many Tables loaded */
2497
2498        SRMT ("TLT1.tstg")
2499        If (Y294)
2500        {
2501            \DTM2.TSTG (__METHOD__)
2502        }
2503        Else
2504        {
2505            BLCK ()
2506        }
2507
2508        /* Exceptions when the parameter of the Loadtable operator */
2509        /* is of incorrect types */
2510        SRMT ("TLT1.tsth")
2511        \DTM2.TSTH (__METHOD__)
2512        /* Exceptions when the ParameterData parameter of the Loadtable operator */
2513        /* can not be saved into the Object referred by ParameterPathString */
2514        SRMT ("TLT1.tsti")
2515        \DTM2.TSTI (__METHOD__)
2516    }
2517