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     * Operation Region declarations
30     */
31    /*
32     * On testing following issues should be covered:
33     * - application of any allowed RegionSpace Keywords,
34     * - Devices' _REG methods invocation during setup of Regions,
35     * - global and dynamic Operation Region declarations,
36     * - check of the Region Length on access to appropriate Fields,
37     * - check that Region Offset and Length can be computational data.
38     *
39     * Can not be tested following issues:
40     * - emulated Access to SystemCMOS, PciBarTarget, and UserDefRegionSpace
41     *   (except 0x80) Operation Regions (there are no appropriate setup of them),
42     * - Operation Region address range mapping to given Offset and Length,
43     * - large values as Region Length,
44     * - host OS providing of exclusive use of hardware registers in global
45     *   Operation Region address range by ACPI control methods only.
46     */
47    Name (Z141, 0x8D)
48    Name (NRSK, 0x0B)  /* Number of the specific RegionSpaceKeywords */
49    Name (IRSK, 0x00)   /* Counter of the Invalid RSKs */
50    Name (NFLG, 0x02)   /* Number of turn on/off Flag values */
51    Name (IFLG, 0x00)   /* Counter of the Invalid Flags */
52    Name (FRSK, 0x0101)   /* Some false RegionSpace Keyword */
53    Name (PRSK, Package (NRSK)
54    {
55        0x0100,
56        /* UserDefRegionSpace 0x80-0xFF: auxiliary */
57
58        0x00,
59        /* SystemMemory */
60
61        0x01,
62        /* SystemIO */
63
64        0x02,
65        /* PCI_Config */
66
67        0x03,
68        /* EmbeddedControl */
69
70        0x04,
71        /* SMBus */
72
73        0x05,
74        /* SystemCMOS */
75
76        0x06,
77        /* PciBarTarget */
78
79        0x07,
80        /* IPMI */
81
82        0x08,
83        /* GeneralPurposeIo */
84
85        0x09
86        /* GenericSerialBus */
87    })
88    /* DefaultAddressSpaces */
89
90    Name (DRSK, Package (0x03)
91    {
92        0x00,
93        /* SystemMemory */
94
95        0x01,
96        /* SystemIO */
97
98        0x02
99        /* PCI_Config */
100    })
101    Name (VRSK,       /* Counters of the Valid RSKs */Package (NRSK)
102    {
103        0x00,
104        0x00,
105        0x00,
106        0x00,
107        0x00,
108        0x00,
109        0x00,
110        0x00,
111        0x00,
112        0x00,
113        0x00
114    })
115    /* Expected Counters of the Valid RSKs */
116    /* actually, not only default spaces are initialized */
117    /* by ACPICA, but AcpiExec provided ones also, */
118    /* from aeexec.c: */
119    /*
120     static ACPI_ADR_SPACE_TYPE  SpaceIdList[] =
121     {
122     ACPI_ADR_SPACE_EC,
123     ACPI_ADR_SPACE_SMBUS,
124     ACPI_ADR_SPACE_GSBUS,
125     ACPI_ADR_SPACE_GPIO,
126     ACPI_ADR_SPACE_PCI_BAR_TARGET,
127     ACPI_ADR_SPACE_IPMI,
128     ACPI_ADR_SPACE_FIXED_HARDWARE,
129     ACPI_ADR_SPACE_USER_DEFINED1,
130     ACPI_ADR_SPACE_USER_DEFINED2
131     };
132     */
133    Name (ERSK,     /* 2 for \RGN0, \OPRK; 3 for \RGN0, \OPRI, and \OPRJ */
134
135Package (NRSK)
136    {
137        0x01,
138        0x02,
139        0x03,
140        0x01,
141        0x01,
142        0x01,
143        0x00,
144        0x00,
145        0x00,
146        0x00,
147        0x00
148    })
149    Name (VFLG,       /* Counters of the Valid Flags */Package (NFLG)
150    {
151        0x00,
152        0x00
153    })
154    /* Global Operation Regions availability notification Method */
155    /* _REG(RegionSpaceKeyword, Flag) */
156    /* RegionSpaceKeyword: */
157    /*	     UserDefRegionSpace | SystemIO | SystemMemory | PCI_Config | */
158    /*	     EmbeddedControl | SMBus | SystemCMOS | PciBarTarget | */
159    /*       IPMI | GeneralPurposeIo | GenericSerialBus */
160    /* Flag: 1/0 - turn on/off accessing operation regions of that Space */
161    Method (_REG, 2, Serialized)  // _REG: Region Availability
162    {
163        Name (DBGF, 0x01)
164        If (DBGF)
165        {
166            DNAM (Arg0, Arg1, "\\_REG")
167        }
168
169        Local0 = Match (PRSK, MEQ, Arg0, MTR, 0x00, 0x01)
170        If (((Arg0 > 0x7F) && (Arg0 < 0x0100)))
171        {
172            Local0 = 0x00
173        }
174
175        If ((Local0 < NRSK))
176        {
177            Local1 = VRSK [Local0]
178            Local2 = RefOf (Local1)
179            DerefOf (Local2) = (DerefOf (Local1) + 0x01)
180        }
181        Else
182        {
183            IRSK++
184        }
185
186        If ((Arg1 < NFLG))
187        {
188            Local1 = VFLG [Arg1]
189            Local2 = RefOf (Local1)
190            DerefOf (Local2) = (DerefOf (Local1) + 0x01)
191        }
192        Else
193        {
194            IFLG++
195        }
196    }
197
198    /* Combination of the OperationRegion operator arguments */
199
200    OperationRegion (RGN0, SystemMemory, 0x00, 0x0101)
201    OperationRegion (RGN1, SystemIO, 0x0200, 0x0103)
202    OperationRegion (RGN2, PCI_Config, 0x0400, 0x0105)
203    OperationRegion (RGN3, EmbeddedControl, 0x0600, 0x0107)
204    OperationRegion (RGN4, SMBus, 0x0800, 0x0109)
205    OperationRegion (RGN5, SystemCMOS, 0x0A00, 0x010B)
206    OperationRegion (RGN6, PCIBARTarget, 0x0C00, 0x010D)
207    /* UserDefRegionSpace */
208
209    OperationRegion (RGN7, 0x80, 0x0D00, 0x0117)
210    OperationRegion (RGN8, 0xCF, 0x0E00, 0x0118)
211    OperationRegion (RGN9, 0xFF, 0x0F00, 0x0119)
212    /* ACPI 4/5 new space IDs */
213
214    OperationRegion (RGNA, GeneralPurposeIo, 0x1100, 0x011A)
215    /* NOTE: These spaces have special buffer protocols, can't be tested here */
216    /*OperationRegion(RGNb, IPMI,             0x1000, 528) */
217    /*OperationRegion(RGNc, GenericSerialBus, 0x1200, 272) */
218    /* OpRegion Lengths checking task package: Name, SpaceID, Length */
219    Name (P702, Package (0x21)
220    {
221        RGN0,
222        0x00,
223        0x0101,
224        RGN1,
225        0x01,
226        0x0103,
227        RGN2,
228        0x02,
229        0x0105,
230        RGN3,
231        0x03,
232        0x0107,
233        RGN4,
234        0x04,
235        0x0109,
236        RGN5,
237        0x05,
238        0x010B,
239        RGN6,
240        0x06,
241        0x010D,
242        RGN7,
243        0x80,
244        0x0117,
245        RGN8,
246        0xCF,
247        0x0118,
248        RGN9,
249        0xFF,
250        0x0119,
251        RGNA,
252        0x08,
253        0x011A
254    })
255    /* Region Space keyword strings */
256
257    Name (NNAM, 0x0A)
258    Name (RNAM, Package (NNAM)
259    {
260        /* 0x00 */
261
262        "SystemMemory",
263        /* 0x01 */
264
265        "SystemIO",
266        /* 0x02 */
267
268        "PCI_Config",
269        /* 0x03 */
270
271        "EmbeddedControl",
272        /* 0x04 */
273
274        "SMBus",
275        /* 0x05 */
276
277        "SystemCMOS",
278        /* 0x06 */
279
280        "PciBarTarget",
281        /* 0x07 */
282
283        "IPMI",
284        /* 0x08 */
285
286        "GeneralPurposeIo",
287        /* 0x09 */
288
289        "GenericSerialBus"
290    })
291    /*
292     * Display _REG method info
293     */
294    /* Arg0: SpaceID */
295    /* Arg1: Enable/Disable flag */
296    /* Arg2: _REG method name */
297    Method (DNAM, 3, NotSerialized)
298    {
299        Concatenate ("Executing _REG method: ", Arg2, Local1)
300        Concatenate (Local1, "  (", Local1)
301        If ((Arg0 >= NNAM))
302        {
303            If ((Arg0 == 0x7E))
304            {
305                Concatenate (Local1, "Data Table", Local2)
306            }
307            Else
308            {
309                Concatenate (Local1, "User-defined or unknown SpaceId", Local2)
310            }
311        }
312        Else
313        {
314            Concatenate (Local1, DerefOf (RNAM [Arg0]), Local2)
315        }
316
317        Concatenate (Local2, ")", Local2)
318        Debug = Local2
319        Debug = Arg0
320        Debug = Arg1
321    }
322
323    Device (DOR0)
324    {
325        Name (IRSK, 0x00)   /* Counter of the Invalid RSKs */
326        Name (IFLG, 0x00)   /* Counter of the Invalid Flags */
327        Name (VRSK,       /* Counters of the Valid RSKs */Package (NRSK)
328        {
329            0x00,
330            0x00,
331            0x00,
332            0x00,
333            0x00,
334            0x00,
335            0x00,
336            0x00,
337            0x00,
338            0x00,
339            0x00
340        })
341        Name (ERSK,       /* Expected Counters of the Valid RSKs */Package (NRSK)
342        {
343            0x01,
344            0x01,
345            0x01,
346            0x01,
347            0x01,
348            0x01,
349            0x00,
350            0x00,
351            0x00,
352            0x00,
353            0x00
354        })
355        Name (VFLG,       /* Counters of the Valid Flags */Package (NFLG)
356        {
357            0x00,
358            0x00
359        })
360        /* Specific Operation Regions availability notification Method */
361        /* \DOR0._REG(RegionSpaceKeyword, Flag) */
362        Method (_REG, 2, Serialized)  // _REG: Region Availability
363        {
364            Name (DBGF, 0x01)
365            If (DBGF)
366            {
367                DNAM (Arg0, Arg1, "\\DOR0._REG")
368            }
369
370            Local0 = Match (PRSK, MEQ, Arg0, MTR, 0x00, 0x01)
371            If (((Arg0 > 0x7F) && (Arg0 < 0x0100)))
372            {
373                Local0 = 0x00
374            }
375
376            If ((Local0 < NRSK))
377            {
378                Local1 = VRSK [Local0]
379                Local2 = RefOf (Local1)
380                DerefOf (Local2) = (DerefOf (Local1) + 0x01)
381            }
382            Else
383            {
384                IRSK++
385            }
386
387            If ((Arg1 < NFLG))
388            {
389                Local1 = VFLG [Arg1]
390                Local2 = RefOf (Local1)
391                DerefOf (Local2) = (DerefOf (Local1) + 0x01)
392            }
393            Else
394            {
395                IFLG++
396            }
397        }
398
399        /* Combination of the OperationRegion operator arguments */
400
401        OperationRegion (RGN0, SystemMemory, 0x1000, 0x0102)
402        OperationRegion (RGN1, SystemIO, 0x1200, 0x0104)
403        OperationRegion (RGN2, PCI_Config, 0x1400, 0x0106)
404        OperationRegion (RGN3, EmbeddedControl, 0x1600, 0x0108)
405        OperationRegion (RGN4, SMBus, 0x1800, 0x010A)
406        OperationRegion (RGN5, SystemCMOS, 0x1A00, 0x010C)
407        OperationRegion (RGN6, PCIBARTarget, 0x1C00, 0x010D)
408        /* UserDefRegionSpace */
409
410        OperationRegion (RGN7, 0x80, 0x00, 0x0127)
411        OperationRegion (RGN8, 0xA5, 0x00, 0x0128)
412        OperationRegion (RGN9, 0xFF, 0x00, 0x0129)
413        /* ACPI 4/5 new space IDs */
414
415        OperationRegion (RGNA, IPMI, 0x1E00, 0x010E)
416        OperationRegion (RGNB, GeneralPurposeIo, 0x2000, 0x010F)
417        OperationRegion (RGNC, GenericSerialBus, 0x2200, 0x0110)
418    }
419
420    Device (DOR1)
421    {
422        Name (IRSK, 0x00)   /* Counter of the Invalid RSKs */
423        Name (IFLG, 0x00)   /* Counter of the Invalid Flags */
424        Name (VRSK,       /* Counters of the Valid RSKs */Package (NRSK)
425        {
426            0x00,
427            0x00,
428            0x00,
429            0x00,
430            0x00,
431            0x00,
432            0x00,
433            0x00,
434            0x00,
435            0x00,
436            0x00
437        })
438        Name (ERSK,       /* Expected Counters of the Valid RSKs */Package (NRSK)
439        {
440            0x01,
441            0x01,
442            0x01,
443            0x01,
444            0x01,
445            0x01,
446            0x00,
447            0x00,
448            0x00,
449            0x00,
450            0x00
451        })
452        Name (VFLG,       /* Counters of the Valid Flags */Package (NFLG)
453        {
454            0x00,
455            0x00
456        })
457        Name (IREG, 0x00)   /* Counter of the Invalid Calls to DOR1._REG */
458        /* Specific Operation Regions availability notification Method */
459        /* \DOR1._REG(RegionSpaceKeyword, Flag) */
460        OperationRegion (JUNK, SystemMemory, 0x2000, 0x0100)
461        Method (_REG, 2, Serialized)  // _REG: Region Availability
462        {
463            Name (DBGF, 0x01)
464            If (DBGF)
465            {
466                DNAM (Arg0, Arg1, "\\DOR1._REG")
467            }
468
469            IREG++
470        }
471
472        Method (M000, 0, Serialized)
473        {
474            /* Dynamic Operation Regions availability notification Method */
475            /* \DOR1.M000._REG(RegionSpaceKeyword, Flag) */
476            Method (_REG, 2, Serialized)  // _REG: Region Availability
477            {
478                Name (DBGF, 0x01)
479                If (DBGF)
480                {
481                    DNAM (Arg0, Arg1, "\\m701._REG")
482                }
483
484                Local0 = Match (PRSK, MEQ, Arg0, MTR, 0x00, 0x01)
485                If (((Arg0 > 0x7F) && (Arg0 < 0x0100)))
486                {
487                    Local0 = 0x00
488                }
489
490                If ((Local0 < NRSK))
491                {
492                    Local1 = VRSK [Local0]
493                    Local2 = RefOf (Local1)
494                    DerefOf (Local2) = (DerefOf (Local1) + 0x01)
495                }
496                Else
497                {
498                    IRSK++
499                }
500
501                If ((Arg1 < NFLG))
502                {
503                    Local1 = VFLG [Arg1]
504                    Local2 = RefOf (Local1)
505                    DerefOf (Local2) = (DerefOf (Local1) + 0x01)
506                }
507                Else
508                {
509                    IFLG++
510                }
511            }
512
513            /* Combination of the OperationRegion operator arguments */
514
515            OperationRegion (RGN0, SystemMemory, 0x2000, 0x0100)
516            OperationRegion (RGN1, SystemIO, 0x2200, 0x0300)
517            OperationRegion (RGN2, PCI_Config, 0x2400, 0x0500)
518            OperationRegion (RGN3, EmbeddedControl, 0x2600, 0x0700)
519            OperationRegion (RGN4, SMBus, 0x2800, 0x0900)
520            OperationRegion (RGN5, SystemCMOS, 0x2A00, 0x0B00)
521            OperationRegion (RGN6, PCIBARTarget, 0x2C00, 0x0D00)
522            /* UserDefRegionSpace */
523
524            OperationRegion (RGN7, 0x80, 0x00, 0x0100)
525            OperationRegion (RGN8, 0xA5, 0x00, 0x0100)
526            OperationRegion (RGN9, 0xFF, 0x00, 0x0100)
527            /* ACPI 4/5 new space IDs */
528
529            OperationRegion (RGNA, IPMI, 0x2E00, 0x0F00)
530            OperationRegion (RGNB, GeneralPurposeIo, 0x3000, 0x1100)
531            OperationRegion (RGNC, GenericSerialBus, 0x3200, 0x1300)
532            /* Incorrect call */
533
534            _REG (FRSK, 0x02)
535        }
536    }
537
538    /* Check Global OpRegions initialization */
539    /* m700(CallChain) */
540    /* CallChain: String */
541    Method (M700, 1, NotSerialized)
542    {
543        Concatenate (Arg0, "-m700", Arg0)
544        /* Check incorrect calls */
545
546        If ((IRSK != 0x00))
547        {
548            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IRSK, 0x00)
549        }
550
551        If ((IFLG != 0x00))
552        {
553            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IFLG, 0x00)
554        }
555
556        If ((\DOR0.IRSK != 0x00))
557        {
558            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IRSK, 0x00)
559        }
560
561        If ((\DOR0.IFLG != 0x00))
562        {
563            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IFLG, 0x00)
564        }
565
566        /* Emulate and verify incorrect calls */
567
568        _REG (FRSK, 0x02)
569        \DOR0._REG (FRSK, 0x02)
570        If ((IRSK != 0x01))
571        {
572            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IRSK, 0x01)
573        }
574
575        If ((IFLG != 0x01))
576        {
577            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IFLG, 0x01)
578        }
579
580        If ((\DOR0.IRSK != 0x01))
581        {
582            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IRSK, 0x01)
583        }
584
585        If ((\DOR0.IFLG != 0x01))
586        {
587            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, IFLG, 0x01)
588        }
589
590        /* Check total calls to \_REG */
591
592        If ((DerefOf (VFLG [0x01]) != 0x09))
593        {
594            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, DerefOf (VFLG [0x01]), 0x09)
595        }
596
597        M70E (Arg0, 0x01, VRSK, ERSK, 0x0A)
598        /* Check total calls to \DOR0._REG */
599
600        If ((DerefOf (\DOR0.VFLG [0x01]) != 0x06))
601        {
602            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, DerefOf (\DOR0.VFLG [0x01]), 0x06)
603        }
604
605        M70E (Arg0, 0x01, \DOR0.VRSK, \DOR0.ERSK, 0x0C)
606    }
607
608    /* Check Dynamic OpRegions initialization */
609    /* m701(CallChain) */
610    /* CallChain: String */
611    Method (M701, 1, NotSerialized)
612    {
613        Concatenate (Arg0, "-m701", Arg0)
614        If ((\DOR1.IREG != 0x00))
615        {
616            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IREG, 0x00)
617        }
618
619        If ((\DOR1.IRSK != 0x00))
620        {
621            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IRSK, 0x00)
622        }
623
624        If ((\DOR1.IFLG != 0x00))
625        {
626            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IFLG, 0x00)
627        }
628
629        If ((DerefOf (\DOR1.VFLG [0x01]) != 0x00))
630        {
631            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, DerefOf (\DOR1.VFLG [0x01]), 0x00)
632        }
633
634        M70E (Arg0, 0x02, \DOR1.VRSK, 0x00, 0x11)
635        \DOR1.M000 ()
636        If ((\DOR1.IREG != 0x00))
637        {
638            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IREG, 0x01)
639        }
640
641        If ((\DOR1.IRSK != 0x01))
642        {
643            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IRSK, 0x01)
644        }
645
646        If ((\DOR1.IFLG != 0x01))
647        {
648            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, \DOR1.IFLG, 0x01)
649        }
650
651        /* Check total calls to \DOR1._REG */
652
653        If ((DerefOf (\DOR1.VFLG [0x01]) != 0x06))
654        {
655            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, DerefOf (\DOR1.VFLG [0x01]), 0x06)
656        }
657
658        M70E (Arg0, 0x01, \DOR1.VRSK, \DOR1.ERSK, 0x16)
659    }
660
661    /* Check OpRegion Length restrictions */
662    /* m702(CallChain) */
663    /* CallChain: String */
664    Method (M702, 1, NotSerialized)
665    {
666        Concatenate (Arg0, "-m702", Arg0)
667        Local0 = SizeOf (P702)
668        Local0 /= 0x03
669        Local1 = 0x00
670        While (Local0)
671        {
672            M70C (Arg0, P702, Local1)
673            Local0--
674            Local1++
675        }
676    }
677
678    /* Check Overlapping of OpRegions */
679    /* m703(CallChain) */
680    /* CallChain: String */
681    Method (M703, 1, Serialized)
682    {
683        Concatenate (Arg0, "-m703", Arg0)
684        /* Overlap \RGN0 - \RGN9 */
685
686        OperationRegion (RGN0, SystemMemory, 0x80, 0x0121)
687        OperationRegion (RGN1, SystemIO, 0x0280, 0x0123)
688        OperationRegion (RGN2, PCI_Config, 0x0480, 0x0125)
689        OperationRegion (RGN3, EmbeddedControl, 0x0680, 0x0127)
690        OperationRegion (RGN4, SMBus, 0x0880, 0x0109)
691        OperationRegion (RGN5, SystemCMOS, 0x0A80, 0x012B)
692        OperationRegion (RGN6, PCIBARTarget, 0x0C80, 0x012D)
693        /* UserDefRegionSpace */
694
695        OperationRegion (RGN7, 0x80, 0x0D80, 0x0137)
696        OperationRegion (RGN8, 0xCF, 0x0E80, 0x0138)
697        OperationRegion (RGN9, 0xFF, 0x0F80, 0x0139)
698        OperationRegion (RGNA, SystemMemory, 0x1090, 0x014A)
699        /* Unsupported cases commented */
700
701        M70F (Arg0, \RGN0, RGN0, 0x01, 0x00)
702        M70F (Arg0, \RGN1, RGN1, 0x01, 0x01)
703        /*  m70f(arg0, \RGN2, RGN2, 1, 2) */
704        /*  m70f(arg0, \RGN3, RGN3, 1, 3) */
705        /*  m70f(arg0, \RGN4, RGN4, 1, 4) */
706        /*  m70f(arg0, \RGN5, RGN5, 1, 5) */
707        /*  m70f(arg0, \RGN6, RGN6, 1, 6) */
708        M70F (Arg0, \RGN7, RGN7, 0x01, 0x07)
709        /*  m70f(arg0, \RGN8, RGN8, 1, 8) */
710        /*  m70f(arg0, \RGN9, RGN9, 1, 9) */
711        M70F (Arg0, \DOR0.RGN0, RGNA, 0x00, 0x0A)
712    }
713
714    /* Create Region Field about Region Length in length */
715    /* and check possible exception */
716    /* m70c(CallChain, Task, Index) */
717    Method (M70C, 3, Serialized)
718    {
719        OperationRegion (OPRM, 0xFF, 0x00, 0x1000)
720        Concatenate (Arg0, "-m70c", Arg0)
721        Local4 = (Arg2 * 0x03)
722        Local0 = (Local4 + 0x01)
723        Local3 = DerefOf (Arg1 [Local0])
724        Local0++
725        Local2 = DerefOf (Arg1 [Local0])
726        Local1 = (Local2 * 0x08)
727        Name (B000, Buffer (0x0100){})
728        CopyObject (DerefOf (Arg1 [Local4]), OPRM) /* \M70C.OPRM */
729        Field (OPRM, ByteAcc, NoLock, Preserve)
730        {
731            FU01,   2048
732        }
733
734        Local6 = RefOf (FU01)
735        Local5 = RefOf (Local6)
736        M70D (Arg2, B000)
737        If ((Local3 == 0x02)            /* PCI_Config */
738            ){}
739        ElseIf ((Local3 == 0x03)            /* EmbbededControl */
740            ){}
741        ElseIf ((Local3 == 0x04)            /* SMBus */
742            ){}
743        ElseIf ((Local3 == 0x05)            /* SystemCMOS */
744            ){}
745        ElseIf ((Local3 == 0x06)            /* PciBarTarget */
746            ){}
747        ElseIf ((Local3 == 0x07)            /* IPMI */
748            ){}
749        ElseIf ((Local3 == 0x08)            /* GeneralPurposeIo */
750            ){}
751        ElseIf ((Local3 > 0x80)            /* UserDefRegionSpace <> 0x80 */
752            ){}
753        Else
754        {
755            DerefOf (Local5) = B000 /* \M70C.B000 */
756            CH03 (Arg0, Z141, __LINE__, 0x00, Local3)
757            Local0 = ObjectType (DerefOf (Local6))
758            Local1 = C00B /* \C00B */
759            If ((Local0 != Local1))
760            {
761                ERR (Arg0, Z141, __LINE__, 0x00, 0x00, Local0, Local1)
762            }
763            Else
764            {
765                Local0 = DerefOf (Local6)
766                If ((Local0 != B000))
767                {
768                    ERR (Arg0, Z141, __LINE__, Z141, Arg2, Local0, B000)
769                }
770            }
771        }
772    }
773
774    /* Fill the buffer */
775    /* m70d(Source, Target) */
776    /* Source: 0x100 - index, else - this byte */
777    /* Target: buffer for filling */
778    Method (M70D, 2, Serialized)
779    {
780        Local0 = SizeOf (Arg1)
781        While (Local0)
782        {
783            Local0--
784            Switch (ToInteger (Arg0))
785            {
786                Case (0x0100)
787                {
788                    Arg1 [Local0] = Local0
789                }
790                Default
791                {
792                    Arg1 [Local0] = Arg0
793                }
794
795            }
796        }
797    }
798
799    /* Processes the VRSK */
800    /* m70e(CallChain, ToDo, Results, Benchmark, ErrId) */
801    /* CallChain: String */
802    /* ToDo:      0 - nullify, 1 - Check Values, 2 - check if null */
803    /* Results:   actual VRSK Values */
804    /* Benchmark: expected VRSK Values */
805    /* ErrId:     index of the error */
806    Method (M70E, 5, Serialized)
807    {
808        Concatenate (Arg0, "-m70e", Arg0)
809        Local0 = NRSK /* \NRSK */
810        While (Local0)
811        {
812            Local0--
813            Local1 = Arg2 [Local0]
814            Local2 = RefOf (Local1)
815            Switch (ToInteger (Arg1))
816            {
817                Case (0x00)
818                {
819                    DerefOf (Local2) = 0x00
820                }
821                Case (0x01)
822                {
823                    Local3 = Arg3 [Local0]
824                    If ((DerefOf (Local1) != DerefOf (Local3)))
825                    {
826                        ERR (Arg0, Z141, __LINE__, Z141, Local0, DerefOf (Local1), DerefOf (Local3))
827                    }
828                }
829                Case (0x02)
830                {
831                    If ((DerefOf (Local1) != 0x00))
832                    {
833                        ERR (Arg0, Z141, __LINE__, Z141, Local0, DerefOf (Local1), 0x00)
834                    }
835                }
836
837            }
838        }
839    }
840
841    /* Create Region Fields in two overlapping Regions */
842    /* and check overlapping parts to be shared */
843    /* m70f(CallChain, OpRegion0, OpRegion1, RangeNum, ErrNum) */
844    Method (M70F, 5, Serialized)
845    {
846        OperationRegion (OPRM, 0xFF, 0x00, 0x1000)
847        OperationRegion (OPRN, 0xFF, 0x00, 0x1000)
848        CopyObject (Arg1, OPRM) /* \M70F.OPRM */
849        CopyObject (Arg2, OPRN) /* \M70F.OPRN */
850        Field (OPRM, ByteAcc, NoLock, Preserve)
851        {
852            Offset (0x7D),
853            FU00,   80,
854            Offset (0x8D),
855            FU02,   80
856        }
857
858        Field (OPRN, ByteAcc, NoLock, Preserve)
859        {
860            FU01,   80
861        }
862
863        Concatenate (Arg0, "-m70f", Arg0)
864        Name (B000, Buffer (0x0A){})
865        M70D (0x01, B000)
866        If (Arg3)
867        {
868            FU00 = B000 /* \M70F.B000 */
869        }
870        Else
871        {
872            FU02 = B000 /* \M70F.B000 */
873        }
874
875        M70D (0x02, B000)
876        FU01 = B000 /* \M70F.B000 */
877        If (Arg3)
878        {
879            Local0 = FU00 /* \M70F.FU00 */
880        }
881        Else
882        {
883            Local0 = FU02 /* \M70F.FU02 */
884        }
885
886        Local1 = Buffer (0x0A)
887            {
888                /* 0000 */  0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02,  // ........
889                /* 0008 */  0x02, 0x02                                       // ..
890            }
891        If ((Local0 != Local1))
892        {
893            ERR (Arg0, Z141, __LINE__, Z141, Arg4, Local0, Local1)
894        }
895    }
896
897    /* Check that the same ranges of different Address Spaces */
898    /* actually refer the different locations */
899    /* m704(CallChain) */
900    /* CallChain: String */
901    Method (M704, 1, Serialized)
902    {
903        Method (CHCK, 4, NotSerialized)
904        {
905            If ((Arg1 != Arg2))
906            {
907                ERR (Arg0, Z141, __LINE__, Z141, Arg3, Arg1, Arg2)
908            }
909        }
910
911        OperationRegion (OPR0, SystemMemory, 0x00, 0x01)
912        OperationRegion (OPR1, SystemIO, 0x00, 0x01)
913        OperationRegion (OPR7, 0x80, 0x00, 0x01)
914        Field (OPR0, ByteAcc, NoLock, Preserve)
915        {
916            F000,   8
917        }
918
919        Field (OPR1, ByteAcc, NoLock, Preserve)
920        {
921            F001,   8
922        }
923
924        Field (OPR7, ByteAcc, NoLock, Preserve)
925        {
926            F002,   8
927        }
928
929        Concatenate (Arg0, "-m704", Arg0)
930        F000 = 0x5A
931        CHCK (Arg0, F000, 0x5A, 0x00)
932        F001 = 0xC3
933        CHCK (Arg0, F001, 0xC3, 0x01)
934        F002 = 0x96
935        CHCK (Arg0, F002, 0x96, 0x02)
936        CHCK (Arg0, F000, 0x5A, 0x03)
937        CHCK (Arg0, F001, 0xC3, 0x04)
938        CHCK (Arg0, F002, 0x96, 0x05)
939    }
940
941    /* Check non-constant OpRegion arguments */
942    /* m705(CallChain) */
943    /* CallChain: String */
944    Method (M705, 1, Serialized)
945    {
946        Name (I000, 0x56)
947        Name (I001, 0x78)
948        Name (I002, 0x89ABCDEF)
949        /* ArgX */
950
951        Method (M000, 4, Serialized)
952        {
953            Switch (ToInteger (Arg1))
954            {
955                Case (0x00)
956                {
957                    OperationRegion (OPR0, SystemMemory, Arg2, Arg3)
958                    Field (OPR0, ByteAcc, NoLock, Preserve)
959                    {
960                        F000,   32
961                    }
962
963                    Local5 = RefOf (F000)
964                }
965                Case (0x01)
966                {
967                    OperationRegion (OPR1, SystemIO, Arg2, Arg3)
968                    Field (OPR1, ByteAcc, NoLock, Preserve)
969                    {
970                        F001,   32
971                    }
972
973                    Local5 = RefOf (F001)
974                }
975                Case (0x02)
976                {
977                    OperationRegion (OPR7, 0x80, Arg2, Arg3)
978                    Field (OPR7, ByteAcc, NoLock, Preserve)
979                    {
980                        F007,   32
981                    }
982
983                    Local5 = RefOf (F007)
984                }
985
986            }
987
988            Local6 = RefOf (Local5)
989            DerefOf (Local6) = I002 /* \M705.I002 */
990            Local7 = DerefOf (Local5)
991            If ((I002 != Local7))
992            {
993                ERR (Arg0, Z141, __LINE__, Z141, Arg1, Local7, I002)
994            }
995        }
996
997        /* Named */
998
999        Method (M001, 2, Serialized)
1000        {
1001            Switch (ToInteger (Arg1))
1002            {
1003                Case (0x00)
1004                {
1005                    OperationRegion (OPR0, SystemMemory, I000, I001)
1006                    Field (OPR0, ByteAcc, NoLock, Preserve)
1007                    {
1008                        F000,   32
1009                    }
1010
1011                    Local5 = RefOf (F000)
1012                }
1013                Case (0x01)
1014                {
1015                    OperationRegion (OPR1, SystemIO, I000, I001)
1016                    Field (OPR1, ByteAcc, NoLock, Preserve)
1017                    {
1018                        F001,   32
1019                    }
1020
1021                    Local5 = RefOf (F001)
1022                }
1023                Case (0x02)
1024                {
1025                    OperationRegion (OPR7, 0x80, I000, I001)
1026                    Field (OPR7, ByteAcc, NoLock, Preserve)
1027                    {
1028                        F007,   32
1029                    }
1030
1031                    Local5 = RefOf (F007)
1032                }
1033
1034            }
1035
1036            Local6 = RefOf (Local5)
1037            DerefOf (Local6) = I002 /* \M705.I002 */
1038            Local7 = DerefOf (Local5)
1039            If ((I002 != Local7))
1040            {
1041                ERR (Arg0, Z141, __LINE__, Z141, Arg1, Local7, I002)
1042            }
1043        }
1044
1045        /* LocalX */
1046
1047        Method (M002, 2, Serialized)
1048        {
1049            Local0 = I000 /* \M705.I000 */
1050            Local1 = I001 /* \M705.I001 */
1051            Switch (ToInteger (Arg1))
1052            {
1053                Case (0x00)
1054                {
1055                    OperationRegion (OPR0, SystemMemory, Local0, Local1)
1056                    Field (OPR0, ByteAcc, NoLock, Preserve)
1057                    {
1058                        F000,   32
1059                    }
1060
1061                    Local5 = RefOf (F000)
1062                }
1063                Case (0x01)
1064                {
1065                    OperationRegion (OPR1, SystemIO, Local0, Local1)
1066                    Field (OPR1, ByteAcc, NoLock, Preserve)
1067                    {
1068                        F001,   32
1069                    }
1070
1071                    Local5 = RefOf (F001)
1072                }
1073                Case (0x02)
1074                {
1075                    OperationRegion (OPR7, 0x80, Local0, Local1)
1076                    Field (OPR7, ByteAcc, NoLock, Preserve)
1077                    {
1078                        F007,   32
1079                    }
1080
1081                    Local5 = RefOf (F007)
1082                }
1083
1084            }
1085
1086            Local6 = RefOf (Local5)
1087            DerefOf (Local6) = I002 /* \M705.I002 */
1088            Local7 = DerefOf (Local5)
1089            If ((I002 != Local7))
1090            {
1091                ERR (Arg0, Z141, __LINE__, Z141, Arg1, Local7, I002)
1092            }
1093        }
1094
1095        /* Expression */
1096
1097        Method (M003, 2, Serialized)
1098        {
1099            Local1 = I001 /* \M705.I001 */
1100            Switch (ToInteger (Arg1))
1101            {
1102                Case (0x00)
1103                {
1104                    OperationRegion (OPR0, SystemMemory, (I000 + 0x01), (Local1 - 0x01))
1105                    Field (OPR0, ByteAcc, NoLock, Preserve)
1106                    {
1107                        F000,   32
1108                    }
1109
1110                    Local5 = RefOf (F000)
1111                }
1112                Case (0x01)
1113                {
1114                    OperationRegion (OPR1, SystemIO, (I000 + 0x01), (Local1 - 0x01))
1115                    Field (OPR1, ByteAcc, NoLock, Preserve)
1116                    {
1117                        F001,   32
1118                    }
1119
1120                    Local5 = RefOf (F001)
1121                }
1122                Case (0x02)
1123                {
1124                    OperationRegion (OPR7, 0x80, (I000 + 0x01), (Local1 - 0x01))
1125                    Field (OPR7, ByteAcc, NoLock, Preserve)
1126                    {
1127                        F007,   32
1128                    }
1129
1130                    Local5 = RefOf (F007)
1131                }
1132
1133            }
1134
1135            Local6 = RefOf (Local5)
1136            DerefOf (Local6) = I002 /* \M705.I002 */
1137            Local7 = DerefOf (Local5)
1138            If ((I002 != Local7))
1139            {
1140                ERR (Arg0, Z141, __LINE__, Z141, Arg1, Local7, I002)
1141            }
1142        }
1143
1144        Concatenate (Arg0, "-m705", Arg0)
1145        M000 (Arg0, 0x00, 0x12, 0x34)
1146        M000 (Arg0, 0x01, 0x12, 0x34)
1147        M000 (Arg0, 0x02, 0x12, 0x34)
1148        M001 (Arg0, 0x00)
1149        M001 (Arg0, 0x01)
1150        M001 (Arg0, 0x02)
1151        M002 (Arg0, 0x00)
1152        M002 (Arg0, 0x01)
1153        M002 (Arg0, 0x02)
1154        M003 (Arg0, 0x00)
1155        M003 (Arg0, 0x01)
1156        M003 (Arg0, 0x02)
1157    }
1158
1159    /* Check non-Integer OpRegion arguments */
1160    /* m706(CallChain) */
1161    /* CallChain: String */
1162    Method (M706, 1, Serialized)
1163    {
1164        Name (OFF0, 0xFEDCBA987654321F)
1165        Name (OFFB, Buffer (0x08)
1166        {
1167             0x1F, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE   // .2Tv....
1168        })
1169        Name (OFFS, "7654321f")
1170        If (F64)
1171        {
1172            OFFS = "fedcba987654321f"
1173        }
1174
1175        Name (LEN0, 0x0123)
1176        Name (LENB, Buffer (0x02)
1177        {
1178             0x23, 0x01                                       // #.
1179        })
1180        Name (LENS, "123")
1181        OperationRegion (OPR0, SystemMemory, 0xFEDCBA987654321F, 0x0123)
1182        OperationRegion (OPR1, SystemMemory, OFF0, LEN0)
1183        OperationRegion (OPR2, SystemMemory, OFFB, LENB)
1184        OperationRegion (OPR3, SystemMemory, OFFS, LENS)
1185        Field (OPR0, ByteAcc, NoLock, Preserve)
1186        {
1187            Offset (0x11F),
1188            FU00,   32
1189        }
1190
1191        Field (OPR1, ByteAcc, NoLock, Preserve)
1192        {
1193            Offset (0x11F),
1194            FU01,   32
1195        }
1196
1197        Field (OPR2, ByteAcc, NoLock, Preserve)
1198        {
1199            Offset (0x11F),
1200            FU02,   32
1201        }
1202
1203        Field (OPR3, ByteAcc, NoLock, Preserve)
1204        {
1205            Offset (0x11F),
1206            FU03,   32
1207        }
1208
1209        Name (I000, 0x12345678)
1210        Method (M000, 4, Serialized)
1211        {
1212            OperationRegion (OPR4, SystemMemory, Arg1, Arg2)
1213            Field (OPR4, AnyAcc, NoLock, Preserve)
1214            {
1215                Offset (0x11F),
1216                FU04,   32
1217            }
1218
1219            If ((FU04 != I000))
1220            {
1221                ERR (Arg0, Z141, __LINE__, 0x00, 0x00, FU04, I000)
1222            }
1223        }
1224
1225        Concatenate (Arg0, "-m706", Arg0)
1226        FU00 = I000 /* \M706.I000 */
1227        If ((FU00 != I000))
1228        {
1229            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, FU00, I000)
1230        }
1231
1232        If ((0xFEDCBA987654321F != OFF0))
1233        {
1234            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, OFF0, 0xFEDCBA987654321F)
1235        }
1236        ElseIf ((0x0123 != LEN0))
1237        {
1238            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, LEN0, 0x0123)
1239        }
1240        ElseIf ((FU01 != I000))
1241        {
1242            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, FU00, I000)
1243        }
1244
1245        If ((0xFEDCBA987654321F != OFFB))
1246        {
1247            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, OFFB, 0xFEDCBA987654321F)
1248        }
1249        ElseIf ((0x0123 != LENB))
1250        {
1251            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, LENB, 0x0123)
1252        }
1253        ElseIf ((FU02 != I000))
1254        {
1255            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, FU00, I000)
1256        }
1257
1258        If ((0xFEDCBA987654321F != OFFS))
1259        {
1260            Local0 = (OFFS + 0x00)
1261            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, Local0, 0xFEDCBA987654321F)
1262        }
1263        ElseIf ((0x0123 != LENS))
1264        {
1265            Local0 = (LENS + 0x00)
1266            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, Local0, 0x0123)
1267        }
1268        ElseIf ((FU03 != I000))
1269        {
1270            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, FU00, I000)
1271        }
1272
1273        M000 (Arg0, OFF0, LEN0, 0x2B)
1274        M000 (Arg0, OFFB, LENB, 0x2C)
1275        M000 (Arg0, OFFS, LENS, 0x2D)
1276    }
1277
1278    /* Overlapping Operation Regions algorithm test */
1279    /* Test the 3 conditional cases of overlap */
1280    /* Test done only in SystemMemory */
1281    Method (M707, 1, Serialized)
1282    {
1283        OperationRegion (RGN0, SystemMemory, 0x0100, 0x08)
1284        OperationRegion (RGN1, SystemMemory, 0xFB, 0x08)
1285        OperationRegion (RGN2, SystemMemory, 0x0105, 0x08)
1286        OperationRegion (RGN3, SystemMemory, 0xF9, 0x16)
1287        OperationRegion (RGN4, SystemMemory, 0xF9, 0x16)
1288        /* Starting Field */
1289
1290        Field (RGN0, ByteAcc, NoLock, Preserve)
1291        {
1292            Offset (0x01),
1293            FU00,   48
1294        }
1295
1296        /* Overlap start of RGN0 */
1297
1298        Field (RGN1, ByteAcc, NoLock, Preserve)
1299        {
1300            Offset (0x02),
1301            FU10,   48
1302        }
1303
1304        /* Overlap end of RGN0 */
1305
1306        Field (RGN2, ByteAcc, NoLock, Preserve)
1307        {
1308            FU20,   48
1309        }
1310
1311        /* Overlap both start of RGN1 and end of RGN2 */
1312
1313        Field (RGN3, ByteAcc, NoLock, Preserve)
1314        {
1315            FU30,   48,
1316            Offset (0x08),
1317            FU31,   16,
1318            Offset (0x0C),
1319            FU32,   16,
1320            Offset (0x10),
1321            FU33,   48
1322        }
1323
1324        /* Single Field spanning RGN3 area */
1325
1326        Field (RGN4, ByteAcc, NoLock, Preserve)
1327        {
1328            FU40,   176
1329        }
1330
1331        Name (B000, Buffer (0x06){})
1332        Name (B001, Buffer (0x02){})
1333        /* Starting region write */
1334
1335        M70D (0x01, B000)
1336        FU00 = B000 /* \M707.B000 */
1337        /* New region overlapping the left */
1338
1339        M70D (0x02, B000)
1340        FU10 = B000 /* \M707.B000 */
1341        /* New region overlapping the right */
1342
1343        M70D (0x03, B000)
1344        FU20 = B000 /* \M707.B000 */
1345        /* New region overlapping left and right with writes */
1346        /* at various locations */
1347        M70D (0x04, B000)
1348        FU30 = B000 /* \M707.B000 */
1349        M70D (0x05, B001)
1350        FU31 = B001 /* \M707.B001 */
1351        M70D (0x06, B001)
1352        FU32 = B001 /* \M707.B001 */
1353        M70D (0x07, B000)
1354        FU33 = B000 /* \M707.B000 */
1355        Local0 = FU40 /* \M707.FU40 */
1356        Local1 = Buffer (0x16)
1357            {
1358                /* 0000 */  0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02,  // ........
1359                /* 0008 */  0x05, 0x05, 0x01, 0x01, 0x06, 0x06, 0x03, 0x03,  // ........
1360                /* 0010 */  0x07, 0x07, 0x07, 0x07, 0x07, 0x07               // ......
1361            }
1362        If ((Local0 != Local1))
1363        {
1364            ERR (Arg0, Z141, __LINE__, 0x00, 0x00, Local0, Local1)
1365        }
1366    }
1367
1368    Method (ORC0, 0, Serialized)
1369    {
1370        /* Global OpRegions */
1371
1372        SRMT ("m700")
1373        If (Y220)
1374        {
1375            M700 (__METHOD__)
1376        }
1377        Else
1378        {
1379            BLCK ()
1380        }
1381
1382        /* Dynamic OpRegions */
1383
1384        SRMT ("m701")
1385        If (Y217)
1386        {
1387            M701 (__METHOD__)
1388        }
1389        Else
1390        {
1391            BLCK ()
1392        }
1393
1394        /* OpRegion Lengths */
1395
1396        SRMT ("m702")
1397        M702 (__METHOD__)
1398        /* Overlapping of OpRegions */
1399
1400        SRMT ("m703")
1401        If (Y221)
1402        {
1403            M703 (__METHOD__)
1404        }
1405        Else
1406        {
1407            BLCK ()
1408        }
1409
1410        /* The same ranges of different Address Spaces */
1411
1412        SRMT ("m704")
1413        If (Y222)
1414        {
1415            M704 (__METHOD__)
1416        }
1417        Else
1418        {
1419            BLCK ()
1420        }
1421
1422        /* Non-constant OpRegion arguments */
1423
1424        SRMT ("m705")
1425        M705 (__METHOD__)
1426        /* Non-Integer OpRegion arguments */
1427
1428        SRMT ("m706")
1429        M706 (__METHOD__)
1430        /* Overlapping OpRegions algorithm test */
1431
1432        SRMT ("m707")
1433        M707 (__METHOD__)
1434    }
1435