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     * Check for exceptions on mutexes
30     */
31    Name (Z150, 0x96)
32    /*
33     * Run checking that all mutexes are actually Released.
34     * To be used while debugging the tests mainly.
35     */
36    Name (FL03, 0x00)
37    /* Counter for m08e */
38
39    Name (CN00, 0x00)
40    /*
41     * These declarations are used for to check the Acquire
42     * and Release operations in a global level AML code.
43     */
44    Name (I101, 0x00) /* non-zero means that this test was run */
45    /*
46     * Valid sequence of requests, no exceptions expected.
47     *
48     * Acquire mutexes of monotone increasing level (Global lock
49     * on level 0 too) for all available levels from 0 up to 15,
50     * then Release them all in the inverse order.
51     */
52    Method (M301, 0, Serialized)
53    {
54        Mutex (MT00, 0x00)
55        Mutex (MT10, 0x01)
56        Mutex (MT20, 0x02)
57        Mutex (MT30, 0x03)
58        Mutex (MT40, 0x04)
59        Mutex (MT50, 0x05)
60        Mutex (MT60, 0x06)
61        Mutex (MT70, 0x07)
62        Mutex (MT80, 0x08)
63        Mutex (MT90, 0x09)
64        Mutex (MTA0, 0x0A)
65        Mutex (MTB0, 0x0B)
66        Mutex (MTC0, 0x0C)
67        Mutex (MTD0, 0x0D)
68        Mutex (MTE0, 0x0E)
69        Mutex (MTF0, 0x0F)
70        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
71        Local0 = Acquire (MT00, 0xFFFF)
72        If (Local0)
73        {
74            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
75        }
76        Else
77        {
78            Local0 = Acquire (\_GL, 0xFFFF)
79            /* GL */
80
81            If (Local0)
82            {
83                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
84            }
85            Else
86            {
87                Local0 = Acquire (MT10, 0xFFFF)
88                If (Local0)
89                {
90                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
91                }
92                Else
93                {
94                    Local0 = Acquire (MT20, 0xFFFF)
95                    If (Local0)
96                    {
97                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
98                    }
99                    Else
100                    {
101                        Local0 = Acquire (MT30, 0xFFFF)
102                        If (Local0)
103                        {
104                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
105                        }
106                        Else
107                        {
108                            Local0 = Acquire (MT40, 0xFFFF)
109                            If (Local0)
110                            {
111                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
112                            }
113                            Else
114                            {
115                                Local0 = Acquire (MT50, 0xFFFF)
116                                If (Local0)
117                                {
118                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
119                                }
120                                Else
121                                {
122                                    Local0 = Acquire (MT60, 0xFFFF)
123                                    If (Local0)
124                                    {
125                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
126                                    }
127                                    Else
128                                    {
129                                        Local0 = Acquire (MT70, 0xFFFF)
130                                        If (Local0)
131                                        {
132                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
133                                        }
134                                        Else
135                                        {
136                                            Local0 = Acquire (MT80, 0xFFFF)
137                                            If (Local0)
138                                            {
139                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
140                                            }
141                                            Else
142                                            {
143                                                Local0 = Acquire (MT90, 0xFFFF)
144                                                If (Local0)
145                                                {
146                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
147                                                }
148                                                Else
149                                                {
150                                                    Local0 = Acquire (MTA0, 0xFFFF)
151                                                    If (Local0)
152                                                    {
153                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
154                                                    }
155                                                    Else
156                                                    {
157                                                        Local0 = Acquire (MTB0, 0xFFFF)
158                                                        If (Local0)
159                                                        {
160                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
161                                                        }
162                                                        Else
163                                                        {
164                                                            Local0 = Acquire (MTC0, 0xFFFF)
165                                                            If (Local0)
166                                                            {
167                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
168                                                            }
169                                                            Else
170                                                            {
171                                                                Local0 = Acquire (MTD0, 0xFFFF)
172                                                                If (Local0)
173                                                                {
174                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
175                                                                }
176                                                                Else
177                                                                {
178                                                                    Local0 = Acquire (MTE0, 0xFFFF)
179                                                                    If (Local0)
180                                                                    {
181                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
182                                                                    }
183                                                                    Else
184                                                                    {
185                                                                        Local0 = Acquire (MTF0, 0xFFFF)
186                                                                        If (Local0)
187                                                                        {
188                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
189                                                                        }
190                                                                        Else
191                                                                        {
192                                                                            Release (MTF0)
193                                                                            Release (MTE0)
194                                                                            Release (MTD0)
195                                                                            Release (MTC0)
196                                                                            Release (MTB0)
197                                                                            Release (MTA0)
198                                                                            Release (MT90)
199                                                                            Release (MT80)
200                                                                            Release (MT70)
201                                                                            Release (MT60)
202                                                                            Release (MT50)
203                                                                            Release (MT40)
204                                                                            Release (MT30)
205                                                                            Release (MT20)
206                                                                            Release (MT10)
207                                                                            Release (\_GL)
208                                                                            Release (MT00)
209                                                                        }
210                                                                    }
211                                                                }
212                                                            }
213                                                        }
214                                                    }
215                                                }
216                                            }
217                                        }
218                                    }
219                                }
220                            }
221                        }
222                    }
223                }
224            }
225        }
226
227        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
228    }
229
230    /*
231     * Valid sequence of requests, no exceptions expected.
232     *
233     * Acquire mutexes of monotone increasing level (Global lock on level 0 too)
234     * for all available levels from 0 up to 15, Acquire 2 mutexes of each level,
235     * then Release them all in the inverse order (keep the exactly inverse order
236     * for Releasing mutexes of the same level too).
237     *
238     * arg0 - if to force AE_LIMIT by exceeding the maximal number of created mutexes
239     */
240    Method (M369, 1, Serialized)
241    {
242        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
243        Mutex (MT00, 0x00)
244        Mutex (MT10, 0x01)
245        Mutex (MT20, 0x02)
246        Mutex (MT30, 0x03)
247        Mutex (MT40, 0x04)
248        Mutex (MT50, 0x05)
249        Mutex (MT60, 0x06)
250        Mutex (MT70, 0x07)
251        Mutex (MT80, 0x08)
252        Mutex (MT90, 0x09)
253        Mutex (MTA0, 0x0A)
254        Mutex (MTB0, 0x0B)
255        Mutex (MTC0, 0x0C)
256        Mutex (MTD0, 0x0D)
257        Mutex (MTE0, 0x0E)
258        Mutex (MTF0, 0x0F)
259        Mutex (MT01, 0x00)
260        Mutex (MT11, 0x01)
261        Mutex (MT21, 0x02)
262        Mutex (MT31, 0x03)
263        Mutex (MT41, 0x04)
264        Mutex (MT51, 0x05)
265        Mutex (MT61, 0x06)
266        Mutex (MT71, 0x07)
267        Mutex (MT81, 0x08)
268        Mutex (MT91, 0x09)
269        Mutex (MTA1, 0x0A)
270        Mutex (MTB1, 0x0B)
271        Mutex (MTC1, 0x0C)
272        Mutex (MTD1, 0x0D)
273        Mutex (MTE1, 0x0E)
274        If (Arg0)
275        {
276            /* Should be enough to exceed the maximal available number of mutexes */
277
278            Mutex (MTF1, 0x0F)
279            Mutex (MTF2, 0x0F)
280            Mutex (MTF3, 0x0F)
281            Mutex (MTF4, 0x0F)
282        }
283
284        Local0 = Acquire (MT00, 0xFFFF)
285        If (Local0)
286        {
287            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
288        }
289        Else
290        {
291            Local0 = Acquire (MT01, 0xFFFF)
292            /* the same level */
293
294            If (Local0)
295            {
296                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
297            }
298            Else
299            {
300                Local0 = Acquire (\_GL, 0xFFFF)
301                /* GL */
302
303                If (Local0)
304                {
305                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
306                }
307                Else
308                {
309                    Local0 = Acquire (MT10, 0xFFFF)
310                    If (Local0)
311                    {
312                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
313                    }
314                    Else
315                    {
316                        Local0 = Acquire (MT11, 0xFFFF)
317                        If (Local0)
318                        {
319                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
320                        }
321                        Else
322                        {
323                            Local0 = Acquire (MT20, 0xFFFF)
324                            If (Local0)
325                            {
326                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
327                            }
328                            Else
329                            {
330                                Local0 = Acquire (MT21, 0xFFFF)
331                                If (Local0)
332                                {
333                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
334                                }
335                                Else
336                                {
337                                    Local0 = Acquire (MT30, 0xFFFF)
338                                    If (Local0)
339                                    {
340                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
341                                    }
342                                    Else
343                                    {
344                                        Local0 = Acquire (MT31, 0xFFFF)
345                                        If (Local0)
346                                        {
347                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
348                                        }
349                                        Else
350                                        {
351                                            Local0 = Acquire (MT40, 0xFFFF)
352                                            If (Local0)
353                                            {
354                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
355                                            }
356                                            Else
357                                            {
358                                                Local0 = Acquire (MT41, 0xFFFF)
359                                                If (Local0)
360                                                {
361                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
362                                                }
363                                                Else
364                                                {
365                                                    Local0 = Acquire (MT50, 0xFFFF)
366                                                    If (Local0)
367                                                    {
368                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
369                                                    }
370                                                    Else
371                                                    {
372                                                        Local0 = Acquire (MT51, 0xFFFF)
373                                                        If (Local0)
374                                                        {
375                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
376                                                        }
377                                                        Else
378                                                        {
379                                                            Local0 = Acquire (MT60, 0xFFFF)
380                                                            If (Local0)
381                                                            {
382                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
383                                                            }
384                                                            Else
385                                                            {
386                                                                Local0 = Acquire (MT61, 0xFFFF)
387                                                                If (Local0)
388                                                                {
389                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
390                                                                }
391                                                                Else
392                                                                {
393                                                                    Local0 = Acquire (MT70, 0xFFFF)
394                                                                    If (Local0)
395                                                                    {
396                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
397                                                                    }
398                                                                    Else
399                                                                    {
400                                                                        Local0 = Acquire (MT71, 0xFFFF)
401                                                                        If (Local0)
402                                                                        {
403                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
404                                                                        }
405                                                                        Else
406                                                                        {
407                                                                            Local0 = Acquire (MT80, 0xFFFF)
408                                                                            If (Local0)
409                                                                            {
410                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
411                                                                            }
412                                                                            Else
413                                                                            {
414                                                                                Local0 = Acquire (MT81, 0xFFFF)
415                                                                                If (Local0)
416                                                                                {
417                                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
418                                                                                }
419                                                                                Else
420                                                                                {
421                                                                                    Local0 = Acquire (MT90, 0xFFFF)
422                                                                                    If (Local0)
423                                                                                    {
424                                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
425                                                                                    }
426                                                                                    Else
427                                                                                    {
428                                                                                        Local0 = Acquire (MT91, 0xFFFF)
429                                                                                        If (Local0)
430                                                                                        {
431                                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
432                                                                                        }
433                                                                                        Else
434                                                                                        {
435                                                                                            Local0 = Acquire (MTA0, 0xFFFF)
436                                                                                            If (Local0)
437                                                                                            {
438                                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
439                                                                                            }
440                                                                                            Else
441                                                                                            {
442                                                                                                Local0 = Acquire (MTA1, 0xFFFF)
443                                                                                                If (Local0)
444                                                                                                {
445                                                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
446                                                                                                }
447                                                                                                Else
448                                                                                                {
449                                                                                                    Local0 = Acquire (MTB0, 0xFFFF)
450                                                                                                    If (Local0)
451                                                                                                    {
452                                                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
453                                                                                                    }
454                                                                                                    Else
455                                                                                                    {
456                                                                                                        Local0 = Acquire (MTB1, 0xFFFF)
457                                                                                                        If (Local0)
458                                                                                                        {
459                                                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
460                                                                                                        }
461                                                                                                        Else
462                                                                                                        {
463                                                                                                            Local0 = Acquire (MTC0, 0xFFFF)
464                                                                                                            If (Local0)
465                                                                                                            {
466                                                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
467                                                                                                            }
468                                                                                                            Else
469                                                                                                            {
470                                                                                                                Local0 = Acquire (MTC1, 0xFFFF)
471                                                                                                                If (Local0)
472                                                                                                                {
473                                                                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
474                                                                                                                }
475                                                                                                                Else
476                                                                                                                {
477                                                                                                                    Local0 = Acquire (MTD0, 0xFFFF)
478                                                                                                                    If (Local0)
479                                                                                                                    {
480                                                                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
481                                                                                                                    }
482                                                                                                                    Else
483                                                                                                                    {
484                                                                                                                        Local0 = Acquire (MTD1, 0xFFFF)
485                                                                                                                        If (Local0)
486                                                                                                                        {
487                                                                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
488                                                                                                                        }
489                                                                                                                        Else
490                                                                                                                        {
491                                                                                                                            Local0 = Acquire (MTE0, 0xFFFF)
492                                                                                                                            If (Local0)
493                                                                                                                            {
494                                                                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
495                                                                                                                            }
496                                                                                                                            Else
497                                                                                                                            {
498                                                                                                                                Local0 = Acquire (MTE1, 0xFFFF)
499                                                                                                                                If (Local0)
500                                                                                                                                {
501                                                                                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
502                                                                                                                                }
503                                                                                                                                Else
504                                                                                                                                {
505                                                                                                                                    Local0 = Acquire (MTF0, 0xFFFF)
506                                                                                                                                    If (Local0)
507                                                                                                                                    {
508                                                                                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
509                                                                                                                                    }
510                                                                                                                                    Else
511                                                                                                                                    {
512                                                                                                                                        If (Arg0)
513                                                                                                                                        {
514                                                                                                                                            Local0 = Acquire (MTF1, 0xFFFF)
515                                                                                                                                        }
516                                                                                                                                        Else
517                                                                                                                                        {
518                                                                                                                                            Local0 = 0x00
519                                                                                                                                        }
520
521                                                                                                                                        If (Local0)
522                                                                                                                                        {
523                                                                                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
524                                                                                                                                        }
525                                                                                                                                        Else
526                                                                                                                                        {
527                                                                                                                                            If (Arg0)
528                                                                                                                                            {
529                                                                                                                                                Release (MTF1)
530                                                                                                                                            }
531
532                                                                                                                                            Release (MTF0)
533                                                                                                                                            Release (MTE1)
534                                                                                                                                            Release (MTE0)
535                                                                                                                                            Release (MTD1)
536                                                                                                                                            Release (MTD0)
537                                                                                                                                            Release (MTC1)
538                                                                                                                                            Release (MTC0)
539                                                                                                                                            Release (MTB1)
540                                                                                                                                            Release (MTB0)
541                                                                                                                                            Release (MTA1)
542                                                                                                                                            Release (MTA0)
543                                                                                                                                            Release (MT91)
544                                                                                                                                            Release (MT90)
545                                                                                                                                            Release (MT81)
546                                                                                                                                            Release (MT80)
547                                                                                                                                            Release (MT71)
548                                                                                                                                            Release (MT70)
549                                                                                                                                            Release (MT61)
550                                                                                                                                            Release (MT60)
551                                                                                                                                            Release (MT51)
552                                                                                                                                            Release (MT50)
553                                                                                                                                            Release (MT41)
554                                                                                                                                            Release (MT40)
555                                                                                                                                            Release (MT31)
556                                                                                                                                            Release (MT30)
557                                                                                                                                            Release (MT21)
558                                                                                                                                            Release (MT20)
559                                                                                                                                            Release (MT11)
560                                                                                                                                            Release (MT10)
561                                                                                                                                            Release (\_GL)
562                                                                                                                                            Release (MT01)
563                                                                                                                                            Release (MT00)
564                                                                                                                                        }
565                                                                                                                                    }
566                                                                                                                                }
567                                                                                                                            }
568                                                                                                                        }
569                                                                                                                    }
570                                                                                                                }
571                                                                                                            }
572                                                                                                        }
573                                                                                                    }
574                                                                                                }
575                                                                                            }
576                                                                                        }
577                                                                                    }
578                                                                                }
579                                                                            }
580                                                                        }
581                                                                    }
582                                                                }
583                                                            }
584                                                        }
585                                                    }
586                                                }
587                                            }
588                                        }
589                                    }
590                                }
591                            }
592                        }
593                    }
594                }
595            }
596        }
597
598        If (Arg0)
599        {
600            CH04 (__METHOD__, 0x01, 0x12, Z150, __LINE__, 0x00, 0x00) /* AE_LIMIT */
601        }
602        Else
603        {
604            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
605        }
606    }
607
608    /*
609     * Valid sequence of requests, no exceptions expected.
610     *
611     * Acquire mutexes of monotone increasing level (Global lock
612     * on level 0 too) for all available levels from 0 up to 15,
613     * then Release them all in the inverse order.
614     *
615     * Exactly m301 but additionally:
616     *    all Release operations are located into separate method.
617     */
618    Method (M36A, 0, Serialized)
619    {
620        Mutex (MT00, 0x00)
621        Mutex (MT10, 0x01)
622        Mutex (MT20, 0x02)
623        Mutex (MT30, 0x03)
624        Mutex (MT40, 0x04)
625        Mutex (MT50, 0x05)
626        Mutex (MT60, 0x06)
627        Mutex (MT70, 0x07)
628        Mutex (MT80, 0x08)
629        Mutex (MT90, 0x09)
630        Mutex (MTA0, 0x0A)
631        Mutex (MTB0, 0x0B)
632        Mutex (MTC0, 0x0C)
633        Mutex (MTD0, 0x0D)
634        Mutex (MTE0, 0x0E)
635        Mutex (MTF0, 0x0F)
636        Method (M000, 0, NotSerialized)
637        {
638            Local0 = Acquire (MT00, 0xFFFF)
639            If (Local0)
640            {
641                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
642            }
643            Else
644            {
645                Local0 = Acquire (\_GL, 0xFFFF)
646                If (Local0)
647                {
648                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
649                }
650                Else
651                {
652                    Local0 = Acquire (MT10, 0xFFFF)
653                    If (Local0)
654                    {
655                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
656                    }
657                    Else
658                    {
659                        Local0 = Acquire (MT20, 0xFFFF)
660                        If (Local0)
661                        {
662                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
663                        }
664                        Else
665                        {
666                            Local0 = Acquire (MT30, 0xFFFF)
667                            If (Local0)
668                            {
669                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
670                            }
671                            Else
672                            {
673                                Local0 = Acquire (MT40, 0xFFFF)
674                                If (Local0)
675                                {
676                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
677                                }
678                                Else
679                                {
680                                    Local0 = Acquire (MT50, 0xFFFF)
681                                    If (Local0)
682                                    {
683                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
684                                    }
685                                    Else
686                                    {
687                                        Local0 = Acquire (MT60, 0xFFFF)
688                                        If (Local0)
689                                        {
690                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
691                                        }
692                                        Else
693                                        {
694                                            Local0 = Acquire (MT70, 0xFFFF)
695                                            If (Local0)
696                                            {
697                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
698                                            }
699                                            Else
700                                            {
701                                                Local0 = Acquire (MT80, 0xFFFF)
702                                                If (Local0)
703                                                {
704                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
705                                                }
706                                                Else
707                                                {
708                                                    Local0 = Acquire (MT90, 0xFFFF)
709                                                    If (Local0)
710                                                    {
711                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
712                                                    }
713                                                    Else
714                                                    {
715                                                        Local0 = Acquire (MTA0, 0xFFFF)
716                                                        If (Local0)
717                                                        {
718                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
719                                                        }
720                                                        Else
721                                                        {
722                                                            Local0 = Acquire (MTB0, 0xFFFF)
723                                                            If (Local0)
724                                                            {
725                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
726                                                            }
727                                                            Else
728                                                            {
729                                                                Local0 = Acquire (MTC0, 0xFFFF)
730                                                                If (Local0)
731                                                                {
732                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
733                                                                }
734                                                                Else
735                                                                {
736                                                                    Local0 = Acquire (MTD0, 0xFFFF)
737                                                                    If (Local0)
738                                                                    {
739                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
740                                                                    }
741                                                                    Else
742                                                                    {
743                                                                        Local0 = Acquire (MTE0, 0xFFFF)
744                                                                        If (Local0)
745                                                                        {
746                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
747                                                                        }
748                                                                        Else
749                                                                        {
750                                                                            Local0 = Acquire (MTF0, 0xFFFF)
751                                                                            If (Local0)
752                                                                            {
753                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
754                                                                            }
755                                                                            Else
756                                                                            {
757                                                                                M001 ()
758                                                                            }
759                                                                        }
760                                                                    }
761                                                                }
762                                                            }
763                                                        }
764                                                    }
765                                                }
766                                            }
767                                        }
768                                    }
769                                }
770                            }
771                        }
772                    }
773                }
774            }
775        }
776
777        /* m000 */
778
779        Method (M001, 0, NotSerialized)
780        {
781            Release (MTF0)
782            Release (MTE0)
783            Release (MTD0)
784            Release (MTC0)
785            Release (MTB0)
786            Release (MTA0)
787            Release (MT90)
788            Release (MT80)
789            Release (MT70)
790            Release (MT60)
791            Release (MT50)
792            Release (MT40)
793            Release (MT30)
794            Release (MT20)
795            Release (MT10)
796            Release (\_GL)
797            Release (MT00)
798        }
799
800        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
801        M000 ()
802        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
803    }
804
805    /*
806     * Valid sequence of requests, no exceptions expected.
807     *
808     * Acquire mutexes of monotone increasing level (Global lock
809     * on level 0 too) for all available levels from 0 up to 15,
810     * then Release them all in the inverse order.
811     *
812     * Exactly m301 but additionally:
813     *    all Acquire and Release operations are located into separate methods.
814     */
815    Method (M36B, 0, Serialized)
816    {
817        Mutex (MT00, 0x00)
818        Mutex (MT10, 0x01)
819        Mutex (MT20, 0x02)
820        Mutex (MT30, 0x03)
821        Mutex (MT40, 0x04)
822        Mutex (MT50, 0x05)
823        Mutex (MT60, 0x06)
824        Mutex (MT70, 0x07)
825        Mutex (MT80, 0x08)
826        Mutex (MT90, 0x09)
827        Mutex (MTA0, 0x0A)
828        Mutex (MTB0, 0x0B)
829        Mutex (MTC0, 0x0C)
830        Mutex (MTD0, 0x0D)
831        Mutex (MTE0, 0x0E)
832        Mutex (MTF0, 0x0F)
833        Method (M000, 0, NotSerialized)
834        {
835            Local0 = Acquire (MT00, 0xFFFF)
836            If (Local0)
837            {
838                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
839            }
840            Else
841            {
842                Local0 = Acquire (\_GL, 0xFFFF)
843                If (Local0)
844                {
845                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
846                }
847                Else
848                {
849                    Local0 = Acquire (MT10, 0xFFFF)
850                    If (Local0)
851                    {
852                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
853                    }
854                    Else
855                    {
856                        Local0 = Acquire (MT20, 0xFFFF)
857                        If (Local0)
858                        {
859                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
860                        }
861                        Else
862                        {
863                            Local0 = Acquire (MT30, 0xFFFF)
864                            If (Local0)
865                            {
866                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
867                            }
868                            Else
869                            {
870                                Local0 = Acquire (MT40, 0xFFFF)
871                                If (Local0)
872                                {
873                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
874                                }
875                                Else
876                                {
877                                    Local0 = Acquire (MT50, 0xFFFF)
878                                    If (Local0)
879                                    {
880                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
881                                    }
882                                    Else
883                                    {
884                                        Local0 = Acquire (MT60, 0xFFFF)
885                                        If (Local0)
886                                        {
887                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
888                                        }
889                                        Else
890                                        {
891                                            Local0 = Acquire (MT70, 0xFFFF)
892                                            If (Local0)
893                                            {
894                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
895                                            }
896                                            Else
897                                            {
898                                                Local0 = Acquire (MT80, 0xFFFF)
899                                                If (Local0)
900                                                {
901                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
902                                                }
903                                                Else
904                                                {
905                                                    Local0 = Acquire (MT90, 0xFFFF)
906                                                    If (Local0)
907                                                    {
908                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
909                                                    }
910                                                    Else
911                                                    {
912                                                        Local0 = Acquire (MTA0, 0xFFFF)
913                                                        If (Local0)
914                                                        {
915                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
916                                                        }
917                                                        Else
918                                                        {
919                                                            Local0 = Acquire (MTB0, 0xFFFF)
920                                                            If (Local0)
921                                                            {
922                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
923                                                            }
924                                                            Else
925                                                            {
926                                                                Local0 = Acquire (MTC0, 0xFFFF)
927                                                                If (Local0)
928                                                                {
929                                                                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
930                                                                }
931                                                                Else
932                                                                {
933                                                                    Local0 = Acquire (MTD0, 0xFFFF)
934                                                                    If (Local0)
935                                                                    {
936                                                                        ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
937                                                                    }
938                                                                    Else
939                                                                    {
940                                                                        Local0 = Acquire (MTE0, 0xFFFF)
941                                                                        If (Local0)
942                                                                        {
943                                                                            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
944                                                                        }
945                                                                        Else
946                                                                        {
947                                                                            Local0 = Acquire (MTF0, 0xFFFF)
948                                                                            If (Local0)
949                                                                            {
950                                                                                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
951                                                                            }
952                                                                        }
953                                                                    }
954                                                                }
955                                                            }
956                                                        }
957                                                    }
958                                                }
959                                            }
960                                        }
961                                    }
962                                }
963                            }
964                        }
965                    }
966                }
967            }
968        }
969
970        /* m000 */
971
972        Method (M001, 0, NotSerialized)
973        {
974            Release (MTF0)
975            Release (MTE0)
976            Release (MTD0)
977            Release (MTC0)
978            Release (MTB0)
979            Release (MTA0)
980            Release (MT90)
981            Release (MT80)
982            Release (MT70)
983            Release (MT60)
984            Release (MT50)
985            Release (MT40)
986            Release (MT30)
987            Release (MT20)
988            Release (MT10)
989            Release (\_GL)
990            Release (MT00)
991        }
992
993        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
994        M000 ()
995        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
996        M001 ()
997        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
998    }
999
1000    /*
1001     * Invalid sequence of Acquire operations:
1002     *
1003     *   1) Acquire N-th level mutex (N>=1):
1004     *   2) Acquire:
1005     *      - mutexes from 0 up to (N-1)-levels
1006     *      - Global lock
1007     *   3) exception AE_AML_MUTEX_ORDER is expected for each Acquire of (2)
1008     */
1009    Method (M36C, 0, Serialized)
1010    {
1011        Name (LPN0, 0x00)
1012        Name (LPC0, 0x00)
1013        /*
1014         * arg0 - level of mutex to be acquired first
1015         * arg1 - level of mutex to be acquired second
1016         * arg2 - 1 - acquire 0-level mutex instead of arg1
1017         *        2 - acquire Global lock   instead of arg1
1018         */
1019        Method (M000, 3, Serialized)
1020        {
1021            /* Acquire the first mutex */
1022
1023            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1024            M36F (Arg0, 0x00, 0x00, 0x00) /* Acquire N-level mutex */
1025            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1026            /*
1027             * Attempt to Acquire the second mutex (exception is expected).
1028             *
1029             * It is supposed that the second acquired
1030             * is a mutex of level not greater than (N-1)
1031             */
1032            Switch (ToInteger (Arg2))
1033            {
1034                Case (0x01)
1035                {
1036                    M36F (0x00, 0x00, 0x01, 0x00) /* Acquire 0 level mux */
1037                }
1038                Case (0x02)
1039                {
1040                    M36F (GLLL, GLIX, 0x01, 0x00) /* Acquire GL */
1041                }
1042                Default
1043                {
1044                    M36F (Arg1, 0x00, 0x01, 0x00) /* Acquire arg1-level mux */
1045                }
1046
1047            }
1048
1049            CH04 (__METHOD__, 0x00, 0x40, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_ORDER */
1050            M388 (Arg0, 0x00, 0x00) /* Release */
1051            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1052        }
1053
1054        /*
1055         * The second Acquires are run in range from 0 up to (N-1) levels
1056         *
1057         * arg0 - N level (to be in range from 1 up to 15)
1058         */
1059        Method (M001, 1, Serialized)
1060        {
1061            Name (LPN0, 0x00)
1062            Name (LPC0, 0x00)
1063            LPN0 = Arg0
1064            LPC0 = 0x00
1065            While (LPN0)
1066            {
1067                M000 (Arg0, LPC0, 0x00)
1068                LPN0--
1069                LPC0++
1070            }
1071        }
1072
1073        /* From 1 up to 15 levels */
1074
1075        LPN0 = (MAX0 - 0x01)
1076        LPC0 = 0x01
1077        While (LPN0)
1078        {
1079            If (LPC0)
1080            {
1081                M001 (LPC0)
1082                M000 (LPC0, 0x00, 0x01) /* 0 level mux */
1083                M000 (LPC0, 0x00, 0x02) /* GL */
1084            }
1085
1086            LPN0--
1087            LPC0++
1088        }
1089    }
1090
1091    /*
1092     * Exception on Release.
1093     * Release mutex twice.
1094     *
1095     * Attempt to Release free mutex: Acquire, Release, Release.
1096     * Exception is expected on the second Release.
1097     * Do it for all level mutexes and Global lock too.
1098     */
1099    Method (M389, 0, Serialized)
1100    {
1101        Name (LPN0, 0x00)
1102        Name (LPC0, 0x00)
1103        /* arg0 - level of mutex */
1104
1105        Method (M000, 1, NotSerialized)
1106        {
1107            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1108            M36F (Arg0, 0x00, 0x00, 0x00) /* Acquire */
1109            M388 (Arg0, 0x00, 0x00) /* Release */
1110            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1111            /* Attempt to Release free mutex */
1112
1113            M388 (Arg0, 0x00, 0x00) /* Release */
1114            CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1115            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1116            M36F (Arg0, 0x00, 0x00, 0x00) /* Acquire */
1117            M388 (Arg0, 0x00, 0x00) /* Release */
1118            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1119        }
1120
1121        LPN0 = MAX0 /* \MAX0 */
1122        LPC0 = 0x00
1123        While (LPN0)
1124        {
1125            M000 (LPC0)
1126            LPN0--
1127            LPC0++
1128        }
1129
1130        /* Separately for GL */
1131
1132        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1133        M36F (GLLL, GLIX, 0x00, 0x00) /* Acquire */
1134        M388 (GLLL, GLIX, 0x00) /* Release */
1135        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1136        /* Attempt to Release free mutex */
1137
1138        M388 (GLLL, GLIX, 0x00) /* Release */
1139        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1140        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1141        M36F (GLLL, GLIX, 0x00, 0x00) /* Acquire */
1142        M388 (GLLL, GLIX, 0x00) /* Release */
1143        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1144    }
1145
1146    /*
1147     * Exception on Release.
1148     * Attempt to Release clean mutex which was never Acquired.
1149     */
1150    Method (M07B, 0, Serialized)
1151    {
1152        Mutex (T000, 0x00)
1153        Mutex (T100, 0x01)
1154        Mutex (T200, 0x02)
1155        Mutex (T300, 0x03)
1156        Mutex (T400, 0x04)
1157        Mutex (T500, 0x05)
1158        Mutex (T600, 0x06)
1159        Mutex (T700, 0x07)
1160        Mutex (T800, 0x08)
1161        Mutex (T900, 0x09)
1162        Mutex (TA00, 0x0A)
1163        Mutex (TB00, 0x0B)
1164        Mutex (TC00, 0x0C)
1165        Mutex (TD00, 0x0D)
1166        Mutex (TE00, 0x0E)
1167        Mutex (TF00, 0x0F)
1168        /* First time */
1169
1170        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1171        Release (T000)
1172        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1173        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1174        Release (\_GL)
1175        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1176        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1177        Release (T100)
1178        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1179        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1180        Release (T200)
1181        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1182        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1183        Release (T300)
1184        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1185        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1186        Release (T400)
1187        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1188        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1189        Release (T500)
1190        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1191        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1192        Release (T600)
1193        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1194        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1195        Release (T700)
1196        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1197        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1198        Release (T800)
1199        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1200        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1201        Release (T900)
1202        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1203        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1204        Release (TA00)
1205        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1206        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1207        Release (TB00)
1208        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1209        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1210        Release (TC00)
1211        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1212        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1213        Release (TD00)
1214        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1215        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1216        Release (TE00)
1217        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1218        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1219        Release (TF00)
1220        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1221        /* Second time */
1222
1223        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1224        Release (T000)
1225        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1226        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1227        Release (T100)
1228        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1229        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1230        Release (T200)
1231        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1232        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1233        Release (T300)
1234        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1235        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1236        Release (T400)
1237        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1238        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1239        Release (T500)
1240        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1241        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1242        Release (T600)
1243        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1244        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1245        Release (T700)
1246        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1247        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1248        Release (T800)
1249        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1250        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1251        Release (T900)
1252        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1253        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1254        Release (TA00)
1255        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1256        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1257        Release (TB00)
1258        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1259        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1260        Release (TC00)
1261        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1262        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1263        Release (TD00)
1264        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1265        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1266        Release (TE00)
1267        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1268        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1269        Release (TF00)
1270        CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00)
1271    }
1272
1273    /*
1274     * Exception on Release.
1275     * Break the sequence of Acquiring mutexes while Releasing them,
1276     * jump over the level.
1277     *
1278     * Invalid sequence of Releases:
1279     *
1280     *   1) Take level from range (N>=1 & N<=15)
1281     *   2) Acquire mutexes of all levels from 0 up to N
1282     *   3) Try to Release any mutex:
1283     *      - in the level range from (N-1) down to 0
1284     *      - Global lock
1285     *   4) Do 1-3 for all levels in range (N>=1 & N<=15)
1286     */
1287    Method (M38A, 0, Serialized)
1288    {
1289        Name (LPN0, 0x00)
1290        Name (LPC0, 0x00)
1291        Name (BR00, 0x00)
1292        LPN0 = (MAX0 - 0x01)
1293        LPC0 = 0x02
1294        While (LPN0)
1295        {
1296            /* Acquire lpC0 levels from 0 level */
1297
1298            M38B (0x00, LPC0, 0x01, 0x00)
1299            /*
1300             * Exception is expected on each Release there.
1301             *
1302             * Break the sequence of Acquiring mutexes while Releasing them,
1303             * jump over the level.
1304             * Run Releasing mutexes NOT from (lpC0-1) level which would be
1305             * correct but from (lpC0-2) level down to 0 level so jumping over
1306             * the mutex of (lpC0-1) level which is Acquired which should cause
1307             * each of these Releases to generate AE_AML_MUTEX_ORDER exception.
1308             */
1309            Local0 = (LPC0 - 0x02)
1310            Local1 = (LPC0 - 0x01)
1311            If (M38C (Local0, Local1, 0x01, 0x40))
1312            {
1313                /* AE_AML_MUTEX_ORDER */
1314                /*
1315                 * Break for the first bunch of errors encountered,
1316                 * don't waste log.
1317                 */
1318                BR00 = 0x01
1319            }
1320
1321            /*
1322             * Correct sequence of Releases.
1323             * Release lpC0 levels from (lpC0-1) down to 0 level.
1324             */
1325            If (BR00)
1326            {
1327                M36F (HLMX, 0x00, 0x00, 0x00)
1328                M388 (HLMX, 0x00, 0x00)
1329            }
1330
1331            Local0 = (LPC0 - 0x01)
1332            M38C (Local0, LPC0, 0x01, 0x00)
1333            If (BR00)
1334            {
1335                Break
1336            }
1337
1338            LPN0--
1339            LPC0++
1340        }
1341
1342        CH03 ("m38a", Z150, __LINE__, 0x00, 0x00)
1343    }
1344
1345    /*
1346     * Manager for m38d.
1347     *
1348     * arg0 - the value of flag of GL
1349     * arg1 - order of Releasing bitmap (see m089)
1350     */
1351    Method (M08C, 2, Serialized)
1352    {
1353        Name (LPN0, 0x00)
1354        Name (LPC0, 0x00)
1355        /*
1356         * arg0 - Level of mutex
1357         * arg1 - the value of flag of GL
1358         * arg2 - order of Releasing bitmap (see m089)
1359         */
1360        Method (M000, 3, NotSerialized)
1361        {
1362            /* Set up the value of flag of Global lock */
1363
1364            Local7 = M078 (Arg1)
1365            /*
1366             * min0 - number of mutexes existent for each level
1367             *
1368             * Acquire mutexes of level arg0
1369             * in the order from 0 index up
1370             * to (min0-1) one, then Release
1371             * them in the order specified
1372             * by arg2.
1373             */
1374            M088 (Arg0, 0x01, 0x00, MIN0, 0x00, 0x00, 0x00)    /* Acquire */
1375            M089 (Arg0, 0x01, 0x00, MIN0, 0x00, 0x00, Arg2) /* Release */
1376            /* Restore the value of flag of Global lock */
1377
1378            M078 (Local7)
1379        }
1380
1381        /* For each level */
1382
1383        LPN0 = MAX0 /* \MAX0 */
1384        LPC0 = 0x00
1385        While (LPN0)
1386        {
1387            M000 (LPC0, Arg0, Arg1)
1388            LPN0--
1389            LPC0++
1390        }
1391    }
1392
1393    /*
1394     * Check up that the Releasing of the same level mutexes
1395     * can be performed in an arbitrary order, independently
1396     * on the order they were Acquired.
1397     *
1398     * For each level separately, one by one.
1399     */
1400    Method (M38D, 0, NotSerialized)
1401    {
1402        M08C (0x00, 0x00) /* direct  order of Releasing, Mutex(0,1) is usual mutex */
1403        M08C (0x00, 0x01) /* inverse order of Releasing, Mutex(0,1) is usual mutex */
1404        M08C (0x01, 0x00) /* direct  order of Releasing, Mutex(0,1) is GL */
1405        M08C (0x01, 0x01) /* inverse order of Releasing, Mutex(0,1) is GL */
1406        /* Check that all mutexes are Released */
1407
1408        M08A ()
1409    }
1410
1411    /*
1412     * Check up that the Releasing of the same level mutexes
1413     * can be performed in an arbitrary order, independently
1414     * on the order they were Acquired.
1415     *
1416     * Cross through all the levels.
1417     *
1418     * arg0 - order of Releasing bitmap (see m089)
1419     */
1420    Method (M07D, 1, NotSerialized)
1421    {
1422        M088 (0x00, MAX0, 0x00, MIN0, 0x00, 0x00, 0x00)    /* Acquire all mutexes on all levels */
1423        M089 (0x00, MAX0, 0x00, MIN0, 0x00, 0x00, Arg0) /* Release all mutexes on all levels */
1424    }
1425
1426    /*
1427     * ACPI allows multiply own the same mutex
1428     *
1429     * arg0 - the value of flag of GL
1430     */
1431    Method (M07A, 1, NotSerialized)
1432    {
1433        M079 (0x0A, Arg0)
1434    }
1435
1436    /*
1437     * Multiply owning the same ACPI mutex.
1438     * Acquire the same mutex arg2 times, then Release it (arg2+1) times,
1439     * expect exception on the last Release.
1440     * The repeated Acquire are made with TimeoutValue equal to zero.
1441     *
1442     * arg0 - how many times to Acquire it
1443     * arg1 - the value of flag of GL
1444     */
1445    Method (M079, 2, Serialized)
1446    {
1447        Name (LPN0, 0x00)
1448        Name (LPC0, 0x00)
1449        Name (LPN1, 0x00)
1450        Name (LPC1, 0x00)
1451        Name (TOUT, 0x00)
1452        Name (IX00, 0x01)
1453        /* Set up the value of flag of Global lock */
1454
1455        Local7 = M078 (Arg1)
1456        /* Acquire */
1457        /* levels */
1458        LPN0 = MAX0 /* \MAX0 */
1459        LPC0 = 0x00
1460        While (LPN0)
1461        {
1462            /* repetitions */
1463
1464            LPN1 = Arg0
1465            LPC1 = 0x00
1466            While (LPN1)
1467            {
1468                If (LPC1)
1469                {
1470                    TOUT = TOV0 /* TimeOutValue equal to 0 */ /* \TOV0 */
1471                }
1472                Else
1473                {
1474                    TOUT = 0x00 /* TimeOutValue equal to 0xffff (once for the first Acquire) */
1475                }
1476
1477                M36F (LPC0, IX00, 0x00, TOUT)
1478                LPN1--
1479                LPC1++
1480            }
1481
1482            LPN0--
1483            LPC0++
1484        }
1485
1486        /* Release */
1487
1488        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1489        LPN0 = MAX0 /* \MAX0 */
1490        LPC0 = (MAX0 - 0x01)
1491        While (LPN0)
1492        {
1493            /* repetitions */
1494
1495            LPN1 = Arg0
1496            LPC1 = 0x00
1497            While (LPN1)
1498            {
1499                M388 (LPC0, IX00, 0x00)
1500                LPN1--
1501                LPC1++
1502            }
1503
1504            LPN0--
1505            LPC0--
1506        }
1507
1508        /* The 'owning counters' are exhausted, so exceptions are expected */
1509
1510        LPN0 = MAX0 /* \MAX0 */
1511        LPC0 = (MAX0 - 0x01)
1512        While (LPN0)
1513        {
1514            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1515            M388 (LPC0, IX00, 0x00)
1516            CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1517            LPN0--
1518            LPC0--
1519        }
1520
1521        /* Restore the value of flag of Global lock */
1522
1523        M078 (Local7)
1524    }
1525
1526    /*
1527     * /////////////////////////////////////////
1528     *
1529     *    The tests below examine different ways
1530     *    to Acquire/Release mutexes
1531     *
1532     * /////////////////////////////////////////
1533     */
1534    /*
1535     * ATTENTION: this test must be run the first
1536     *
1537     * Different ways to Acquire/Release mutexes
1538     *
1539     * 1) Acquire and Release operations are in a global level AML code
1540     *
1541     * See m07c.
1542     */
1543    Method (M0B9, 0, Serialized)
1544    {
1545        /* i101 - non-zero means that the test was run */
1546
1547        If (!I101)
1548        {
1549            Return (Zero)
1550        }
1551
1552        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1553    }
1554
1555    /*
1556     * The same operations as m0b9 (the test for global level AML code)
1557     * but enclosed into Method.
1558     */
1559    Method (M0BB, 0, Serialized)
1560    {
1561        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1562        Method (M137, 0, NotSerialized)
1563        {
1564            Debug = "m137 started"
1565            If (!I102)
1566            {
1567                Release (T804)
1568            }
1569
1570            Debug = "m137 completed"
1571            Return (0x01)
1572        }
1573
1574        Method (M13E, 0, NotSerialized)
1575        {
1576            Debug = "m13e started"
1577            I103 = Acquire (T805, 0xFFFF)
1578            If (I103)
1579            {
1580                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, I103)
1581            }
1582
1583            Debug = "m13e completed"
1584            Return (0x01)
1585        }
1586
1587        Method (M13F, 0, NotSerialized)
1588        {
1589            Debug = "m13f started"
1590            If (!I103)
1591            {
1592                Release (T805)
1593            }
1594
1595            Debug = "m13f completed"
1596            Return (0x01)
1597        }
1598
1599        Name (I102, 0x01)
1600        Name (I103, 0x01)
1601        Name (B11C, Buffer ((0x01 + I102 = Acquire (T804, 0xFFFF)))
1602        {
1603             0x00                                             // .
1604        })
1605        Name (B11D, Buffer (M137 ())
1606        {
1607             0x00                                             // .
1608        })
1609        Name (B11E, Buffer (M13E ())
1610        {
1611             0x00                                             // .
1612        })
1613        Name (B11F, Buffer (M13F ())
1614        {
1615             0x00                                             // .
1616        })
1617        If (I102)
1618        {
1619            Debug = "Acquire(T804, 0xffff) failed"
1620            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, I102)
1621        }
1622
1623        If (I103)
1624        {
1625            Debug = "Acquire(T805, 0xffff) failed"
1626            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, I103)
1627        }
1628
1629        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1630    }
1631
1632    /*
1633     * Different ways to Acquire/Release mutexes
1634     *
1635     * 2) Acquire and Release operations are in the same method
1636     * 3) Acquire and Release operations are in different methods
1637     *
1638     * See m0b9.
1639     */
1640    Method (M07C, 0, Serialized)
1641    {
1642        /* Acquire and Release operations are in the same method */
1643
1644        Method (M000, 0, NotSerialized)
1645        {
1646            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1647            /* Acquire all */
1648
1649            Local0 = Acquire (\_GL, 0xFFFF)
1650            If (Local0)
1651            {
1652                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1653            }
1654
1655            Local0 = Acquire (T000, 0xFFFF)
1656            If (Local0)
1657            {
1658                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1659            }
1660
1661            Local0 = Acquire (T100, 0xFFFF)
1662            If (Local0)
1663            {
1664                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1665            }
1666
1667            Local0 = Acquire (T200, 0xFFFF)
1668            If (Local0)
1669            {
1670                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1671            }
1672
1673            Local0 = Acquire (T300, 0xFFFF)
1674            If (Local0)
1675            {
1676                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1677            }
1678
1679            Local0 = Acquire (T400, 0xFFFF)
1680            If (Local0)
1681            {
1682                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1683            }
1684
1685            Local0 = Acquire (T500, 0xFFFF)
1686            If (Local0)
1687            {
1688                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1689            }
1690
1691            Local0 = Acquire (T600, 0xFFFF)
1692            If (Local0)
1693            {
1694                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1695            }
1696
1697            Local0 = Acquire (T700, 0xFFFF)
1698            If (Local0)
1699            {
1700                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1701            }
1702
1703            Local0 = Acquire (T800, 0xFFFF)
1704            If (Local0)
1705            {
1706                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1707            }
1708
1709            Local0 = Acquire (T900, 0xFFFF)
1710            If (Local0)
1711            {
1712                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1713            }
1714
1715            Local0 = Acquire (TA00, 0xFFFF)
1716            If (Local0)
1717            {
1718                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1719            }
1720
1721            Local0 = Acquire (TB00, 0xFFFF)
1722            If (Local0)
1723            {
1724                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1725            }
1726
1727            Local0 = Acquire (TC00, 0xFFFF)
1728            If (Local0)
1729            {
1730                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1731            }
1732
1733            Local0 = Acquire (TD00, 0xFFFF)
1734            If (Local0)
1735            {
1736                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1737            }
1738
1739            Local0 = Acquire (TE00, 0xFFFF)
1740            If (Local0)
1741            {
1742                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1743            }
1744
1745            Local0 = Acquire (TF00, 0xFFFF)
1746            If (Local0)
1747            {
1748                ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1749            }
1750
1751            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1752            /* Release all */
1753
1754            Release (TF00)
1755            Release (TE00)
1756            Release (TD00)
1757            Release (TC00)
1758            Release (TB00)
1759            Release (TA00)
1760            Release (T900)
1761            Release (T800)
1762            Release (T700)
1763            Release (T600)
1764            Release (T500)
1765            Release (T400)
1766            Release (T300)
1767            Release (T200)
1768            Release (T100)
1769            Release (T000)
1770            Release (\_GL)
1771            CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1772        }
1773
1774        /* Acquire and Release operations are in different methods */
1775
1776        Method (M001, 0, NotSerialized)
1777        {
1778            Method (MM00, 0, NotSerialized)
1779            {
1780                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1781                Local0 = Acquire (\_GL, 0xFFFF)
1782                If (Local0)
1783                {
1784                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1785                }
1786
1787                Local0 = Acquire (T000, 0xFFFF)
1788                If (Local0)
1789                {
1790                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1791                }
1792
1793                Local0 = Acquire (T100, 0xFFFF)
1794                If (Local0)
1795                {
1796                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1797                }
1798
1799                Local0 = Acquire (T200, 0xFFFF)
1800                If (Local0)
1801                {
1802                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1803                }
1804
1805                Local0 = Acquire (T300, 0xFFFF)
1806                If (Local0)
1807                {
1808                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1809                }
1810
1811                Local0 = Acquire (T400, 0xFFFF)
1812                If (Local0)
1813                {
1814                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1815                }
1816
1817                Local0 = Acquire (T500, 0xFFFF)
1818                If (Local0)
1819                {
1820                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1821                }
1822
1823                Local0 = Acquire (T600, 0xFFFF)
1824                If (Local0)
1825                {
1826                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1827                }
1828
1829                Local0 = Acquire (T700, 0xFFFF)
1830                If (Local0)
1831                {
1832                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1833                }
1834
1835                Local0 = Acquire (T800, 0xFFFF)
1836                If (Local0)
1837                {
1838                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1839                }
1840
1841                Local0 = Acquire (T900, 0xFFFF)
1842                If (Local0)
1843                {
1844                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1845                }
1846
1847                Local0 = Acquire (TA00, 0xFFFF)
1848                If (Local0)
1849                {
1850                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1851                }
1852
1853                Local0 = Acquire (TB00, 0xFFFF)
1854                If (Local0)
1855                {
1856                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1857                }
1858
1859                Local0 = Acquire (TC00, 0xFFFF)
1860                If (Local0)
1861                {
1862                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1863                }
1864
1865                Local0 = Acquire (TD00, 0xFFFF)
1866                If (Local0)
1867                {
1868                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1869                }
1870
1871                Local0 = Acquire (TE00, 0xFFFF)
1872                If (Local0)
1873                {
1874                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1875                }
1876
1877                Local0 = Acquire (TF00, 0xFFFF)
1878                If (Local0)
1879                {
1880                    ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1881                }
1882
1883                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1884            }
1885
1886            Method (MM01, 0, NotSerialized)
1887            {
1888                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1889                Release (TF00)
1890                Release (TE00)
1891                Release (TD00)
1892                Release (TC00)
1893                Release (TB00)
1894                Release (TA00)
1895                Release (T900)
1896                Release (T800)
1897                Release (T700)
1898                Release (T600)
1899                Release (T500)
1900                Release (T400)
1901                Release (T300)
1902                Release (T200)
1903                Release (T100)
1904                Release (T000)
1905                Release (\_GL)
1906                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1907            }
1908
1909            Method (MM02, 0, NotSerialized)
1910            {
1911                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1912                Release (TF00)
1913                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1914                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1915                Release (TE00)
1916                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1917                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1918                Release (TD00)
1919                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1920                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1921                Release (TC00)
1922                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1923                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1924                Release (TB00)
1925                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1926                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1927                Release (TA00)
1928                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1929                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1930                Release (T900)
1931                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1932                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1933                Release (T800)
1934                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1935                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1936                Release (T700)
1937                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1938                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1939                Release (T600)
1940                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1941                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1942                Release (T500)
1943                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1944                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1945                Release (T400)
1946                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1947                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1948                Release (T300)
1949                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1950                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1951                Release (T200)
1952                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1953                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1954                Release (T100)
1955                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1956                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1957                Release (T000)
1958                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1959                CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1960                Release (\_GL)
1961                CH04 (__METHOD__, 0x00, 0x41, Z150, __LINE__, 0x00, 0x00) /* AE_AML_MUTEX_NOT_ACQUIRED */
1962            }
1963
1964            MM00 ()
1965            MM01 ()
1966            MM02 ()
1967        }
1968
1969        /* Acquire and Release operations are in the same method */
1970
1971        M000 ()
1972        /* Acquire and Release operations are in different methods */
1973
1974        M001 ()
1975    }
1976
1977    /*
1978     * Acquire/Release operations enclosed in other operations
1979     */
1980    Method (M0BA, 0, Serialized)
1981    {
1982        CH03 (__METHOD__, Z150, __LINE__, 0x00, 0x00)
1983        /* Add */
1984
1985        Local0 = (Acquire (\_GL, 0xFFFF) + 0x01)
1986        If ((Local0 != 0x01))
1987        {
1988            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1989        }
1990
1991        Local0 = (Acquire (T500, 0xFFFF) + 0x01)
1992        If ((Local0 != 0x01))
1993        {
1994            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
1995        }
1996
1997        Release (T500)
1998        Release (\_GL)
1999        /* Subtract */
2000
2001        Local0 = (0x01 - Acquire (\_GL, 0xFFFF))
2002        If ((Local0 != 0x01))
2003        {
2004            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
2005        }
2006
2007        Local0 = (0x01 - Acquire (T500, 0xFFFF))
2008        If ((Local0 != 0x01))
2009        {
2010            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
2011        }
2012
2013        Release (T500)
2014        Release (\_GL)
2015        /* LEqual */
2016
2017        If ((Acquire (T500, 0xFFFF) != 0x00))
2018        {
2019            ERR (__METHOD__, Z150, __LINE__, 0x00, 0x00, 0x00, Local0)
2020        }
2021
2022        Release (T500)
2023        If (FL03)
2024        {
2025            /* Check that all mutexes are Released (doesn't check T804..) */
2026
2027            M08A ()
2028        }
2029
2030        CH04 (__METHOD__, 0x01, 0x40, Z150, __LINE__, 0x00, 0x00)
2031    }
2032
2033    /*
2034     * /////////////////////////////////////////////
2035     *
2036     *    The tests below generate some combinations
2037     *    of Acquire/Release operations
2038     *
2039     * /////////////////////////////////////////////
2040     */
2041    /*
2042     * Get 0 or 1 value pseudo randomly
2043     *
2044     * arg0 - input Integer
2045     */
2046    Method (M08E, 0, NotSerialized)
2047    {
2048        /* To be improved */
2049
2050        Local0 = (CN00 & 0x01)
2051        CN00++
2052        If (!Y242)
2053        {
2054            /* Always inverse order until the bug 242 is fixes */
2055
2056            Local0 = 0x01
2057        }
2058
2059        Return (Local0)
2060    }
2061
2062    /*
2063     * Acquire/Release combination #1
2064     */
2065    Method (M07E, 0, Serialized)
2066    {
2067        Name (NUM, 0x04)
2068        Name (RPT0, 0x00)
2069        Name (RPT1, 0x03)
2070        Name (LPN0, 0x00)
2071        Name (LPC0, 0x00)
2072        /* Set up the value of flag of Global lock */
2073
2074        Local7 = M078 (0x00)
2075        LPN0 = NUM /* \M07E.NUM_ */
2076        LPC0 = 0x00
2077        While (LPN0)
2078        {
2079            /* Set up the value of flag of Global lock */
2080
2081            Divide (LPC0, 0x02, Local0)
2082            M078 (Local0)
2083            If (Local0)
2084            {
2085                RPT0 = RPT1 /* \M07E.RPT1 */
2086            }
2087            Else
2088            {
2089                RPT0 = 0x01
2090            }
2091
2092            M088 (0x00, 0x03, 0x00, 0x04, 0x00, RPT0, 0x00)      /* Step  0, Acquire */
2093            M088 (0x03, 0x03, 0x01, 0x02, 0x00, RPT0, 0x00)      /* Step  1, Acquire */
2094            M089 (0x04, 0x02, 0x01, 0x02, 0x00, RPT0, M08E ()) /* Step  1, Release */
2095            M088 (0x05, 0x03, 0x00, 0x04, 0x00, RPT0, 0x00)      /* Step  2, Acquire */
2096            M089 (0x07, 0x01, 0x01, 0x03, 0x00, RPT0, M08E ()) /* Step  2, Release */
2097            M089 (0x07, 0x01, 0x00, 0x01, 0x00, RPT0, M08E ()) /* Step  2, Release */
2098            M089 (0x06, 0x01, 0x00, 0x04, 0x00, RPT0, M08E ()) /* Step  2, Release */
2099            M088 (0x09, 0x02, 0x02, 0x02, 0x00, RPT0, 0x00)      /* Step  3, Acquire */
2100            M089 (0x0A, 0x01, 0x03, 0x01, 0x00, RPT0, M08E ()) /* Step  3, Release */
2101            M089 (0x0A, 0x01, 0x02, 0x01, 0x00, RPT0, M08E ()) /* Step  3, Release */
2102            M089 (0x09, 0x01, 0x03, 0x01, 0x00, RPT0, M08E ()) /* Step  3, Release */
2103            M088 (0x0A, 0x02, 0x00, 0x03, 0x00, RPT0, 0x00)      /* Step  4, Acquire */
2104            M089 (0x0A, 0x02, 0x00, 0x03, 0x00, RPT0, M08E ()) /* Step  4, Release */
2105            M088 (0x0A, 0x02, 0x00, 0x03, 0x00, RPT0, 0x00)      /* Step  5, Acquire */
2106            M089 (0x0A, 0x02, 0x00, 0x03, 0x00, RPT0, M08E ()) /* Step  5, Release */
2107            M088 (0x0C, 0x02, 0x00, 0x03, 0x00, RPT0, 0x00)      /* Step  6, Acquire */
2108            M089 (0x0C, 0x02, 0x00, 0x03, 0x00, RPT0, M08E ()) /* Step  6, Release */
2109            M088 (0x0A, 0x06, 0x00, 0x04, 0x00, RPT0, 0x00)      /* Step  7, Acquire */
2110            M089 (0x0A, 0x06, 0x00, 0x04, 0x00, RPT0, M08E ()) /* Step  7, Release */
2111            M088 (0x0C, 0x02, 0x00, 0x03, 0x00, RPT0, 0x00)      /* Step  8, Acquire */
2112            M089 (0x0C, 0x02, 0x00, 0x03, 0x00, RPT0, M08E ()) /* Step  8, Release */
2113            M089 (0x09, 0x01, 0x02, 0x01, 0x00, RPT0, M08E ()) /* Step  3, Release */
2114            M089 (0x05, 0x01, 0x00, 0x04, 0x00, RPT0, M08E ()) /* Step  2, Release */
2115            M089 (0x03, 0x01, 0x01, 0x02, 0x00, RPT0, M08E ()) /* Step  1, Release */
2116            M089 (0x01, 0x02, 0x00, 0x04, 0x00, RPT0, M08E ()) /* Step  0, Release */
2117            M088 (0x01, 0x0F, 0x01, 0x02, 0x00, RPT0, 0x00)      /* Step  9, Acquire */
2118            M089 (0x01, 0x0F, 0x01, 0x02, 0x00, RPT0, M08E ()) /* Step  9, Release */
2119            M089 (0x00, 0x01, 0x01, 0x01, 0x00, RPT0, M08E ()) /* Step  0, Release */
2120            M089 (0x00, 0x01, 0x03, 0x01, 0x00, RPT0, M08E ()) /* Step  0, Release */
2121            M089 (0x00, 0x01, 0x02, 0x01, 0x00, RPT0, M08E ()) /* Step  0, Release */
2122            M089 (0x00, 0x01, 0x00, 0x01, 0x00, RPT0, M08E ()) /* Step  0, Release */
2123            M088 (0x00, 0x10, 0x01, 0x02, 0x00, RPT0, 0x00)      /* Step 10, Acquire */
2124            M089 (0x00, 0x10, 0x01, 0x02, 0x00, RPT0, M08E ()) /* Step 10, Release */
2125            LPN0--
2126            LPC0++
2127        }
2128
2129        /* Restore the value of flag of Global lock */
2130
2131        M078 (Local7)
2132        If (FL03)
2133        {
2134            /* Check that all mutexes are Released */
2135
2136            M08A ()
2137        }
2138    }
2139
2140    /*
2141     * ///////////////////////////////////////////////////
2142     *
2143     *    The tests below check behaviour after exceptions
2144     *
2145     * ///////////////////////////////////////////////////
2146     */
2147    /*
2148     * Check the life after AE_AML_MUTEX_ORDER exception on Acquire
2149     *
2150     *  1)     Acquire     N-th level mutex MUX-N
2151     *  2) run Acquire (N-2)-th level mutex MUX-(N-2) and get AE_AML_MUTEX_ORDER exception
2152     *  3) run Acquire (N-1)-th level mutex MUX-(N-1) and get AE_AML_MUTEX_ORDER exception
2153     *  4)     Acquire                mutex MUX-N and check that no exception on this operation
2154     *  5)     Release                mutex MUX-N and check that no exception on this operation
2155     *  6)     Release                mutex MUX-N and check that no exception on this operation
2156     *  7)     do 1-6 for all N in range 2-15 levels
2157     *  8)     check additionally that all the mutexes are free (run Release and
2158     *         get AE_AML_MUTEX_NOT_ACQUIRED exception for all the mutexes of all levels)
2159     *  9)     Acquire all mutexes of all levels and check that no exceptions
2160     * 10)     Release all mutexes of all levels and check that no exceptions
2161     * 11)     check additionally that all the mutexes are free (see 8)
2162     *
2163     * 12)     do it for GL mode too
2164     * 13)     do additional Acquire of MUX-(N-2) and MUX-(N-1) before Acquire of MUX-N (Release them later)
2165     *
2166     * arg0 - the value of flag of GL
2167     * arg1 - if non-zero do additional Acquire of MUX-(N-2) and MUX-(N-1) before Acquire of MUX-N
2168     */
2169    Method (M08B, 2, Serialized)
2170    {
2171        Name (RPT0, 0x01)
2172        Name (ORD0, 0x01)
2173        Name (LPN0, 0x00) /* level */
2174        Name (LPC0, 0x00)
2175        /* Set up the value of flag of Global lock */
2176
2177        Local7 = M078 (Arg0)
2178        LPN0 = (MAX0 - 0x02)
2179        LPC0 = 0x02
2180        While (LPN0)
2181        {
2182            Local0 = (LPC0 - 0x01)
2183            Local1 = (LPC0 - 0x02)
2184            If (Arg1)
2185            {
2186                M088 (Local1, 0x01, 0x00, 0x04, 0x00, RPT0, 0x00)    /* Step -2, Acquire */
2187                M088 (Local0, 0x01, 0x00, 0x04, 0x00, RPT0, 0x00)    /* Step -1, Acquire */
2188            }
2189
2190            M088 (LPC0, 0x01, 0x00, 0x01, 0x00, RPT0, 0x00)    /* Step  0, Acquire */
2191            M088 (Local1, 0x01, 0x00, 0x04, 0x40, RPT0, 0x00)    /* Step  1, Acquire, AE_AML_MUTEX_ORDER */
2192            M088 (Local0, 0x01, 0x00, 0x04, 0x40, RPT0, 0x00)    /* Step  2, Acquire, AE_AML_MUTEX_ORDER */
2193            M088 (LPC0, 0x01, 0x00, 0x04, 0x00, RPT0, 0x00)    /* Step  3, Acquire */
2194            M089 (LPC0, 0x01, 0x00, 0x04, 0x00, RPT0, ORD0) /* Step  3, Release */
2195            M089 (LPC0, 0x01, 0x00, 0x01, 0x00, RPT0, ORD0) /* Step  0, Release */
2196            If (Arg1)
2197            {
2198                M089 (Local0, 0x01, 0x00, 0x04, 0x00, RPT0, ORD0) /* Step -1, Release */
2199                M089 (Local1, 0x01, 0x00, 0x04, 0x00, RPT0, ORD0) /* Step -2, Release */
2200            }
2201
2202            LPN0--
2203            LPC0++
2204        }
2205
2206        /* Check that all mutexes are Released */
2207
2208        M08A ()
2209        M088 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  4, Acquire */
2210        M089 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  4, Release */
2211        /* Check that all mutexes are Released */
2212
2213        M08A ()
2214        /* Restore the value of flag of Global lock */
2215
2216        M078 (Local7)
2217    }
2218
2219    /*
2220     * Check the life after AE_AML_MUTEX_ORDER exception on Release
2221     *
2222     *  1)     Acquire     (N-1)-th level mutex MUX-(N-1)
2223     *  2)     Acquire       (N)-th level mutex MUX-N
2224     *  3) run Release     (N-1)-th level mutex MUX-(N-1) and get AE_AML_MUTEX_ORDER exception
2225     *  4)     Release       (N)-th level mutex MUX-N     and check that no exception on this operation
2226     *  5)     Release     (N-1)-th level mutex MUX-(N-1) and check that no exception on this operation
2227     *  6)     do 1-5 for all N in range 1-15 levels
2228     *  7)     check additionally that all the mutexes are free (run Release and
2229     *         get AE_AML_MUTEX_NOT_ACQUIRED exception for all the mutexes of all levels)
2230     *  8)     Acquire all mutexes of all levels and check that no exceptions
2231     *  9)     Release all mutexes of all levels and check that no exceptions
2232     * 10)     check additionally that all the mutexes are free (see 7)
2233     *
2234     * 11)     do it for GL mode too
2235     *
2236     * arg0 - the value of flag of GL
2237     */
2238    Method (M08D, 1, Serialized)
2239    {
2240        Name (RPT0, 0x01)
2241        Name (ORD0, 0x01)
2242        Name (LPN0, 0x00) /* level */
2243        Name (LPC0, 0x00)
2244        /* Set up the value of flag of Global lock */
2245
2246        Local7 = M078 (Arg0)
2247        LPN0 = (MAX0 - 0x01)
2248        LPC0 = 0x01
2249        While (LPN0)
2250        {
2251            Local0 = (LPC0 - 0x01)
2252            M088 (Local0, 0x01, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  0, Acquire */
2253            M088 (LPC0, 0x01, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  1, Acquire */
2254            /* Jump over the level */
2255
2256            M089 (Local0, 0x01, 0x00, MIN0, 0x40, RPT0, ORD0) /* Step  2, Release, AE_AML_MUTEX_ORDER */
2257            M089 (LPC0, 0x01, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  1, Release */
2258            M089 (Local0, 0x01, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  0, Release */
2259            LPN0--
2260            LPC0++
2261        }
2262
2263        /* Check that all mutexes are Released */
2264
2265        M08A ()
2266        M088 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  3, Acquire */
2267        M089 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  3, Release */
2268        /* Check that all mutexes are Released */
2269
2270        M08A ()
2271        /* Restore the value of flag of Global lock */
2272
2273        M078 (Local7)
2274    }
2275
2276    /*
2277     * Check the life after AE_AML_MUTEX_ORDER exception on Release
2278     *
2279     * Similar to the m08d but trying to heal situation by
2280     * Acquiring/Release operations applied to the greater
2281     * level so changing the current level upper than all the
2282     * currently Acquired levels so don't expect exceptions on
2283     * the following Release operations applied in the correct
2284     * inverse order to all the Acquired mutexes.
2285     *
2286     * (for the current 20060828 ACPICA this doesn't help).
2287     */
2288    Method (M07F, 0, Serialized)
2289    {
2290        Name (RPT0, 0x01)
2291        Name (ORD0, 0x01)
2292        Name (LPN0, 0x00) /* level */
2293        Name (LPC0, 0x00)
2294        LPN0 = (MAX0 - 0x02)
2295        LPC0 = 0x01
2296        While (LPN0)
2297        {
2298            Local0 = (LPC0 - 0x01)
2299            Local1 = (LPC0 + 0x01)
2300            M088 (Local0, 0x01, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  0, Acquire */
2301            M088 (LPC0, 0x01, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  1, Acquire */
2302            /* Jump over the level on Releasing */
2303
2304            M089 (Local0, 0x01, 0x00, MIN0, 0x40, RPT0, ORD0) /* Step  2, Release, AE_AML_MUTEX_ORDER */
2305            /*
2306             * Additional attempt is made to restore the normal calculation -
2307             * Acquire the mutex M0 of level greater than all the levels
2308             * touched at that moment so changing the current level by the
2309             * succeeded operation. Then do Release operations for all
2310             * the Acquired mutexes in the correct inverse order starting
2311             * with the M0 mutex expecting no exceptions on them.
2312             *
2313             * (for the current 20060828 ACPICA this doesn't help).
2314             */
2315            M088 (LPC0, 0x01, 0x00, 0x01, 0x00, RPT0, 0x00)    /* Step  3, Acquire */
2316            M088 (Local1, 0x01, 0x00, 0x01, 0x00, RPT0, 0x00)    /* Step  4, Acquire */
2317            M088 (LPC0, 0x01, 0x00, 0x01, 0x40, RPT0, 0x00)    /* Step  5, Acquire, AE_AML_MUTEX_ORDER */
2318            M089 (Local1, 0x01, 0x00, 0x01, 0x00, RPT0, ORD0) /* Step  4, Release */
2319            M089 (LPC0, 0x01, 0x00, 0x01, 0x00, RPT0, ORD0) /* Step  3, Release */
2320            M089 (LPC0, 0x01, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  1, Release */
2321            M089 (Local0, 0x01, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  0, Release */
2322            LPN0--
2323            LPC0++
2324        }
2325
2326        /* Check that all mutexes are Released */
2327
2328        M08A ()
2329        M088 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, 0x00)    /* Step  6, Acquire */
2330        M089 (0x00, MAX0, 0x00, MIN0, 0x00, RPT0, ORD0) /* Step  6, Release */
2331        /* Check that all mutexes are Released */
2332
2333        M08A ()
2334    }
2335
2336    /* ############################################### Run-method: */
2337
2338    Method (M300, 0, NotSerialized)
2339    {
2340        If (FL03)
2341        {
2342            /* Check that all mutexes are Released (doesn't check T804..) */
2343
2344            M08A ()
2345        }
2346
2347        SRMT ("m300")
2348        If (ERR7)
2349        {
2350            ERR ("ERRORS were detected during the loading stage", Z150, __LINE__, 0x00, 0x00, 0x00, ERR7)
2351        }
2352
2353        /* ATTENTION: this test must be run the first */
2354
2355        SRMT ("m0b9")
2356        M0B9 ()
2357        SRMT ("m0bb")
2358        M0BB ()
2359        SRMT ("m301")
2360        M301 ()
2361        SRMT ("m369-0")
2362        M369 (0x00)
2363        SRMT ("m369-1")
2364        If (Y297)
2365        {
2366            M369 (0x01)
2367        }
2368        Else
2369        {
2370            BLCK ()
2371        }
2372
2373        SRMT ("m369-0")
2374        M369 (0x00)
2375        SRMT ("m36a")
2376        M36A ()
2377        SRMT ("m36b")
2378        M36B ()
2379        SRMT ("m36c")
2380        M36C ()
2381        SRMT ("m389")
2382        M389 ()
2383        SRMT ("m07b")
2384        M07B ()
2385        SRMT ("m38a")
2386        If (Y238)
2387        {
2388            M38A ()
2389        }
2390        Else
2391        {
2392            BLCK ()
2393        }
2394
2395        SRMT ("m38d")
2396        If (Y242)
2397        {
2398            M38D ()
2399        }
2400        Else
2401        {
2402            BLCK ()
2403        }
2404
2405        SRMT ("m07d-direct")
2406        If (Y242)
2407        {
2408            M07D (0x00)
2409        }
2410        Else
2411        {
2412            BLCK ()
2413        }
2414
2415        SRMT ("m07d-inverse")
2416        M07D (0x01)
2417        SRMT ("m07a-no-GL")
2418        M07A (0x00)
2419        SRMT ("m07a-GL")
2420        M07A (0x01)
2421        SRMT ("m07e")
2422        M07E ()
2423        SRMT ("m08b-no-GL-0")
2424        M08B (0x00, 0x00)
2425        SRMT ("m08b-no-GL-1")
2426        M08B (0x00, 0x01)
2427        SRMT ("m08b-GL-0")
2428        M08B (0x01, 0x00)
2429        SRMT ("m08b-GL-1")
2430        M08B (0x01, 0x01)
2431        SRMT ("m08d-no-GL")
2432        If (Y238)
2433        {
2434            M08D (0x00)
2435        }
2436        Else
2437        {
2438            BLCK ()
2439        }
2440
2441        SRMT ("m08d-GL")
2442        If (Y238)
2443        {
2444            M08D (0x01)
2445        }
2446        Else
2447        {
2448            BLCK ()
2449        }
2450
2451        SRMT ("m07f")
2452        If (Y243)
2453        {
2454            M07F ()
2455        }
2456        Else
2457        {
2458            BLCK ()
2459        }
2460
2461        SRMT ("m07c")
2462        M07C ()
2463        SRMT ("m0ba")
2464        M0BA ()
2465        /*
2466         * To see if the mutex-es framework can continue working after AE_LIMIT.
2467         * Now, after AE_LIMIT, it looks can't actually restore -- many messages
2468         * during the all further execution of tests, and even the tests
2469         * "TEST: WAI0, Wait for Events" somewhere hangs forever:
2470         *
2471         * **** AcpiExec: Exception AE_LIMIT during execution of method [M369] Opcode [Mutex] @E2
2472         * ACPI Exception (utmutex-0376): AE_BAD_PARAMETER, Thread 1475 could not acquire Mutex [0] [20074403]
2473         * ACPI Error (exutils-0180): Could not acquire AML Interpreter mutex [20074403]
2474         * ACPI Error (utmutex-0421): Mutex [0] is not acquired, cannot release [20074403]
2475         * ACPI Error (exutils-0250): Could not release AML Interpreter mutex [20074403]
2476         * **** AcpiExec: Exception override, new status AE_OK
2477         */
2478        SRMT ("m369-0")
2479        M369 (0x00)
2480        SRMT ("m369-1")
2481        If (Y297)
2482        {
2483            M369 (0x01)
2484        }
2485        Else
2486        {
2487            BLCK ()
2488        }
2489
2490        SRMT ("m369-0")
2491        M369 (0x00)
2492        If (FL03)
2493        {
2494            /* Check that all mutexes are Released */
2495
2496            M08A ()
2497        }
2498
2499        CH03 ("m300", Z150, __LINE__, 0x00, 0x00)
2500    }
2501