1 /******************************************************************************
3 * Module Name: aslrestype2d - Large DWord address resource descriptors
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2014, 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 ("aslrestype2d")
51 * This module contains the Dword (32-bit) address space descriptors:
58 /*******************************************************************************
60 * FUNCTION: RsDoDwordIoDescriptor
62 * PARAMETERS: Op - Parent resource descriptor parse node
63 * CurrentByteOffset - Offset into the resource template AML
64 * buffer (to track references to the desc)
66 * RETURN: Completed resource node
68 * DESCRIPTION: Construct a long "DwordIO" descriptor
70 ******************************************************************************/
73 RsDoDwordIoDescriptor (
74 ACPI_PARSE_OBJECT *Op,
75 UINT32 CurrentByteOffset)
77 AML_RESOURCE *Descriptor;
78 ACPI_PARSE_OBJECT *InitializerOp;
79 ACPI_PARSE_OBJECT *MinOp = NULL;
80 ACPI_PARSE_OBJECT *MaxOp = NULL;
81 ACPI_PARSE_OBJECT *LengthOp = NULL;
82 ACPI_PARSE_OBJECT *GranOp = NULL;
83 ASL_RESOURCE_NODE *Rnode;
84 UINT16 StringLength = 0;
85 UINT32 OptionIndex = 0;
86 UINT8 *OptionalFields;
88 BOOLEAN ResSourceIndex = FALSE;
91 InitializerOp = Op->Asl.Child;
92 StringLength = RsGetStringDataLength (InitializerOp);
94 Rnode = RsAllocateResourceNode (
95 sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
97 Descriptor = Rnode->Buffer;
98 Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
99 Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
102 * Initial descriptor length -- may be enlarged if there are
103 * optional fields present
105 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
106 Descriptor->Address32.ResourceLength = (UINT16)
107 (sizeof (AML_RESOURCE_ADDRESS32) -
108 sizeof (AML_RESOURCE_LARGE_HEADER));
110 /* Process all child initialization nodes */
112 for (i = 0; InitializerOp; i++)
116 case 0: /* Resource Usage */
118 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
121 case 1: /* MinType */
123 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
124 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
125 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
128 case 2: /* MaxType */
130 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
131 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
132 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
135 case 3: /* DecodeType */
137 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
138 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
139 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
142 case 4: /* Range Type */
144 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 3);
145 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,
146 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0, 2);
149 case 5: /* Address Granularity */
151 Descriptor->Address32.Granularity =
152 (UINT32) InitializerOp->Asl.Value.Integer;
153 RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
154 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
155 GranOp = InitializerOp;
158 case 6: /* Address Min */
160 Descriptor->Address32.Minimum =
161 (UINT32) InitializerOp->Asl.Value.Integer;
162 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
163 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
164 MinOp = InitializerOp;
167 case 7: /* Address Max */
169 Descriptor->Address32.Maximum =
170 (UINT32) InitializerOp->Asl.Value.Integer;
171 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
172 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
173 MaxOp = InitializerOp;
176 case 8: /* Translation Offset */
178 Descriptor->Address32.TranslationOffset =
179 (UINT32) InitializerOp->Asl.Value.Integer;
180 RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
181 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
184 case 9: /* Address Length */
186 Descriptor->Address32.AddressLength =
187 (UINT32) InitializerOp->Asl.Value.Integer;
188 RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
189 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
190 LengthOp = InitializerOp;
193 case 10: /* ResSourceIndex [Optional Field - BYTE] */
195 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
197 /* Found a valid ResourceSourceIndex */
199 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
201 Descriptor->Address32.ResourceLength++;
202 ResSourceIndex = TRUE;
206 case 11: /* ResSource [Optional Field - STRING] */
208 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
209 (InitializerOp->Asl.Value.String))
213 /* Found a valid ResourceSource */
215 Descriptor->Address32.ResourceLength = (UINT16)
216 (Descriptor->Address32.ResourceLength + StringLength);
219 &OptionalFields[OptionIndex],
220 InitializerOp->Asl.Value.String);
222 /* ResourceSourceIndex must also be valid */
226 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
227 InitializerOp, NULL);
234 * Not a valid ResourceSource, ResourceSourceIndex must also
237 else if (ResSourceIndex)
239 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
240 InitializerOp, NULL);
245 case 12: /* ResourceTag */
247 UtAttachNamepathToOwner (Op, InitializerOp);
252 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 4, 0);
253 RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
254 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 4);
257 case 14: /* Translation Type */
259 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0);
260 RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE,
261 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5);
266 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
270 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
273 /* Validate the Min/Max/Len/Gran values */
275 RsLargeAddressCheck (
276 (UINT64) Descriptor->Address32.Minimum,
277 (UINT64) Descriptor->Address32.Maximum,
278 (UINT64) Descriptor->Address32.AddressLength,
279 (UINT64) Descriptor->Address32.Granularity,
280 Descriptor->Address32.Flags,
281 MinOp, MaxOp, LengthOp, GranOp, Op);
283 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
284 OptionIndex + StringLength;
289 /*******************************************************************************
291 * FUNCTION: RsDoDwordMemoryDescriptor
293 * PARAMETERS: Op - Parent resource descriptor parse node
294 * CurrentByteOffset - Offset into the resource template AML
295 * buffer (to track references to the desc)
297 * RETURN: Completed resource node
299 * DESCRIPTION: Construct a long "DwordMemory" descriptor
301 ******************************************************************************/
304 RsDoDwordMemoryDescriptor (
305 ACPI_PARSE_OBJECT *Op,
306 UINT32 CurrentByteOffset)
308 AML_RESOURCE *Descriptor;
309 ACPI_PARSE_OBJECT *InitializerOp;
310 ACPI_PARSE_OBJECT *MinOp = NULL;
311 ACPI_PARSE_OBJECT *MaxOp = NULL;
312 ACPI_PARSE_OBJECT *LengthOp = NULL;
313 ACPI_PARSE_OBJECT *GranOp = NULL;
314 ASL_RESOURCE_NODE *Rnode;
315 UINT8 *OptionalFields;
316 UINT16 StringLength = 0;
317 UINT32 OptionIndex = 0;
319 BOOLEAN ResSourceIndex = FALSE;
322 InitializerOp = Op->Asl.Child;
323 StringLength = RsGetStringDataLength (InitializerOp);
325 Rnode = RsAllocateResourceNode (
326 sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
328 Descriptor = Rnode->Buffer;
329 Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
330 Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
333 * Initial descriptor length -- may be enlarged if there are
334 * optional fields present
336 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
337 Descriptor->Address32.ResourceLength = (UINT16)
338 (sizeof (AML_RESOURCE_ADDRESS32) -
339 sizeof (AML_RESOURCE_LARGE_HEADER));
342 /* Process all child initialization nodes */
344 for (i = 0; InitializerOp; i++)
348 case 0: /* Resource Usage */
350 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
353 case 1: /* DecodeType */
355 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
356 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
357 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
360 case 2: /* MinType */
362 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
363 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
364 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
367 case 3: /* MaxType */
369 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
370 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
371 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
374 case 4: /* Memory Type */
376 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 1, 0);
377 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,
378 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1, 2);
381 case 5: /* Read/Write Type */
383 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 1);
384 RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
385 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0);
388 case 6: /* Address Granularity */
390 Descriptor->Address32.Granularity =
391 (UINT32) InitializerOp->Asl.Value.Integer;
392 RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
393 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
394 GranOp = InitializerOp;
397 case 7: /* Min Address */
399 Descriptor->Address32.Minimum =
400 (UINT32) InitializerOp->Asl.Value.Integer;
401 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
402 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
403 MinOp = InitializerOp;
406 case 8: /* Max Address */
408 Descriptor->Address32.Maximum =
409 (UINT32) InitializerOp->Asl.Value.Integer;
410 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
411 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
412 MaxOp = InitializerOp;
415 case 9: /* Translation Offset */
417 Descriptor->Address32.TranslationOffset =
418 (UINT32) InitializerOp->Asl.Value.Integer;
419 RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
420 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
423 case 10: /* Address Length */
425 Descriptor->Address32.AddressLength =
426 (UINT32) InitializerOp->Asl.Value.Integer;
427 RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
428 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
429 LengthOp = InitializerOp;
432 case 11: /* ResSourceIndex [Optional Field - BYTE] */
434 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
436 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
438 Descriptor->Address32.ResourceLength++;
439 ResSourceIndex = TRUE;
443 case 12: /* ResSource [Optional Field - STRING] */
445 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
446 (InitializerOp->Asl.Value.String))
450 Descriptor->Address32.ResourceLength = (UINT16)
451 (Descriptor->Address32.ResourceLength + StringLength);
454 &OptionalFields[OptionIndex],
455 InitializerOp->Asl.Value.String);
457 /* ResourceSourceIndex must also be valid */
461 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
462 InitializerOp, NULL);
469 * Not a valid ResourceSource, ResourceSourceIndex must also
472 else if (ResSourceIndex)
474 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
475 InitializerOp, NULL);
480 case 13: /* ResourceTag */
482 UtAttachNamepathToOwner (Op, InitializerOp);
486 case 14: /* Address Range */
488 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 3, 0);
489 RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,
490 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3, 2);
495 RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0);
496 RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,
497 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5);
502 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
506 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
509 /* Validate the Min/Max/Len/Gran values */
511 RsLargeAddressCheck (
512 (UINT64) Descriptor->Address32.Minimum,
513 (UINT64) Descriptor->Address32.Maximum,
514 (UINT64) Descriptor->Address32.AddressLength,
515 (UINT64) Descriptor->Address32.Granularity,
516 Descriptor->Address32.Flags,
517 MinOp, MaxOp, LengthOp, GranOp, Op);
519 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
520 OptionIndex + StringLength;
525 /*******************************************************************************
527 * FUNCTION: RsDoDwordSpaceDescriptor
529 * PARAMETERS: Op - Parent resource descriptor parse node
530 * CurrentByteOffset - Offset into the resource template AML
531 * buffer (to track references to the desc)
533 * RETURN: Completed resource node
535 * DESCRIPTION: Construct a long "DwordSpace" descriptor
537 ******************************************************************************/
540 RsDoDwordSpaceDescriptor (
541 ACPI_PARSE_OBJECT *Op,
542 UINT32 CurrentByteOffset)
544 AML_RESOURCE *Descriptor;
545 ACPI_PARSE_OBJECT *InitializerOp;
546 ACPI_PARSE_OBJECT *MinOp = NULL;
547 ACPI_PARSE_OBJECT *MaxOp = NULL;
548 ACPI_PARSE_OBJECT *LengthOp = NULL;
549 ACPI_PARSE_OBJECT *GranOp = NULL;
550 ASL_RESOURCE_NODE *Rnode;
551 UINT8 *OptionalFields;
552 UINT16 StringLength = 0;
553 UINT32 OptionIndex = 0;
555 BOOLEAN ResSourceIndex = FALSE;
558 InitializerOp = Op->Asl.Child;
559 StringLength = RsGetStringDataLength (InitializerOp);
561 Rnode = RsAllocateResourceNode (
562 sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
564 Descriptor = Rnode->Buffer;
565 Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
568 * Initial descriptor length -- may be enlarged if there are
569 * optional fields present
571 OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
572 Descriptor->Address32.ResourceLength = (UINT16)
573 (sizeof (AML_RESOURCE_ADDRESS32) -
574 sizeof (AML_RESOURCE_LARGE_HEADER));
576 /* Process all child initialization nodes */
578 for (i = 0; InitializerOp; i++)
582 case 0: /* Resource Type */
584 Descriptor->Address32.ResourceType =
585 (UINT8) InitializerOp->Asl.Value.Integer;
588 case 1: /* Resource Usage */
590 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
593 case 2: /* DecodeType */
595 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
596 RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,
597 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
600 case 3: /* MinType */
602 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
603 RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,
604 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
607 case 4: /* MaxType */
609 RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
610 RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,
611 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
614 case 5: /* Type-Specific flags */
616 Descriptor->Address32.SpecificFlags =
617 (UINT8) InitializerOp->Asl.Value.Integer;
620 case 6: /* Address Granularity */
622 Descriptor->Address32.Granularity =
623 (UINT32) InitializerOp->Asl.Value.Integer;
624 RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
625 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
626 GranOp = InitializerOp;
629 case 7: /* Min Address */
631 Descriptor->Address32.Minimum =
632 (UINT32) InitializerOp->Asl.Value.Integer;
633 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
634 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
635 MinOp = InitializerOp;
638 case 8: /* Max Address */
640 Descriptor->Address32.Maximum =
641 (UINT32) InitializerOp->Asl.Value.Integer;
642 RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
643 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
644 MaxOp = InitializerOp;
647 case 9: /* Translation Offset */
649 Descriptor->Address32.TranslationOffset =
650 (UINT32) InitializerOp->Asl.Value.Integer;
651 RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
652 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
655 case 10: /* Address Length */
657 Descriptor->Address32.AddressLength =
658 (UINT32) InitializerOp->Asl.Value.Integer;
659 RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
660 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
661 LengthOp = InitializerOp;
664 case 11: /* ResSourceIndex [Optional Field - BYTE] */
666 if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
668 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
670 Descriptor->Address32.ResourceLength++;
671 ResSourceIndex = TRUE;
675 case 12: /* ResSource [Optional Field - STRING] */
677 if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
678 (InitializerOp->Asl.Value.String))
682 Descriptor->Address32.ResourceLength = (UINT16)
683 (Descriptor->Address32.ResourceLength + StringLength);
686 &OptionalFields[OptionIndex],
687 InitializerOp->Asl.Value.String);
689 /* ResourceSourceIndex must also be valid */
693 AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
694 InitializerOp, NULL);
701 * Not a valid ResourceSource, ResourceSourceIndex must also
704 else if (ResSourceIndex)
706 AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
707 InitializerOp, NULL);
712 case 13: /* ResourceTag */
714 UtAttachNamepathToOwner (Op, InitializerOp);
719 AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST,
720 InitializerOp, NULL);
724 InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
727 /* Validate the Min/Max/Len/Gran values */
729 RsLargeAddressCheck (
730 (UINT64) Descriptor->Address32.Minimum,
731 (UINT64) Descriptor->Address32.Maximum,
732 (UINT64) Descriptor->Address32.AddressLength,
733 (UINT64) Descriptor->Address32.Granularity,
734 Descriptor->Address32.Flags,
735 MinOp, MaxOp, LengthOp, GranOp, Op);
737 Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
738 OptionIndex + StringLength;