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/*
30 * 2-level model: \\m12e.<Method>
31 *
32 * Data for DerefOf(<String>) are 1 levels up.
33 *
34 * DataLevel<number_of_levels_in_model><data_are_N_levels_up>.asl
35 */
36
37Method(m12e,, Serialized)
38{
39
40/*
41 * 0 - Check different ways to pass String
42 */
43Method(mdac)
44{
45	Store("b000", Local0)
46	CopyObject("b000", i000)
47	Store(s000, Local7)
48
49	// Checkings
50
51	CH03("", 0, 0x000, __LINE__, 0)
52
53	Store(DerefOf("b000"), Local1)
54	mf88(Local1, c00b, bb00, 0x001, 0x002, 1)
55
56	Store(DerefOf(Local0), Local1)
57	mf88(Local1, c00b, bb00, 0x003, 0x004, 1)
58
59	Store(DerefOf(Local7), Local1)
60	mf88(Local1, c00b, bb00, 0x005, 0x006, 1)
61
62	Store(DerefOf(s000), Local1)
63	Store(DerefOf(s000), Local1)
64	Store(DerefOf(s000), Local1)
65	Store(DerefOf(s000), Local1)
66	Store(DerefOf(s000), Local1)
67	Store(DerefOf(s000), Local1)
68	Store(DerefOf(s000), Local1)
69	Store(DerefOf(s000), Local1)
70	Store(DerefOf(s000), Local1)
71	mf88(Local1, c00b, bb00, 0x007, 0x008, 1)
72
73	Store(DerefOf(mm00()), Local1)
74	mf88(Local1, c00b, bb00, 0x009, 0x00a, 1)
75
76	Store(DerefOf(mm01(ss00)), Local1)
77	mf88(Local1, c00b, bb00, 0x00b, 0x00c, 1)
78
79	Store(DerefOf(ToString("b000")), Local1)
80	mf88(Local1, c00b, bb00, 0x00d, 0x00e, 1)
81
82	Store(DerefOf(Store("b000", Local6)), Local1)
83	mf88(Local1, c00b, bb00, 0x00f, 0x010, 1)
84
85	Store(DerefOf(i000), Local1)
86	mf88(Local1, c00b, bb00, 0x011, 0x012, 1)
87
88	Store(mm02("^b000"), Local1)
89	mf88(Local1, c00b, bb00, 0x013, 0x014, 1)
90
91	CH03("", 0, 0x015, __LINE__, 0)
92}
93
94/*
95 * 1 - Check different ways to specify elements of NameSpace
96 */
97Method(mf89)
98{
99	// Checkings
100
101	Store(DerefOf("b001"), Local1)
102	mf88(Local1, c00b, bb01, 0x016, 0x017, 1)
103
104	Store(DerefOf("^b001"), Local1)
105	mf88(Local1, c00b, bb01, 0x018, 0x019, 1)
106
107	Store(DerefOf("^pr01.i000"), Local1)
108	mf88(Local1, c009, 0xaabc0000, 0x01a, 0x01b, 1)
109
110	Store(DerefOf("\\m12e.pr01.i000"), Local1)
111	if (FLG9) {
112		mf88(Local1, c009, 0xaabc0000, 0x01c, 0x01d, 1)
113	} else {
114		CH04("", 0, 0xff, 0, __LINE__, 0, 0) // AE_NOT_FOUND
115	}
116
117	Store(DerefOf("^i010"), Local1)
118	mf88(Local1, c009, ii00, 0x01f, 0x020, 1)
119
120	Store(DerefOf("^i987"), Local1)
121	mf88(Local1, c009, ii01, 0x021, 0x022, 1)
122
123	CH03("", 0, 0x023, __LINE__, 0)
124}
125
126/*
127 * 2 - Check access to calculated type objects - DerefOf(<String>)
128 */
129Method(mf8a)
130{
131	CH03("", 0, 0x01f, __LINE__, 0)
132
133	// Checkings
134
135	Store(DerefOf("b002"), Local1)
136	mf88(Local1, c00b, bb02, 0x020, 0x021, 1)
137
138	Store(DerefOf("s002"), Local1)
139	mf88(Local1, c00a, ss02, 0x022, 0x023, 1)
140
141	Store(DerefOf("i002"), Local1)
142	mf88(Local1, c009, ii02, 0x024, 0x025, 1)
143
144	Store(DerefOf("p002"), Local1)
145	mf88(Local1, c00c, 0, 0x026, 0x027, 0)
146
147	CH03("", 0, 0x028, __LINE__, 0)
148}
149
150/*
151 * 3 - Check access to special type objects - DerefOf(<String>)
152 */
153Method(mf8b)
154{
155	// Checkings
156
157	CH03("", 0, 0x029, __LINE__, 0)
158	CopyObject(DerefOf("e003"), Local1)
159	mf88(Local1, c00f, 0, 0x02a, 0x02b, 0)
160
161	CH03("", 0, 0x02c, __LINE__, 0)
162	CopyObject(DerefOf("mx03"), Local1)
163	mf88(Local1, c011, 0, 0x02d, 0x02e, 0)
164
165	CH03("", 0, 0x02f, __LINE__, 0)
166	CopyObject(DerefOf("d003"), Local1)
167	mf88(Local1, c00e, 0, 0x030, 0x031, 0)
168
169	CH03("", 0, 0x032, __LINE__, 0)
170	CopyObject(DerefOf("tz03"), Local1)
171	mf88(Local1, c015, 0, 0x033, 0x034, 0)
172
173	CH03("", 0, 0x035, __LINE__, 0)
174	CopyObject(DerefOf("pr03"), Local1)
175	mf88(Local1, c014, 0, 0x036, 0x037, 0)
176
177	if (y510) {
178		CH03("", 0, 0x038, __LINE__, 0)
179		CopyObject(DerefOf("r003"), Local1)
180		mf88(Local1, c012, 0, 0x039, 0x03a, 0)
181	}
182
183	CH03("", 0, 0x03b, __LINE__, 0)
184	CopyObject(DerefOf("pw03"), Local1)
185	mf88(Local1, c013, 0, 0x03c, 0x03d, 0)
186}
187
188/*
189 * 4 - Check DerefOf(<Not-String>) - calculated type objects
190 */
191Method(mf8c)
192{
193	// Checkings
194
195	CH03("", 0, 0x03e, __LINE__, 0)
196	Store(DerefOf(b004), Local1)
197	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
198
199	CH03("", 0, 0x040, __LINE__, 0)
200	Store(DerefOf(i004), Local1)
201	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
202
203	CH03("", 0, 0x042, __LINE__, 0)
204	Store(DerefOf(p004), Local1)
205	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
206}
207
208/*
209 * 5 - Check DerefOf(<String>) - but String doesn't refer NameSpace object
210 */
211Method(mf8d)
212{
213	CH03("", 0, 0x044, __LINE__, 0)
214	Store(DerefOf("0123"), Local1)
215	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
216
217	CH03("", 0, 0x046, __LINE__, 0)
218	Store(DerefOf("zxcvbnm,./;'\][0123"), Local1)
219	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
220
221	CH03("", 0, 0x048, __LINE__, 0)
222	Store(DerefOf("b0qv"), Local1)
223	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
224}
225
226/*
227 * 6 - Check different ways to pass String (mdac
228 * but without Store). Check - no exceptions.
229 */
230Method(mf8e)
231{
232	Store("b006", Local0)
233	CopyObject("b006", i006)
234	Store(s006, Local7)
235
236	// Checkings
237
238	CH03("", 0, 0x04a, __LINE__, 0)
239
240	Store(DerefOf("b006"), Local2)
241
242	Store(DerefOf(Local0), Local2)
243
244	Store(DerefOf(Local7), Local2)
245
246	Store(DerefOf(s006), Local2)
247	Store(DerefOf(s006), Local2)
248	Store(DerefOf(s006), Local2)
249	Store(DerefOf(s006), Local2)
250	Store(DerefOf(s006), Local2)
251	Store(DerefOf(s006), Local2)
252	Store(DerefOf(s006), Local2)
253	Store(DerefOf(s006), Local2)
254	Store(DerefOf(s006), Local2)
255
256	Store(DerefOf(mm60()), Local2)
257
258	Store(DerefOf(mm61(ss06)), Local2)
259
260	Store(DerefOf(ToString("b006")), Local2)
261
262	Store(DerefOf(Store("b006", Local6)), Local2)
263
264	Store(DerefOf(i006), Local2)
265
266	CH03("", 0, 0x04b, __LINE__, 0)
267}
268
269/*
270 * 7 - Check access to special type objects - DerefOf(<String>)
271 */
272Method(mf8f)
273{
274	// Checkings
275
276	CH03("", 0, 0x04c, __LINE__, 0)
277	Store(DerefOf("e007"), Local2)
278	if(LNot(SLCK)){
279		CH04("", 0, 47, 0, __LINE__, 0, 0)
280	}
281
282	CH03("", 0, 0x04e, __LINE__, 0)
283	Store(DerefOf("mx07"), Local2)
284	if(LNot(SLCK)){
285		CH04("", 0, 47, 0, __LINE__, 0, 0)
286	}
287
288	CH03("", 0, 0x050, __LINE__, 0)
289	Store(DerefOf("d007"), Local2)
290	if(LNot(SLCK)){
291		CH04("", 0, 47, 0, __LINE__, 0, 0)
292	}
293
294	CH03("", 0, 0x052, __LINE__, 0)
295	Store(DerefOf("tz07"), Local2)
296	if(LNot(SLCK)){
297		CH04("", 0, 47, 0, __LINE__, 0, 0)
298	}
299
300	CH03("", 0, 0x054, __LINE__, 0)
301	Store(DerefOf("pr07"), Local2)
302	if(LNot(SLCK)){
303		CH04("", 0, 47, 0, __LINE__, 0, 0)
304	}
305
306	CH03("", 0, 0x056, __LINE__, 0)
307	Store(DerefOf("r007"), Local2)
308	if(LNot(SLCK)){
309		CH04("", 0, 47, 0, __LINE__, 0, 0)
310	}
311
312	CH03("", 0, 0x058, __LINE__, 0)
313	Store(DerefOf("pw07"), Local2)
314	if(LNot(SLCK)){
315		CH04("", 0, 47, 0, __LINE__, 0, 0)
316	}
317}
318
319/*
320 * 8 - Check DerefOf(<Not-String>) - calculated type objects
321 */
322Method(mf90)
323{
324	// Checkings
325
326	CH03("", 0, 0x05a, __LINE__, 0)
327	Store(DerefOf(b008), Local2)
328	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
329
330	CH03("", 0, 0x05c, __LINE__, 0)
331	Store(DerefOf(i008), Local2)
332	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
333
334	CH03("", 0, 0x05e, __LINE__, 0)
335	Store(DerefOf(p008), Local2)
336	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
337}
338
339/*
340 * 9 - Check DerefOf(<String>) - but String doesn't refer NameSpace object
341 */
342Method(mf91)
343{
344	CH03("", 0, 0x060, __LINE__, 0)
345	Store(DerefOf("0123"), Local2)
346	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
347
348	CH03("", 0, 0x062, __LINE__, 0)
349	Store(DerefOf("zxcvbnm,./;'\][0123"), Local2)
350	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
351
352	CH03("", 0, 0x064, __LINE__, 0)
353	Store(DerefOf("mf_d"), Local2)
354	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
355
356	CH03("", 0, 0x066, __LINE__, 0)
357	Store(DerefOf("b009"), Local2)
358	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
359}
360
361/*
362 * a - Check access to special type objects - DerefOf(<String>)
363 */
364Method(mfa0)
365{
366	CH03("", 0, 0x068, __LINE__, 0)
367
368	Store(DerefOf("bfa0"), Local1)
369	mf88(Local1, c009, 0xb1, 0x069, 0x06a, 1)
370
371	Store(DerefOf("f0a0"), Local1)
372	mf88(Local1, c009, 0, 0x06b, 0x06c, 0)
373
374	Store(DerefOf("f0a1"), Local1)
375	mf88(Local1, c009, 0, 0x06d, 0x06e, 0)
376
377	Store(DerefOf("f0a2"), Local1)
378	mf88(Local1, c009, 0, 0x06f, 0x070, 0)
379
380	Store(DerefOf("f0a3"), Local1)
381	mf88(Local1, c009, 0, 0x071, 0x072, 0)
382
383	Store(DerefOf("bna0"), Local1)
384	mf88(Local1, c009, 0, 0x073, 0x074, 0)
385
386	Store(DerefOf("ifa0"), Local1)
387	mf88(Local1, c009, 0, 0x075, 0x076, 0)
388
389	Store(DerefOf("ifa1"), Local1)
390	mf88(Local1, c009, 0, 0x077, 0x078, 0)
391
392	CH03("", 0, 0x079, __LINE__, 0)
393}
394
395// b
396Method(mfa1)
397{
398	CH03("", 0, 0x07a, __LINE__, 0)
399	Store(DerefOf(bfb0), Local1)
400	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
401
402	CH03("", 0, 0x07c, __LINE__, 0)
403	Store(DerefOf(f0b0), Local1)
404	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
405
406	CH03("", 0, 0x07e, __LINE__, 0)
407	Store(DerefOf(f0b1), Local1)
408	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
409
410	CH03("", 0, 0x080, __LINE__, 0)
411	Store(DerefOf(f0b2), Local1)
412	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
413
414	CH03("", 0, 0x082, __LINE__, 0)
415	Store(DerefOf(f0b3), Local1)
416	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
417
418	CH03("", 0, 0x084, __LINE__, 0)
419	Store(DerefOf(bnb0), Local1)
420	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
421
422	CH03("", 0, 0x086, __LINE__, 0)
423	Store(DerefOf(ifb0), Local1)
424	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
425
426	CH03("", 0, 0x088, __LINE__, 0)
427	Store(DerefOf(ifb1), Local1)
428	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
429}
430
431// c
432Method(mfa2)
433{
434	// Checkings
435
436	CH03("", 0, 0x08a, __LINE__, 0)
437	Store(DerefOf(e00c), Local2)
438	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
439
440	CH03("", 0, 0x08c, __LINE__, 0)
441	Store(DerefOf(mx0c), Local2)
442	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
443
444	CH03("", 0, 0x08e, __LINE__, 0)
445	Store(DerefOf(d00c), Local2)
446	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
447
448	CH03("", 0, 0x090, __LINE__, 0)
449	Store(DerefOf(tz0c), Local2)
450	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
451
452	CH03("", 0, 0x092, __LINE__, 0)
453	Store(DerefOf(pr0c), Local2)
454	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
455
456	CH03("", 0, 0x094, __LINE__, 0)
457	Store(DerefOf(r00c), Local2)
458	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
459
460	CH03("", 0, 0x096, __LINE__, 0)
461	Store(DerefOf(pw0c), Local2)
462	CH04("", 0, 0xff, 0, __LINE__, 0, 0)
463}
464
465Method(m12a)
466{
467	SRMT("mdac-21-down")
468	mdac()
469	SRMT("mf89-21-down")
470	mf89()
471	SRMT("mf8a-21-down")
472	mf8a()
473	SRMT("mf8b-21-down")
474	mf8b()
475	SRMT("mf8c-21-down")
476	mf8c()
477	SRMT("mf8d-21-down")
478	mf8d()
479	SRMT("mf8e-21-down")
480	mf8e()
481	SRMT("mf8f-21-down")
482	mf8f()
483	SRMT("mf90-21-down")
484	mf90()
485	SRMT("mf91-21-down")
486	mf91()
487	SRMT("mfa0-21-down")
488	mfa0()
489	SRMT("mfa1-21-down")
490	mfa1()
491	SRMT("mfa2-21-down")
492	mfa2()
493}
494
495	/* 0 */
496
497	Method(mm00)
498	{
499		Return("b000")
500	}
501
502	Method(mm01, 1)
503	{
504		Return(arg0)
505	}
506
507	Method(mm02, 1)
508	{
509		Store(DerefOf(arg0), Local7)
510
511		Return(Local7)
512	}
513
514	Name(b000, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
515	Name(bb00, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
516	Name(s000, "b000")
517	Name(ss00, "b000")
518	Name(i000, 0)
519
520	/* 1 */
521
522	Name(i010, 0xaabc0123)
523	Name(i987, 0xaabc0987)
524	Processor(pr01, 0, 0xFFFFFFFF, 0)
525	{
526		Name(i000, 0xaabc0000)
527	}
528	Name(ii00, 0xaabc0123)
529	Name(ii01, 0xaabc0987)
530
531	Name(b001, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
532	Name(bb01, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
533
534	/* 2 */
535
536	Name(b002, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
537	Name(bb02, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
538	Name(s002, "String")
539	Name(ss02, "String")
540	Name(i002, 0xabbc0000)
541	Name(ii02, 0xabbc0000)
542	Name(p002, Package() {1,2,3,4})
543
544	/* 3 */
545
546	Event(e003)
547	Mutex(mx03, 0)
548	Device(d003) { Name(i900, 0xabcd0017) }
549	ThermalZone(tz03) {}
550	Processor(pr03, 0, 0xFFFFFFFF, 0) {}
551	OperationRegion(r003, SystemMemory, 0x100, 0x100)
552	PowerResource(pw03, 1, 0) {Method(mmmm){return (0)}}
553
554	/* 4 */
555
556	Name(b004, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
557	Name(i004, 0xabbc0000)
558	Name(p004, Package() {1,2,3,4})
559
560	/* 6 */
561
562	Method(mm60)
563	{
564		Return("b006")
565	}
566
567	Method(mm61, 1)
568	{
569		Return(arg0)
570	}
571
572	Name(b006, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
573	Name(bb06, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
574	Name(s006, "b006")
575	Name(ss06, "b006")
576	Name(i006, 0)
577
578	/* 7 */
579
580	Event(e007)
581	Mutex(mx07, 0)
582	Device(d007) { Name(i900, 0xabcd0017) }
583	ThermalZone(tz07) {}
584	Processor(pr07, 0, 0xFFFFFFFF, 0) {}
585	OperationRegion(r007, SystemMemory, 0x100, 0x100)
586	PowerResource(pw07, 1, 0) {Method(mmmm){return (0)}}
587
588	/* 8 */
589
590	Name(b008, Buffer(){ 1, 2, 3, 4, 0x95, 6, 7, 8})
591	Name(i008, 0xabbc0000)
592	Name(p008, Package() {1,2,3,4})
593
594	/* a */
595
596	Name(b00a, Buffer() {0xb0,0xb1,0xb2,0xb3,0xb4})
597	OperationRegion(r00a, SystemMemory, 0x100, 0x100)
598
599	CreateField(b00a, 8, 8, bfa0)
600	Field(r00a, ByteAcc, NoLock, Preserve) {f0a0,8,f0a1,8,f0a2,8,f0a3,8}
601	BankField(r00a, f0a1, 0, ByteAcc, NoLock, Preserve) {bna0,4}
602	IndexField(f0a2, f0a3, ByteAcc, NoLock, Preserve) {ifa0,8,ifa1,8}
603
604	/* b */
605
606	Name(b00b, Buffer() {0xb0,0xb1,0xb2,0xb3,0xb4})
607	OperationRegion(r00b, SystemMemory, 0x100, 0x100)
608
609	CreateField(b00b, 8, 8, bfb0)
610	Field(r00b, ByteAcc, NoLock, Preserve) {f0b0,8,f0b1,8,f0b2,8,f0b3,8}
611	BankField(r00b, f0b1, 0, ByteAcc, NoLock, Preserve) {bnb0,4}
612	IndexField(f0b2, f0b3, ByteAcc, NoLock, Preserve) {ifb0,8,ifb1,8}
613
614	/* c */
615
616	Event(e00c)
617	Mutex(mx0c, 0)
618	Device(d00c) { Name(i900, 0xabcd0017) }
619	ThermalZone(tz0c) {}
620	Processor(pr0c, 0, 0xFFFFFFFF, 0) {}
621	OperationRegion(r00c, SystemMemory, 0x100, 0x100)
622	PowerResource(pw0c, 1, 0) {Method(mmmm){return (0)}}
623
624	m12a()
625} /* m12e */
626