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 */
28DefinitionBlock ("mt_mutex", "DSDT", 2, "Intel", "Many", 0x00000001)
29{
30    /* All declarations */
31    Include ("../../../../runtime/cntl/MT_DECL.asl")
32    Include ("../../../../runtime/common/TCI/tcicmd.asl")
33    Include ("../../../../runtime/common/mx_objects.asl")
34    Include ("../../../../runtime/collections/mt/mutex/common.asl")
35    Include ("../../../../runtime/collections/mt/mutex/service.asl")
36    Include ("../../../../runtime/collections/mt/mutex/tests.asl")
37    Include ("../../../../runtime/collections/mt/mutex/mutex.asl")
38    Include ("../../../../runtime/collections/mt/mutex/mxs.asl")
39    Include ("../../../../runtime/collections/mt/mutex/example0.asl")
40    Include ("../../../../runtime/collections/mt/mutex/worker_thr.asl")
41    /*
42     * Arguments passed to MAIN method are:
43     *
44     *   arg0 - number of threads.
45     *   arg1 - ID of current thread.
46     *   arg2 - Index of current thread inside all participating threads.
47     *          The thread of Index 0 is considered as Control Thread.
48     */
49    Method (MAIN, 3, NotSerialized)
50    {
51        If ((Arg1 == "AML Debugger"))
52        {
53            Debug = "Either the Threads command is old,"
54            Debug = "or even some another command was initiated."
55            Return (0x00)
56        }
57
58        /* Non-zero Local0 means the current thread is a Control Thread */
59
60        Local0 = 0x01
61        If (Arg2)
62        {
63            /* Wait for Control thread saying 'go further' */
64
65            M116 (Arg2)
66            Local0 = 0x00
67        }
68        Else
69        {
70            /* Control thread */
71            /* Initialization */
72            STRT (0x00)
73        }
74
75        /* Run verification methods */
76        Include ("../../../../runtime/collections/mt/mutex/RUN.asl")
77        Store (0x00, Local7)
78        If (Local0)
79        {
80            /* Final actions */
81
82            Store (FNSH (), Local7)
83        }
84
85        Return (Local7)
86    }
87}
88