static void acpi_tb_setup_fadt_registers(void) { struct acpi_generic_address *target64; struct acpi_generic_address *source64; u8 pm1_register_byte_width; u32 i; if (acpi_gbl_use_default_register_widths) { for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { target64 = ACPI_ADD_PTR(struct acpi_generic_address, &acpi_gbl_FADT, fadt_info_table[i].address64); if ((target64->address) && (fadt_info_table[i].default_length > 0) && (fadt_info_table[i].default_length != target64->bit_width)) { ACPI_WARNING((AE_INFO, "Invalid length for %s: %d, using default %d", fadt_info_table[i].name, target64->bit_width, fadt_info_table[i]. default_length)); target64->bit_width = fadt_info_table[i].default_length; } } } pm1_register_byte_width = (u8) ACPI_DIV_16(acpi_gbl_FADT.xpm1a_event_block.bit_width); for (i = 0; i < ACPI_FADT_PM_INFO_ENTRIES; i++) { source64 = ACPI_ADD_PTR(struct acpi_generic_address, &acpi_gbl_FADT, fadt_pm_info_table[i].source); if (source64->address) { acpi_tb_init_generic_address(fadt_pm_info_table[i]. target, source64->space_id, pm1_register_byte_width, source64->address + (fadt_pm_info_table[i]. register_num * pm1_register_byte_width)); } } }
static void AcpiTbSetupFadtRegisters ( void) { ACPI_GENERIC_ADDRESS *Target64; ACPI_GENERIC_ADDRESS *Source64; UINT8 Pm1RegisterByteWidth; UINT32 i; /* * Optionally check all register lengths against the default values and * update them if they are incorrect. */ if (AcpiGbl_UseDefaultRegisterWidths) { for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { Target64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, FadtInfoTable[i].Address64); /* * If a valid register (Address != 0) and the (DefaultLength > 0) * (Not a GPE register), then check the width against the default. */ if ((Target64->Address) && (FadtInfoTable[i].DefaultLength > 0) && (FadtInfoTable[i].DefaultLength != Target64->BitWidth)) { ACPI_WARNING ((AE_INFO, "Invalid length for %s: %u, using default %u", FadtInfoTable[i].Name, Target64->BitWidth, FadtInfoTable[i].DefaultLength)); /* Incorrect size, set width to the default */ Target64->BitWidth = FadtInfoTable[i].DefaultLength; } } } /* * Get the length of the individual PM1 registers (enable and status). * Each register is defined to be (event block length / 2). Extra divide * by 8 converts bits to bytes. */ Pm1RegisterByteWidth = (UINT8) ACPI_DIV_16 (AcpiGbl_FADT.XPm1aEventBlock.BitWidth); /* * Calculate separate GAS structs for the PM1x (A/B) Status and Enable * registers. These addresses do not appear (directly) in the FADT, so it * is useful to pre-calculate them from the PM1 Event Block definitions. * * The PM event blocks are split into two register blocks, first is the * PM Status Register block, followed immediately by the PM Enable * Register block. Each is of length (Pm1EventLength/2) * * Note: The PM1A event block is required by the ACPI specification. * However, the PM1B event block is optional and is rarely, if ever, * used. */ for (i = 0; i < ACPI_FADT_PM_INFO_ENTRIES; i++) { Source64 = ACPI_ADD_PTR (ACPI_GENERIC_ADDRESS, &AcpiGbl_FADT, FadtPmInfoTable[i].Source); if (Source64->Address) { AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target, Source64->SpaceId, Pm1RegisterByteWidth, Source64->Address + (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth)); } } }
static void acpi_tb_setup_fadt_registers(void) { struct acpi_generic_address *target64; struct acpi_generic_address *source64; u8 pm1_register_byte_width; u32 i; /* * Optionally check all register lengths against the default values and * update them if they are incorrect. */ if (acpi_gbl_use_default_register_widths) { for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { target64 = ACPI_ADD_PTR(struct acpi_generic_address, &acpi_gbl_FADT, fadt_info_table[i].address64); /* * If a valid register (Address != 0) and the (default_length > 0) * (Not a GPE register), then check the width against the default. */ if ((target64->address) && (fadt_info_table[i].default_length > 0) && (fadt_info_table[i].default_length != target64->bit_width)) { ACPI_BIOS_WARNING((AE_INFO, "Invalid length for FADT/%s: %u, using default %u", fadt_info_table[i].name, target64->bit_width, fadt_info_table[i]. default_length)); /* Incorrect size, set width to the default */ target64->bit_width = fadt_info_table[i].default_length; } } } /* * Get the length of the individual PM1 registers (enable and status). * Each register is defined to be (event block length / 2). Extra divide * by 8 converts bits to bytes. */ pm1_register_byte_width = (u8) ACPI_DIV_16(acpi_gbl_FADT.xpm1a_event_block.bit_width); /* * Calculate separate GAS structs for the PM1x (A/B) Status and Enable * registers. These addresses do not appear (directly) in the FADT, so it * is useful to pre-calculate them from the PM1 Event Block definitions. * * The PM event blocks are split into two register blocks, first is the * PM Status Register block, followed immediately by the PM Enable * Register block. Each is of length (pm1_event_length/2) * * Note: The PM1A event block is required by the ACPI specification. * However, the PM1B event block is optional and is rarely, if ever, * used. */ for (i = 0; i < ACPI_FADT_PM_INFO_ENTRIES; i++) { source64 = ACPI_ADD_PTR(struct acpi_generic_address, &acpi_gbl_FADT, fadt_pm_info_table[i].source); if (source64->address) { acpi_tb_init_generic_address(fadt_pm_info_table[i]. target, source64->space_id, pm1_register_byte_width, source64->address + (fadt_pm_info_table[i]. register_num * pm1_register_byte_width), "PmRegisters"); } } }