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     *  Buffer
30     *
31     * (verify exceptions caused by the imprope use of Buffer type objects)
32     */
33    Name (Z095, 0x5F)
34    Name (B100, Buffer (0x01)
35    {
36         0x61                                             // a
37    })
38    /* Expected exceptions: */
39    /* */
40    /* 47 - AE_AML_OPERAND_TYPE */
41    /* Note: Buffer can be used with Index */
42    Method (M4B3, 1, Serialized)
43    {
44        Name (B000, Buffer (0x01)
45        {
46             0x62                                             // b
47        })
48        /* Local Named Object */
49
50        Method (M000, 1, Serialized)
51        {
52            Name (B000, Buffer (0x01)
53            {
54                 0x63                                             // c
55            })
56            If (Y083)
57            {
58                Local1 = DerefOf (B000)
59                CH06 (Arg0, 0x00, 0x2F)
60            }
61
62            Store (B000 [0x00], Local1)
63            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
64        }
65
66        /* Global Named Object */
67
68        Method (M001, 1, NotSerialized)
69        {
70            If (Y083)
71            {
72                Local1 = DerefOf (B100)
73                CH06 (Arg0, 0x01, 0x2F)
74            }
75
76            Store (B100 [0x00], Local1)
77            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
78        }
79
80        /* Argument */
81
82        Method (M002, 2, NotSerialized)
83        {
84            Local1 = DerefOf (Arg1)
85            CH06 (Arg0, 0x02, 0x2F)
86            Release (Arg1)
87            CH06 (Arg0, 0x03, 0x2F)
88            Reset (Arg1)
89            CH06 (Arg0, 0x04, 0x2F)
90            Signal (Arg1)
91            CH06 (Arg0, 0x05, 0x2F)
92            Local1 = Acquire (Arg1, 0x0000)
93            CH06 (Arg0, 0x06, 0x2F)
94            Store (Arg1 [0x00], Local1)
95            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
96            Local1 = Wait (Arg1, 0x00)
97            CH06 (Arg0, 0x07, 0x2F)
98            Local1 = Match (Arg1, MTR, 0x00, MTR, 0x00, 0x00)
99            CH06 (Arg0, 0x08, 0x2F)
100        }
101
102        /* Local */
103
104        Method (M003, 1, NotSerialized)
105        {
106            Local0 = Buffer (0x01)
107                {
108                     0x63                                             // c
109                }
110            Local1 = DerefOf (Local0)
111            CH06 (Arg0, 0x09, 0x2F)
112            Release (Local0)
113            CH06 (Arg0, 0x0A, 0x2F)
114            Reset (Local0)
115            CH06 (Arg0, 0x0B, 0x2F)
116            Signal (Local0)
117            CH06 (Arg0, 0x0C, 0x2F)
118            Local1 = Acquire (Local0, 0x0000)
119            CH06 (Arg0, 0x0D, 0x2F)
120            Store (Local0 [0x00], Local1)
121            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
122            Local1 = Wait (Local0, 0x00)
123            CH06 (Arg0, 0x0E, 0x2F)
124            Local1 = Match (Local0, MTR, 0x00, MTR, 0x00, 0x00)
125            CH06 (Arg0, 0x0F, 0x2F)
126        }
127
128        /* An element of Package */
129
130        Method (M004, 1, Serialized)
131        {
132            Name (P000, Package (0x01)
133            {
134                Buffer (0x01)
135                {
136                     0x63                                             // c
137                }
138            })
139            /* DeRefOf(Index(Package, Ind, Dest)) */
140
141            Local1 = DerefOf (DerefOf (Local0 = P000 [0x00]))
142            CH06 (Arg0, 0x12, 0x2F)
143            Store (DerefOf (Local0 = P000 [0x00]) [0x00], Local1)
144            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
145            Local1 = Match (DerefOf (Local0 = P000 [0x00]), MTR, 0x00, MTR, 0x00,
146                0x00)
147            CH06 (Arg0, 0x13, 0x2F)
148        }
149
150        /* Reference to Object */
151
152        Method (M005, 2, NotSerialized)
153        {
154            Debug = Arg0
155            Debug = Arg1
156            Local0 = ObjectType (Arg1)
157            If ((Local0 != 0x03))
158            {
159                ERR (Arg0, Z095, __LINE__, 0x00, 0x00, Local0, 0x03)
160                Return (0x01)
161            }
162
163            Local1 = DerefOf (Arg1)
164            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
165            Local1 = DerefOf (DerefOf (Arg1))
166            CH06 (Arg0, 0x15, 0x2F)
167            Store (DerefOf (Arg1) [0x00], Local1)
168            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
169            Local1 = Match (DerefOf (Arg1), MTR, 0x00, MTR, 0x00, 0x00)
170            CH06 (Arg0, 0x16, 0x2F)
171            Return (0x00)
172        }
173
174        /* Result of Method invocation */
175
176        Method (M006, 1, Serialized)
177        {
178            Name (I000, 0x00) /* Label to check m000 invocations */
179            Method (M000, 1, NotSerialized)
180            {
181                I000 = Arg0
182                Local0 = Buffer (0x01)
183                    {
184                         0x63                                             // c
185                    }
186                Return (Local0)
187            }
188
189            Method (CH00, 2, NotSerialized)
190            {
191                If ((I000 != Arg1))
192                {
193                    ERR (Arg0, Z095, __LINE__, 0x00, 0x00, I000, Arg1)
194                }
195            }
196
197            Local1 = DerefOf (M000 (0x01))
198            CH06 (Arg0, 0x18, 0x2F)
199            CH00 (Arg0, 0x01)
200            Release (M000 (0x02))
201            CH06 (Arg0, 0x19, 0x2F)
202            If (Y600)
203            {
204                CH00 (Arg0, 0x02)
205            }
206
207            Reset (M000 (0x03))
208            CH06 (Arg0, 0x1A, 0x2F)
209            If (Y600)
210            {
211                CH00 (Arg0, 0x03)
212            }
213
214            Signal (M000 (0x04))
215            CH06 (Arg0, 0x1B, 0x2F)
216            If (Y600)
217            {
218                CH00 (Arg0, 0x04)
219            }
220
221            Local1 = Acquire (M000 (0x05), 0x0000)
222            CH06 (Arg0, 0x1C, 0x2F)
223            If (Y600)
224            {
225                CH00 (Arg0, 0x05)
226            }
227
228            CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
229            Store (M000 (0x06) [0x00], Local1)
230            If (Y900)
231            {
232                CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
233                CH00 (Arg0, 0x06)
234            }
235            Else
236            {
237                CH04 (__METHOD__, 0x00, 0x55, Z095, __LINE__, 0x00, 0x00) /* AE_INDEX_TO_NOT_ATTACHED */
238            }
239
240            Local1 = Wait (M000 (0x07), 0x00)
241            CH06 (Arg0, 0x1D, 0x2F)
242            If (Y600)
243            {
244                CH00 (Arg0, 0x07)
245            }
246
247            Local1 = Match (M000 (0x08), MTR, 0x00, MTR, 0x00, 0x00)
248            CH06 (Arg0, 0x1E, 0x2F)
249            CH00 (Arg0, 0x08)
250        }
251
252        /* Reference to Object as Result of Method invocation */
253
254        Method (M007, 1, Serialized)
255        {
256            Name (B000, Buffer (0x01)
257            {
258                 0x63                                             // c
259            })
260            Name (I000, 0x00) /* Label to check m000 invocations */
261            Method (M000, 2, NotSerialized)
262            {
263                I000 = Arg0
264                If ((Arg1 == 0x00))
265                {
266                    Local0 = RefOf (B100)
267                }
268                ElseIf ((Arg1 == 0x01))
269                {
270                    Local0 = RefOf (B000)
271                }
272
273                Return (Local0)
274            }
275
276            Method (CH00, 2, NotSerialized)
277            {
278                If ((I000 != Arg1))
279                {
280                    ERR (Arg0, Z095, __LINE__, 0x00, 0x00, I000, Arg1)
281                }
282            }
283
284            Name (LPN0, 0x02)
285            Name (LPC0, 0x00)
286            While (LPN0)
287            {
288                Local0 = (0x03 * LPC0) /* \M4B3.M007.LPC0 */
289                I000 = 0x00
290                Local1 = DerefOf (M000 (0x01, LPC0))
291                CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
292                CH00 (Arg0, 0x01)
293                Local1 = DerefOf (DerefOf (M000 (0x02, LPC0)))
294                CH06 (Arg0, (0x20 + Local0), 0x2F)
295                CH00 (Arg0, 0x02)
296                Store (DerefOf (M000 (0x03, LPC0)) [0x00], Local1)
297                CH06 (Arg0, (0x21 + Local0), 0x2F)
298                CH00 (Arg0, 0x03)
299                Local1 = Match (DerefOf (M000 (0x04, LPC0)), MTR, 0x00, MTR, 0x00, 0x00)
300                CH06 (Arg0, (0x22 + Local0), 0x2F)
301                CH00 (Arg0, 0x04)
302                LPN0--
303                LPC0++
304            }
305        }
306
307        CH03 (__METHOD__, Z095, __LINE__, 0x00, 0x00)
308        /* Local Named Object */
309
310        M000 (__METHOD__)
311        /* Global Named Object */
312
313        M001 (__METHOD__)
314        /* Argument */
315
316        M002 (__METHOD__, Buffer (0x01)
317            {
318                 0x62                                             // b
319            })
320        /* Local */
321
322        M003 (__METHOD__)
323        /* An element of Package */
324
325        M004 (__METHOD__)
326        /* Reference to Local Named Object */
327
328        M005 (Concatenate (__METHOD__, "-m005-RefLocName"), RefOf (B000))
329        Local0 = RefOf (B000)
330        M005 (Concatenate (__METHOD__, "-m005-RefLocName2"), Local0)
331        CondRefOf (B000, Local0)
332        M005 (Concatenate (__METHOD__, "-m005-CondRefLocName"), Local0)
333        M005 (Concatenate (__METHOD__, "-m005-RefGlobName"), RefOf (B100))
334        Local0 = RefOf (B100)
335        M005 (Concatenate (__METHOD__, "-m005-RefGlobName2"), Local0)
336        CondRefOf (B100, Local0)
337        M005 (Concatenate (__METHOD__, "-m005-CondRefGlobName"), Local0)
338        /* Reference to Local */
339
340        Local0 = Buffer (0x01)
341            {
342                 0x62                                             // b
343            }
344        M005 (Concatenate (__METHOD__, "-m005-RefLocal"), RefOf (Local0))
345        Local1 = RefOf (Local0)
346        M005 (Concatenate (__METHOD__, "-m005-RefLocal2"), Local1)
347        CondRefOf (Local0, Local1)
348        M005 (Concatenate (__METHOD__, "-m005-CondRefLocal"), Local1)
349        /* Reference to Arg */
350
351        M005 (Concatenate (__METHOD__, "-m005-RefArg"), RefOf (Arg0))
352        Local0 = RefOf (Arg0)
353        M005 (Concatenate (__METHOD__, "-m005-RefArg2"), Local0)
354        CondRefOf (Arg0, Local0)
355        M005 (Concatenate (__METHOD__, "-m005-CondRefArg"), Local0)
356        /* Index to Package */
357
358        Name (P000, Package (0x01)
359        {
360            Buffer (0x01)
361            {
362                 0x62                                             // b
363            }
364        })
365        If (Y113)
366        {
367            M005 (Concatenate (__METHOD__, "-m005-Index"), P000 [0x00])
368        }
369
370        Store (P000 [0x00], Local0)
371        M005 (Concatenate (__METHOD__, "-m005-Index2"), Local0)
372        If (Y113)
373        {
374            M005 (Concatenate (__METHOD__, "-m005-Index3"), Local0 = P000 [0x00])
375        }
376
377        Local0 = P000 [0x00]
378        M005 (Concatenate (__METHOD__, "-m005-Index4"), Local0)
379        Local1 = Local0 = P000 [0x00]
380        M005 (Concatenate (__METHOD__, "-m005-Index5"), Local1)
381        /* Result of Method invocation */
382
383        M006 (__METHOD__)
384        /* Reference to Object as Result of Method invocation */
385
386        If (Y500)
387        {
388            M007 (__METHOD__)
389        }
390    }
391