diff options
Diffstat (limited to 'sys/contrib/dev/acpica/tbconvrt.c')
-rw-r--r-- | sys/contrib/dev/acpica/tbconvrt.c | 126 |
1 files changed, 100 insertions, 26 deletions
diff --git a/sys/contrib/dev/acpica/tbconvrt.c b/sys/contrib/dev/acpica/tbconvrt.c index 1bf7535..c3502e5 100644 --- a/sys/contrib/dev/acpica/tbconvrt.c +++ b/sys/contrib/dev/acpica/tbconvrt.c @@ -1,7 +1,7 @@ /****************************************************************************** * * Module Name: tbconvrt - ACPI Table conversion utilities - * $Revision: 47 $ + * $Revision: 52 $ * *****************************************************************************/ @@ -243,6 +243,36 @@ AcpiTbConvertToXsdt ( } +/****************************************************************************** + * + * FUNCTION: AcpiTbInitGenericAddress + * + * PARAMETERS: NewGasStruct - GAS struct to be initialized + * RegisterBitWidth - Width of this register + * Address - Address of the register + * + * RETURN: None + * + * DESCRIPTION: Initialize a GAS structure. + * + ******************************************************************************/ + +static void +AcpiTbInitGenericAddress ( + ACPI_GENERIC_ADDRESS *NewGasStruct, + UINT8 RegisterBitWidth, + ACPI_PHYSICAL_ADDRESS Address) +{ + + ACPI_STORE_ADDRESS (NewGasStruct->Address, Address); + + NewGasStruct->AddressSpaceId = ACPI_ADR_SPACE_SYSTEM_IO; + NewGasStruct->RegisterBitWidth = RegisterBitWidth; + NewGasStruct->RegisterBitOffset = 0; + NewGasStruct->Reserved = 0; +} + + /******************************************************************************* * * FUNCTION: AcpiTbConvertFadt1 @@ -312,14 +342,39 @@ AcpiTbConvertFadt1 ( /* * Convert the V1.0 block addresses to V2.0 GAS structures */ - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1aEvtBlk, LocalFadt->Pm1EvtLen, LocalFadt->V1_Pm1aEvtBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1bEvtBlk, LocalFadt->Pm1EvtLen, LocalFadt->V1_Pm1bEvtBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1aCntBlk, LocalFadt->Pm1CntLen, LocalFadt->V1_Pm1aCntBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1bCntBlk, LocalFadt->Pm1CntLen, LocalFadt->V1_Pm1bCntBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm2CntBlk, LocalFadt->Pm2CntLen, LocalFadt->V1_Pm2CntBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPmTmrBlk, LocalFadt->PmTmLen, LocalFadt->V1_PmTmrBlk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XGpe0Blk, 0, LocalFadt->V1_Gpe0Blk); - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XGpe1Blk, 0, LocalFadt->V1_Gpe1Blk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1aEvtBlk, LocalFadt->Pm1EvtLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1aEvtBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1bEvtBlk, LocalFadt->Pm1EvtLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1bEvtBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1aCntBlk, LocalFadt->Pm1CntLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1aCntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1bCntBlk, LocalFadt->Pm1CntLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1bCntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm2CntBlk, LocalFadt->Pm2CntLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm2CntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPmTmrBlk, LocalFadt->PmTmLen, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_PmTmrBlk); + AcpiTbInitGenericAddress (&LocalFadt->XGpe0Blk, 0, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Gpe0Blk); + AcpiTbInitGenericAddress (&LocalFadt->XGpe1Blk, 0, + (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Gpe1Blk); + + /* Create separate GAS structs for the PM1 Enable registers */ + + AcpiTbInitGenericAddress (&AcpiGbl_XPm1aEnable, + (UINT8) ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen), + (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (LocalFadt->XPm1aEvtBlk.Address) + + ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen))); + + /* PM1B is optional; leave null if not present */ + + if (ACPI_GET_ADDRESS (LocalFadt->XPm1bEvtBlk.Address)) + { + AcpiTbInitGenericAddress (&AcpiGbl_XPm1bEnable, + (UINT8) ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen), + (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (LocalFadt->XPm1bEvtBlk.Address) + + ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen))); + } } @@ -364,50 +419,69 @@ AcpiTbConvertFadt2 ( if (!(ACPI_GET_ADDRESS (LocalFadt->XPm1aEvtBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1aEvtBlk, - LocalFadt->Pm1EvtLen, LocalFadt->V1_Pm1aEvtBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1aEvtBlk, + LocalFadt->Pm1EvtLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1aEvtBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XPm1bEvtBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1bEvtBlk, - LocalFadt->Pm1EvtLen, LocalFadt->V1_Pm1bEvtBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1bEvtBlk, + LocalFadt->Pm1EvtLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1bEvtBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XPm1aCntBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1aCntBlk, - LocalFadt->Pm1CntLen, LocalFadt->V1_Pm1aCntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1aCntBlk, + LocalFadt->Pm1CntLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1aCntBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XPm1bCntBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm1bCntBlk, - LocalFadt->Pm1CntLen, LocalFadt->V1_Pm1bCntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm1bCntBlk, + LocalFadt->Pm1CntLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm1bCntBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XPm2CntBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPm2CntBlk, - LocalFadt->Pm2CntLen, LocalFadt->V1_Pm2CntBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPm2CntBlk, + LocalFadt->Pm2CntLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Pm2CntBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XPmTmrBlk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XPmTmrBlk, - LocalFadt->PmTmLen, LocalFadt->V1_PmTmrBlk); + AcpiTbInitGenericAddress (&LocalFadt->XPmTmrBlk, + LocalFadt->PmTmLen, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_PmTmrBlk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XGpe0Blk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XGpe0Blk, - 0, LocalFadt->V1_Gpe0Blk); + AcpiTbInitGenericAddress (&LocalFadt->XGpe0Blk, + 0, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Gpe0Blk); } if (!(ACPI_GET_ADDRESS (LocalFadt->XGpe1Blk.Address))) { - ASL_BUILD_GAS_FROM_V1_ENTRY (LocalFadt->XGpe1Blk, - 0, LocalFadt->V1_Gpe1Blk); + AcpiTbInitGenericAddress (&LocalFadt->XGpe1Blk, + 0, (ACPI_PHYSICAL_ADDRESS) LocalFadt->V1_Gpe1Blk); + } + + /* Create separate GAS structs for the PM1 Enable registers */ + + AcpiTbInitGenericAddress (&AcpiGbl_XPm1aEnable, + (UINT8) ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen), + (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (LocalFadt->XPm1aEvtBlk.Address) + + ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen))); + AcpiGbl_XPm1aEnable.AddressSpaceId = LocalFadt->XPm1aEvtBlk.AddressSpaceId; + + /* PM1B is optional; leave null if not present */ + + if (ACPI_GET_ADDRESS (LocalFadt->XPm1bEvtBlk.Address)) + { + AcpiTbInitGenericAddress (&AcpiGbl_XPm1bEnable, + (UINT8) ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen), + (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (LocalFadt->XPm1bEvtBlk.Address) + + ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen))); + AcpiGbl_XPm1bEnable.AddressSpaceId = LocalFadt->XPm1bEvtBlk.AddressSpaceId; } } @@ -491,7 +565,7 @@ AcpiTbConvertTableFadt (void) /* Free the original table */ - TableDesc = &AcpiGbl_AcpiTables[ACPI_TABLE_FADT]; + TableDesc = AcpiGbl_TableLists[ACPI_TABLE_FADT].Next; AcpiTbDeleteSingleTable (TableDesc); /* Install the new table */ |