Subversion Repositories Kolibri OS

Rev

Rev 1498 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1498 Rev 2216
Line 6... Line 6...
6
 
6
 
7
/******************************************************************************
7
/******************************************************************************
8
 *
8
 *
9
 * 1. Copyright Notice
9
 * 1. Copyright Notice
10
 *
10
 *
11
 * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
11
 * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
12
 * All rights reserved.
12
 * All rights reserved.
13
 *
13
 *
14
 * 2. License
14
 * 2. License
15
 *
15
 *
Line 259... Line 259...
259
    char                    *ExtraMessage)
259
    char                    *ExtraMessage)
260
{
260
{
Line 261... Line 261...
261
 
261
 
Line -... Line 262...
-
 
262
    DtError (ASL_ERROR, MessageId, FieldObject, ExtraMessage);
-
 
263
 
-
 
264
/*
-
 
265
 * TBD: remove this entire function, DtFatal
-
 
266
 *
-
 
267
 * We cannot abort the compiler on error, because we may be compiling a
-
 
268
 * list of files. We must move on to the next file.
262
    DtError (ASL_ERROR, MessageId, FieldObject, ExtraMessage);
269
 */
263
 
270
#ifdef __OBSOLETE
-
 
271
    CmCleanupAndExit ();
264
    CmCleanupAndExit ();
272
    exit (1);
Line 265... Line 273...
265
    exit (1);
273
#endif
266
}
274
}
Line 386... Line 394...
386
/******************************************************************************
394
/******************************************************************************
387
 *
395
 *
388
 * FUNCTION:    DtGetFieldValue
396
 * FUNCTION:    DtGetFieldValue
389
 *
397
 *
390
 * PARAMETERS:  Field               - Current field list pointer
398
 * PARAMETERS:  Field               - Current field list pointer
391
 *              Name                - Field name
-
 
392
 *
399
 *
393
 * RETURN:      Field value
400
 * RETURN:      Field value
394
 *
401
 *
395
 * DESCRIPTION: Get field value
402
 * DESCRIPTION: Get field value
396
 *
403
 *
397
 *****************************************************************************/
404
 *****************************************************************************/
Line 398... Line 405...
398
 
405
 
399
char *
406
char *
400
DtGetFieldValue (
407
DtGetFieldValue (
401
    DT_FIELD                *Field,
-
 
402
    char                    *Name)
408
    DT_FIELD                *Field)
403
{
-
 
404
 
-
 
405
    /* Search the field list for the name */
-
 
406
 
409
{
407
    while (Field)
410
    if (!Field)
408
    {
-
 
409
        if (!ACPI_STRCMP (Name, Field->Name))
-
 
410
        {
411
    {
411
            return (Field->Value);
-
 
412
        }
-
 
413
 
-
 
414
        Field = Field->Next;
412
        return (NULL);
Line 415... Line 413...
415
    }
413
    }
416
 
414
 
Line 417... Line 415...
417
    return (NULL);
415
    return (Field->Value);
418
}
416
}
Line 469... Line 467...
469
    case ACPI_DMT_STRING:
467
    case ACPI_DMT_STRING:
470
        Type = DT_FIELD_TYPE_STRING;
468
        Type = DT_FIELD_TYPE_STRING;
471
        break;
469
        break;
Line 472... Line 470...
472
 
470
 
-
 
471
    case ACPI_DMT_BUFFER:
473
    case ACPI_DMT_BUFFER:
472
    case ACPI_DMT_BUF7:
474
    case ACPI_DMT_BUF16:
473
    case ACPI_DMT_BUF16:
475
        Type = DT_FIELD_TYPE_BUFFER;
-
 
476
        break;
-
 
477
 
474
    case ACPI_DMT_BUF128:
478
    case ACPI_DMT_PCI_PATH:
475
    case ACPI_DMT_PCI_PATH:
479
        Type = DT_FIELD_TYPE_PCI_PATH;
476
        Type = DT_FIELD_TYPE_BUFFER;
Line 480... Line 477...
480
        break;
477
        break;
481
 
478
 
482
    case ACPI_DMT_GAS:
479
    case ACPI_DMT_GAS:
483
    case ACPI_DMT_HESTNTFY:
480
    case ACPI_DMT_HESTNTFY:
Line -... Line 481...
-
 
481
        Type = DT_FIELD_TYPE_INLINE_SUBTABLE;
-
 
482
        break;
-
 
483
 
-
 
484
    case ACPI_DMT_UNICODE:
-
 
485
        Type = DT_FIELD_TYPE_UNICODE;
-
 
486
        break;
-
 
487
 
-
 
488
    case ACPI_DMT_UUID:
-
 
489
        Type = DT_FIELD_TYPE_UUID;
-
 
490
        break;
-
 
491
 
-
 
492
    case ACPI_DMT_DEVICE_PATH:
-
 
493
        Type = DT_FIELD_TYPE_DEVICE_PATH;
-
 
494
        break;
-
 
495
 
-
 
496
    case ACPI_DMT_LABEL:
484
        Type = DT_FIELD_TYPE_INLINE_SUBTABLE;
497
        Type = DT_FIELD_TYPE_LABEL;
485
        break;
498
        break;
486
 
499
 
487
    default:
500
    default:
Line 534... Line 547...
534
 
547
 
535
/******************************************************************************
548
/******************************************************************************
536
 *
549
 *
537
 * FUNCTION:    DtGetFieldLength
550
 * FUNCTION:    DtGetFieldLength
538
 *
551
 *
539
 * PARAMETERS:  Field               - Current field list pointer
552
 * PARAMETERS:  Field               - Current field
540
 *              Info                - Data table info
553
 *              Info                - Data table info
541
 *
554
 *
542
 * RETURN:      Field length
555
 * RETURN:      Field length
543
 *
556
 *
544
 * DESCRIPTION: Get length of bytes needed to compile the field
557
 * DESCRIPTION: Get length of bytes needed to compile the field
-
 
558
 *
-
 
559
 * Note: This function must remain in sync with AcpiDmDumpTable.
545
 *
560
 *
Line 546... Line 561...
546
 *****************************************************************************/
561
 *****************************************************************************/
547
 
562
 
548
UINT32
563
UINT32
Line 566... Line 581...
566
    case ACPI_DMT_FLAG5:
581
    case ACPI_DMT_FLAG5:
567
    case ACPI_DMT_FLAG6:
582
    case ACPI_DMT_FLAG6:
568
    case ACPI_DMT_FLAG7:
583
    case ACPI_DMT_FLAG7:
569
    case ACPI_DMT_FLAGS0:
584
    case ACPI_DMT_FLAGS0:
570
    case ACPI_DMT_FLAGS2:
585
    case ACPI_DMT_FLAGS2:
-
 
586
    case ACPI_DMT_LABEL:
571
        ByteLength = 0;
587
        ByteLength = 0;
572
        break;
588
        break;
Line 573... Line 589...
573
 
589
 
574
    case ACPI_DMT_UINT8:
590
    case ACPI_DMT_UINT8:
575
    case ACPI_DMT_CHKSUM:
591
    case ACPI_DMT_CHKSUM:
-
 
592
    case ACPI_DMT_SPACEID:
-
 
593
    case ACPI_DMT_ACCWIDTH:
576
    case ACPI_DMT_SPACEID:
594
    case ACPI_DMT_IVRS:
577
    case ACPI_DMT_MADT:
595
    case ACPI_DMT_MADT:
578
    case ACPI_DMT_SRAT:
596
    case ACPI_DMT_SRAT:
579
    case ACPI_DMT_ASF:
597
    case ACPI_DMT_ASF:
580
    case ACPI_DMT_HESTNTYP:
598
    case ACPI_DMT_HESTNTYP:
-
 
599
    case ACPI_DMT_FADTPM:
581
    case ACPI_DMT_FADTPM:
600
    case ACPI_DMT_EINJACT:
-
 
601
    case ACPI_DMT_EINJINST:
-
 
602
    case ACPI_DMT_ERSTACT:
582
    case ACPI_DMT_IVRS:
603
    case ACPI_DMT_ERSTINST:
583
        ByteLength = 1;
604
        ByteLength = 1;
Line 584... Line 605...
584
        break;
605
        break;
585
 
606
 
Line 594... Line 615...
594
        ByteLength = 3;
615
        ByteLength = 3;
595
        break;
616
        break;
Line 596... Line 617...
596
 
617
 
597
    case ACPI_DMT_UINT32:
618
    case ACPI_DMT_UINT32:
-
 
619
    case ACPI_DMT_NAME4:
598
    case ACPI_DMT_NAME4:
620
    case ACPI_DMT_SLIC:
599
    case ACPI_DMT_SIG:
621
    case ACPI_DMT_SIG:
600
        ByteLength = 4;
622
        ByteLength = 4;
Line 601... Line 623...
601
        break;
623
        break;
602
 
624
 
603
    case ACPI_DMT_NAME6:
625
    case ACPI_DMT_NAME6:
Line 604... Line 626...
604
        ByteLength = 6;
626
        ByteLength = 6;
-
 
627
        break;
605
        break;
628
 
606
 
629
    case ACPI_DMT_UINT56:
Line 607... Line 630...
607
    case ACPI_DMT_UINT56:
630
    case ACPI_DMT_BUF7:
608
        ByteLength = 7;
631
        ByteLength = 7;
609
        break;
632
        break;
610
 
633
 
Line 611... Line 634...
611
    case ACPI_DMT_UINT64:
634
    case ACPI_DMT_UINT64:
612
    case ACPI_DMT_NAME8:
635
    case ACPI_DMT_NAME8:
613
        ByteLength = 8;
-
 
614
        break;
636
        ByteLength = 8;
615
 
637
        break;
616
    case ACPI_DMT_STRING:
638
 
-
 
639
    case ACPI_DMT_STRING:
-
 
640
        Value = DtGetFieldValue (Field);
-
 
641
        if (Value)
-
 
642
        {
-
 
643
            ByteLength = ACPI_STRLEN (Value) + 1;
-
 
644
        }
-
 
645
        else
-
 
646
        {   /* At this point, this is a fatal error */
617
        Value = DtGetFieldValue (Field, Info->Name);
647
 
Line 618... Line 648...
618
 
648
            sprintf (MsgBuffer, "Expected \"%s\"", Info->Name);
619
        /* TBD: error if Value is NULL? (as below?) */
649
            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, MsgBuffer);
620
 
650
            return (0);
Line 628... Line 658...
628
    case ACPI_DMT_HESTNTFY:
658
    case ACPI_DMT_HESTNTFY:
629
        ByteLength = sizeof (ACPI_HEST_NOTIFY);
659
        ByteLength = sizeof (ACPI_HEST_NOTIFY);
630
        break;
660
        break;
Line 631... Line 661...
631
 
661
 
632
    case ACPI_DMT_BUFFER:
662
    case ACPI_DMT_BUFFER:
633
        Value = DtGetFieldValue (Field, Info->Name);
663
        Value = DtGetFieldValue (Field);
634
        if (Value)
664
        if (Value)
635
        {
665
        {
636
            ByteLength = DtGetBufferLength (Value);
666
            ByteLength = DtGetBufferLength (Value);
637
        }
667
        }
638
        else
668
        else
Line 639... Line 669...
639
        {   /* At this point, this is a fatal error */
669
        {   /* At this point, this is a fatal error */
640
 
670
 
-
 
671
            sprintf (MsgBuffer, "Expected \"%s\"", Info->Name);
641
            sprintf (MsgBuffer, "Expected \"%s\"", Info->Name);
672
            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, MsgBuffer);
642
            DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, MsgBuffer);
673
            return (0);
Line 643... Line 674...
643
        }
674
        }
-
 
675
        break;
644
        break;
676
 
645
 
677
    case ACPI_DMT_BUF16:
Line -... Line 678...
-
 
678
    case ACPI_DMT_UUID:
-
 
679
        ByteLength = 16;
-
 
680
        break;
-
 
681
 
-
 
682
    case ACPI_DMT_BUF128:
-
 
683
        ByteLength = 128;
-
 
684
        break;
-
 
685
 
-
 
686
    case ACPI_DMT_UNICODE:
-
 
687
        Value = DtGetFieldValue (Field);
-
 
688
 
-
 
689
        /* TBD: error if Value is NULL? (as below?) */
646
    case ACPI_DMT_BUF16:
690
 
647
        ByteLength = 16;
691
        ByteLength = (ACPI_STRLEN (Value) + 1) * sizeof(UINT16);
648
        break;
692
        break;
649
 
693
 
Line 650... Line 694...
650
    default:
694
    default:
651
        DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid table opcode");
695
        DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid table opcode");
Line 751... Line 795...
751
    while (1)
795
    while (1)
752
    {
796
    {
753
        ChildTable = DtGetNextSubtable (ParentTable, ChildTable);
797
        ChildTable = DtGetNextSubtable (ParentTable, ChildTable);
754
        if (ChildTable)
798
        if (ChildTable)
755
        {
799
        {
-
 
800
            if (ChildTable->LengthField)
-
 
801
            {
-
 
802
                DtSetSubtableLength (ChildTable);
-
 
803
            }
-
 
804
 
756
            if (ChildTable->Child)
805
            if (ChildTable->Child)
757
            {
806
            {
758
                ParentTable = ChildTable;
807
                ParentTable = ChildTable;
759
                ChildTable = NULL;
808
                ChildTable = NULL;
760
            }
809
            }