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     * Bug 278:
30     *
31     * SUMMARY: "Namespace location to be relative" functionality of Load operator issue
32     */
33    Device (D278)
34    {
35        Name (SSDT, Buffer (0x5F)
36        {
37            /* 0000 */  0x53, 0x53, 0x44, 0x54, 0x5F, 0x00, 0x00, 0x00,  // SSDT_...
38            /* 0008 */  0x02, 0x2D, 0x49, 0x6E, 0x74, 0x65, 0x6C, 0x00,  // .-Intel.
39            /* 0010 */  0x4D, 0x61, 0x6E, 0x79, 0x00, 0x00, 0x00, 0x00,  // Many....
40            /* 0018 */  0x01, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x54, 0x4C,  // ....INTL
41            /* 0020 */  0x15, 0x12, 0x06, 0x20, 0x10, 0x1F, 0x5C, 0x00,  // ... ..\.
42            /* 0028 */  0x08, 0x4E, 0x41, 0x42, 0x53, 0x0D, 0x61, 0x62,  // .NABS.ab
43            /* 0030 */  0x73, 0x6F, 0x6C, 0x75, 0x74, 0x65, 0x20, 0x6C,  // solute l
44            /* 0038 */  0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20,  // ocation
45            /* 0040 */  0x6F, 0x62, 0x6A, 0x00, 0x08, 0x4E, 0x43, 0x52,  // obj..NCR
46            /* 0048 */  0x52, 0x0D, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E,  // R.curren
47            /* 0050 */  0x74, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69,  // t locati
48            /* 0058 */  0x6F, 0x6E, 0x20, 0x6F, 0x62, 0x6A, 0x00         // on obj.
49        })
50        OperationRegion (IST0, SystemMemory, 0x00, 0x5F)
51        Field (IST0, ByteAcc, NoLock, Preserve)
52        {
53            RFU0,   760
54        }
55
56        Name (DDBH, 0x00)
57        Method (TST0, 0, NotSerialized)
58        {
59            /* Check absence */
60
61            If (CondRefOf (NABS, Local0))
62            {
63                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NABS", 0x01)
64            }
65
66            If (CondRefOf (NCRR, Local0))
67            {
68                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NCRR", 0x01)
69            }
70
71            RFU0 = SSDT /* \D278.SSDT */
72            Load (RFU0, DDBH) /* \D278.DDBH */
73            Debug = "SSDT loaded"
74            /* Check existence */
75
76            If (CondRefOf (NABS, Local0))
77            {
78                If (("absolute location obj" != DerefOf (Local0)))
79                {
80                    ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "absolute location NABS", 0x01)
81                }
82            }
83            Else
84            {
85                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NABS", 0x00)
86            }
87
88            If (CondRefOf (NCRR, Local0))
89            {
90                If (("current location obj" != DerefOf (Local0)))
91                {
92                    ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "current location NCRR", 0x01)
93                }
94            }
95            Else
96            {
97                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NCRR", 0x00)
98            }
99
100            /* Check location */
101
102            If (CondRefOf (\NABS, Local0)){}
103            Else
104            {
105                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "\\NABS", 0x00)
106            }
107
108            If (CondRefOf (\NCRR, Local0))
109            {
110                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "\\NCRR", 0x01)
111            }
112
113            If (CondRefOf (\D278.NCRR, Local0))
114            {
115                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "\\D278.NCRR", 0x01)
116            }
117
118            If (CondRefOf (\D278.TST0.NCRR, Local0)){}
119            Else
120            {
121                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "\\D278.TST0.NCRR", 0x00)
122            }
123
124            Unload (DDBH)
125            Debug = "SSDT unloaded"
126            /* Check absence */
127
128            If (CondRefOf (NABS, Local0))
129            {
130                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NABS", 0x01)
131            }
132
133            If (CondRefOf (NCRR, Local0))
134            {
135                ERR (__METHOD__, ZFFF, __LINE__, 0x00, 0x00, "NCRR", 0x01)
136            }
137        }
138    }
139
140    Method (M278, 0, NotSerialized)
141    {
142        \D278.TST0 ()
143    }
144