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