1/*
2 * Some or all of this work - Copyright (c) 2006 - 2016, 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/*
30 * Initiate exceptional conditions by all the known ways.
31 * Verify the reaction.
32 *
33 * Current max index of checking is 170
34 */
35
36Name(z058, 58)
37
38// Divide by zero
39Method(m140,, Serialized)
40{
41	Name(ts, "m140")
42
43	CH03(ts, z058, 0, 0, 0)
44
45	Store(1, Local1)
46	Store(2, Local0)
47	Divide(Local1, Local0, Local2)
48
49	CH03(ts, z058, 1, 0, 0)
50
51	Store(0, Local0)
52	Divide(Local1, Local0, Local2)
53
54	CH04(ts, 0, 56, z058, 2, 0, 0)	// AE_AML_DIVIDE_BY_ZERO
55
56	Store(2, Local0)
57	Divide(Local1, Local0, Local2)
58
59	CH03(ts, z058, 3, 0, 0)
60}
61
62// Modulo divide by zero
63Method(m141,, Serialized)
64{
65	Name(ts, "m141")
66
67	CH03(ts, z058, 4, 0, 0)
68
69	Store(1, Local1)
70	Store(2, Local0)
71	Mod(Local1, Local0, Local2)
72
73	CH03(ts, z058, 5, 0, 0)
74
75	Store(0, Local0)
76	Mod(Local1, Local0, Local2)
77
78	CH04(ts, 0, 56, z058, 6, 0, 0)	// AE_AML_DIVIDE_BY_ZERO
79
80	Store(2, Local0)
81	Mod(Local1, Local0, Local2)
82
83	CH03(ts, z058, 7, 0, 0)
84}
85
86// Release ownership on a Mutex that is not currently owned
87Method(m142,, Serialized)
88{
89	Name(ts, "m142")
90
91	Mutex(MTX0, 0)
92
93	CH03(ts, z058, 8, 0, 0)
94
95	Release(MTX0)
96
97	CH04(ts, 0, 65, z058, 9, 0, 0)	// AE_AML_MUTEX_NOT_ACQUIRED
98}
99
100// SizeOf for data types not an Integer, Buffer, String or Package object
101Method(m143,, Serialized)
102{
103	Name(ts, "m143")
104
105	// Method
106	// DDB Handle
107	// Debug Object
108	// Uninitialized
109
110
111	// Integer
112	Name(INT0, 0)
113
114	// String
115	Name(STR0, "string")
116
117	// Buffer
118	Name(BUF0, Buffer(10) {0x00})
119
120	// Package
121	Name(PAC0, Package(1) {0})
122
123	// Device
124	Device(DEV0) {}
125
126	// Event
127	Event(EVE0)
128
129	// Mutex
130	Mutex(MTX0, 0)
131
132	// Operation Region
133	OperationRegion(OPR0, SystemMemory, 0, 4)
134
135	// Power Resource
136	PowerResource(PWR0, 0, 0) {}
137
138	// Processor
139	Processor(CPU0, 0x0, 0xFFFFFFFF, 0x0) {}
140
141	// Thermal Zone
142	ThermalZone(TZN0) {}
143
144	// Buffer Field
145	Index(BUF0, 0, Local0)
146
147	CH03(ts, z058, 10, 0, 0)
148
149	Store(SizeOf(STR0), Local5)
150	Store(SizeOf(BUF0), Local5)
151	Store(SizeOf(PAC0), Local5)
152	Store(SizeOf(INT0), Local5)
153
154	CH03(ts, z058, 11, 0, 0)
155
156	if (INT0) {
157		Store(0, Local1)
158	}
159	Store(SizeOf(Local1), Local5)
160	CH04(ts, 1, 49, z058, 12, 0, 0)	// AE_AML_UNINITIALIZED_LOCAL
161
162#if 0 /* These are now caught by the compiler - Aug 2015 */
163	Store(SizeOf(DEV0), Local5)
164	CH04(ts, 1, 47, z058, 13, 0, 0)	// AE_AML_OPERAND_TYPE
165
166	Store(SizeOf(EVE0), Local5)
167	CH04(ts, 1, 47, z058, 14, 0, 0)	// AE_AML_OPERAND_TYPE
168
169	Store(SizeOf(MTX0), Local5)
170	CH04(ts, 1, 47, z058, 15, 0, 0)	// AE_AML_OPERAND_TYPE
171
172	Store(SizeOf(OPR0), Local5)
173	CH04(ts, 1, 47, z058, 16, 0, 0)	// AE_AML_OPERAND_TYPE
174
175	Store(SizeOf(PWR0), Local5)
176	CH04(ts, 1, 47, z058, 17, 0, 0)	// AE_AML_OPERAND_TYPE
177
178	Store(SizeOf(CPU0), Local5)
179	CH04(ts, 1, 47, z058, 18, 0, 0)	// AE_AML_OPERAND_TYPE
180
181	Store(SizeOf(TZN0), Local5)
182	CH04(ts, 1, 47, z058, 19, 0, 0)	// AE_AML_OPERAND_TYPE
183#endif
184}
185
186// ToString() when the number of characters copied from buffer exceeds 200
187Method(m144,, Serialized)
188{
189	Name(ts, "m144")
190
191	Name(b000, Buffer(200){})
192
193	Store(0, Local0)
194	While (LLess(Local0, 200)) {
195		Store(0xff, Index(b000, Local0))
196		Increment(Local0)
197	}
198
199	CH03(ts, z058, 20, 0, 0)
200
201	ToString(b000, Ones, Local5)
202
203	CH03(ts, z058, 21, 0, 0)
204
205	Name(b001, Buffer(201){})
206
207	Store(0, Local0)
208	While (LLess(Local0, 201)) {
209		Store(0xff, Index(b001, Local0))
210		Increment(Local0)
211	}
212
213	ToString(b001, Ones, Local5)
214
215	/*
216	 * CH04(ts, 0, 61, z058, 22, 0, 0)	// AE_AML_STRING_LIMIT
217	 *
218	 * 20.12.2005.
219	 * No more limit of string size.
220	 */
221	CH03(ts, z058, 22, 0, 0)
222}
223
224// Access out of Package
225Method(m145,, Serialized)
226{
227	Name(ts, "m145")
228
229	Name(p000, Package() {0,1,2})
230	Name(p001, Package(3) {0,1,2})
231
232	CH03(ts, z058, 23, 0, 0)
233
234	// Package()
235
236	Store(Index(p000, 2), Local5)
237
238	CH03(ts, z058, 24, 0, 0)
239
240	Store(Index(p000, 3), Local5)
241
242	CH04(ts, 1, 55, z058, 25, 0, 0)	// AE_AML_PACKAGE_LIMIT
243
244	Index(p000, 2, Local0)
245
246	CH03(ts, z058, 26, 0, 0)
247
248	Index(p000, 3, Local0)
249
250	CH04(ts, 0, 55, z058, 27, 0, 0)	// AE_AML_PACKAGE_LIMIT
251
252	// Package(3)
253
254	Store(Index(p001, 2), Local5)
255
256	CH03(ts, z058, 28, 0, 0)
257
258	Index(p001, 3, Local5)
259
260	CH04(ts, 0, 55, z058, 29, 0, 0)	// AE_AML_PACKAGE_LIMIT
261
262	Index(p001, 2, Local0)
263
264	CH03(ts, z058, 30, 0, 0)
265
266	Index(p001, 3, Local0)
267
268	CH04(ts, 0, 55, z058, 31, 0, 0)	// AE_AML_PACKAGE_LIMIT
269}
270
271// Access out of String
272Method(m085,, Serialized)
273{
274	Name(ts, "m085")
275
276	Name(s000, "123")
277
278	CH03(ts, z058, 32, 0, 0)
279
280	Index(s000, 2, Local5)
281
282	CH03(ts, z058, 33, 0, 0)
283
284	Index(s000, 3, Local5)
285
286	// Bug 177, Bugzilla 5480.
287	CH04(ts, 0, 61, z058, 34, 0, 0)	// AE_AML_STRING_LIMIT
288
289	Index(s000, 2, Local0)
290
291	CH03(ts, z058, 35, 0, 0)
292
293	Index(s000, 3, Local0)
294
295	CH04(ts, 0, 61, z058, 36, 0, 0)	// AE_AML_STRING_LIMIT
296}
297
298// Access out of Buffer
299Method(m086,, Serialized)
300{
301	Name(ts, "m086")
302
303	Name(b000, Buffer() {0,1,2})
304	Name(b001, Buffer(3) {0,1,2})
305
306	CH03(ts, z058, 37, 0, 0)
307
308	// Buffer()
309
310	Index(b000, 2, Local5)
311
312	CH03(ts, z058, 38, 0, 0)
313
314	Index(b000, 3, Local5)
315
316	CH04(ts, 0, 54, z058, 39, 0, 0)	// AE_AML_BUFFER_LIMIT
317
318	Index(b000, 2, Local0)
319
320	CH03(ts, z058, 40, 0, 0)
321
322	Index(b000, 3, Local0)
323
324	CH04(ts, 0, 54, z058, 41, 0, 0)	// AE_AML_BUFFER_LIMIT
325
326	// Buffer(3)
327
328	Index(b001, 2, Local5)
329
330	CH03(ts, z058, 42, 0, 0)
331
332	Index(b001, 3, Local5)
333
334	CH04(ts, 0, 54, z058, 43, 0, 0)	// AE_AML_BUFFER_LIMIT
335
336	Index(b001, 2, Local0)
337
338	CH03(ts, z058, 44, 0, 0)
339
340	Index(b001, 3, Local0)
341
342	CH04(ts, 0, 54, z058, 45, 0, 0)	// AE_AML_BUFFER_LIMIT
343}
344
345// ToInteger() passed with an image of a number which value
346// exceeds the maximum of an integer for the current mode.
347Method(m146,, Serialized)
348{
349	Name(ts, "m146")
350
351	CH03(ts, z058, 46, 0, 0)
352
353	if (LEqual(F64, 1)) {
354		Store("0xffffffffffffffff", Local0)
355	} else {
356		Store("0xffffffff", Local0)
357	}
358	ToInteger(Local0, Local5)
359
360	CH03(ts, z058, 47, 0, 0)
361
362	if (LEqual(F64, 1)) {
363		Store("0x11111111111111111", Local0)
364	} else {
365		Store("0x111111111", Local0)
366	}
367	ToInteger(Local0, Local5)
368
369	CH04(ts, 0, 46, z058, 48, 0, 0)	// AE_AML_NO_OPERAND
370}
371
372// [Uninitialized] None.
373// Causes a fatal error when used as a source
374// operand in any ASL statement.
375Method(m147, 1, Serialized)
376{
377	Name(ts, "m147")
378
379	if (Arg0) {
380		Store(0, Local0)
381	}
382
383	CH03(ts, z058, 49, 0, 0)
384
385	Increment(Local0)
386
387	CH04(ts, 0, 49, z058, 50, 0, 0)	// AE_AML_UNINITIALIZED_LOCAL
388}
389
390Method(m148)
391{
392	m147(0)
393}
394
395// Stall, Time parameter is too large (> 100)
396
397Method(m149, 1, Serialized)
398{
399	Name(ts, "m149")
400
401	CH03(ts, z058, 51, 0, 0)
402
403	Stall(Arg0)
404
405	CH03(ts, z058, 52, 0, 0)
406}
407
408Method(m14a, 1, Serialized)
409{
410	Name(ts, "m14a")
411
412	CH03(ts, z058, 53, 0, 0)
413
414	Stall(Arg0)
415
416	// It is now bug 14.
417	CH04(ts, 0, 48, z058, 54, 0, 0)	// AE_AML_OPERAND_VALUE
418}
419
420// Bug 14.
421Method(m14b)
422{
423	m149(100)
424	/*
425	 * We are forced by Windows and BIOS code to increase the maximum stall
426	 * time to 255, this is in violation of the ACPI specification.
427	 * ACPI specification requires that Stall() does not relinquish the
428	 * processor, and delays longer than 100 usec should use Sleep()
429	 * instead. We allow stall up to 255 usec for compatibility with other
430	 * interpreters and existing BIOS.
431	 *
432	 * So we remove this test from test suite.
433	 *
434	 * m14a(101)
435	 */
436}
437
438// Concatenate() when the number of result characters in string exceeds 200
439Method(m14c,, Serialized)
440{
441	Name(ts, "m14c")
442
443	// 100 characters
444	Store("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", Local0)
445
446	// 101 characters
447	Store("01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", Local1)
448
449	CH03(ts, z058, 55, 0, 0)
450
451	Concatenate(Local0, Local0, Local5)
452
453	CH03(ts, z058, 56, 0, 0)
454
455	Concatenate(Local0, Local1, Local5)
456
457	/*
458	 * CH04(ts, 0, 61, z058, 57, 0, 0)	// AE_AML_STRING_LIMIT
459	 *
460	 * 20.12.2005.
461	 * No more limit of string size.
462	 */
463
464	CH03(ts, z058, 57, 0, 0)
465}
466
467// ToDecimalString() when the number of result characters in string exceeds 200
468Method(m14d,, Serialized)
469{
470	Name(ts, "m14d")
471
472	// Results into 200 (99 * 2 + 2) characters
473	Name(b000, Buffer() {
474					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
475					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
476					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
477					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
478					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
479					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
480					1, 1, 1, 11})
481
482	// Results into 201 (100 * 2 + 1) characters
483	Name(b001, Buffer() {
484					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
485					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
486					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
487					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
488					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
489					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
490					1, 1, 1, 1, 1})
491
492	CH03(ts, z058, 58, 0, 0)
493
494	ToDecimalString(b000, Local5)
495
496	CH03(ts, z058, 59, 0, 0)
497
498	ToDecimalString(b001, Local5)
499
500	/*
501	 * CH04(ts, 0, 61, z058, 60, 0, 0)	// AE_AML_STRING_LIMIT
502	 *
503	 * 20.12.2005.
504	 * No more limit of string size.
505	 */
506
507	CH03(ts, z058, 60, 0, 0)
508}
509
510// ToBCD() when a specified integer overflows a number of the BCD format
511Method(m14e,, Serialized)
512{
513	Name(ts, "m14e")
514
515	CH03(ts, z058, 61, 0, 0)
516
517	if (LEqual(F64, 1)) {
518		Store(9999999999999999, Local4)
519		ToBCD(Local4, Local5)
520	} else {
521		ToBCD(99999999, Local5)
522	}
523
524	CH03(ts, z058, 62, 0, 0)
525
526	if (LEqual(F64, 1)) {
527		Store(10000000000000000, Local4)
528		ToBCD(Local4, Local5)
529	} else {
530		Store(100000000, Local4)
531		ToBCD(Local4, Local5)
532	}
533
534	CH04(ts, 0, 52, z058, 63, 0, 0)	// AE_AML_NUMERIC_OVERFLOW
535}
536
537// Create field out of buffer
538Method(m14f,, Serialized)
539{
540	Name(ts, "m14f")
541
542	Name(b001, Buffer(16) {})
543
544	CH03(ts, z058, 64, 0, 0)
545	CreateBitField(b001, 127, f000)
546	CH03(ts, z058, 65, 0, 0)
547	CreateBitField(b001, 128, f001)
548	CH04(ts, 0, 54, z058, 66, 0, 0)	// AE_AML_BUFFER_LIMIT
549
550	CH03(ts, z058, 67, 0, 0)
551	CreateByteField(b001, 15, f002)
552	CH03(ts, z058, 68, 0, 0)
553	CreateByteField(b001, 16, f003)
554	CH04(ts, 0, 54, z058, 69, 0, 0)	// AE_AML_BUFFER_LIMIT
555
556	CH03(ts, z058, 70, 0, 0)
557	CreateWordField(b001, 14, f004)
558	CH03(ts, z058, 71, 0, 0)
559	CreateWordField(b001, 15, f005)
560	CH04(ts, 0, 54, z058, 72, 0, 0)	// AE_AML_BUFFER_LIMIT
561
562	CH03(ts, z058, 73, 0, 0)
563	CreateDWordField(b001, 12, f006)
564	CH03(ts, z058, 74, 0, 0)
565	CreateDWordField(b001, 13, f007)
566	CH04(ts, 0, 54, z058, 75, 0, 0)	// AE_AML_BUFFER_LIMIT
567
568	CH03(ts, z058, 76, 0, 0)
569	CreateQWordField(b001, 8, f008)
570	CH03(ts, z058, 77, 0, 0)
571	CreateQWordField(b001, 9, f009)
572	CH04(ts, 0, 54, z058, 78, 0, 0)	// AE_AML_BUFFER_LIMIT
573
574	CH03(ts, z058, 79, 0, 0)
575	CreateField(b001, 127, 1, f00a)
576	CH03(ts, z058, 80, 0, 0)
577	CreateField(b001, 128, 1, f00b)
578	CH04(ts, 0, 54, z058, 81, 0, 0)	// AE_AML_BUFFER_LIMIT
579
580	CH03(ts, z058, 82, 0, 0)
581	CreateField(b001, 120, 8, f00c)
582	CH03(ts, z058, 83, 0, 0)
583	CreateField(b001, 120, 9, f00d)
584	CH04(ts, 0, 54, z058, 84, 0, 0)	// AE_AML_BUFFER_LIMIT
585}
586
587// Access to uninitialized local
588Method(m150, 1, Serialized)
589{
590	Name(ts, "m150")
591
592	if (arg0) {
593		Store(0, Local0)
594	}
595
596	CH03(ts, z058, 85, 0, 0)
597
598	Index(Local0, 0, Local5)
599
600	CH04(ts, 0, 49, z058, 86, 0, 0)	// AE_AML_UNINITIALIZED_LOCAL
601}
602
603// Access to an uninitialized element of package
604Method(m151,, Serialized)
605{
606	Name(ts, "m151")
607
608	Name(p000, Package(4) {0,1,2})
609
610	CH03(ts, z058, 87, 0, 0)
611
612	Store(DeRefOf(Index(p000, 2)), Local5)
613
614	CH03(ts, z058, 88, 0, 0)
615
616	Store(DeRefOf(Index(p000, 3)), Local5)
617
618	/*
619	 * Obsolete:
620	 * CH04(ts, 0, 51, z058, 89, 0, 0)	// AE_AML_UNINITIALIZED_ELEMENT
621	 *
622	 * Updated according to Bug 85 fix: no exception is expected
623	 * since the value is not processed.
624	 */
625	/*
626	 * OBSOLETE July 2013. DerefOf on an empty package element now causes error
627	 * CH04(ts, 0, 62, z058, 89, 0, 0)
628	 */
629	CH04(ts, 1, 51, z058, 89, 0, 0)	// AE_AML_UNINITIALIZED_ELEMENT
630
631	Add(DeRefOf(Index(p000, 3)), 1, Local5)
632
633	if (EXCV) {
634		CH04(ts, 0, 51, z058, 169, 0, 0)	// AE_AML_UNINITIALIZED_ELEMENT
635	} else {
636		CH04(ts, 0, 0xff, z058, 169, 0, 0)
637	}
638
639	return (0)
640}
641
642// ToHexString() when the number of result characters in string exceeds 200
643Method(m152,, Serialized)
644{
645	Name(ts, "m152")
646
647	// Results into 200 (67 * 3 - 1) characters
648	Name(b000, Buffer() {
649					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
650					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
651					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
652					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
653					1, 1, 1})
654
655	// Results into 203 (68 * 3 - 1) characters
656	Name(b001, Buffer() {
657					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
658					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
659					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
660					1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
661					1, 1, 1, 1})
662
663	CH03(ts, z058, 90, 0, 0)
664
665	ToHexString(b000, Local5)
666
667	CH03(ts, z058, 91, 0, 0)
668
669	ToHexString(b001, Local5)
670
671	/*
672	 * CH04(ts, 0, 61, z058, 92, 0, 0)	// AE_AML_STRING_LIMIT
673	 *
674	 * 20.12.2005.
675	 * No more limit of string size.
676	 */
677
678	CH03(ts, z058, 92, 0, 0)
679}
680
681// StartIndex in Match greater than the package size
682Method(m153,, Serialized)
683{
684	Name(ts, "m153")
685
686	Name(PAC0, Package(1) {0})
687
688	CH03(ts, z058, 93, 0, 0)
689
690	Store(Match(PAC0, MTR, 0, MTR, 0, 0), Local5)
691
692	CH03(ts, z058, 94, 0, 0)
693
694	Store(Match(PAC0, MTR, 0, MTR, 0, 1), Local5)
695
696	CH04(ts, 1, 55, z058, 95, 0, 0)	// AE_AML_PACKAGE_LIMIT
697}
698
699// Exeptional conditions of ConcatenateResTemplate
700Method(m154,, Serialized)
701{
702	Name(ts, "m154")
703
704	Name(RT00, ResourceTemplate () {
705		IRQNoFlags () {1}})
706
707	// Empty buffer
708
709	Store(0, Local0)
710	Store(Buffer(Local0){}, Local2)
711
712	CH03(ts, z058, 96, 0, 0)
713
714	ConcatenateResTemplate(RT00, RT00, Local5)
715
716	CH03(ts, z058, 97, 0, 0)
717
718	ConcatenateResTemplate(RT00, Local2, Local5)
719
720	// Bug 188.
721	CH03(ts, z058, 98, 0, 0)
722	// CH04(ts, 0, 71, z058, 98, 0, 0)	// AE_AML_NO_RESOURCE_END_TAG
723
724	// One-element buffer
725
726	Store(Buffer(){0}, Local2)
727
728	ConcatenateResTemplate(RT00, Local2, Local5)
729
730	/*
731	 * Note: As for there is not a separate type for ResourceTemplate,
732	 * ResourceTemplate is in fact a buffer but interpreted as
733	 * ResourceTemplate. If the buffer has no complete END_TAG descriptor,
734	 * we get AE_AML_NO_RESOURCE_END_TAG instead of AE_AML_OPERAND_TYPE.
735	 */
736	if (EXCV) {
737		CH04(ts, 0, 71, z058, 100, 0, 0) // AE_AML_NO_RESOURCE_END_TAG
738	} else {
739		CH04(ts, 0, 0xff, z058, 100, 0, 0)
740	}
741
742	// One-element 0x79 buffer
743
744	Store(Buffer(){0x79}, Local2)
745
746	ConcatenateResTemplate(RT00, Local2, Local5)
747
748	// Bug 189.
749	CH04(ts, 0, 71, z058, 101, 0, 0)	// AE_AML_NO_RESOURCE_END_TAG
750
751	// Not resource template buffer
752
753	Store(Buffer(){0x2a, 0x04, 0x02}, Local2)
754
755	ConcatenateResTemplate(RT00, Local2, Local5)
756
757	if (EXCV) {
758		CH04(ts, 0, 71, z058, 102, 0, 0) // AE_AML_NO_RESOURCE_END_TAG
759	} else {
760		CH04(ts, 0, 0xff, z058, 102, 0, 0)
761	}
762
763	// Nearly resource template buffer
764
765	Store(Buffer(){0x2a, 0x10, 0x05, 0x79}, Local2)
766
767	ConcatenateResTemplate(RT00, Local2, Local5)
768
769	// Bug 190.
770	CH04(ts, 0, 71, z058, 103, 0, 0)	// AE_AML_NO_RESOURCE_END_TAG
771
772	// Like resource template buffer
773
774	Store(Buffer(){0x00, 0x00, 0x00, 0x79, 0x00}, Local2)
775
776	ConcatenateResTemplate(RT00, Local2, Local5)
777
778	if (EXCV) {
779		CH04(ts, 0, 71, z058, 104, 0, 0) // AE_AML_NO_RESOURCE_END_TAG
780	} else {
781		CH04(ts, 0, 0xff, z058, 104, 0, 0)
782	}
783
784	CH03(ts, z058, 171, 0, 0)
785}
786
787/*
788 * Obsolete:
789 * Bug 63: The following operation should initiate
790 * AE_BAD_HEX_CONSTANT exception
791 *
792 *
793 * Bug 63, Bugzilla 5329.
794 *
795 * Updated specs 12.03.05:
796 * "Note: the first non-hex character terminates the conversion
797 * without error, and a '0x' prefix is not allowed."
798 */
799Method(m155,, Serialized)
800{
801	Name(ts, "m155")
802
803	CH03(ts, z058, 105, 0, 0)
804
805	Add("0x1111", 0, Local0)
806
807	/*
808	 * Obsolete:
809	 * CH04(ts, 0, 34, z058, 106, 0, 0)	// AE_BAD_HEX_CONSTANT
810	 *
811	 * New:
812	 */
813	CH03(ts, z058, 106, 0, 0)
814	if (LNotEqual(Local0, 0)) {
815		// Bug 63, Bugzilla 5329.
816		err(ts, z058, 170, 0, 0, Local0, 0)
817	}
818}
819
820/*
821 * Bug 64: The following operations should initiate exceptions.
822 * AE_BAD_HEX_CONSTANT is the most appropreate, but it was decided
823 * to weaken demands - it is enough that some exception arises
824 * even if it is not the most appropreate one.
825 * See 111,112,113.
826 */
827Method(m156,, Serialized)
828{
829	Name(ts, "m156")
830
831	Store(0, Local0)
832	Name(b000, Buffer(Local0) {})
833
834	CH03(ts, z058, 107, 0, 0)
835
836	// Add, empty String
837	Add("", 0, Local5)
838
839//	CH04(ts, 0, 34, z058, 108, 0, 0)	// AE_BAD_HEX_CONSTANT
840	CH03(ts, z058, 108, 0, 0)
841
842	// Add, String filled with blanks
843	Add("                 ", 0, Local5)
844
845//	CH04(ts, 0, 34, z058, 109, 0, 0)	// AE_BAD_HEX_CONSTANT
846	CH03(ts, z058, 109, 0, 0)
847
848	// ToInteger, empty String
849	Store("", Local4)
850	ToInteger(Local4, Local5)
851
852	CH04(ts, 0, 36, z058, 110, 0, 0)	// AE_BAD_DECIMAL_CONSTANT
853
854	// ToInteger, String filled with blanks
855	Store("                 ", Local4)
856	ToInteger(Local4, Local5)
857
858//	CH04(ts, 0, 34, z058, 111, 0, 0)	// AE_BAD_HEX_CONSTANT
859	CH04(ts, 0, 36, z058, 111, 0, 0)	// AE_BAD_DECIMAL_CONSTANT
860
861	// Add, zero-length Buffer
862	Add(b000, 0, Local5)
863
864//	CH04(ts, 0, 34, z058, 112, 0, 0)	// AE_BAD_HEX_CONSTANT
865	CH04(ts, 0, 54, z058, 112, 0, 0)	// AE_AML_BUFFER_LIMIT
866
867	// ToInteger, zero-length Buffer
868	ToInteger(b000, Local5)
869
870//	CH04(ts, 0, 34, z058, 113, 0, 0)	// AE_BAD_HEX_CONSTANT
871	CH04(ts, 0, 54, z058, 113, 0, 0)	// AE_AML_BUFFER_LIMIT
872}
873
874// //////////////////////////////////////////////////////////
875//
876// Attempt to generate references upon an arbitrary addresses
877//
878// //////////////////////////////////////////////////////////
879
880// Index(Integer)
881Method(m157,, Serialized)
882{
883	Name(ts, "m157")
884
885	Name(i000, 0xaaaaaaaa)
886
887	CH03(ts, z058, 114, 0, 0)
888
889	Store(Index(i000, 0), Local5)
890
891	CH04(ts, 1, 47, z058, 115, 0, 0)	// AE_AML_OPERAND_TYPE
892
893	Index(i000, 0, Local0)
894
895	CH04(ts, 0, 47, z058, 116, 0, 0)	// AE_AML_OPERAND_TYPE
896
897	Store(Index(i000, 0), Local0)
898
899	CH04(ts, 0, 0xff, z058, 117, 0, 0)
900
901	Store(Index(i000, 0, Local0), Local1)
902
903	CH04(ts, 0, 0xff, z058, 118, 0, 0)
904}
905
906// Bug 83
907// DerefOf(Integer)
908Method(m158,, Serialized)
909{
910	Name(ts, "m158")
911
912	Name(i000, 0xaaaaaaaa)
913
914	CH03(ts, z058, 119, 0, 0)
915
916	// Bug 83, Bugzilla 5387.
917	Store(DerefOf(i000), Local5)
918
919	CH04(ts, 0, 0xff, z058, 120, 0, 0)
920
921	Store(DerefOf(i000), Local0)
922
923	// Bug 83, Bugzilla 5387.
924	CH04(ts, 0, 0xff, z058, 121, 0, 0)
925}
926
927// Index(Local7-Integer)
928// DerefOf(Integer)
929Method(m087,, Serialized)
930{
931	Name(ts, "m087")
932
933	Name(i000, 0xaaaaaaaa)
934
935	Store(i000, Local7)
936
937	CH03(ts, z058, 122, 0, 0)
938
939	// Index(Integer)
940
941	Store(Index(Local7, 0), Local5)
942
943	CH04(ts, 1, 47, z058, 123, 0, 0)	// AE_AML_OPERAND_TYPE
944
945	Index(Local7, 0, Local0)
946
947	CH04(ts, 0, 47, z058, 124, 0, 0)	// AE_AML_OPERAND_TYPE
948
949	Store(Index(Local7, 0), Local0)
950
951	CH04(ts, 0, 0xff, z058, 125, 0, 0)
952
953	Store(Index(Local7, 0, Local0), Local1)
954
955	CH04(ts, 0, 0xff, z058, 126, 0, 0)
956
957	// DerefOf(Integer)
958
959	Store(DerefOf(Local7), Local5)
960
961	CH04(ts, 0, 0xff, z058, 127, 0, 0)
962
963	Store(DerefOf(Local7), Local0)
964
965	CH04(ts, 0, 0xff, z058, 128, 0, 0)
966}
967
968// Index(Buffer Field)
969Method(m159,, Serialized)
970{
971	Name(ts, "m159")
972
973	Name(b000, Buffer() {1,2,3,4,5,6,7,8,9})
974	CreateField(b000, 0, 8, bf00)
975
976	CH03(ts, z058, 129, 0, 0)
977
978	Store(Index(bf00, 0), Local5)
979
980	CH04(ts, 1, 47, z058, 130, 0, 0)	// AE_AML_OPERAND_TYPE
981
982	Index(bf00, 0, Local0)
983
984	CH04(ts, 0, 47, z058, 131, 0, 0)	// AE_AML_OPERAND_TYPE
985
986	Store(Index(bf00, 0), Local0)
987
988	CH04(ts, 0, 0xff, z058, 132, 0, 0)
989
990	Store(Index(bf00, 0), Local0)
991
992	CH04(ts, 0, 0xff, z058, 133, 0, 0)
993
994	Store(Index(bf00, 0, Local0), Local1)
995
996	CH04(ts, 0, 0xff, z058, 134, 0, 0)
997}
998
999// Bug 83
1000// DerefOf(Buffer Field)
1001Method(m15a,, Serialized)
1002{
1003	Name(ts, "m15a")
1004
1005	Name(b000, Buffer() {1,2,3,4,5,6,7,8,9})
1006	CreateField(b000, 0, 8, bf00)
1007
1008	CH03(ts, z058, 135, 0, 0)
1009
1010	Store(DerefOf(bf00), Local5)
1011
1012	// Bug 83, Bugzilla 5387.
1013	CH04(ts, 0, 0xff, z058, 136, 0, 0)
1014
1015	Store(DerefOf(bf00), Local0)
1016
1017	// Bug 83, Bugzilla 5387.
1018	CH04(ts, 0, 0xff, z058, 137, 0, 0)
1019}
1020
1021// Index(Field Unit)
1022Method(m15d,, Serialized)
1023{
1024	Name(ts, "m15d")
1025
1026	OperationRegion(r000, SystemMemory, 0x100, 0x100)
1027	Field(r000, ByteAcc, NoLock, Preserve) {f000,8}
1028	Field(r000, ByteAcc, NoLock, Preserve) {bnk0,8,f00a,8,f00b,8}
1029	BankField(r000, bnk0, 0, ByteAcc, NoLock, Preserve) {bkf0,4}
1030	IndexField(f00a, f00b, ByteAcc, NoLock, Preserve) {if00,1,if01,1}
1031
1032	CH03(ts, z058, 138, 0, 0)
1033
1034	// Field
1035
1036	Store(Index(f000, 0), Local5)
1037
1038	CH04(ts, 1, 47, z058, 139, 0, 0)	// AE_AML_OPERAND_TYPE
1039
1040	Index(f000, 0, Local0)
1041
1042	CH04(ts, 0, 47, z058, 140, 0, 0)	// AE_AML_OPERAND_TYPE
1043
1044	Store(Index(f000, 0), Local0)
1045
1046	CH04(ts, 0, 0xff, z058, 141, 0, 0)
1047
1048	Store(Index(f000, 0), Local0)
1049
1050	CH04(ts, 0, 0xff, z058, 142, 0, 0)
1051
1052	Store(Index(f000, 0, Local0), Local1)
1053
1054	CH04(ts, 0, 0xff, z058, 143, 0, 0)
1055
1056	// BankField
1057
1058	Store(Index(bkf0, 0), Local5)
1059
1060	CH04(ts, 1, 47, z058, 144, 0, 0)	// AE_AML_OPERAND_TYPE
1061
1062	Index(bkf0, 0, Local0)
1063
1064	CH04(ts, 0, 47, z058, 145, 0, 0)	// AE_AML_OPERAND_TYPE
1065
1066	Store(Index(bkf0, 0), Local0)
1067
1068	CH04(ts, 0, 0xff, z058, 146, 0, 0)
1069
1070	Store(Index(bkf0, 0), Local0)
1071
1072	CH04(ts, 0, 0xff, z058, 147, 0, 0)
1073
1074	Store(Index(bkf0, 0, Local0), Local1)
1075
1076	CH04(ts, 0, 0xff, z058, 148, 0, 0)
1077
1078	// IndexField
1079
1080	Store(Index(if00, 0), Local5)
1081
1082	CH04(ts, 1, 47, z058, 149, 0, 0)	// AE_AML_OPERAND_TYPE
1083
1084	Index(if00, 0, Local0)
1085
1086	CH04(ts, 0, 47, z058, 150, 0, 0)	// AE_AML_OPERAND_TYPE
1087
1088	Store(Index(if00, 0), Local0)
1089
1090	CH04(ts, 0, 0xff, z058, 151, 0, 0)
1091
1092	Store(Index(if00, 0), Local0)
1093
1094	CH04(ts, 0, 0xff, z058, 152, 0, 0)
1095
1096	Store(Index(if00, 0, Local0), Local1)
1097
1098	CH04(ts, 0, 0xff, z058, 153, 0, 0)
1099}
1100
1101// Bug 83
1102// DerefOf(Field Unit)
1103Method(m15e,, Serialized)
1104{
1105	Name(ts, "m15e")
1106
1107	OperationRegion(r000, SystemMemory, 0x100, 0x100)
1108	Field(r000, ByteAcc, NoLock, Preserve) {f000,8}
1109	Field(r000, ByteAcc, NoLock, Preserve) {bnk0,8,f00a,8,f00b,8}
1110	BankField(r000, bnk0, 0, ByteAcc, NoLock, Preserve) {bkf0,4}
1111	IndexField(f00a, f00b, ByteAcc, NoLock, Preserve) {if00,1,if01,1}
1112
1113	CH03(ts, z058, 154, 0, 0)
1114
1115	// Field
1116
1117	Store(DerefOf(f000), Local5)
1118
1119	// Bug 83, Bugzilla 5387.
1120	CH04(ts, 0, 0xff, z058, 155, 0, 0)
1121
1122	Store(DerefOf(f000), Local0)
1123
1124	// Bug 83, Bugzilla 5387.
1125	CH04(ts, 0, 0xff, z058, 156, 0, 0)
1126
1127	// BankField
1128
1129	Store(DerefOf(bkf0), Local5)
1130
1131	// Bug 83, Bugzilla 5387.
1132	CH04(ts, 0, 0xff, z058, 157, 0, 0)
1133
1134	Store(DerefOf(bkf0), Local0)
1135
1136	// Bug 83, Bugzilla 5387.
1137	CH04(ts, 0, 0xff, z058, 158, 0, 0)
1138
1139	// IndexField
1140
1141	Store(DerefOf(if00), Local5)
1142
1143	// Bug 83, Bugzilla 5387.
1144	CH04(ts, 0, 0xff, z058, 159, 0, 0)
1145
1146	Store(DerefOf(if00), Local0)
1147
1148	// Bug 83, Bugzilla 5387.
1149	CH04(ts, 0, 0xff, z058, 160, 0, 0)
1150}
1151
1152// UPDATE exc.m084: Implement this test for all the types of objects
1153//                  (see for example ref.asl files about objects) and
1154//                  all the types of operators.
1155Method(m084, 1, Serialized)
1156{
1157	Name(ts, "m084")
1158
1159	if (Arg0) {
1160		Name(i000, 0x12345678)
1161		Name(s000, "12345678")
1162		Name(b000, Buffer() {0x12})
1163		Name(p000, Package() {0x12345678})
1164	}
1165
1166	CH03(ts, z058, 161, 0, 0)
1167
1168/*
1169Discuss: now the ObjectType doesnt cause exception!
1170Is it correct? Understand and discuss it.
1171
1172		Store(ObjectType(i000), Local0)
1173		CH04(ts, 0, 46, z058, 162, 0, 0)	// AE_AML_NO_OPERAND
1174
1175		Store(ObjectType(s000), Local0)
1176		CH04(ts, 0, 46, z058, 163, 0, 0)	// AE_AML_NO_OPERAND
1177
1178		Store(ObjectType(b000), Local0)
1179		CH04(ts, 0, 46, z058, 164, 0, 0)	// AE_AML_NO_OPERAND
1180
1181		Store(ObjectType(p000), Local0)
1182		CH04(ts, 0, 46, z058, 165, 0, 0)	// AE_AML_NO_OPERAND
1183*/
1184
1185		Store(Index(p000, 0), Local0)
1186		if (LNot(Arg0)) {
1187			CH04(ts, 0, 0xFF, z058, 166, 0, 0)
1188		} else {
1189			CH03(ts, z058, 167, 0, 0)
1190		}
1191
1192	CH03(ts, z058, 168, 0, 0)
1193}
1194
1195Method(mf9d)
1196{
1197	Method(m000)
1198	{
1199		Store(0, Local7)
1200		Divide(1, Local7, Local2)
1201		if (LNotEqual(Local2, 0)) {
1202			m002()
1203		}
1204	}
1205
1206	Method(m001)
1207	{
1208		Store(0, Local7)
1209		if (Divide(1, Local7, Local2)) {
1210			m002()
1211		}
1212	}
1213
1214	Method(m002)
1215	{
1216	}
1217
1218	CH03("mf9d", z058, 171, 0, 0)
1219
1220	m000()
1221
1222	CH04("mf9d", 0, 0xff, z058, 172, 0, 0)
1223
1224	CH03("mf9d", z058, 173, 0, 0)
1225
1226	m001()
1227
1228	CH04("mf9d", 0, 0xff, z058, 174, 0, 0)
1229}
1230
1231// Access out of OpRegion and DataTableRegion
1232Method(m708,, Serialized)
1233{
1234	Name(ts, "m708")
1235
1236	Method(m000, 1)
1237	{
1238		OperationRegion(RGN0, SystemMemory, 0, arg0)
1239		OperationRegion(RGN1, SystemIO, 0x200, arg0)
1240
1241		// UserDefRegionSpace
1242		OperationRegion(RGN2, 0x80, 0xd00, arg0)
1243
1244		DataTableRegion (DR00, "SSDT", "", "")
1245
1246		Field(RGN0, ByteAcc, NoLock, Preserve) {
1247			FU00, 0x801}
1248		Field(RGN1, ByteAcc, NoLock, Preserve) {
1249			FU01, 0x801}
1250		Field(RGN2, ByteAcc, NoLock, Preserve) {
1251			FU02, 0x801}
1252		Field(DR00, AnyAcc, NoLock, Preserve) {
1253			FU03, 0x1F1}            /* 0x1F0 == length of SSDT */
1254
1255		Store(4, Local0)
1256		Store(0, Local1)
1257
1258		While (Local0) {
1259			switch(Local1) {
1260				case(0) { Store(Refof(FU00), Local2) }
1261				case(1) { Store(Refof(FU01), Local2) }
1262				case(2) { Store(Refof(FU02), Local2) }
1263				case(3) { Store(Refof(FU03), Local2) }
1264			}
1265
1266			Store(Refof(Local2), Local3)
1267
1268			CH03(ts, z058, Add(175, Local1), 0, 0)
1269
1270			// Write: except DataTableRegion
1271			if (LLess(Local1, 3)) {
1272				Store(0x12345678, DeRefof(Local3))
1273				CH04(ts, 0, 53, z058, Add(179, Local1), 0, 0)// AE_AML_REGION_LIMIT
1274			}
1275
1276			// Read
1277			Store(DeRefof(Local2), Local4)
1278
1279			/* July 2013
1280			 *
1281			 * The Store above should actually cause two errors
1282			 * 1) AE_AML_REGION_LIMIT
1283			 * 2) AE_AML_NO_RETURN_VALUE
1284			 *
1285			 * Indicate we only care about the first by placing a 1
1286			 * in the second argument
1287			 */
1288			CH04(ts, 1, 53, z058, Add(183, Local1), 0, 0)	// AE_AML_REGION_LIMIT
1289
1290			Decrement(Local0)
1291			Increment(Local1)
1292		}
1293	}
1294
1295	m000(0x100)
1296}
1297
1298// Try non-copmputational data OpRegion arguments
1299Method(m709,, Serialized)
1300{
1301	Name(ts, "m709")
1302
1303	Name(offp, Package(1){0xfedcba987654321f})
1304	Name(lenp, Package(1){0x123})
1305	Name(i000, 0x100)
1306
1307#if 0 /* These are now caught by the compiler - Aug 2015 */
1308
1309	Method(m000,, Serialized) {
1310		OperationRegion(OPR0, SystemMemory, offp, 1)
1311	}
1312	
1313	CH03(ts, z058, 188, 0, 0)
1314
1315	m000()
1316
1317	CH04(ts, 0, 47, z058, 189, 0, 0)	// AE_AML_OPERAND_TYPE
1318
1319	OperationRegion(OPR1, SystemMemory, 1, lenp)
1320
1321	CH04(ts, 0, 47, z058, 190, 0, 0)	// AE_AML_OPERAND_TYPE
1322#endif
1323}
1324
1325// Try OpRegion arguments when Offset + Length > MaxInteger
1326Method(m70a,, Serialized)
1327{
1328	Name(ts, "m70a")
1329
1330	Name(off0, 0xfffffffffffffff0)
1331	Name(len0, 0x11)
1332
1333	OperationRegion(OPR0, SystemMemory, off0, len0)
1334
1335	//17+1 > 17.
1336	Field(OPR0, AnyAcc, NoLock, Preserve) {
1337		Offset(0x11), FU00, 8}
1338	//16+2 > 17.
1339	Field(OPR0, WordAcc, NoLock, Preserve) {
1340		Offset(0x10), FU01, 8}
1341
1342	CH03(ts, z058, 191, 0, 0)
1343
1344	Store(0x12, FU00)
1345
1346	CH04(ts, 0, 53, z058, 192, 0, 0)	// AE_AML_REGION_LIMIT
1347
1348	Store(0x12, FU01)
1349
1350	CH04(ts, 0, 53, z058, 193, 0, 0)	// AE_AML_REGION_LIMIT
1351}
1352
1353// Attempt to write into DataTableRegion
1354Method(m70b,, Serialized)
1355{
1356	Name(ts, "m70b")
1357
1358	DataTableRegion (DR00, "SSDT", "", "")
1359
1360	Field(DR00, AnyAcc, NoLock, Preserve) {
1361		FU00, 0x180}
1362
1363	Store(FU00, Local0)
1364
1365	CH03(ts, z058, 194, 0, 0)
1366
1367	Store(0, FU00)
1368
1369	CH04(ts, 0, 16, z058, 195, 0, 0)	// AE_SUPPORT
1370}
1371
1372// Check non-String DataTableRegion *String arguments
1373Method(m7f5,, Serialized)
1374{
1375	Name(ts, "m7f5")
1376
1377	Name(b000, Buffer(1){0x12})
1378	Name(i000, 0x12)
1379	Name(p000, Package(1){0x12})
1380
1381	CH03(ts, z058, 193, 0, 0)
1382
1383	DataTableRegion (DR00, b000, "", "")
1384	CH04(ts, 0, 5, z058, 196, 0, 0)	// AE_NOT_FOUND
1385
1386	DataTableRegion (DR01, "SSDT", b000, "")
1387	CH04(ts, 0, 5, z058, 197, 0, 0)	// AE_NOT_FOUND
1388
1389	DataTableRegion (DR02, "SSDT", "", b000)
1390	CH04(ts, 0, 5, z058, 198, 0, 0)	// AE_NOT_FOUND
1391
1392	DataTableRegion (DR03, i000, "", "")
1393	CH04(ts, 0, 5, z058, 199, 0, 0)	// AE_NOT_FOUND
1394
1395	DataTableRegion (DR04, "SSDT", i000, "")
1396	CH04(ts, 0, 5, z058, 200, 0, 0)	// AE_NOT_FOUND
1397
1398	DataTableRegion (DR05, "SSDT", "", i000)
1399	CH04(ts, 0, 5, z058, 201, 0, 0)	// AE_NOT_FOUND
1400
1401#if 0 /* These are now caught by the compiler - Aug 2015 */
1402
1403	DataTableRegion (DR06, p000, "", i000)
1404	CH04(ts, 0, 47, z058, 202, 0, 0)	// AE_AML_OPERAND_TYPE
1405
1406	DataTableRegion (DR07, "SSDT", p000, "")
1407	CH04(ts, 0, 47, z058, 203, 0, 0)	// AE_AML_OPERAND_TYPE
1408
1409	DataTableRegion (DR08, "SSDT", "", p000)
1410	CH04(ts, 0, 47, z058, 204, 0, 0)	// AE_AML_OPERAND_TYPE
1411#endif
1412}
1413
1414// Check SMBus OpRegion restictions
1415Method(m7f6,, Serialized)
1416{
1417	Name(ts, "m7f6")
1418
1419	OperationRegion(SMBD, SMBus, 0x4200, 0x100)
1420
1421	Field(SMBD, BufferAcc, NoLock, Preserve) {
1422		AccessAs(BufferAcc, SMBQuick),
1423		FLD0, 8
1424	}
1425
1426	// Create improper SMBus data buffer
1427	Name(BUFF, Buffer(33){})
1428
1429	CH03(ts, z058, 205, 0, 0)
1430
1431	// Invoke Write Quick transaction
1432	Store(BUFF, FLD0)
1433
1434	CH04(ts, 0, 54, z058, 206, 0, 0)	// AE_AML_BUFFER_LIMIT
1435}
1436
1437/* Name space issues */
1438Method(m0bc,, Serialized)
1439{
1440	Name(ts, "m0bc")
1441
1442	Method(m000)
1443	{
1444		return (0xabcd0000)
1445	}
1446
1447	Method(m001)
1448	{
1449		Store(m000(), Local0)
1450
1451		Method(m000)
1452		{
1453			return (0xabcd0001)
1454		}
1455
1456		Store(m000(), Local1)
1457
1458		if (LNotEqual(Local0, 0xabcd0000)) {
1459			err(ts, z058, 0x0ce, 0, 0, Local0, 0xabcd0000)
1460		}
1461
1462		if (LNotEqual(Local1, 0xabcd0001)) {
1463			err(ts, z058, 0x0cf, 0, 0, Local1, 0xabcd0001)
1464		}
1465	}
1466
1467	Method(m002)
1468	{
1469		CH03(ts, z058, 0x0d0, 0, 0)
1470		m004()
1471		CH04(ts, 0, 5, z058, 0x0d1, 0, 0) // AE_NOT_FOUND
1472
1473		Method(m004)
1474		{
1475			return (0xabcd0002)
1476		}
1477	}
1478
1479	Method(m003)
1480	{
1481		/* Recursion */
1482		CH03(ts, z058, 0x0d0, 0, 0)
1483		m003()
1484		CH04(ts, 0, 84, z058, 0x0d1, 0, 0) // AE_AML_METHOD_LIMIT
1485
1486		Method(m003)
1487		{
1488			return (0xabcd0002)
1489		}
1490	}
1491
1492	m001()
1493	m002()
1494	// m003()
1495}
1496
1497// Run-method
1498Method(EXCP)
1499{
1500	SRMT("m140")
1501	m140()
1502	SRMT("m141")
1503	m141()
1504	SRMT("m142")
1505	m142()
1506	SRMT("m143")
1507	m143()
1508	SRMT("m144")
1509	m144()
1510	SRMT("m145")
1511	m145()
1512	SRMT("m085")
1513	m085()
1514	SRMT("m086")
1515	m086()
1516	SRMT("m148")
1517	m148()
1518	SRMT("m14b")
1519	m14b()
1520	SRMT("m14c")
1521	m14c()
1522	SRMT("m14d")
1523	m14d()
1524	SRMT("m14e")
1525	m14e()
1526	SRMT("m14f")
1527	m14f()
1528	SRMT("m150")
1529	m150(0)
1530	SRMT("m151")
1531	m151()
1532	SRMT("m152")
1533	m152()
1534	SRMT("m153")
1535	m153()
1536	SRMT("m154")
1537	m154()
1538	SRMT("m155")
1539	m155()
1540	SRMT("m156")
1541	m156()
1542	SRMT("m157")
1543	m157()
1544	SRMT("m158")
1545	m158()
1546	SRMT("m087")
1547	m087()
1548	SRMT("m159")
1549	m159()
1550	SRMT("m15a")
1551	m15a()
1552	SRMT("m15d")
1553	m15d()
1554	SRMT("m15e")
1555	m15e()
1556
1557	// The sequence of calls below is important,
1558	// since not initialized names can refer to
1559	// the objects moved improperly into the cash
1560	// between two calls to the same Method:
1561
1562	SRMT("m084-0")
1563	m084(0)
1564	SRMT("m084-1")
1565	m084(1)
1566	SRMT("m084-0-2")
1567	m084(0)
1568
1569	SRMT("m1b3")
1570	m1b3()
1571
1572	SRMT("mf9d")
1573	if (y200) {
1574		mf9d()
1575	} else {
1576		BLCK()
1577	}
1578
1579	SRMT("m708")
1580	m708()
1581	SRMT("m709")
1582	m709()
1583	SRMT("m70a")
1584	m70a()
1585	SRMT("m70b")
1586	m70b()
1587	SRMT("m7f5")
1588	if (y223) {
1589		m7f5()
1590	} else {
1591		BLCK()
1592	}
1593	SRMT("m7f6")
1594	m7f6()
1595
1596	SRMT("m0bc")
1597	m0bc()
1598}
1599