aslrestype2e.c revision 207344
1207340Sjkim
2207340Sjkim/******************************************************************************
3207340Sjkim *
4207340Sjkim * Module Name: aslrestype2e - Large Extended address resource descriptors
5207340Sjkim *
6207340Sjkim *****************************************************************************/
7207340Sjkim
8207340Sjkim/******************************************************************************
9207340Sjkim *
10207340Sjkim * 1. Copyright Notice
11207340Sjkim *
12207340Sjkim * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
13207340Sjkim * All rights reserved.
14207340Sjkim *
15207340Sjkim * 2. License
16207340Sjkim *
17207340Sjkim * 2.1. This is your license from Intel Corp. under its intellectual property
18207340Sjkim * rights.  You may have additional license terms from the party that provided
19207340Sjkim * you this software, covering your right to use that party's intellectual
20207340Sjkim * property rights.
21207340Sjkim *
22207340Sjkim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
23207340Sjkim * copy of the source code appearing in this file ("Covered Code") an
24207340Sjkim * irrevocable, perpetual, worldwide license under Intel's copyrights in the
25207340Sjkim * base code distributed originally by Intel ("Original Intel Code") to copy,
26207340Sjkim * make derivatives, distribute, use and display any portion of the Covered
27207340Sjkim * Code in any form, with the right to sublicense such rights; and
28207340Sjkim *
29207340Sjkim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
30207340Sjkim * license (with the right to sublicense), under only those claims of Intel
31207340Sjkim * patents that are infringed by the Original Intel Code, to make, use, sell,
32207340Sjkim * offer to sell, and import the Covered Code and derivative works thereof
33207340Sjkim * solely to the minimum extent necessary to exercise the above copyright
34207340Sjkim * license, and in no event shall the patent license extend to any additions
35207340Sjkim * to or modifications of the Original Intel Code.  No other license or right
36207340Sjkim * is granted directly or by implication, estoppel or otherwise;
37207340Sjkim *
38207340Sjkim * The above copyright and patent license is granted only if the following
39207340Sjkim * conditions are met:
40207340Sjkim *
41207340Sjkim * 3. Conditions
42207340Sjkim *
43207340Sjkim * 3.1. Redistribution of Source with Rights to Further Distribute Source.
44207340Sjkim * Redistribution of source code of any substantial portion of the Covered
45207340Sjkim * Code or modification with rights to further distribute source must include
46207340Sjkim * the above Copyright Notice, the above License, this list of Conditions,
47207340Sjkim * and the following Disclaimer and Export Compliance provision.  In addition,
48207340Sjkim * Licensee must cause all Covered Code to which Licensee contributes to
49207340Sjkim * contain a file documenting the changes Licensee made to create that Covered
50207340Sjkim * Code and the date of any change.  Licensee must include in that file the
51207340Sjkim * documentation of any changes made by any predecessor Licensee.  Licensee
52207340Sjkim * must include a prominent statement that the modification is derived,
53207340Sjkim * directly or indirectly, from Original Intel Code.
54207340Sjkim *
55207340Sjkim * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
56207340Sjkim * Redistribution of source code of any substantial portion of the Covered
57207340Sjkim * Code or modification without rights to further distribute source must
58207340Sjkim * include the following Disclaimer and Export Compliance provision in the
59207340Sjkim * documentation and/or other materials provided with distribution.  In
60207340Sjkim * addition, Licensee may not authorize further sublicense of source of any
61207340Sjkim * portion of the Covered Code, and must include terms to the effect that the
62207340Sjkim * license from Licensee to its licensee is limited to the intellectual
63207340Sjkim * property embodied in the software Licensee provides to its licensee, and
64207340Sjkim * not to intellectual property embodied in modifications its licensee may
65207340Sjkim * make.
66207340Sjkim *
67207340Sjkim * 3.3. Redistribution of Executable. Redistribution in executable form of any
68207340Sjkim * substantial portion of the Covered Code or modification must reproduce the
69207340Sjkim * above Copyright Notice, and the following Disclaimer and Export Compliance
70207340Sjkim * provision in the documentation and/or other materials provided with the
71207340Sjkim * distribution.
72207340Sjkim *
73207340Sjkim * 3.4. Intel retains all right, title, and interest in and to the Original
74207340Sjkim * Intel Code.
75207340Sjkim *
76207340Sjkim * 3.5. Neither the name Intel nor any other trademark owned or controlled by
77207340Sjkim * Intel shall be used in advertising or otherwise to promote the sale, use or
78207340Sjkim * other dealings in products derived from or relating to the Covered Code
79207340Sjkim * without prior written authorization from Intel.
80207340Sjkim *
81207340Sjkim * 4. Disclaimer and Export Compliance
82207340Sjkim *
83207340Sjkim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
84207340Sjkim * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
85207340Sjkim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
86207340Sjkim * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
87207340Sjkim * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
88207340Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
89207340Sjkim * PARTICULAR PURPOSE.
90207340Sjkim *
91207340Sjkim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
92207340Sjkim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
93207340Sjkim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
94207340Sjkim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
95207340Sjkim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
96207340Sjkim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
97207340Sjkim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
98207340Sjkim * LIMITED REMEDY.
99207340Sjkim *
100207340Sjkim * 4.3. Licensee shall not export, either directly or indirectly, any of this
101207340Sjkim * software or system incorporating such software without first obtaining any
102207340Sjkim * required license or other approval from the U. S. Department of Commerce or
103207340Sjkim * any other agency or department of the United States Government.  In the
104207340Sjkim * event Licensee exports any such software from the United States or
105207340Sjkim * re-exports any such software from a foreign destination, Licensee shall
106207340Sjkim * ensure that the distribution and export/re-export of the software is in
107207340Sjkim * compliance with all laws, regulations, orders, or other restrictions of the
108207340Sjkim * U.S. Export Administration Regulations. Licensee agrees that neither it nor
109207340Sjkim * any of its subsidiaries will export/re-export any technical data, process,
110207340Sjkim * software, or service, directly or indirectly, to any country for which the
111207340Sjkim * United States government or any agency thereof requires an export license,
112207340Sjkim * other governmental approval, or letter of assurance, without first obtaining
113207340Sjkim * such license, approval or letter.
114207340Sjkim *
115207340Sjkim *****************************************************************************/
116207340Sjkim
117207340Sjkim
118207344Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h>
119207340Sjkim#include "aslcompiler.y.h"
120207340Sjkim
121207340Sjkim#define _COMPONENT          ACPI_COMPILER
122207340Sjkim        ACPI_MODULE_NAME    ("aslrestype2e")
123207340Sjkim
124207340Sjkim/*
125207340Sjkim * This module contains the Extended (64-bit) address space descriptors:
126207340Sjkim *
127207340Sjkim * ExtendedIO
128207340Sjkim * ExtendedMemory
129207340Sjkim * ExtendedSpace
130207340Sjkim */
131207340Sjkim
132207340Sjkim/*******************************************************************************
133207340Sjkim *
134207340Sjkim * FUNCTION:    RsDoExtendedIoDescriptor
135207340Sjkim *
136207340Sjkim * PARAMETERS:  Op                  - Parent resource descriptor parse node
137207340Sjkim *              CurrentByteOffset   - Offset into the resource template AML
138207340Sjkim *                                    buffer (to track references to the desc)
139207340Sjkim *
140207340Sjkim * RETURN:      Completed resource node
141207340Sjkim *
142207340Sjkim * DESCRIPTION: Construct a long "ExtendedIO" descriptor
143207340Sjkim *
144207340Sjkim ******************************************************************************/
145207340Sjkim
146207340SjkimASL_RESOURCE_NODE *
147207340SjkimRsDoExtendedIoDescriptor (
148207340Sjkim    ACPI_PARSE_OBJECT       *Op,
149207340Sjkim    UINT32                  CurrentByteOffset)
150207340Sjkim{
151207340Sjkim    AML_RESOURCE            *Descriptor;
152207340Sjkim    ACPI_PARSE_OBJECT       *InitializerOp;
153207340Sjkim    ACPI_PARSE_OBJECT       *MinOp = NULL;
154207340Sjkim    ACPI_PARSE_OBJECT       *MaxOp = NULL;
155207340Sjkim    ACPI_PARSE_OBJECT       *LengthOp = NULL;
156207340Sjkim    ACPI_PARSE_OBJECT       *GranOp = NULL;
157207340Sjkim    ASL_RESOURCE_NODE       *Rnode;
158207340Sjkim    UINT16                  StringLength = 0;
159207340Sjkim    UINT32                  i;
160207340Sjkim
161207340Sjkim
162207340Sjkim    InitializerOp = Op->Asl.Child;
163207340Sjkim    StringLength = RsGetStringDataLength (InitializerOp);
164207340Sjkim
165207340Sjkim    Rnode = RsAllocateResourceNode (
166207340Sjkim                sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
167207340Sjkim
168207340Sjkim    Descriptor = Rnode->Buffer;
169207340Sjkim    Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
170207340Sjkim    Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_IO_RANGE;
171207340Sjkim    Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
172207340Sjkim
173207340Sjkim    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
174207340Sjkim        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
175207340Sjkim         sizeof (AML_RESOURCE_LARGE_HEADER));
176207340Sjkim
177207340Sjkim    /* Process all child initialization nodes */
178207340Sjkim
179207340Sjkim    for (i = 0; InitializerOp; i++)
180207340Sjkim    {
181207340Sjkim        switch (i)
182207340Sjkim        {
183207340Sjkim        case 0: /* Resource Usage */
184207340Sjkim
185207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
186207340Sjkim            break;
187207340Sjkim
188207340Sjkim        case 1: /* MinType */
189207340Sjkim
190207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
191207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
192207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
193207340Sjkim            break;
194207340Sjkim
195207340Sjkim        case 2: /* MaxType */
196207340Sjkim
197207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
198207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
199207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
200207340Sjkim            break;
201207340Sjkim
202207340Sjkim        case 3: /* DecodeType */
203207340Sjkim
204207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
205207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
206207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
207207340Sjkim            break;
208207340Sjkim
209207340Sjkim        case 4: /* Range Type */
210207340Sjkim
211207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 3);
212207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
213207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0);
214207340Sjkim            break;
215207340Sjkim
216207340Sjkim        case 5: /* Address Granularity */
217207340Sjkim
218207340Sjkim            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
219207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
220207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
221207340Sjkim            GranOp = InitializerOp;
222207340Sjkim           break;
223207340Sjkim
224207340Sjkim        case 6: /* Address Min */
225207340Sjkim
226207340Sjkim            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
227207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
228207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
229207340Sjkim            MinOp = InitializerOp;
230207340Sjkim            break;
231207340Sjkim
232207340Sjkim        case 7: /* Address Max */
233207340Sjkim
234207340Sjkim            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
235207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
236207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
237207340Sjkim            MaxOp = InitializerOp;
238207340Sjkim            break;
239207340Sjkim
240207340Sjkim        case 8: /* Translation Offset */
241207340Sjkim
242207340Sjkim            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
243207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
244207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
245207340Sjkim            break;
246207340Sjkim
247207340Sjkim        case 9: /* Address Length */
248207340Sjkim
249207340Sjkim            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
250207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
251207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
252207340Sjkim            LengthOp = InitializerOp;
253207340Sjkim            break;
254207340Sjkim
255207340Sjkim        case 10: /* Type-Specific Attributes */
256207340Sjkim
257207340Sjkim            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
258207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
259207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
260207340Sjkim            break;
261207340Sjkim
262207340Sjkim        case 11: /* ResourceTag */
263207340Sjkim
264207340Sjkim            UtAttachNamepathToOwner (Op, InitializerOp);
265207340Sjkim            break;
266207340Sjkim
267207340Sjkim        case 12: /* Type */
268207340Sjkim
269207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 4, 0);
270207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
271207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 4);
272207340Sjkim            break;
273207340Sjkim
274207340Sjkim        case 13: /* Translation Type */
275207340Sjkim
276207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0);
277207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE,
278207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5);
279207340Sjkim            break;
280207340Sjkim
281207340Sjkim        default:
282207340Sjkim
283207340Sjkim            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
284207340Sjkim            break;
285207340Sjkim        }
286207340Sjkim
287207340Sjkim        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
288207340Sjkim    }
289207340Sjkim
290207340Sjkim    /* Validate the Min/Max/Len/Gran values */
291207340Sjkim
292207340Sjkim    RsLargeAddressCheck (
293207340Sjkim        Descriptor->ExtAddress64.Minimum,
294207340Sjkim        Descriptor->ExtAddress64.Maximum,
295207340Sjkim        Descriptor->ExtAddress64.AddressLength,
296207340Sjkim        Descriptor->ExtAddress64.Granularity,
297207340Sjkim        Descriptor->ExtAddress64.Flags,
298207340Sjkim        MinOp, MaxOp, LengthOp, GranOp);
299207340Sjkim
300207340Sjkim    Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
301207340Sjkim    return (Rnode);
302207340Sjkim}
303207340Sjkim
304207340Sjkim
305207340Sjkim/*******************************************************************************
306207340Sjkim *
307207340Sjkim * FUNCTION:    RsDoExtendedMemoryDescriptor
308207340Sjkim *
309207340Sjkim * PARAMETERS:  Op                  - Parent resource descriptor parse node
310207340Sjkim *              CurrentByteOffset   - Offset into the resource template AML
311207340Sjkim *                                    buffer (to track references to the desc)
312207340Sjkim *
313207340Sjkim * RETURN:      Completed resource node
314207340Sjkim *
315207340Sjkim * DESCRIPTION: Construct a long "ExtendedMemory" descriptor
316207340Sjkim *
317207340Sjkim ******************************************************************************/
318207340Sjkim
319207340SjkimASL_RESOURCE_NODE *
320207340SjkimRsDoExtendedMemoryDescriptor (
321207340Sjkim    ACPI_PARSE_OBJECT       *Op,
322207340Sjkim    UINT32                  CurrentByteOffset)
323207340Sjkim{
324207340Sjkim    AML_RESOURCE            *Descriptor;
325207340Sjkim    ACPI_PARSE_OBJECT       *InitializerOp;
326207340Sjkim    ACPI_PARSE_OBJECT       *MinOp = NULL;
327207340Sjkim    ACPI_PARSE_OBJECT       *MaxOp = NULL;
328207340Sjkim    ACPI_PARSE_OBJECT       *LengthOp = NULL;
329207340Sjkim    ACPI_PARSE_OBJECT       *GranOp = NULL;
330207340Sjkim    ASL_RESOURCE_NODE       *Rnode;
331207340Sjkim    UINT16                  StringLength = 0;
332207340Sjkim    UINT32                  i;
333207340Sjkim
334207340Sjkim
335207340Sjkim    InitializerOp = Op->Asl.Child;
336207340Sjkim    StringLength = RsGetStringDataLength (InitializerOp);
337207340Sjkim
338207340Sjkim    Rnode = RsAllocateResourceNode (
339207340Sjkim                sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
340207340Sjkim
341207340Sjkim    Descriptor = Rnode->Buffer;
342207340Sjkim    Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
343207340Sjkim    Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
344207340Sjkim    Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
345207340Sjkim
346207340Sjkim    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
347207340Sjkim        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
348207340Sjkim         sizeof (AML_RESOURCE_LARGE_HEADER));
349207340Sjkim
350207340Sjkim    /* Process all child initialization nodes */
351207340Sjkim
352207340Sjkim    for (i = 0; InitializerOp; i++)
353207340Sjkim    {
354207340Sjkim        switch (i)
355207340Sjkim        {
356207340Sjkim        case 0: /* Resource Usage */
357207340Sjkim
358207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
359207340Sjkim            break;
360207340Sjkim
361207340Sjkim        case 1: /* DecodeType */
362207340Sjkim
363207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
364207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
365207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
366207340Sjkim            break;
367207340Sjkim
368207340Sjkim        case 2: /* MinType */
369207340Sjkim
370207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
371207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
372207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
373207340Sjkim            break;
374207340Sjkim
375207340Sjkim        case 3: /* MaxType */
376207340Sjkim
377207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
378207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
379207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
380207340Sjkim            break;
381207340Sjkim
382207340Sjkim        case 4: /* Memory Type */
383207340Sjkim
384207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 1, 0);
385207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
386207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 1);
387207340Sjkim            break;
388207340Sjkim
389207340Sjkim        case 5: /* Read/Write Type */
390207340Sjkim
391207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 1);
392207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
393207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0);
394207340Sjkim            break;
395207340Sjkim
396207340Sjkim        case 6: /* Address Granularity */
397207340Sjkim
398207340Sjkim            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
399207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
400207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
401207340Sjkim            GranOp = InitializerOp;
402207340Sjkim            break;
403207340Sjkim
404207340Sjkim        case 7: /* Min Address */
405207340Sjkim
406207340Sjkim            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
407207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
408207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
409207340Sjkim            MinOp = InitializerOp;
410207340Sjkim            break;
411207340Sjkim
412207340Sjkim        case 8: /* Max Address */
413207340Sjkim
414207340Sjkim            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
415207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
416207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
417207340Sjkim            MaxOp = InitializerOp;
418207340Sjkim            break;
419207340Sjkim
420207340Sjkim        case 9: /* Translation Offset */
421207340Sjkim
422207340Sjkim            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
423207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
424207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
425207340Sjkim            break;
426207340Sjkim
427207340Sjkim        case 10: /* Address Length */
428207340Sjkim
429207340Sjkim            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
430207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
431207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
432207340Sjkim            LengthOp = InitializerOp;
433207340Sjkim            break;
434207340Sjkim
435207340Sjkim        case 11: /* Type-Specific Attributes */
436207340Sjkim
437207340Sjkim            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
438207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
439207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
440207340Sjkim            break;
441207340Sjkim
442207340Sjkim        case 12: /* ResourceTag */
443207340Sjkim
444207340Sjkim            UtAttachNamepathToOwner (Op, InitializerOp);
445207340Sjkim            break;
446207340Sjkim
447207340Sjkim
448207340Sjkim        case 13: /* Address Range */
449207340Sjkim
450207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 3, 0);
451207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
452207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3);
453207340Sjkim            break;
454207340Sjkim
455207340Sjkim        case 14: /* Type */
456207340Sjkim
457207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0);
458207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
459207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5);
460207340Sjkim            break;
461207340Sjkim
462207340Sjkim        default:
463207340Sjkim
464207340Sjkim            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
465207340Sjkim            break;
466207340Sjkim        }
467207340Sjkim
468207340Sjkim        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
469207340Sjkim    }
470207340Sjkim
471207340Sjkim    /* Validate the Min/Max/Len/Gran values */
472207340Sjkim
473207340Sjkim    RsLargeAddressCheck (
474207340Sjkim        Descriptor->ExtAddress64.Minimum,
475207340Sjkim        Descriptor->ExtAddress64.Maximum,
476207340Sjkim        Descriptor->ExtAddress64.AddressLength,
477207340Sjkim        Descriptor->ExtAddress64.Granularity,
478207340Sjkim        Descriptor->ExtAddress64.Flags,
479207340Sjkim        MinOp, MaxOp, LengthOp, GranOp);
480207340Sjkim
481207340Sjkim    Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
482207340Sjkim    return (Rnode);
483207340Sjkim}
484207340Sjkim
485207340Sjkim
486207340Sjkim/*******************************************************************************
487207340Sjkim *
488207340Sjkim * FUNCTION:    RsDoExtendedSpaceDescriptor
489207340Sjkim *
490207340Sjkim * PARAMETERS:  Op                  - Parent resource descriptor parse node
491207340Sjkim *              CurrentByteOffset   - Offset into the resource template AML
492207340Sjkim *                                    buffer (to track references to the desc)
493207340Sjkim *
494207340Sjkim * RETURN:      Completed resource node
495207340Sjkim *
496207340Sjkim * DESCRIPTION: Construct a long "ExtendedSpace" descriptor
497207340Sjkim *
498207340Sjkim ******************************************************************************/
499207340Sjkim
500207340SjkimASL_RESOURCE_NODE *
501207340SjkimRsDoExtendedSpaceDescriptor (
502207340Sjkim    ACPI_PARSE_OBJECT       *Op,
503207340Sjkim    UINT32                  CurrentByteOffset)
504207340Sjkim{
505207340Sjkim    AML_RESOURCE            *Descriptor;
506207340Sjkim    ACPI_PARSE_OBJECT       *InitializerOp;
507207340Sjkim    ACPI_PARSE_OBJECT       *MinOp = NULL;
508207340Sjkim    ACPI_PARSE_OBJECT       *MaxOp = NULL;
509207340Sjkim    ACPI_PARSE_OBJECT       *LengthOp = NULL;
510207340Sjkim    ACPI_PARSE_OBJECT       *GranOp = NULL;
511207340Sjkim    ASL_RESOURCE_NODE       *Rnode;
512207340Sjkim    UINT16                  StringLength = 0;
513207340Sjkim    UINT32                  i;
514207340Sjkim
515207340Sjkim
516207340Sjkim    InitializerOp = Op->Asl.Child;
517207340Sjkim    StringLength = RsGetStringDataLength (InitializerOp);
518207340Sjkim
519207340Sjkim    Rnode = RsAllocateResourceNode (
520207340Sjkim                sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
521207340Sjkim
522207340Sjkim    Descriptor = Rnode->Buffer;
523207340Sjkim    Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
524207340Sjkim    Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
525207340Sjkim
526207340Sjkim    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
527207340Sjkim        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
528207340Sjkim         sizeof (AML_RESOURCE_LARGE_HEADER));
529207340Sjkim
530207340Sjkim    /* Process all child initialization nodes */
531207340Sjkim
532207340Sjkim    for (i = 0; InitializerOp; i++)
533207340Sjkim    {
534207340Sjkim        switch (i)
535207340Sjkim        {
536207340Sjkim        case 0: /* Resource Type */
537207340Sjkim
538207340Sjkim            Descriptor->ExtAddress64.ResourceType =
539207340Sjkim                (UINT8) InitializerOp->Asl.Value.Integer;
540207340Sjkim            break;
541207340Sjkim
542207340Sjkim        case 1: /* Resource Usage */
543207340Sjkim
544207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
545207340Sjkim            break;
546207340Sjkim
547207340Sjkim        case 2: /* DecodeType */
548207340Sjkim
549207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
550207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
551207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
552207340Sjkim            break;
553207340Sjkim
554207340Sjkim        case 3: /* MinType */
555207340Sjkim
556207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
557207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
558207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
559207340Sjkim            break;
560207340Sjkim
561207340Sjkim        case 4: /* MaxType */
562207340Sjkim
563207340Sjkim            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
564207340Sjkim            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
565207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
566207340Sjkim            break;
567207340Sjkim
568207340Sjkim        case 5: /* Type-Specific flags */
569207340Sjkim
570207340Sjkim            Descriptor->ExtAddress64.SpecificFlags =
571207340Sjkim                (UINT8) InitializerOp->Asl.Value.Integer;
572207340Sjkim            break;
573207340Sjkim
574207340Sjkim        case 6: /* Address Granularity */
575207340Sjkim
576207340Sjkim            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
577207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,
578207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
579207340Sjkim            GranOp = InitializerOp;
580207340Sjkim            break;
581207340Sjkim
582207340Sjkim        case 7: /* Min Address */
583207340Sjkim
584207340Sjkim            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
585207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,
586207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
587207340Sjkim            MinOp = InitializerOp;
588207340Sjkim            break;
589207340Sjkim
590207340Sjkim        case 8: /* Max Address */
591207340Sjkim
592207340Sjkim            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
593207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,
594207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
595207340Sjkim            MaxOp = InitializerOp;
596207340Sjkim            break;
597207340Sjkim
598207340Sjkim        case 9: /* Translation Offset */
599207340Sjkim
600207340Sjkim            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
601207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
602207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
603207340Sjkim            break;
604207340Sjkim
605207340Sjkim        case 10: /* Address Length */
606207340Sjkim
607207340Sjkim            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
608207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,
609207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
610207340Sjkim            LengthOp = InitializerOp;
611207340Sjkim            break;
612207340Sjkim
613207340Sjkim        case 11: /* Type-Specific Attributes */
614207340Sjkim
615207340Sjkim            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
616207340Sjkim            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
617207340Sjkim                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
618207340Sjkim            break;
619207340Sjkim
620207340Sjkim        case 12: /* ResourceTag */
621207340Sjkim
622207340Sjkim            UtAttachNamepathToOwner (Op, InitializerOp);
623207340Sjkim            break;
624207340Sjkim
625207340Sjkim        default:
626207340Sjkim
627207340Sjkim            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
628207340Sjkim            break;
629207340Sjkim        }
630207340Sjkim
631207340Sjkim        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
632207340Sjkim    }
633207340Sjkim
634207340Sjkim    /* Validate the Min/Max/Len/Gran values */
635207340Sjkim
636207340Sjkim    RsLargeAddressCheck (
637207340Sjkim        Descriptor->ExtAddress64.Minimum,
638207340Sjkim        Descriptor->ExtAddress64.Maximum,
639207340Sjkim        Descriptor->ExtAddress64.AddressLength,
640207340Sjkim        Descriptor->ExtAddress64.Granularity,
641207340Sjkim        Descriptor->ExtAddress64.Flags,
642207340Sjkim        MinOp, MaxOp, LengthOp, GranOp);
643207340Sjkim
644207340Sjkim    Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
645207340Sjkim    return (Rnode);
646207340Sjkim}
647