1 /******************************************************************************
3 * Module Name: aslrestype2q - Large QWord address resource descriptors
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2015, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
44 #include "aslcompiler.h"
45 #include "aslcompiler.y.h"
47 #define _COMPONENT ACPI_COMPILER
48 ACPI_MODULE_NAME ("aslrestype2q")
51 * This module contains the QWord (64-bit) address space descriptors:
58 /*******************************************************************************
60 * FUNCTION: RsDoQwordIoDescriptor
62 * PARAMETERS: Info - Parse Op and resource template offset
64 * RETURN: Completed resource node
66 * DESCRIPTION: Construct a long "QwordIO" descriptor
68 ******************************************************************************/
71 RsDoQwordIoDescriptor (
72 ASL_RESOURCE_INFO *Info)
74 AML_RESOURCE *Descriptor;
75 ACPI_PARSE_OBJECT *InitializerOp;
76 ACPI_PARSE_OBJECT *MinOp = NULL;
77 ACPI_PARSE_OBJECT *MaxOp = NULL;
78 ACPI_PARSE_OBJECT *LengthOp = NULL;
79 ACPI_PARSE_OBJECT *GranOp = NULL;
80 ASL_RESOURCE_NODE *Rnode;
81 UINT8 *OptionalFields;
82 UINT16 StringLength = 0;
83 UINT32 OptionIndex = 0;
84 UINT32 CurrentByteOffset;
86 BOOLEAN ResSourceIndex = FALSE;
89 InitializerOp = Info->DescriptorTypeOp->Asl.Child;
90 StringLength = RsGetStringDataLength (InitializerOp);
91 CurrentByteOffset = Info->CurrentByteOffset;
93 Rnode = RsAllocateResourceNode (
94 sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
96 Descriptor = Rnode->Buffer;
97 Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64;
98 Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
101 * Initial descriptor length -- may be enlarged if there are
102 * optional fields present
104 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
105 Descriptor->Address64.ResourceLength = (UINT16)
106 (sizeof (AML_RESOURCE_ADDRESS64) -
107 sizeof (AML_RESOURCE_LARGE_HEADER));
109 /* Process all child initialization nodes */
111 for (i = 0; InitializerOp; i++)
115 case 0: /* Resource Usage */
117 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
120 case 1: /* MinType */
122 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
123 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
124 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
127 case 2: /* MaxType */
129 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
130 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
131 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
134 case 3: /* DecodeType */
136 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
137 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
138 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
141 case 4: /* Range Type */
143 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 3);
144 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
145 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0, 2);
148 case 5: /* Address Granularity */
150 Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
151 RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
152 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
153 GranOp = InitializerOp;
156 case 6: /* Address Min */
158 Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
159 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
160 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
161 MinOp = InitializerOp;
164 case 7: /* Address Max */
166 Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
167 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
168 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
169 MaxOp = InitializerOp;
172 case 8: /* Translation Offset */
174 Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
175 RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
176 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
179 case 9: /* Address Length */
181 Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
182 RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
183 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
184 LengthOp = InitializerOp;
187 case 10: /* ResSourceIndex [Optional Field - BYTE] */
189 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
191 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
193 Descriptor->Address64.ResourceLength++;
194 ResSourceIndex = TRUE;
198 case 11: /* ResSource [Optional Field - STRING] */
200 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
201 (InitializerOp->Asl.Value.String))
205 Descriptor->Address64.ResourceLength = (UINT16)
206 (Descriptor->Address64.ResourceLength + StringLength);
209 &OptionalFields[OptionIndex],
210 InitializerOp->Asl.Value.String);
212 /* ResourceSourceIndex must also be valid */
216 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
217 InitializerOp, NULL);
224 * Not a valid ResourceSource, ResourceSourceIndex must also
227 else if (ResSourceIndex)
229 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
230 InitializerOp, NULL);
235 case 12: /* ResourceTag */
237 UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
242 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 4, 0);
243 RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
244 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 4);
247 case 14: /* Translation Type */
249 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0);
250 RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE,
251 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5);
256 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
260 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
263 /* Validate the Min/Max/Len/Gran values */
265 RsLargeAddressCheck (
266 Descriptor->Address64.Minimum,
267 Descriptor->Address64.Maximum,
268 Descriptor->Address64.AddressLength,
269 Descriptor->Address64.Granularity,
270 Descriptor->Address64.Flags,
271 MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
273 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
274 OptionIndex + StringLength;
279 /*******************************************************************************
281 * FUNCTION: RsDoQwordMemoryDescriptor
283 * PARAMETERS: Info - Parse Op and resource template offset
285 * RETURN: Completed resource node
287 * DESCRIPTION: Construct a long "QwordMemory" descriptor
289 ******************************************************************************/
292 RsDoQwordMemoryDescriptor (
293 ASL_RESOURCE_INFO *Info)
295 AML_RESOURCE *Descriptor;
296 ACPI_PARSE_OBJECT *InitializerOp;
297 ACPI_PARSE_OBJECT *MinOp = NULL;
298 ACPI_PARSE_OBJECT *MaxOp = NULL;
299 ACPI_PARSE_OBJECT *LengthOp = NULL;
300 ACPI_PARSE_OBJECT *GranOp = NULL;
301 ASL_RESOURCE_NODE *Rnode;
302 UINT8 *OptionalFields;
303 UINT16 StringLength = 0;
304 UINT32 OptionIndex = 0;
305 UINT32 CurrentByteOffset;
307 BOOLEAN ResSourceIndex = FALSE;
310 InitializerOp = Info->DescriptorTypeOp->Asl.Child;
311 StringLength = RsGetStringDataLength (InitializerOp);
312 CurrentByteOffset = Info->CurrentByteOffset;
314 Rnode = RsAllocateResourceNode (
315 sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
317 Descriptor = Rnode->Buffer;
318 Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64;
319 Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
322 * Initial descriptor length -- may be enlarged if there are
323 * optional fields present
325 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
326 Descriptor->Address64.ResourceLength = (UINT16)
327 (sizeof (AML_RESOURCE_ADDRESS64) -
328 sizeof (AML_RESOURCE_LARGE_HEADER));
330 /* Process all child initialization nodes */
332 for (i = 0; InitializerOp; i++)
336 case 0: /* Resource Usage */
338 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
341 case 1: /* DecodeType */
343 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
344 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
345 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
348 case 2: /* MinType */
350 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
351 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
352 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
355 case 3: /* MaxType */
357 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
358 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
359 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
362 case 4: /* Memory Type */
364 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 1, 0);
365 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
366 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 1, 2);
369 case 5: /* Read/Write Type */
371 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 1);
372 RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
373 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0);
376 case 6: /* Address Granularity */
378 Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
379 RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
380 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
381 GranOp = InitializerOp;
384 case 7: /* Min Address */
386 Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
387 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
388 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
389 MinOp = InitializerOp;
392 case 8: /* Max Address */
394 Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
395 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
396 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
397 MaxOp = InitializerOp;
400 case 9: /* Translation Offset */
402 Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
403 RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
404 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
407 case 10: /* Address Length */
409 Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
410 RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
411 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
412 LengthOp = InitializerOp;
415 case 11: /* ResSourceIndex [Optional Field - BYTE] */
417 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
419 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
421 Descriptor->Address64.ResourceLength++;
422 ResSourceIndex = TRUE;
426 case 12: /* ResSource [Optional Field - STRING] */
428 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
429 (InitializerOp->Asl.Value.String))
433 Descriptor->Address64.ResourceLength = (UINT16)
434 (Descriptor->Address64.ResourceLength + StringLength);
437 &OptionalFields[OptionIndex],
438 InitializerOp->Asl.Value.String);
440 /* ResourceSourceIndex must also be valid */
444 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
445 InitializerOp, NULL);
452 * Not a valid ResourceSource, ResourceSourceIndex must also
455 else if (ResSourceIndex)
457 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
458 InitializerOp, NULL);
463 case 13: /* ResourceTag */
465 UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
469 case 14: /* Address Range */
471 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 3, 0);
472 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
473 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 3, 2);
478 RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0);
479 RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
480 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5);
485 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
489 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
492 /* Validate the Min/Max/Len/Gran values */
494 RsLargeAddressCheck (
495 Descriptor->Address64.Minimum,
496 Descriptor->Address64.Maximum,
497 Descriptor->Address64.AddressLength,
498 Descriptor->Address64.Granularity,
499 Descriptor->Address64.Flags,
500 MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
502 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
503 OptionIndex + StringLength;
508 /*******************************************************************************
510 * FUNCTION: RsDoQwordSpaceDescriptor
512 * PARAMETERS: Info - Parse Op and resource template offset
514 * RETURN: Completed resource node
516 * DESCRIPTION: Construct a long "QwordSpace" descriptor
518 ******************************************************************************/
521 RsDoQwordSpaceDescriptor (
522 ASL_RESOURCE_INFO *Info)
524 AML_RESOURCE *Descriptor;
525 ACPI_PARSE_OBJECT *InitializerOp;
526 ACPI_PARSE_OBJECT *MinOp = NULL;
527 ACPI_PARSE_OBJECT *MaxOp = NULL;
528 ACPI_PARSE_OBJECT *LengthOp = NULL;
529 ACPI_PARSE_OBJECT *GranOp = NULL;
530 ASL_RESOURCE_NODE *Rnode;
531 UINT8 *OptionalFields;
532 UINT16 StringLength = 0;
533 UINT32 OptionIndex = 0;
534 UINT32 CurrentByteOffset;
536 BOOLEAN ResSourceIndex = FALSE;
539 InitializerOp = Info->DescriptorTypeOp->Asl.Child;
540 StringLength = RsGetStringDataLength (InitializerOp);
541 CurrentByteOffset = Info->CurrentByteOffset;
543 Rnode = RsAllocateResourceNode (
544 sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
546 Descriptor = Rnode->Buffer;
547 Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64;
550 * Initial descriptor length -- may be enlarged if there are
551 * optional fields present
553 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
554 Descriptor->Address64.ResourceLength = (UINT16)
555 (sizeof (AML_RESOURCE_ADDRESS64) -
556 sizeof (AML_RESOURCE_LARGE_HEADER));
558 /* Process all child initialization nodes */
560 for (i = 0; InitializerOp; i++)
564 case 0: /* Resource Type */
566 Descriptor->Address64.ResourceType =
567 (UINT8) InitializerOp->Asl.Value.Integer;
570 case 1: /* Resource Usage */
572 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
575 case 2: /* DecodeType */
577 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
578 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
579 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
582 case 3: /* MinType */
584 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
585 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
586 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
589 case 4: /* MaxType */
591 RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
592 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
593 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
596 case 5: /* Type-Specific flags */
598 Descriptor->Address64.SpecificFlags =
599 (UINT8) InitializerOp->Asl.Value.Integer;
602 case 6: /* Address Granularity */
604 Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
605 RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
606 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
607 GranOp = InitializerOp;
610 case 7: /* Min Address */
612 Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
613 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
614 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
615 MinOp = InitializerOp;
618 case 8: /* Max Address */
620 Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
621 RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
622 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
623 MaxOp = InitializerOp;
626 case 9: /* Translation Offset */
628 Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
629 RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
630 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
633 case 10: /* Address Length */
635 Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
636 RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
637 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
638 LengthOp = InitializerOp;
641 case 11: /* ResSourceIndex [Optional Field - BYTE] */
643 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
645 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
647 Descriptor->Address64.ResourceLength++;
648 ResSourceIndex = TRUE;
652 case 12: /* ResSource [Optional Field - STRING] */
654 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
655 (InitializerOp->Asl.Value.String))
659 Descriptor->Address64.ResourceLength = (UINT16)
660 (Descriptor->Address64.ResourceLength + StringLength);
663 &OptionalFields[OptionIndex],
664 InitializerOp->Asl.Value.String);
666 /* ResourceSourceIndex must also be valid */
670 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
671 InitializerOp, NULL);
678 * Not a valid ResourceSource, ResourceSourceIndex must also
681 else if (ResSourceIndex)
683 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
684 InitializerOp, NULL);
689 case 13: /* ResourceTag */
691 UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
696 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
700 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
703 /* Validate the Min/Max/Len/Gran values */
705 RsLargeAddressCheck (
706 Descriptor->Address64.Minimum,
707 Descriptor->Address64.Maximum,
708 Descriptor->Address64.AddressLength,
709 Descriptor->Address64.Granularity,
710 Descriptor->Address64.Flags,
711 MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
713 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
714 OptionIndex + StringLength;