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     * UnLoad ASL operator functionality
30     */
31    /*
32     * This sub-test is intended to comprehensively verify
33     * the Unload ASL operator functionality.
34     *
35     * Performs a run-time unload of a Definition Block that was
36     * loaded using a Load (and LoadTable) term.
37     *
38     * The overall functionality of the Unload Objects is indirectly
39     * verified by other Table management tests as far as Unload is
40     * needed to perform cleanup and check effectiveness of Load and
41     * LoadTable operators.
42     *
43     *    17.5.126   Unload (Unload Definition Block)
44     *    Syntax
45     * Unload (Handle)
46     *
47     * On testing the following issues should be covered (actually in the tests
48     * of loading except for the exceptional conditions ones):
49     *
50     * - successful execution of the Unload operator for the specified DDBHandle
51     *   obtained through loading of a SSDT from a proper location,
52     *
53     * - successful execution of the Unload operator for the specified DDBHandle
54     *   obtained through LoadTable operator,
55     *
56     * - the Handle parameter of the Unload can be specified as Named Object,
57     *   LocalX, ArgX, Derefof (to Index or RefOf reference), and Method call,
58     *
59     * - all namespace objects created as a result of the corresponding Load
60     *   operation are removed from the namespace,
61     *
62     * - unloading a number of different SSDTs,
63     *
64     * - Load/UnLoad processing can be done with the same table many times,
65     *
66     * - exceptional conditions caused by inappropriate data:
67     *   = the parameter of the UnLoad operator is not of DDBHandle type,
68     *   = execute UnLoad operator with the same DDBHandle repeatedly,
69     *   = the operand of UnLoad operator is absent.
70     *
71     * Can not be tested following issues:
72     * - unloading a SSDT to be a synchronous operation ("the control methods
73     *   defined in the Definition Block are not executed during load time")
74     */
75    Name (Z175, 0xAF)
76    Device (DTM1)
77    {
78        /* Different Sources to specify DDBHandle for UnLoad. */
79        /* Most of them (Named Object, LocalX, ArgX, Derefof) */
80        /* are checked in load.asl */
81        /* DDBHandle returned by Method call */
82        Method (TST0, 1, Serialized)
83        {
84            Name (HI0, 0x00)
85            Method (M000, 0, NotSerialized)
86            {
87                Return (HI0) /* \DTM1.TST0.HI0_ */
88            }
89
90            Concatenate (Arg0, "-tst0", Arg0)
91            \DTM0.RFU0 = \DTM0.BUF0
92            If (CondRefOf (\SSS0, Local0))
93            {
94                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\SSS0", 0x01)
95                Return (Zero)
96            }
97
98            /* Modify Revision field of SSDT */
99
100            Store ((\DTM0.CREV + 0x01), \DTM0.CREV)
101            /* Recalculate and save CheckSum */
102
103            Local0 = \DTM0.RFU0
104            Store ((\DTM0.SUM + \DTM0.CHSM (Local0, SizeOf (Local0))), \DTM0.SUM)
105            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
106            {
107                Return (Zero)
108            }
109
110            Load (\DTM0.RFU0, HI0) /* \DTM1.TST0.HI0_ */
111            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
112            {
113                Return (Zero)
114            }
115
116            Debug = "Table Loaded"
117            Local1 = ObjectType (HI0)
118            If ((Local1 != C017))
119            {
120                /* DDB Handle */
121
122                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local1, C017)
123            }
124
125            /* Check the new Object appears */
126
127            If (CondRefOf (\SSS0, Local0)){}
128            Else
129            {
130                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\SSS0", 0x00)
131            }
132
133            Local1 = ObjectType (Local0)
134            If ((Local1 != C010))
135            {
136                /* Method */
137
138                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local1, C010)
139            }
140            Else
141            {
142                Local0 = \SSS0 ()
143                If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x01))
144                {
145                    Return (Zero)
146                }
147
148                If (("\\SSS0" != Local0))
149                {
150                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, "\\SSS0")
151                }
152            }
153
154            /* UnLoad operator execution */
155
156            Unload (M000 ())
157            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
158            {
159                Return (Zero)
160            }
161
162            Debug = "Table Unloaded"
163            If (CondRefOf (\SSS0, Local0))
164            {
165                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\SSS0", 0x01)
166            }
167
168            Return (Zero)
169        }
170
171        /* All namespace objects created as a result of the corresponding */
172        /* Load operation are absent in the namespace after UnLoad */
173        Method (TST1, 1, Serialized)
174        {
175            Name (DDB0, 0x00)
176            Name (DDB1, 0x00)
177            Method (M000, 4, NotSerialized)
178            {
179                Concatenate (Arg0, "-m000.", Arg0)
180                Concatenate (Arg0, Arg1, Arg0)
181                Local0 = ObjectType (Arg2)
182                If ((Arg3 != Local0))
183                {
184                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, Arg3)
185                    Return (0x01)
186                }
187
188                Return (0x00)
189            }
190
191            Method (M001, 1, NotSerialized)
192            {
193                Concatenate (Arg0, "-m001", Arg0)
194                /* Integer */
195
196                If (CondRefOf (\AUXD.INT0, Local0))
197                {
198                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.INT0", 0x01)
199                    Return (0x01)
200                }
201
202                /* String */
203
204                If (CondRefOf (\AUXD.STR0, Local0))
205                {
206                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.STR0", 0x01)
207                    Return (0x01)
208                }
209
210                /* Buffer */
211
212                If (CondRefOf (\AUXD.BUF0, Local0))
213                {
214                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.BUF0", 0x01)
215                    Return (0x01)
216                }
217
218                /* Package */
219
220                If (CondRefOf (\AUXD.PAC0, Local0))
221                {
222                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.PAC0", 0x01)
223                    Return (0x01)
224                }
225
226                /* Field Unit */
227
228                If (CondRefOf (\AUXD.FLU0, Local0))
229                {
230                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.FLU0", 0x01)
231                    Return (0x01)
232                }
233
234                /* Device */
235
236                If (CondRefOf (\AUXD.DEV0, Local0))
237                {
238                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.DEV0", 0x01)
239                    Return (0x01)
240                }
241
242                /* Event */
243
244                If (CondRefOf (\AUXD.EVE0, Local0))
245                {
246                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.EVE0", 0x01)
247                    Return (0x01)
248                }
249
250                /* Method */
251
252                If (CondRefOf (\AUXD.MMM0, Local0))
253                {
254                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.MMM0", 0x01)
255                    Return (0x01)
256                }
257
258                /* Mutex */
259
260                If (CondRefOf (\AUXD.MTX0, Local0))
261                {
262                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.MTX0", 0x01)
263                    Return (0x01)
264                }
265
266                /* OpRegion */
267
268                If (CondRefOf (\AUXD.OPR0, Local0))
269                {
270                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.OPR0", 0x01)
271                    Return (0x01)
272                }
273
274                /* Power Resource */
275
276                If (CondRefOf (\AUXD.PWR0, Local0))
277                {
278                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.PWR0", 0x01)
279                    Return (0x01)
280                }
281
282                /* Processor */
283
284                If (CondRefOf (\AUXD.CPU0, Local0))
285                {
286                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.CPU0", 0x01)
287                    Return (0x01)
288                }
289
290                /* Thermal Zone */
291
292                If (CondRefOf (\AUXD.TZN0, Local0))
293                {
294                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.TZN0", 0x01)
295                    Return (0x01)
296                }
297
298                /* Buffer Field */
299
300                If (CondRefOf (\AUXD.BFL0, Local0))
301                {
302                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.BFL0", 0x01)
303                    Return (0x01)
304                }
305
306                Return (0x00)
307            }
308
309            Concatenate (Arg0, "-tst1", Arg0)
310            /* Check absence of the auxiliary table Objects before Load */
311
312            If (M001 (Concatenate (Arg0, ".before")))
313            {
314                Return (0x01)
315            }
316
317            /* Load auxiliary table */
318
319            \DTM0.RFU3 = \DTM0.BUF3
320            Load (\DTM0.RFU3, DDB0) /* \DTM1.TST1.DDB0 */
321            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
322            {
323                Return (0x01)
324            }
325
326            /* Integer */
327
328            If (CondRefOf (\AUXD.INT0, Local0))
329            {
330                M000 (Arg0, "int", Local0, C009)
331            }
332            Else
333            {
334                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.INT0", 0x00)
335            }
336
337            /* String */
338
339            If (CondRefOf (\AUXD.STR0, Local0))
340            {
341                M000 (Arg0, "str", Local0, C00A)
342            }
343            Else
344            {
345                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.STR0", 0x00)
346            }
347
348            /* Buffer */
349
350            If (CondRefOf (\AUXD.BUF0, Local0))
351            {
352                M000 (Arg0, "buf", Local0, C00B)
353            }
354            Else
355            {
356                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.BUF0", 0x00)
357            }
358
359            /* Package */
360
361            If (Y286)
362            {
363                If (CondRefOf (\AUXD.PAC0, Local0))
364                {
365                    M000 (Arg0, "pac", Local0, C00C)
366                }
367                Else
368                {
369                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.PAC0", 0x00)
370                }
371            }
372
373            /* Field Unit */
374
375            If (CondRefOf (\AUXD.FLU0, Local0))
376            {
377                M000 (Arg0, "flu", Local0, C00D)
378            }
379            Else
380            {
381                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.FLU0", 0x00)
382            }
383
384            /* Device */
385
386            If (CondRefOf (\AUXD.DEV0, Local0))
387            {
388                M000 (Arg0, "dev", Local0, C00E)
389            }
390            Else
391            {
392                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.DEV0", 0x00)
393            }
394
395            /* Event */
396
397            If (CondRefOf (\AUXD.EVE0, Local0))
398            {
399                M000 (Arg0, "evt", Local0, C00F)
400            }
401            Else
402            {
403                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.EVE0", 0x00)
404            }
405
406            /* Method */
407
408            If (CondRefOf (\AUXD.MMM0, Local0))
409            {
410                M000 (Arg0, "met", Local0, C010)
411            }
412            Else
413            {
414                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.MMM0", 0x00)
415            }
416
417            /* Mutex */
418
419            If (CondRefOf (\AUXD.MTX0, Local0))
420            {
421                M000 (Arg0, "mtx", Local0, C011)
422            }
423            Else
424            {
425                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.MTX0", 0x00)
426            }
427
428            /* OpRegion */
429
430            If (CondRefOf (\AUXD.OPR0, Local0))
431            {
432                M000 (Arg0, "opr", Local0, C012)
433            }
434            Else
435            {
436                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.OPR0", 0x00)
437            }
438
439            /* Power Resource */
440
441            If (CondRefOf (\AUXD.PWR0, Local0))
442            {
443                M000 (Arg0, "pwr", Local0, C013)
444            }
445            Else
446            {
447                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.PWR0", 0x00)
448            }
449
450            /* Processor */
451
452            If (CondRefOf (\AUXD.CPU0, Local0))
453            {
454                M000 (Arg0, "cpu", Local0, C014)
455            }
456            Else
457            {
458                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.CPU0", 0x00)
459            }
460
461            /* Thermal Zone */
462
463            If (CondRefOf (\AUXD.TZN0, Local0))
464            {
465                M000 (Arg0, "cpu", Local0, C015)
466            }
467            Else
468            {
469                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.TZN0", 0x00)
470            }
471
472            /* Buffer Field */
473
474            If (CondRefOf (\AUXD.BFL0, Local0))
475            {
476                M000 (Arg0, "bfl", Local0, C016)
477            }
478            Else
479            {
480                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, "\\AUXD.BFL0", 0x00)
481            }
482
483            Unload (DDB0)
484            CH03 (Arg0, Z175, __LINE__, 0x00, 0x00)
485            /* Check absence of the auxiliary table Objects after UnLoad */
486
487            If (M001 (Concatenate (Arg0, ".after")))
488            {
489                Return (0x01)
490            }
491
492            Return (0x00)
493        }
494
495        /* Load/UnLoad processing can be done with the same table many times */
496
497        Method (TST2, 1, NotSerialized)
498        {
499            Concatenate (Arg0, "tst2.", Arg0)
500            Local0 = 0x05
501            While (Local0)
502            {
503                If (TST1 (Concatenate (Arg0, Mid ("0123456789", Local0, 0x01))))
504                {
505                    Return (0x01)
506                }
507
508                Local0--
509            }
510
511            Return (0x00)
512        }
513
514        /* Exceptions when the parameter of the UnLoad operator */
515        /* is not of DDBHandle type */
516        Method (TST3, 1, Serialized)
517        {
518            Name (DDB0, 0x00)
519            Name (DDB1, 0x00)
520            Method (M000, 4, NotSerialized)
521            {
522                Concatenate (Arg0, "-m000.", Arg0)
523                Concatenate (Arg0, Arg1, Arg0)
524                Local0 = ObjectType (Arg2)
525                If ((Arg3 != Local0))
526                {
527                    ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, Arg3)
528                    Return (0x01)
529                }
530
531                Unload (DerefOf (Arg2))
532                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
533                Return (0x00)
534            }
535
536            Concatenate (Arg0, "-tst3", Arg0)
537            /* Load auxiliary table */
538
539            \DTM0.RFU3 = \DTM0.BUF3
540            Load (\DTM0.RFU3, DDB0) /* \DTM1.TST3.DDB0 */
541            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
542            {
543                Return (0x01)
544            }
545
546            /* Uninitialized */
547
548            If (0x00)
549            {
550                Local1 = 0x00
551            }
552
553            Local0 = ObjectType (Local1)
554            If ((C008 != Local0))
555            {
556                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, C008)
557            }
558            Else
559            {
560                Unload (Local1)
561                If (SLCK)
562                {
563                    CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
564                }
565                Else
566                {
567                    CH04 (Arg0, 0x00, 0x31, Z175, __LINE__, 0x00, 0x00) /* AE_AML_UNINITIALIZED_LOCAL */
568                }
569            }
570
571            /* Integer */
572
573            M000 (Arg0, "int", RefOf (\AUXD.INT0), C009)
574            /* String */
575
576            M000 (Arg0, "str", RefOf (\AUXD.STR0), C00A)
577            /* Buffer */
578
579            M000 (Arg0, "buf", RefOf (\AUXD.BUF0), C00B)
580            /* Package */
581
582            If (Y286)
583            {
584                M000 (Arg0, "pac", RefOf (\AUXD.PAC0), C00C)
585            }
586
587            Local0 = ObjectType (\AUXD.PAC0)
588            If ((C00C != Local0))
589            {
590                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, C00C)
591            }
592            Else
593            {
594                Unload (\AUXD.PAC0)
595                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
596            }
597
598            /* Field Unit */
599
600            M000 (Arg0, "flu", RefOf (\AUXD.FLU0), C00D)
601            /* Device */
602
603            Local0 = ObjectType (\AUXD.DEV0)
604            If ((C00E != Local0))
605            {
606                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, C00E)
607            }
608            Else
609            {
610                Unload (\AUXD.DEV0)
611                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
612            }
613
614            /* Event */
615
616            M000 (Arg0, "evt", RefOf (\AUXD.EVE0), C00F)
617            /* Method */
618
619            M000 (Arg0, "met", RefOf (\AUXD.MMM0), C010)
620            /* Mutex */
621
622            M000 (Arg0, "mtx", RefOf (\AUXD.MTX0), C011)
623            /* OpRegion */
624
625            M000 (Arg0, "opr", RefOf (\AUXD.OPR0), C012)
626            /* Power Resource */
627
628            M000 (Arg0, "pwr", RefOf (\AUXD.PWR0), C013)
629            /* Processor */
630
631            M000 (Arg0, "cpu", RefOf (\AUXD.CPU0), C014)
632            /* Thermal Zone */
633
634            Local0 = ObjectType (\AUXD.TZN0)
635            If ((C015 != Local0))
636            {
637                ERR (Arg0, Z175, __LINE__, 0x00, 0x00, Local0, C015)
638            }
639            Else
640            {
641                Unload (\AUXD.TZN0)
642                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
643            }
644
645            /* Buffer Field */
646
647            M000 (Arg0, "bfl", RefOf (\AUXD.BFL0), C016)
648            Unload (DDB0)
649            CH03 (Arg0, Z175, __LINE__, 0x00, 0x00)
650            Return (0x00)
651        }
652
653        /* Exceptions when UnLoad is executed with the same DDBHandle repeatedly */
654
655        Method (TST4, 1, Serialized)
656        {
657            Name (DDB0, 0x00)
658            Name (DDB1, 0x00)
659            Concatenate (Arg0, "-tst4", Arg0)
660            /* Load auxiliary table */
661
662            \DTM0.RFU3 = \DTM0.BUF3
663            Load (\DTM0.RFU3, DDB0) /* \DTM1.TST4.DDB0 */
664            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
665            {
666                Return (0x01)
667            }
668
669            /* First Unload */
670
671            Unload (DDB0)
672            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
673            {
674                Return (0x01)
675            }
676
677            Local0 = 0x05
678            While (Local0)
679            {
680                /* Any next */
681
682                Unload (DDB0)
683                CH04 (Arg0, 0x00, 0x1C, Z175, __LINE__, 0x05, Local0) /* AE_BAD_PARAMETER */
684                Local0--
685            }
686
687            /* Second DDBHandle */
688
689            \DTM0.RFU3 = \DTM0.BUF3
690            Load (\DTM0.RFU3, DDB1) /* \DTM1.TST4.DDB1 */
691            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
692            {
693                Return (0x01)
694            }
695
696            Local0 = 0x05
697            While (Local0)
698            {
699                /* Any next */
700
701                Unload (DDB0)
702                CH04 (Arg0, 0x00, 0x1C, Z175, __LINE__, 0x05, Local0) /* AE_BAD_PARAMETER */
703                Local0--
704            }
705
706            Unload (DDB1)
707            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
708            {
709                Return (0x01)
710            }
711
712            Return (0x00)
713        }
714
715        /* Exceptions when the operand of UnLoad operator is absent */
716
717        Method (TST5, 1, Serialized)
718        {
719            Name (DDB0, 0x00)
720            Method (M000, 0, NotSerialized)
721            {
722                Return (0x00)
723            }
724
725            Method (M001, 0, NotSerialized)
726            {
727                Return (DDB0) /* \DTM1.TST5.DDB0 */
728            }
729
730            Concatenate (Arg0, "-tst5", Arg0)
731            /* Load auxiliary table */
732
733            \DTM0.RFU3 = \DTM0.BUF3
734            Load (\DTM0.RFU3, DDB0) /* \DTM1.TST5.DDB0 */
735            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
736            {
737                Return (0x01)
738            }
739
740            /* Device */
741
742            Unload (DerefOf (RefOf (\AUXD.DEV0)))
743            CH04 (Arg0, 0x00, 0x3E, Z175, __LINE__, 0x00, 0x00) /* AE_AML_NO_RETURN_VALUE */
744            /* Thermal Zone */
745
746            Unload (DerefOf (RefOf (\AUXD.TZN0)))
747            CH04 (Arg0, 0x00, 0x3E, Z175, __LINE__, 0x00, 0x00) /* AE_AML_NO_RETURN_VALUE */
748            /* Method execution */
749
750            CopyObject (M000 (), M001) /* \DTM1.TST5.M001 */
751            Unload (M001 ())
752            If (SLCK)
753            {
754                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
755            }
756            Else
757            {
758                CH04 (Arg0, 0x00, 0x2F, Z175, __LINE__, 0x00, 0x00) /* AE_AML_OPERAND_TYPE */
759            }
760
761            Unload (DDB0)
762            If (CH03 (Arg0, Z175, __LINE__, 0x00, 0x00))
763            {
764                Return (0x01)
765            }
766
767            Return (0x00)
768        }
769    }
770
771    Method (TUL0, 0, Serialized)
772    {
773        CH03 (__METHOD__, Z175, __LINE__, 0x00, 0x00)
774        /* Different Sources to specify DDBHandle for UnLoad. */
775        /* Most of them (Named Object, LocalX, ArgX, Derefof) */
776        /* are checked in load.asl */
777        /* DDBHandle returned by Method call */
778        SRMT ("TUL0.tst0")
779        \DTM1.TST0 (__METHOD__)
780        CH03 (__METHOD__, Z175, __LINE__, 0x00, 0x00)
781        /* All namespace objects created as a result of the corresponding */
782        /* Load operation are absent in the namespace after UnLoad */
783        SRMT ("TUL0.tst1")
784        \DTM1.TST1 (__METHOD__)
785        CH03 (__METHOD__, Z175, __LINE__, 0x00, 0x00)
786        /* Load/UnLoad processing can be done with the same table many times */
787
788        SRMT ("TUL0.tst2")
789        \DTM1.TST2 (__METHOD__)
790        CH03 (__METHOD__, Z175, __LINE__, 0x00, 0x00)
791    }
792
793    /* Exceptional conditions */
794
795    Method (TUL1, 0, Serialized)
796    {
797        /* Exceptions when the parameter of the UnLoad operator */
798        /* is not of DDBHandle type */
799        SRMT ("TUL1.tst3")
800        \DTM1.TST3 (__METHOD__)
801        /* Exceptions when UnLoad is executed with the same DDBHandle repeatedly */
802
803        SRMT ("TUL1.tst4")
804        If (Y292)
805        {
806            \DTM1.TST4 (__METHOD__)
807        }
808        Else
809        {
810            BLCK ()
811        }
812
813        /* Exceptions when the operand of UnLoad operator is absent */
814
815        SRMT ("TUL1.tst5")
816        \DTM1.TST5 (__METHOD__)
817    }
818