1118611Snjl/****************************************************************************** 2118611Snjl * 3207344Sjkim * Module Name: aslrestype1 - Miscellaneous small resource descriptors 4118611Snjl * 5118611Snjl *****************************************************************************/ 6118611Snjl 7217365Sjkim/* 8281075Sdim * Copyright (C) 2000 - 2015, Intel Corp. 9118611Snjl * All rights reserved. 10118611Snjl * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25118611Snjl * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29118611Snjl * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43118611Snjl 44151937Sjkim#include <contrib/dev/acpica/compiler/aslcompiler.h> 45118611Snjl#include "aslcompiler.y.h" 46118611Snjl 47118611Snjl#define _COMPONENT ACPI_COMPILER 48118611Snjl ACPI_MODULE_NAME ("aslrestype1") 49118611Snjl 50207344Sjkim/* 51207344Sjkim * This module contains miscellaneous small resource descriptors: 52207344Sjkim * 53207344Sjkim * EndTag 54207344Sjkim * EndDependentFn 55207344Sjkim * Memory24 56207344Sjkim * Memory32 57207344Sjkim * Memory32Fixed 58207344Sjkim * StartDependentFn 59207344Sjkim * StartDependentFnNoPri 60207344Sjkim * VendorShort 61207344Sjkim */ 62118611Snjl 63118611Snjl/******************************************************************************* 64118611Snjl * 65167802Sjkim * FUNCTION: RsDoEndTagDescriptor 66167802Sjkim * 67281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 68167802Sjkim * 69167802Sjkim * RETURN: Completed resource node 70167802Sjkim * 71167802Sjkim * DESCRIPTION: Construct a short "EndDependentFn" descriptor 72167802Sjkim * 73167802Sjkim ******************************************************************************/ 74167802Sjkim 75167802SjkimASL_RESOURCE_NODE * 76167802SjkimRsDoEndTagDescriptor ( 77281075Sdim ASL_RESOURCE_INFO *Info) 78167802Sjkim{ 79167802Sjkim AML_RESOURCE *Descriptor; 80167802Sjkim ASL_RESOURCE_NODE *Rnode; 81167802Sjkim 82167802Sjkim 83167802Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_TAG)); 84167802Sjkim 85167802Sjkim Descriptor = Rnode->Buffer; 86167802Sjkim Descriptor->EndTag.DescriptorType = ACPI_RESOURCE_NAME_END_TAG | 87167802Sjkim ASL_RDESC_END_TAG_SIZE; 88167802Sjkim Descriptor->EndTag.Checksum = 0; 89167802Sjkim 90167802Sjkim return (Rnode); 91167802Sjkim} 92167802Sjkim 93167802Sjkim 94167802Sjkim/******************************************************************************* 95167802Sjkim * 96118611Snjl * FUNCTION: RsDoEndDependentDescriptor 97118611Snjl * 98281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 99118611Snjl * 100118611Snjl * RETURN: Completed resource node 101118611Snjl * 102118611Snjl * DESCRIPTION: Construct a short "EndDependentFn" descriptor 103118611Snjl * 104118611Snjl ******************************************************************************/ 105118611Snjl 106118611SnjlASL_RESOURCE_NODE * 107118611SnjlRsDoEndDependentDescriptor ( 108281075Sdim ASL_RESOURCE_INFO *Info) 109118611Snjl{ 110151937Sjkim AML_RESOURCE *Descriptor; 111118611Snjl ASL_RESOURCE_NODE *Rnode; 112118611Snjl 113118611Snjl 114151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_DEPENDENT)); 115118611Snjl 116118611Snjl Descriptor = Rnode->Buffer; 117151937Sjkim Descriptor->EndDpf.DescriptorType = ACPI_RESOURCE_NAME_END_DEPENDENT | 118151937Sjkim ASL_RDESC_END_DEPEND_SIZE; 119118611Snjl return (Rnode); 120118611Snjl} 121118611Snjl 122118611Snjl 123118611Snjl/******************************************************************************* 124118611Snjl * 125118611Snjl * FUNCTION: RsDoMemory24Descriptor 126118611Snjl * 127281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 128118611Snjl * 129118611Snjl * RETURN: Completed resource node 130118611Snjl * 131118611Snjl * DESCRIPTION: Construct a short "Memory24" descriptor 132118611Snjl * 133118611Snjl ******************************************************************************/ 134118611Snjl 135118611SnjlASL_RESOURCE_NODE * 136118611SnjlRsDoMemory24Descriptor ( 137281075Sdim ASL_RESOURCE_INFO *Info) 138118611Snjl{ 139151937Sjkim AML_RESOURCE *Descriptor; 140118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 141207344Sjkim ACPI_PARSE_OBJECT *MinOp = NULL; 142207344Sjkim ACPI_PARSE_OBJECT *MaxOp = NULL; 143207344Sjkim ACPI_PARSE_OBJECT *LengthOp = NULL; 144118611Snjl ASL_RESOURCE_NODE *Rnode; 145281075Sdim UINT32 CurrentByteOffset; 146118611Snjl UINT32 i; 147118611Snjl 148118611Snjl 149281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 150281075Sdim CurrentByteOffset = Info->CurrentByteOffset; 151151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY24)); 152118611Snjl 153118611Snjl Descriptor = Rnode->Buffer; 154151937Sjkim Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24; 155151937Sjkim Descriptor->Memory24.ResourceLength = 9; 156118611Snjl 157151937Sjkim /* Process all child initialization nodes */ 158151937Sjkim 159118611Snjl for (i = 0; InitializerOp; i++) 160118611Snjl { 161118611Snjl switch (i) 162118611Snjl { 163118611Snjl case 0: /* Read/Write type */ 164118611Snjl 165151937Sjkim RsSetFlagBits (&Descriptor->Memory24.Flags, InitializerOp, 0, 1); 166167802Sjkim RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, 167151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Flags), 0); 168118611Snjl break; 169118611Snjl 170118611Snjl case 1: /* Min Address */ 171118611Snjl 172151937Sjkim Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; 173228110Sjkim RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, 174151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum)); 175207344Sjkim MinOp = InitializerOp; 176118611Snjl break; 177118611Snjl 178118611Snjl case 2: /* Max Address */ 179118611Snjl 180151937Sjkim Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; 181228110Sjkim RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, 182151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum)); 183207344Sjkim MaxOp = InitializerOp; 184118611Snjl break; 185118611Snjl 186118611Snjl case 3: /* Alignment */ 187118611Snjl 188151937Sjkim Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer; 189228110Sjkim RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, 190151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment)); 191118611Snjl break; 192118611Snjl 193118611Snjl case 4: /* Length */ 194118611Snjl 195151937Sjkim Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; 196228110Sjkim RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, 197151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength)); 198207344Sjkim LengthOp = InitializerOp; 199118611Snjl break; 200118611Snjl 201118611Snjl case 5: /* Name */ 202118611Snjl 203281075Sdim UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); 204118611Snjl break; 205118611Snjl 206118611Snjl default: 207118611Snjl 208118611Snjl AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); 209118611Snjl break; 210118611Snjl } 211118611Snjl 212118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 213118611Snjl } 214118611Snjl 215207344Sjkim /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */ 216207344Sjkim 217207344Sjkim RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24, 218207344Sjkim Descriptor->Memory24.Minimum, 219207344Sjkim Descriptor->Memory24.Maximum, 220207344Sjkim Descriptor->Memory24.AddressLength, 221207344Sjkim Descriptor->Memory24.Alignment, 222281075Sdim MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp); 223207344Sjkim 224118611Snjl return (Rnode); 225118611Snjl} 226118611Snjl 227118611Snjl 228118611Snjl/******************************************************************************* 229118611Snjl * 230118611Snjl * FUNCTION: RsDoMemory32Descriptor 231118611Snjl * 232281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 233118611Snjl * 234118611Snjl * RETURN: Completed resource node 235118611Snjl * 236118611Snjl * DESCRIPTION: Construct a short "Memory32" descriptor 237118611Snjl * 238118611Snjl ******************************************************************************/ 239118611Snjl 240118611SnjlASL_RESOURCE_NODE * 241118611SnjlRsDoMemory32Descriptor ( 242281075Sdim ASL_RESOURCE_INFO *Info) 243118611Snjl{ 244151937Sjkim AML_RESOURCE *Descriptor; 245118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 246207344Sjkim ACPI_PARSE_OBJECT *MinOp = NULL; 247207344Sjkim ACPI_PARSE_OBJECT *MaxOp = NULL; 248207344Sjkim ACPI_PARSE_OBJECT *LengthOp = NULL; 249207344Sjkim ACPI_PARSE_OBJECT *AlignOp = NULL; 250118611Snjl ASL_RESOURCE_NODE *Rnode; 251281075Sdim UINT32 CurrentByteOffset; 252118611Snjl UINT32 i; 253118611Snjl 254118611Snjl 255281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 256281075Sdim CurrentByteOffset = Info->CurrentByteOffset; 257151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY32)); 258118611Snjl 259118611Snjl Descriptor = Rnode->Buffer; 260151937Sjkim Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32; 261151937Sjkim Descriptor->Memory32.ResourceLength = 17; 262118611Snjl 263151937Sjkim /* Process all child initialization nodes */ 264151937Sjkim 265118611Snjl for (i = 0; InitializerOp; i++) 266118611Snjl { 267118611Snjl switch (i) 268118611Snjl { 269118611Snjl case 0: /* Read/Write type */ 270118611Snjl 271151937Sjkim RsSetFlagBits (&Descriptor->Memory32.Flags, InitializerOp, 0, 1); 272167802Sjkim RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, 273151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Flags), 0); 274118611Snjl break; 275118611Snjl 276118611Snjl case 1: /* Min Address */ 277118611Snjl 278151937Sjkim Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; 279228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, 280151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum)); 281207344Sjkim MinOp = InitializerOp; 282118611Snjl break; 283118611Snjl 284118611Snjl case 2: /* Max Address */ 285118611Snjl 286151937Sjkim Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; 287228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, 288151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum)); 289207344Sjkim MaxOp = InitializerOp; 290118611Snjl break; 291118611Snjl 292118611Snjl case 3: /* Alignment */ 293118611Snjl 294151937Sjkim Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer; 295228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, 296151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment)); 297207344Sjkim AlignOp = InitializerOp; 298118611Snjl break; 299118611Snjl 300118611Snjl case 4: /* Length */ 301118611Snjl 302151937Sjkim Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; 303228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, 304151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength)); 305207344Sjkim LengthOp = InitializerOp; 306118611Snjl break; 307118611Snjl 308118611Snjl case 5: /* Name */ 309118611Snjl 310281075Sdim UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); 311118611Snjl break; 312118611Snjl 313118611Snjl default: 314118611Snjl 315118611Snjl AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); 316118611Snjl break; 317118611Snjl } 318118611Snjl 319118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 320118611Snjl } 321118611Snjl 322207344Sjkim /* Validate the Min/Max/Len/Align values */ 323207344Sjkim 324207344Sjkim RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32, 325207344Sjkim Descriptor->Memory32.Minimum, 326207344Sjkim Descriptor->Memory32.Maximum, 327207344Sjkim Descriptor->Memory32.AddressLength, 328207344Sjkim Descriptor->Memory32.Alignment, 329281075Sdim MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp); 330207344Sjkim 331118611Snjl return (Rnode); 332118611Snjl} 333118611Snjl 334118611Snjl 335118611Snjl/******************************************************************************* 336118611Snjl * 337118611Snjl * FUNCTION: RsDoMemory32FixedDescriptor 338118611Snjl * 339281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 340118611Snjl * 341118611Snjl * RETURN: Completed resource node 342118611Snjl * 343118611Snjl * DESCRIPTION: Construct a short "Memory32Fixed" descriptor 344118611Snjl * 345118611Snjl ******************************************************************************/ 346118611Snjl 347118611SnjlASL_RESOURCE_NODE * 348118611SnjlRsDoMemory32FixedDescriptor ( 349281075Sdim ASL_RESOURCE_INFO *Info) 350118611Snjl{ 351151937Sjkim AML_RESOURCE *Descriptor; 352118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 353118611Snjl ASL_RESOURCE_NODE *Rnode; 354281075Sdim UINT32 CurrentByteOffset; 355118611Snjl UINT32 i; 356118611Snjl 357118611Snjl 358281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 359281075Sdim CurrentByteOffset = Info->CurrentByteOffset; 360151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_MEMORY32)); 361118611Snjl 362118611Snjl Descriptor = Rnode->Buffer; 363151937Sjkim Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32; 364151937Sjkim Descriptor->FixedMemory32.ResourceLength = 9; 365118611Snjl 366151937Sjkim /* Process all child initialization nodes */ 367151937Sjkim 368118611Snjl for (i = 0; InitializerOp; i++) 369118611Snjl { 370118611Snjl switch (i) 371118611Snjl { 372118611Snjl case 0: /* Read/Write type */ 373118611Snjl 374151937Sjkim RsSetFlagBits (&Descriptor->FixedMemory32.Flags, InitializerOp, 0, 1); 375167802Sjkim RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE, 376151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Flags), 0); 377118611Snjl break; 378118611Snjl 379118611Snjl case 1: /* Address */ 380118611Snjl 381151937Sjkim Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer; 382228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS, 383151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address)); 384118611Snjl break; 385118611Snjl 386118611Snjl case 2: /* Length */ 387118611Snjl 388151937Sjkim Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; 389228110Sjkim RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, 390151937Sjkim CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength)); 391118611Snjl break; 392118611Snjl 393118611Snjl case 3: /* Name */ 394118611Snjl 395281075Sdim UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp); 396118611Snjl break; 397118611Snjl 398118611Snjl default: 399118611Snjl 400118611Snjl AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL); 401118611Snjl break; 402118611Snjl } 403118611Snjl 404118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 405118611Snjl } 406118611Snjl 407118611Snjl return (Rnode); 408118611Snjl} 409118611Snjl 410118611Snjl 411118611Snjl/******************************************************************************* 412118611Snjl * 413118611Snjl * FUNCTION: RsDoStartDependentDescriptor 414118611Snjl * 415281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 416118611Snjl * 417118611Snjl * RETURN: Completed resource node 418118611Snjl * 419118611Snjl * DESCRIPTION: Construct a short "StartDependentFn" descriptor 420118611Snjl * 421118611Snjl ******************************************************************************/ 422118611Snjl 423118611SnjlASL_RESOURCE_NODE * 424118611SnjlRsDoStartDependentDescriptor ( 425281075Sdim ASL_RESOURCE_INFO *Info) 426118611Snjl{ 427151937Sjkim AML_RESOURCE *Descriptor; 428118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 429118611Snjl ASL_RESOURCE_NODE *Rnode; 430118611Snjl ASL_RESOURCE_NODE *PreviousRnode; 431118611Snjl ASL_RESOURCE_NODE *NextRnode; 432281075Sdim ASL_RESOURCE_INFO NextInfo; 433281075Sdim UINT32 CurrentByteOffset; 434118611Snjl UINT32 i; 435118611Snjl UINT8 State; 436118611Snjl 437118611Snjl 438281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 439281075Sdim CurrentByteOffset = Info->CurrentByteOffset; 440151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT)); 441118611Snjl 442118611Snjl PreviousRnode = Rnode; 443118611Snjl Descriptor = Rnode->Buffer; 444118611Snjl 445234623Sjkim /* Increment offset past StartDependent descriptor */ 446234623Sjkim 447234623Sjkim CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT); 448234623Sjkim 449118611Snjl /* Descriptor has priority byte */ 450118611Snjl 451151937Sjkim Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT | 452151937Sjkim (ASL_RDESC_ST_DEPEND_SIZE + 0x01); 453118611Snjl 454151937Sjkim /* Process all child initialization nodes */ 455151937Sjkim 456118611Snjl State = ACPI_RSTATE_START_DEPENDENT; 457118611Snjl for (i = 0; InitializerOp; i++) 458118611Snjl { 459118611Snjl switch (i) 460118611Snjl { 461118611Snjl case 0: /* Compatibility Priority */ 462118611Snjl 463118611Snjl if ((UINT8) InitializerOp->Asl.Value.Integer > 2) 464118611Snjl { 465151937Sjkim AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY, 466151937Sjkim InitializerOp, NULL); 467118611Snjl } 468118611Snjl 469151937Sjkim RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 0, 0); 470118611Snjl break; 471118611Snjl 472118611Snjl case 1: /* Performance/Robustness Priority */ 473118611Snjl 474118611Snjl if ((UINT8) InitializerOp->Asl.Value.Integer > 2) 475118611Snjl { 476151937Sjkim AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE, 477151937Sjkim InitializerOp, NULL); 478118611Snjl } 479118611Snjl 480151937Sjkim RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 2, 0); 481118611Snjl break; 482118611Snjl 483118611Snjl default: 484207344Sjkim 485281075Sdim NextInfo.CurrentByteOffset = CurrentByteOffset; 486281075Sdim NextInfo.DescriptorTypeOp = InitializerOp; 487118611Snjl 488281075Sdim NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State); 489281075Sdim 490118611Snjl /* 491118611Snjl * Update current byte offset to indicate the number of bytes from the 492241973Sjkim * start of the buffer. Buffer can include multiple descriptors, we 493118611Snjl * must keep track of the offset of not only each descriptor, but each 494118611Snjl * element (field) within each descriptor as well. 495118611Snjl */ 496151937Sjkim CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, 497151937Sjkim NextRnode); 498118611Snjl break; 499118611Snjl } 500118611Snjl 501118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 502118611Snjl } 503118611Snjl 504118611Snjl return (Rnode); 505118611Snjl} 506118611Snjl 507118611Snjl 508118611Snjl/******************************************************************************* 509118611Snjl * 510118611Snjl * FUNCTION: RsDoStartDependentNoPriDescriptor 511118611Snjl * 512281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 513118611Snjl * 514118611Snjl * RETURN: Completed resource node 515118611Snjl * 516118611Snjl * DESCRIPTION: Construct a short "StartDependentNoPri" descriptor 517118611Snjl * 518118611Snjl ******************************************************************************/ 519118611Snjl 520118611SnjlASL_RESOURCE_NODE * 521118611SnjlRsDoStartDependentNoPriDescriptor ( 522281075Sdim ASL_RESOURCE_INFO *Info) 523118611Snjl{ 524151937Sjkim AML_RESOURCE *Descriptor; 525118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 526118611Snjl ASL_RESOURCE_NODE *Rnode; 527118611Snjl ASL_RESOURCE_NODE *PreviousRnode; 528118611Snjl ASL_RESOURCE_NODE *NextRnode; 529281075Sdim ASL_RESOURCE_INFO NextInfo; 530281075Sdim UINT32 CurrentByteOffset; 531118611Snjl UINT8 State; 532118611Snjl 533118611Snjl 534281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 535281075Sdim CurrentByteOffset = Info->CurrentByteOffset; 536151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO)); 537118611Snjl 538118611Snjl Descriptor = Rnode->Buffer; 539151937Sjkim Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT | 540151937Sjkim ASL_RDESC_ST_DEPEND_SIZE; 541118611Snjl PreviousRnode = Rnode; 542118611Snjl 543234623Sjkim /* Increment offset past StartDependentNoPri descriptor */ 544234623Sjkim 545234623Sjkim CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO); 546234623Sjkim 547151937Sjkim /* Process all child initialization nodes */ 548151937Sjkim 549118611Snjl State = ACPI_RSTATE_START_DEPENDENT; 550118611Snjl while (InitializerOp) 551118611Snjl { 552281075Sdim NextInfo.CurrentByteOffset = CurrentByteOffset; 553281075Sdim NextInfo.DescriptorTypeOp = InitializerOp; 554118611Snjl 555281075Sdim NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State); 556281075Sdim 557118611Snjl /* 558118611Snjl * Update current byte offset to indicate the number of bytes from the 559241973Sjkim * start of the buffer. Buffer can include multiple descriptors, we 560118611Snjl * must keep track of the offset of not only each descriptor, but each 561118611Snjl * element (field) within each descriptor as well. 562118611Snjl */ 563118611Snjl CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode); 564118611Snjl 565118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 566118611Snjl } 567118611Snjl 568118611Snjl return (Rnode); 569118611Snjl} 570118611Snjl 571118611Snjl 572118611Snjl/******************************************************************************* 573118611Snjl * 574118611Snjl * FUNCTION: RsDoVendorSmallDescriptor 575118611Snjl * 576281075Sdim * PARAMETERS: Info - Parse Op and resource template offset 577118611Snjl * 578118611Snjl * RETURN: Completed resource node 579118611Snjl * 580118611Snjl * DESCRIPTION: Construct a short "VendorShort" descriptor 581118611Snjl * 582118611Snjl ******************************************************************************/ 583118611Snjl 584118611SnjlASL_RESOURCE_NODE * 585118611SnjlRsDoVendorSmallDescriptor ( 586281075Sdim ASL_RESOURCE_INFO *Info) 587118611Snjl{ 588151937Sjkim AML_RESOURCE *Descriptor; 589118611Snjl ACPI_PARSE_OBJECT *InitializerOp; 590118611Snjl ASL_RESOURCE_NODE *Rnode; 591151937Sjkim UINT8 *VendorData; 592118611Snjl UINT32 i; 593118611Snjl 594118611Snjl 595281075Sdim InitializerOp = Info->DescriptorTypeOp->Asl.Child; 596118611Snjl 597151937Sjkim /* Allocate worst case - 7 vendor bytes */ 598151937Sjkim 599151937Sjkim Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_SMALL) + 7); 600151937Sjkim 601118611Snjl Descriptor = Rnode->Buffer; 602151937Sjkim Descriptor->VendorSmall.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_SMALL; 603151937Sjkim VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_SMALL_HEADER); 604118611Snjl 605151937Sjkim /* Process all child initialization nodes */ 606151937Sjkim 607118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 608151937Sjkim for (i = 0; InitializerOp; i++) 609118611Snjl { 610167802Sjkim if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) 611167802Sjkim { 612167802Sjkim break; 613167802Sjkim } 614167802Sjkim 615151937Sjkim /* Maximum 7 vendor data bytes allowed (0-6) */ 616151937Sjkim 617151937Sjkim if (i >= 7) 618151937Sjkim { 619151937Sjkim AslError (ASL_ERROR, ASL_MSG_VENDOR_LIST, InitializerOp, NULL); 620151937Sjkim 621151937Sjkim /* Eat the excess initializers */ 622151937Sjkim 623151937Sjkim while (InitializerOp) 624151937Sjkim { 625151937Sjkim InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 626151937Sjkim } 627151937Sjkim break; 628151937Sjkim } 629151937Sjkim 630151937Sjkim VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer; 631118611Snjl InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); 632118611Snjl } 633118611Snjl 634118611Snjl /* Adjust the Rnode buffer size, so correct number of bytes are emitted */ 635118611Snjl 636118611Snjl Rnode->BufferLength -= (7 - i); 637118611Snjl 638118611Snjl /* Set the length in the Type Tag */ 639118611Snjl 640151937Sjkim Descriptor->VendorSmall.DescriptorType |= (UINT8) i; 641118611Snjl return (Rnode); 642118611Snjl} 643