|
@@ -50,6 +50,13 @@
|
|
ACPI_MODULE_NAME("hwxfsleep")
|
|
ACPI_MODULE_NAME("hwxfsleep")
|
|
|
|
|
|
/* Local prototypes */
|
|
/* Local prototypes */
|
|
|
|
+#if (!ACPI_REDUCED_HARDWARE)
|
|
|
|
+static acpi_status
|
|
|
|
+acpi_hw_set_firmware_waking_vectors(struct acpi_table_facs *facs,
|
|
|
|
+ acpi_physical_address physical_address,
|
|
|
|
+ acpi_physical_address physical_address64);
|
|
|
|
+#endif
|
|
|
|
+
|
|
static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id);
|
|
static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -81,9 +88,10 @@ static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
|
|
#if (!ACPI_REDUCED_HARDWARE)
|
|
#if (!ACPI_REDUCED_HARDWARE)
|
|
/*******************************************************************************
|
|
/*******************************************************************************
|
|
*
|
|
*
|
|
- * FUNCTION: acpi_set_firmware_waking_vectors
|
|
|
|
|
|
+ * FUNCTION: acpi_hw_set_firmware_waking_vectors
|
|
*
|
|
*
|
|
- * PARAMETERS: physical_address - 32-bit physical address of ACPI real mode
|
|
|
|
|
|
+ * PARAMETERS: facs - Pointer to FACS table
|
|
|
|
+ * physical_address - 32-bit physical address of ACPI real mode
|
|
* entry point.
|
|
* entry point.
|
|
* physical_address64 - 64-bit physical address of ACPI protected
|
|
* physical_address64 - 64-bit physical address of ACPI protected
|
|
* mode entry point.
|
|
* mode entry point.
|
|
@@ -94,11 +102,12 @@ static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
|
|
*
|
|
*
|
|
******************************************************************************/
|
|
******************************************************************************/
|
|
|
|
|
|
-acpi_status
|
|
|
|
-acpi_set_firmware_waking_vectors(acpi_physical_address physical_address,
|
|
|
|
- acpi_physical_address physical_address64)
|
|
|
|
|
|
+static acpi_status
|
|
|
|
+acpi_hw_set_firmware_waking_vectors(struct acpi_table_facs *facs,
|
|
|
|
+ acpi_physical_address physical_address,
|
|
|
|
+ acpi_physical_address physical_address64)
|
|
{
|
|
{
|
|
- ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vectors);
|
|
|
|
|
|
+ ACPI_FUNCTION_TRACE(acpi_hw_set_firmware_waking_vectors);
|
|
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -111,25 +120,66 @@ acpi_set_firmware_waking_vectors(acpi_physical_address physical_address,
|
|
|
|
|
|
/* Set the 32-bit vector */
|
|
/* Set the 32-bit vector */
|
|
|
|
|
|
- acpi_gbl_FACS->firmware_waking_vector = (u32)physical_address;
|
|
|
|
|
|
+ facs->firmware_waking_vector = (u32)physical_address;
|
|
|
|
|
|
- if (acpi_gbl_FACS->length > 32) {
|
|
|
|
- if (acpi_gbl_FACS->version >= 1) {
|
|
|
|
|
|
+ if (facs->length > 32) {
|
|
|
|
+ if (facs->version >= 1) {
|
|
|
|
|
|
/* Set the 64-bit vector */
|
|
/* Set the 64-bit vector */
|
|
|
|
|
|
- acpi_gbl_FACS->xfirmware_waking_vector =
|
|
|
|
- physical_address64;
|
|
|
|
|
|
+ facs->xfirmware_waking_vector = physical_address64;
|
|
} else {
|
|
} else {
|
|
/* Clear the 64-bit vector if it exists */
|
|
/* Clear the 64-bit vector if it exists */
|
|
|
|
|
|
- acpi_gbl_FACS->xfirmware_waking_vector = 0;
|
|
|
|
|
|
+ facs->xfirmware_waking_vector = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return_ACPI_STATUS(AE_OK);
|
|
return_ACPI_STATUS(AE_OK);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*******************************************************************************
|
|
|
|
+ *
|
|
|
|
+ * FUNCTION: acpi_set_firmware_waking_vectors
|
|
|
|
+ *
|
|
|
|
+ * PARAMETERS: physical_address - 32-bit physical address of ACPI real mode
|
|
|
|
+ * entry point.
|
|
|
|
+ * physical_address64 - 64-bit physical address of ACPI protected
|
|
|
|
+ * mode entry point.
|
|
|
|
+ *
|
|
|
|
+ * RETURN: Status
|
|
|
|
+ *
|
|
|
|
+ * DESCRIPTION: Sets the firmware_waking_vector fields of the FACS
|
|
|
|
+ *
|
|
|
|
+ ******************************************************************************/
|
|
|
|
+
|
|
|
|
+acpi_status
|
|
|
|
+acpi_set_firmware_waking_vectors(acpi_physical_address physical_address,
|
|
|
|
+ acpi_physical_address physical_address64)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+ ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vectors);
|
|
|
|
+
|
|
|
|
+ /* If Hardware Reduced flag is set, there is no FACS */
|
|
|
|
+
|
|
|
|
+ if (acpi_gbl_reduced_hardware) {
|
|
|
|
+ return_ACPI_STATUS (AE_OK);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (acpi_gbl_facs32) {
|
|
|
|
+ (void)acpi_hw_set_firmware_waking_vectors(acpi_gbl_facs32,
|
|
|
|
+ physical_address,
|
|
|
|
+ physical_address64);
|
|
|
|
+ }
|
|
|
|
+ if (acpi_gbl_facs64) {
|
|
|
|
+ (void)acpi_hw_set_firmware_waking_vectors(acpi_gbl_facs64,
|
|
|
|
+ physical_address,
|
|
|
|
+ physical_address64);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return_ACPI_STATUS(AE_OK);
|
|
|
|
+}
|
|
|
|
+
|
|
ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vectors)
|
|
ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vectors)
|
|
|
|
|
|
/*******************************************************************************
|
|
/*******************************************************************************
|