void OpcGetIntegerWidth ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child; if (!Op) { return; } if (Gbl_RevisionOverride) { AcpiUtSetIntegerWidth (Gbl_RevisionOverride); } else { Child = Op->Asl.Child; Child = Child->Asl.Next; Child = Child->Asl.Next; /* Use the revision to set the integer width */ AcpiUtSetIntegerWidth ((UINT8) Child->Asl.Value.Integer); } }
static ACPI_STATUS DtInitialize ( void) { ACPI_STATUS Status; Status = AcpiOsInitialize (); if (ACPI_FAILURE (Status)) { return (Status); } Status = AcpiUtInitGlobals (); if (ACPI_FAILURE (Status)) { return (Status); } AcpiUtSetIntegerWidth (2); /* Set width to 64 bits */ AslGbl_FieldList = NULL; AslGbl_RootTable = NULL; AslGbl_SubtableStack = NULL; sprintf (VersionString, "%X", (UINT32) ACPI_CA_VERSION); return (AE_OK); }
void TrSetOpIntegerWidth ( ACPI_PARSE_OBJECT *TableSignatureOp, ACPI_PARSE_OBJECT *RevisionOp) { /* TBD: Check table sig? (DSDT vs. SSDT) */ /* Handle command-line version override */ if (Gbl_RevisionOverride) { AcpiUtSetIntegerWidth (Gbl_RevisionOverride); } else { AcpiUtSetIntegerWidth ((UINT8) RevisionOp->Asl.Value.Integer); } }
void AcpiTbInstallTableWithOverride ( ACPI_TABLE_DESC *NewTableDesc, BOOLEAN Override, UINT32 *TableIndex) { UINT32 i; ACPI_STATUS Status; Status = AcpiTbGetNextTableDescriptor (&i, NULL); if (ACPI_FAILURE (Status)) { return; } /* * ACPI Table Override: * * Before we install the table, let the host OS override it with a new * one if desired. Any table within the RSDT/XSDT can be replaced, * including the DSDT which is pointed to by the FADT. */ if (Override) { AcpiTbOverrideTable (NewTableDesc); } AcpiTbInitTableDescriptor (&AcpiGbl_RootTableList.Tables[i], NewTableDesc->Address, NewTableDesc->Flags, NewTableDesc->Pointer); AcpiTbPrintTableHeader (NewTableDesc->Address, NewTableDesc->Pointer); /* This synchronizes AcpiGbl_DsdtIndex */ *TableIndex = i; /* Set the global integer width (based upon revision of the DSDT) */ if (i == AcpiGbl_DsdtIndex) { AcpiUtSetIntegerWidth (NewTableDesc->Pointer->Revision); } }
void AcpiTbInstallTableWithOverride ( UINT32 TableIndex, ACPI_TABLE_DESC *NewTableDesc, BOOLEAN Override) { if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount) { return; } /* * ACPI Table Override: * * Before we install the table, let the host OS override it with a new * one if desired. Any table within the RSDT/XSDT can be replaced, * including the DSDT which is pointed to by the FADT. */ if (Override) { AcpiTbOverrideTable (NewTableDesc); } AcpiTbInitTableDescriptor (&AcpiGbl_RootTableList.Tables[TableIndex], NewTableDesc->Address, NewTableDesc->Flags, NewTableDesc->Pointer); AcpiTbPrintTableHeader (NewTableDesc->Address, NewTableDesc->Pointer); /* Set the global integer width (based upon revision of the DSDT) */ if (TableIndex == ACPI_TABLE_INDEX_DSDT) { AcpiUtSetIntegerWidth (NewTableDesc->Pointer->Revision); } }
void OpnDoDefinitionBlock ( ACPI_PARSE_OBJECT *Op) { ACPI_PARSE_OBJECT *Child; ACPI_SIZE Length; ACPI_NATIVE_UINT i; /* * These nodes get stuffed into the table header. They are special * cased when the table is written to the output file. * * Mark all of these nodes as non-usable so they won't get output * as AML opcodes! */ /* AML filename */ Child = Op->Asl.Child; if ((Child->Asl.Value.Buffer) && (Gbl_UseDefaultAmlFilename)) { Gbl_OutputFilenamePrefix = (char *) Child->Asl.Value.Buffer; } Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* Signature */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; if (Child->Asl.Value.String) { Gbl_TableSignature = Child->Asl.Value.String; if (ACPI_STRLEN (Gbl_TableSignature) != 4) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Length not exactly 4"); } for (i = 0; i < 4; i++) { if (!isalnum (Gbl_TableSignature[i])) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Contains non-alphanumeric characters"); } } } /* Revision */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* Use the revision to set the integer width */ AcpiUtSetIntegerWidth ((UINT8) Child->Asl.Value.Integer); /* OEMID */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; /* OEM TableID */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; if (Child->Asl.Value.String) { Length = ACPI_STRLEN (Child->Asl.Value.String); Gbl_TableId = AcpiOsAllocate (Length + 1); ACPI_STRCPY (Gbl_TableId, Child->Asl.Value.String); for (i = 0; i < Length; i++) { if (Gbl_TableId[i] == ' ') { Gbl_TableId[i] = 0; break; } } } /* OEM Revision */ Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; }
ACPI_STATUS AcpiTbGetRequiredTables ( void) { ACPI_STATUS Status = AE_OK; UINT32 i; ACPI_TABLE_DESC TableInfo; ACPI_POINTER Address; ACPI_FUNCTION_TRACE ("TbGetRequiredTables"); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%d ACPI tables in RSDT\n", AcpiGbl_RsdtTableCount)); Address.PointerType = AcpiGbl_TableFlags | ACPI_LOGICAL_ADDRESSING; /* * Loop through all table pointers found in RSDT. * This will NOT include the FACS and DSDT - we must get * them after the loop. * * The only tables we are interested in getting here is the FADT and * any SSDTs. */ for (i = 0; i < AcpiGbl_RsdtTableCount; i++) { /* Get the table addresss from the common internal XSDT */ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_XSDT->TableOffsetEntry[i]); /* * Get the tables needed by this subsystem (FADT and any SSDTs). * NOTE: All other tables are completely ignored at this time. */ Status = AcpiTbGetPrimaryTable (&Address, &TableInfo); if ((Status != AE_OK) && (Status != AE_TABLE_NOT_SUPPORTED)) { ACPI_REPORT_WARNING (("%s, while getting table at %8.8X%8.8X\n", AcpiFormatException (Status), ACPI_HIDWORD (Address.Pointer.Value), ACPI_LODWORD (Address.Pointer.Value))); } } /* We must have a FADT to continue */ if (!AcpiGbl_FADT) { ACPI_REPORT_ERROR (("No FADT present in RSDT/XSDT\n")); return_ACPI_STATUS (AE_NO_ACPI_TABLES); } /* * Convert the FADT to a common format. This allows earlier revisions of the * table to coexist with newer versions, using common access code. */ Status = AcpiTbConvertTableFadt (); if (ACPI_FAILURE (Status)) { ACPI_REPORT_ERROR (("Could not convert FADT to internal common format\n")); return_ACPI_STATUS (Status); } /* * Get the FACS (Pointed to by the FADT) */ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XFirmwareCtrl); Status = AcpiTbGetSecondaryTable (&Address, FACS_SIG, &TableInfo); if (ACPI_FAILURE (Status)) { ACPI_REPORT_ERROR (("Could not get/install the FACS, %s\n", AcpiFormatException (Status))); return_ACPI_STATUS (Status); } /* * Create the common FACS pointer table * (Contains pointers to the original table) */ Status = AcpiTbBuildCommonFacs (&TableInfo); if (ACPI_FAILURE (Status)) { return_ACPI_STATUS (Status); } /* * Get/install the DSDT (Pointed to by the FADT) */ Address.Pointer.Value = ACPI_GET_ADDRESS (AcpiGbl_FADT->XDsdt); Status = AcpiTbGetSecondaryTable (&Address, DSDT_SIG, &TableInfo); if (ACPI_FAILURE (Status)) { ACPI_REPORT_ERROR (("Could not get/install the DSDT\n")); return_ACPI_STATUS (Status); } /* Set Integer Width (32/64) based upon DSDT revision */ AcpiUtSetIntegerWidth (AcpiGbl_DSDT->Revision); /* Dump the entire DSDT */ ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n", AcpiGbl_DSDT->Length, AcpiGbl_DSDT->Length, AcpiGbl_IntegerBitWidth)); ACPI_DUMP_BUFFER ((UINT8 *) AcpiGbl_DSDT, AcpiGbl_DSDT->Length); /* Always delete the RSDP mapping, we are done with it */ AcpiTbDeleteAcpiTable (ACPI_TABLE_RSDP); return_ACPI_STATUS (Status); }