162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Name: achware.h -- hardware specific interfaces 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci *****************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ACHWARE_H__ 1162306a36Sopenharmony_ci#define __ACHWARE_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* Values for the _SST predefined method */ 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define ACPI_SST_INDICATOR_OFF 0 1662306a36Sopenharmony_ci#define ACPI_SST_WORKING 1 1762306a36Sopenharmony_ci#define ACPI_SST_WAKING 2 1862306a36Sopenharmony_ci#define ACPI_SST_SLEEPING 3 1962306a36Sopenharmony_ci#define ACPI_SST_SLEEP_CONTEXT 4 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * hwacpi - high level functions 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_ciacpi_status acpi_hw_set_mode(u32 mode); 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ciu32 acpi_hw_get_mode(void); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* 2962306a36Sopenharmony_ci * hwregs - ACPI Register I/O 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_ciacpi_status 3262306a36Sopenharmony_ciacpi_hw_validate_register(struct acpi_generic_address *reg, 3362306a36Sopenharmony_ci u8 max_bit_width, u64 *address); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciacpi_status acpi_hw_read(u64 *value, struct acpi_generic_address *reg); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciacpi_status acpi_hw_write(u64 value, struct acpi_generic_address *reg); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistruct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciacpi_status acpi_hw_write_pm1_control(u32 pm1a_control, u32 pm1b_control); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciacpi_status acpi_hw_register_read(u32 register_id, u32 *return_value); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciacpi_status acpi_hw_register_write(u32 register_id, u32 value); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciacpi_status acpi_hw_clear_acpi_status(void); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* 5062306a36Sopenharmony_ci * hwsleep - sleep/wake support (Legacy sleep registers) 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ciacpi_status acpi_hw_legacy_sleep(u8 sleep_state); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciacpi_status acpi_hw_legacy_wake_prep(u8 sleep_state); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciacpi_status acpi_hw_legacy_wake(u8 sleep_state); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* 5962306a36Sopenharmony_ci * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers) 6062306a36Sopenharmony_ci */ 6162306a36Sopenharmony_civoid acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciacpi_status acpi_hw_extended_sleep(u8 sleep_state); 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciacpi_status acpi_hw_extended_wake_prep(u8 sleep_state); 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ciacpi_status acpi_hw_extended_wake(u8 sleep_state); 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* 7062306a36Sopenharmony_ci * hwvalid - Port I/O with validation 7162306a36Sopenharmony_ci */ 7262306a36Sopenharmony_ciacpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width); 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ciacpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width); 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ciacpi_status acpi_hw_validate_io_block(u64 address, u32 bit_width, u32 count); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* 7962306a36Sopenharmony_ci * hwgpe - GPE support 8062306a36Sopenharmony_ci */ 8162306a36Sopenharmony_ciacpi_status acpi_hw_gpe_read(u64 *value, struct acpi_gpe_address *reg); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciacpi_status acpi_hw_gpe_write(u64 value, struct acpi_gpe_address *reg); 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciu32 acpi_hw_get_gpe_register_bit(struct acpi_gpe_event_info *gpe_event_info); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciacpi_status 8862306a36Sopenharmony_ciacpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action); 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciacpi_status 9162306a36Sopenharmony_ciacpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 9262306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, void *context); 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ciacpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info); 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ciacpi_status 9762306a36Sopenharmony_ciacpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 9862306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, void *context); 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ciacpi_status 10162306a36Sopenharmony_ciacpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info, 10262306a36Sopenharmony_ci acpi_event_status *event_status); 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ciacpi_status acpi_hw_enable_all_runtime_gpes(void); 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ciacpi_status acpi_hw_enable_all_wakeup_gpes(void); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciu8 acpi_hw_check_all_gpes(acpi_handle gpe_skip_device, u32 gpe_skip_number); 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ciacpi_status 11162306a36Sopenharmony_ciacpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, 11262306a36Sopenharmony_ci struct acpi_gpe_block_info *gpe_block, 11362306a36Sopenharmony_ci void *context); 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#ifdef ACPI_PCI_CONFIGURED 11662306a36Sopenharmony_ci/* 11762306a36Sopenharmony_ci * hwpci - PCI configuration support 11862306a36Sopenharmony_ci */ 11962306a36Sopenharmony_ciacpi_status 12062306a36Sopenharmony_ciacpi_hw_derive_pci_id(struct acpi_pci_id *pci_id, 12162306a36Sopenharmony_ci acpi_handle root_pci_device, acpi_handle pci_region); 12262306a36Sopenharmony_ci#else 12362306a36Sopenharmony_cistatic inline acpi_status 12462306a36Sopenharmony_ciacpi_hw_derive_pci_id(struct acpi_pci_id *pci_id, acpi_handle root_pci_device, 12562306a36Sopenharmony_ci acpi_handle pci_region) 12662306a36Sopenharmony_ci{ 12762306a36Sopenharmony_ci return AE_SUPPORT; 12862306a36Sopenharmony_ci} 12962306a36Sopenharmony_ci#endif 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci#endif /* __ACHWARE_H__ */ 132