diff options
Diffstat (limited to 'source/components/tables/tbinstal.c')
| -rw-r--r-- | source/components/tables/tbinstal.c | 39 | 
1 files changed, 21 insertions, 18 deletions
| diff --git a/source/components/tables/tbinstal.c b/source/components/tables/tbinstal.c index c797efb808d3..a98a68989ec4 100644 --- a/source/components/tables/tbinstal.c +++ b/source/components/tables/tbinstal.c @@ -108,9 +108,9 @@ AcpiTbCompareTables (   *   * FUNCTION:    AcpiTbInstallTableWithOverride   * - * PARAMETERS:  TableIndex              - Index into root table array - *              NewTableDesc            - New table descriptor to install + * PARAMETERS:  NewTableDesc            - New table descriptor to install   *              Override                - Whether override should be performed + *              TableIndex              - Where the table index is returned   *   * RETURN:      None   * @@ -123,12 +123,16 @@ AcpiTbCompareTables (  void  AcpiTbInstallTableWithOverride ( -    UINT32                  TableIndex,      ACPI_TABLE_DESC         *NewTableDesc, -    BOOLEAN                 Override) +    BOOLEAN                 Override, +    UINT32                  *TableIndex)  { +    UINT32                  i; +    ACPI_STATUS             Status; + -    if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount) +    Status = AcpiTbGetNextTableDescriptor (&i, NULL); +    if (ACPI_FAILURE (Status))      {          return;      } @@ -145,14 +149,18 @@ AcpiTbInstallTableWithOverride (          AcpiTbOverrideTable (NewTableDesc);      } -    AcpiTbInitTableDescriptor (&AcpiGbl_RootTableList.Tables[TableIndex], +    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 (TableIndex == ACPI_TABLE_INDEX_DSDT) +    if (i == AcpiGbl_DsdtIndex)      {          AcpiUtSetIntegerWidth (NewTableDesc->Pointer->Revision);      } @@ -166,7 +174,7 @@ AcpiTbInstallTableWithOverride (   * PARAMETERS:  Address                 - Physical address of DSDT or FACS   *              Signature               - Table signature, NULL if no need to   *                                        match - *              TableIndex              - Index into root table array + *              TableIndex              - Where the table index is returned   *   * RETURN:      Status   * @@ -179,7 +187,7 @@ ACPI_STATUS  AcpiTbInstallFixedTable (      ACPI_PHYSICAL_ADDRESS   Address,      char                    *Signature, -    UINT32                  TableIndex) +    UINT32                  *TableIndex)  {      ACPI_TABLE_DESC         NewTableDesc;      ACPI_STATUS             Status; @@ -214,7 +222,9 @@ AcpiTbInstallFixedTable (          goto ReleaseAndExit;      } -    AcpiTbInstallTableWithOverride (TableIndex, &NewTableDesc, TRUE); +    /* Add the table to the global root table list */ + +    AcpiTbInstallTableWithOverride (&NewTableDesc, TRUE, TableIndex);  ReleaseAndExit: @@ -375,14 +385,7 @@ AcpiTbInstallStandardTable (      /* Add the table to the global root table list */ -    Status = AcpiTbGetNextTableDescriptor (&i, NULL); -    if (ACPI_FAILURE (Status)) -    { -        goto ReleaseAndExit; -    } - -    *TableIndex = i; -    AcpiTbInstallTableWithOverride (i, &NewTableDesc, Override); +    AcpiTbInstallTableWithOverride (&NewTableDesc, Override, TableIndex);  ReleaseAndExit: | 
