162306a36Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
262306a36Sopenharmony_ci/******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Name: hwxfsleep.c - ACPI Hardware Sleep/Wake External Interfaces
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci *****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define EXPORT_ACPI_INTERFACES
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <acpi/acpi.h>
1362306a36Sopenharmony_ci#include "accommon.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define _COMPONENT          ACPI_HARDWARE
1662306a36Sopenharmony_ciACPI_MODULE_NAME("hwxfsleep")
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* Local prototypes */
1962306a36Sopenharmony_ci#if (!ACPI_REDUCED_HARDWARE)
2062306a36Sopenharmony_cistatic acpi_status
2162306a36Sopenharmony_ciacpi_hw_set_firmware_waking_vector(struct acpi_table_facs *facs,
2262306a36Sopenharmony_ci				   acpi_physical_address physical_address,
2362306a36Sopenharmony_ci				   acpi_physical_address physical_address64);
2462306a36Sopenharmony_ci#endif
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/*
2762306a36Sopenharmony_ci * These functions are removed for the ACPI_REDUCED_HARDWARE case:
2862306a36Sopenharmony_ci *      acpi_set_firmware_waking_vector
2962306a36Sopenharmony_ci *      acpi_enter_sleep_state_s4bios
3062306a36Sopenharmony_ci */
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#if (!ACPI_REDUCED_HARDWARE)
3362306a36Sopenharmony_ci/*******************************************************************************
3462306a36Sopenharmony_ci *
3562306a36Sopenharmony_ci * FUNCTION:    acpi_hw_set_firmware_waking_vector
3662306a36Sopenharmony_ci *
3762306a36Sopenharmony_ci * PARAMETERS:  facs                - Pointer to FACS table
3862306a36Sopenharmony_ci *              physical_address    - 32-bit physical address of ACPI real mode
3962306a36Sopenharmony_ci *                                    entry point
4062306a36Sopenharmony_ci *              physical_address64  - 64-bit physical address of ACPI protected
4162306a36Sopenharmony_ci *                                    mode entry point
4262306a36Sopenharmony_ci *
4362306a36Sopenharmony_ci * RETURN:      Status
4462306a36Sopenharmony_ci *
4562306a36Sopenharmony_ci * DESCRIPTION: Sets the firmware_waking_vector fields of the FACS
4662306a36Sopenharmony_ci *
4762306a36Sopenharmony_ci ******************************************************************************/
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistatic acpi_status
5062306a36Sopenharmony_ciacpi_hw_set_firmware_waking_vector(struct acpi_table_facs *facs,
5162306a36Sopenharmony_ci				   acpi_physical_address physical_address,
5262306a36Sopenharmony_ci				   acpi_physical_address physical_address64)
5362306a36Sopenharmony_ci{
5462306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_hw_set_firmware_waking_vector);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	/*
5862306a36Sopenharmony_ci	 * According to the ACPI specification 2.0c and later, the 64-bit
5962306a36Sopenharmony_ci	 * waking vector should be cleared and the 32-bit waking vector should
6062306a36Sopenharmony_ci	 * be used, unless we want the wake-up code to be called by the BIOS in
6162306a36Sopenharmony_ci	 * Protected Mode.  Some systems (for example HP dv5-1004nr) are known
6262306a36Sopenharmony_ci	 * to fail to resume if the 64-bit vector is used.
6362306a36Sopenharmony_ci	 */
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	/* Set the 32-bit vector */
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	facs->firmware_waking_vector = (u32)physical_address;
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci	if (facs->length > 32) {
7062306a36Sopenharmony_ci		if (facs->version >= 1) {
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci			/* Set the 64-bit vector */
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci			facs->xfirmware_waking_vector = physical_address64;
7562306a36Sopenharmony_ci		} else {
7662306a36Sopenharmony_ci			/* Clear the 64-bit vector if it exists */
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci			facs->xfirmware_waking_vector = 0;
7962306a36Sopenharmony_ci		}
8062306a36Sopenharmony_ci	}
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	return_ACPI_STATUS(AE_OK);
8362306a36Sopenharmony_ci}
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci/*******************************************************************************
8662306a36Sopenharmony_ci *
8762306a36Sopenharmony_ci * FUNCTION:    acpi_set_firmware_waking_vector
8862306a36Sopenharmony_ci *
8962306a36Sopenharmony_ci * PARAMETERS:  physical_address    - 32-bit physical address of ACPI real mode
9062306a36Sopenharmony_ci *                                    entry point
9162306a36Sopenharmony_ci *              physical_address64  - 64-bit physical address of ACPI protected
9262306a36Sopenharmony_ci *                                    mode entry point
9362306a36Sopenharmony_ci *
9462306a36Sopenharmony_ci * RETURN:      Status
9562306a36Sopenharmony_ci *
9662306a36Sopenharmony_ci * DESCRIPTION: Sets the firmware_waking_vector fields of the FACS
9762306a36Sopenharmony_ci *
9862306a36Sopenharmony_ci ******************************************************************************/
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciacpi_status
10162306a36Sopenharmony_ciacpi_set_firmware_waking_vector(acpi_physical_address physical_address,
10262306a36Sopenharmony_ci				acpi_physical_address physical_address64)
10362306a36Sopenharmony_ci{
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector);
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci	if (acpi_gbl_FACS) {
10862306a36Sopenharmony_ci		(void)acpi_hw_set_firmware_waking_vector(acpi_gbl_FACS,
10962306a36Sopenharmony_ci							 physical_address,
11062306a36Sopenharmony_ci							 physical_address64);
11162306a36Sopenharmony_ci	}
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci	return_ACPI_STATUS(AE_OK);
11462306a36Sopenharmony_ci}
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vector)
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci/*******************************************************************************
11962306a36Sopenharmony_ci *
12062306a36Sopenharmony_ci * FUNCTION:    acpi_enter_sleep_state_s4bios
12162306a36Sopenharmony_ci *
12262306a36Sopenharmony_ci * PARAMETERS:  None
12362306a36Sopenharmony_ci *
12462306a36Sopenharmony_ci * RETURN:      Status
12562306a36Sopenharmony_ci *
12662306a36Sopenharmony_ci * DESCRIPTION: Perform a S4 bios request.
12762306a36Sopenharmony_ci *              THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
12862306a36Sopenharmony_ci *
12962306a36Sopenharmony_ci ******************************************************************************/
13062306a36Sopenharmony_ciacpi_status acpi_enter_sleep_state_s4bios(void)
13162306a36Sopenharmony_ci{
13262306a36Sopenharmony_ci	u32 in_value;
13362306a36Sopenharmony_ci	acpi_status status;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_s4bios);
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci	/* Clear the wake status bit (PM1) */
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci	status =
14062306a36Sopenharmony_ci	    acpi_write_bit_register(ACPI_BITREG_WAKE_STATUS, ACPI_CLEAR_STATUS);
14162306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
14262306a36Sopenharmony_ci		return_ACPI_STATUS(status);
14362306a36Sopenharmony_ci	}
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci	status = acpi_hw_clear_acpi_status();
14662306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
14762306a36Sopenharmony_ci		return_ACPI_STATUS(status);
14862306a36Sopenharmony_ci	}
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci	/*
15162306a36Sopenharmony_ci	 * 1) Disable all GPEs
15262306a36Sopenharmony_ci	 * 2) Enable all wakeup GPEs
15362306a36Sopenharmony_ci	 */
15462306a36Sopenharmony_ci	status = acpi_hw_disable_all_gpes();
15562306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
15662306a36Sopenharmony_ci		return_ACPI_STATUS(status);
15762306a36Sopenharmony_ci	}
15862306a36Sopenharmony_ci	acpi_gbl_system_awake_and_running = FALSE;
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci	status = acpi_hw_enable_all_wakeup_gpes();
16162306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
16262306a36Sopenharmony_ci		return_ACPI_STATUS(status);
16362306a36Sopenharmony_ci	}
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci	status = acpi_hw_write_port(acpi_gbl_FADT.smi_command,
16662306a36Sopenharmony_ci				    (u32)acpi_gbl_FADT.s4_bios_request, 8);
16762306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
16862306a36Sopenharmony_ci		return_ACPI_STATUS(status);
16962306a36Sopenharmony_ci	}
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci	do {
17262306a36Sopenharmony_ci		acpi_os_stall(ACPI_USEC_PER_MSEC);
17362306a36Sopenharmony_ci		status =
17462306a36Sopenharmony_ci		    acpi_read_bit_register(ACPI_BITREG_WAKE_STATUS, &in_value);
17562306a36Sopenharmony_ci		if (ACPI_FAILURE(status)) {
17662306a36Sopenharmony_ci			return_ACPI_STATUS(status);
17762306a36Sopenharmony_ci		}
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci	} while (!in_value);
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci	return_ACPI_STATUS(AE_OK);
18262306a36Sopenharmony_ci}
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios)
18562306a36Sopenharmony_ci#endif				/* !ACPI_REDUCED_HARDWARE */
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci/*******************************************************************************
18862306a36Sopenharmony_ci *
18962306a36Sopenharmony_ci * FUNCTION:    acpi_enter_sleep_state_prep
19062306a36Sopenharmony_ci *
19162306a36Sopenharmony_ci * PARAMETERS:  sleep_state         - Which sleep state to enter
19262306a36Sopenharmony_ci *
19362306a36Sopenharmony_ci * RETURN:      Status
19462306a36Sopenharmony_ci *
19562306a36Sopenharmony_ci * DESCRIPTION: Prepare to enter a system sleep state.
19662306a36Sopenharmony_ci *              This function must execute with interrupts enabled.
19762306a36Sopenharmony_ci *              We break sleeping into 2 stages so that OSPM can handle
19862306a36Sopenharmony_ci *              various OS-specific tasks between the two steps.
19962306a36Sopenharmony_ci *
20062306a36Sopenharmony_ci ******************************************************************************/
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ciacpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
20362306a36Sopenharmony_ci{
20462306a36Sopenharmony_ci	acpi_status status;
20562306a36Sopenharmony_ci	struct acpi_object_list arg_list;
20662306a36Sopenharmony_ci	union acpi_object arg;
20762306a36Sopenharmony_ci	u32 sst_value;
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep);
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci	status = acpi_get_sleep_type_data(sleep_state,
21262306a36Sopenharmony_ci					  &acpi_gbl_sleep_type_a,
21362306a36Sopenharmony_ci					  &acpi_gbl_sleep_type_b);
21462306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
21562306a36Sopenharmony_ci		return_ACPI_STATUS(status);
21662306a36Sopenharmony_ci	}
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci	status = acpi_get_sleep_type_data(ACPI_STATE_S0,
21962306a36Sopenharmony_ci					  &acpi_gbl_sleep_type_a_s0,
22062306a36Sopenharmony_ci					  &acpi_gbl_sleep_type_b_s0);
22162306a36Sopenharmony_ci	if (ACPI_FAILURE(status)) {
22262306a36Sopenharmony_ci		acpi_gbl_sleep_type_a_s0 = ACPI_SLEEP_TYPE_INVALID;
22362306a36Sopenharmony_ci	}
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci	/* Execute the _PTS method (Prepare To Sleep) */
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci	arg_list.count = 1;
22862306a36Sopenharmony_ci	arg_list.pointer = &arg;
22962306a36Sopenharmony_ci	arg.type = ACPI_TYPE_INTEGER;
23062306a36Sopenharmony_ci	arg.integer.value = sleep_state;
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci	status =
23362306a36Sopenharmony_ci	    acpi_evaluate_object(NULL, METHOD_PATHNAME__PTS, &arg_list, NULL);
23462306a36Sopenharmony_ci	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
23562306a36Sopenharmony_ci		return_ACPI_STATUS(status);
23662306a36Sopenharmony_ci	}
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci	/* Setup the argument to the _SST method (System STatus) */
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci	switch (sleep_state) {
24162306a36Sopenharmony_ci	case ACPI_STATE_S0:
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci		sst_value = ACPI_SST_WORKING;
24462306a36Sopenharmony_ci		break;
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ci	case ACPI_STATE_S1:
24762306a36Sopenharmony_ci	case ACPI_STATE_S2:
24862306a36Sopenharmony_ci	case ACPI_STATE_S3:
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ci		sst_value = ACPI_SST_SLEEPING;
25162306a36Sopenharmony_ci		break;
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	case ACPI_STATE_S4:
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ci		sst_value = ACPI_SST_SLEEP_CONTEXT;
25662306a36Sopenharmony_ci		break;
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci	default:
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci		sst_value = ACPI_SST_INDICATOR_OFF;	/* Default is off */
26162306a36Sopenharmony_ci		break;
26262306a36Sopenharmony_ci	}
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci	/*
26562306a36Sopenharmony_ci	 * Set the system indicators to show the desired sleep state.
26662306a36Sopenharmony_ci	 * _SST is an optional method (return no error if not found)
26762306a36Sopenharmony_ci	 */
26862306a36Sopenharmony_ci	acpi_hw_execute_sleep_method(METHOD_PATHNAME__SST, sst_value);
26962306a36Sopenharmony_ci	return_ACPI_STATUS(AE_OK);
27062306a36Sopenharmony_ci}
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci/*******************************************************************************
27562306a36Sopenharmony_ci *
27662306a36Sopenharmony_ci * FUNCTION:    acpi_enter_sleep_state
27762306a36Sopenharmony_ci *
27862306a36Sopenharmony_ci * PARAMETERS:  sleep_state         - Which sleep state to enter
27962306a36Sopenharmony_ci *
28062306a36Sopenharmony_ci * RETURN:      Status
28162306a36Sopenharmony_ci *
28262306a36Sopenharmony_ci * DESCRIPTION: Enter a system sleep state
28362306a36Sopenharmony_ci *              THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
28462306a36Sopenharmony_ci *
28562306a36Sopenharmony_ci ******************************************************************************/
28662306a36Sopenharmony_ciacpi_status acpi_enter_sleep_state(u8 sleep_state)
28762306a36Sopenharmony_ci{
28862306a36Sopenharmony_ci	acpi_status status;
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_enter_sleep_state);
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci	if ((acpi_gbl_sleep_type_a > ACPI_SLEEP_TYPE_MAX) ||
29362306a36Sopenharmony_ci	    (acpi_gbl_sleep_type_b > ACPI_SLEEP_TYPE_MAX)) {
29462306a36Sopenharmony_ci		ACPI_ERROR((AE_INFO, "Sleep values out of range: A=0x%X B=0x%X",
29562306a36Sopenharmony_ci			    acpi_gbl_sleep_type_a, acpi_gbl_sleep_type_b));
29662306a36Sopenharmony_ci		return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
29762306a36Sopenharmony_ci	}
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci#if !ACPI_REDUCED_HARDWARE
30062306a36Sopenharmony_ci	if (!acpi_gbl_reduced_hardware)
30162306a36Sopenharmony_ci		status = acpi_hw_legacy_sleep(sleep_state);
30262306a36Sopenharmony_ci	else
30362306a36Sopenharmony_ci#endif
30462306a36Sopenharmony_ci		status = acpi_hw_extended_sleep(sleep_state);
30562306a36Sopenharmony_ci	return_ACPI_STATUS(status);
30662306a36Sopenharmony_ci}
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_enter_sleep_state)
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci/*******************************************************************************
31162306a36Sopenharmony_ci *
31262306a36Sopenharmony_ci * FUNCTION:    acpi_leave_sleep_state_prep
31362306a36Sopenharmony_ci *
31462306a36Sopenharmony_ci * PARAMETERS:  sleep_state         - Which sleep state we are exiting
31562306a36Sopenharmony_ci *
31662306a36Sopenharmony_ci * RETURN:      Status
31762306a36Sopenharmony_ci *
31862306a36Sopenharmony_ci * DESCRIPTION: Perform the first state of OS-independent ACPI cleanup after a
31962306a36Sopenharmony_ci *              sleep. Called with interrupts DISABLED.
32062306a36Sopenharmony_ci *              We break wake/resume into 2 stages so that OSPM can handle
32162306a36Sopenharmony_ci *              various OS-specific tasks between the two steps.
32262306a36Sopenharmony_ci *
32362306a36Sopenharmony_ci ******************************************************************************/
32462306a36Sopenharmony_ciacpi_status acpi_leave_sleep_state_prep(u8 sleep_state)
32562306a36Sopenharmony_ci{
32662306a36Sopenharmony_ci	acpi_status status;
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep);
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci#if !ACPI_REDUCED_HARDWARE
33162306a36Sopenharmony_ci	if (!acpi_gbl_reduced_hardware)
33262306a36Sopenharmony_ci		status = acpi_hw_legacy_wake_prep(sleep_state);
33362306a36Sopenharmony_ci	else
33462306a36Sopenharmony_ci#endif
33562306a36Sopenharmony_ci		status = acpi_hw_extended_wake_prep(sleep_state);
33662306a36Sopenharmony_ci	return_ACPI_STATUS(status);
33762306a36Sopenharmony_ci}
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_leave_sleep_state_prep)
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci/*******************************************************************************
34262306a36Sopenharmony_ci *
34362306a36Sopenharmony_ci * FUNCTION:    acpi_leave_sleep_state
34462306a36Sopenharmony_ci *
34562306a36Sopenharmony_ci * PARAMETERS:  sleep_state         - Which sleep state we are exiting
34662306a36Sopenharmony_ci *
34762306a36Sopenharmony_ci * RETURN:      Status
34862306a36Sopenharmony_ci *
34962306a36Sopenharmony_ci * DESCRIPTION: Perform OS-independent ACPI cleanup after a sleep
35062306a36Sopenharmony_ci *              Called with interrupts ENABLED.
35162306a36Sopenharmony_ci *
35262306a36Sopenharmony_ci ******************************************************************************/
35362306a36Sopenharmony_ciacpi_status acpi_leave_sleep_state(u8 sleep_state)
35462306a36Sopenharmony_ci{
35562306a36Sopenharmony_ci	acpi_status status;
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(acpi_leave_sleep_state);
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci#if !ACPI_REDUCED_HARDWARE
36062306a36Sopenharmony_ci	if (!acpi_gbl_reduced_hardware)
36162306a36Sopenharmony_ci		status = acpi_hw_legacy_wake(sleep_state);
36262306a36Sopenharmony_ci	else
36362306a36Sopenharmony_ci#endif
36462306a36Sopenharmony_ci		status = acpi_hw_extended_wake(sleep_state);
36562306a36Sopenharmony_ci	return_ACPI_STATUS(status);
36662306a36Sopenharmony_ci}
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ciACPI_EXPORT_SYMBOL(acpi_leave_sleep_state)
369