195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2e2f7a777SLen Brown /******************************************************************************
3e2f7a777SLen Brown *
4e2f7a777SLen Brown * Name: achware.h -- hardware specific interfaces
5e2f7a777SLen Brown *
6*612c2932SBob Moore * Copyright (C) 2000 - 2023, Intel Corp.
7e2f7a777SLen Brown *
895857638SErik Schmauss *****************************************************************************/
9e2f7a777SLen Brown
10e2f7a777SLen Brown #ifndef __ACHWARE_H__
11e2f7a777SLen Brown #define __ACHWARE_H__
12e2f7a777SLen Brown
13e2f7a777SLen Brown /* Values for the _SST predefined method */
14e2f7a777SLen Brown
15e2f7a777SLen Brown #define ACPI_SST_INDICATOR_OFF 0
16e2f7a777SLen Brown #define ACPI_SST_WORKING 1
17e2f7a777SLen Brown #define ACPI_SST_WAKING 2
18e2f7a777SLen Brown #define ACPI_SST_SLEEPING 3
19e2f7a777SLen Brown #define ACPI_SST_SLEEP_CONTEXT 4
20e2f7a777SLen Brown
21e2f7a777SLen Brown /*
22e2f7a777SLen Brown * hwacpi - high level functions
23e2f7a777SLen Brown */
24e2f7a777SLen Brown acpi_status acpi_hw_set_mode(u32 mode);
25e2f7a777SLen Brown
26e2f7a777SLen Brown u32 acpi_hw_get_mode(void);
27e2f7a777SLen Brown
28e2f7a777SLen Brown /*
29e2f7a777SLen Brown * hwregs - ACPI Register I/O
30e2f7a777SLen Brown */
31c6b5774cSBob Moore acpi_status
32c6b5774cSBob Moore acpi_hw_validate_register(struct acpi_generic_address *reg,
33c6b5774cSBob Moore u8 max_bit_width, u64 *address);
34c6b5774cSBob Moore
358381c54fSLv Zheng acpi_status acpi_hw_read(u64 *value, struct acpi_generic_address *reg);
36c6b5774cSBob Moore
378381c54fSLv Zheng acpi_status acpi_hw_write(u64 value, struct acpi_generic_address *reg);
38c6b5774cSBob Moore
39e2f7a777SLen Brown struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id);
40e2f7a777SLen Brown
4132c9ef99SBob Moore acpi_status acpi_hw_write_pm1_control(u32 pm1a_control, u32 pm1b_control);
4232c9ef99SBob Moore
4332c9ef99SBob Moore acpi_status acpi_hw_register_read(u32 register_id, u32 *return_value);
44e2f7a777SLen Brown
45e2f7a777SLen Brown acpi_status acpi_hw_register_write(u32 register_id, u32 value);
46e2f7a777SLen Brown
47e2f7a777SLen Brown acpi_status acpi_hw_clear_acpi_status(void);
48e2f7a777SLen Brown
49e2f7a777SLen Brown /*
5070958576SBob Moore * hwsleep - sleep/wake support (Legacy sleep registers)
5170958576SBob Moore */
523f6f49c7SLen Brown acpi_status acpi_hw_legacy_sleep(u8 sleep_state);
5370958576SBob Moore
543f6f49c7SLen Brown acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state);
5570958576SBob Moore
563f6f49c7SLen Brown acpi_status acpi_hw_legacy_wake(u8 sleep_state);
5770958576SBob Moore
5870958576SBob Moore /*
5970958576SBob Moore * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers)
602feec47dSBob Moore */
61f99648b1SBob Moore void acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument);
622feec47dSBob Moore
633f6f49c7SLen Brown acpi_status acpi_hw_extended_sleep(u8 sleep_state);
642feec47dSBob Moore
653f6f49c7SLen Brown acpi_status acpi_hw_extended_wake_prep(u8 sleep_state);
662feec47dSBob Moore
673f6f49c7SLen Brown acpi_status acpi_hw_extended_wake(u8 sleep_state);
682feec47dSBob Moore
692feec47dSBob Moore /*
707f071903SBob Moore * hwvalid - Port I/O with validation
717f071903SBob Moore */
727f071903SBob Moore acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width);
737f071903SBob Moore
747f071903SBob Moore acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width);
757f071903SBob Moore
7684b43284SRafael J. Wysocki acpi_status acpi_hw_validate_io_block(u64 address, u32 bit_width, u32 count);
7784b43284SRafael J. Wysocki
787f071903SBob Moore /*
79e2f7a777SLen Brown * hwgpe - GPE support
80e2f7a777SLen Brown */
819da8e9acSRafael J. Wysocki acpi_status acpi_hw_gpe_read(u64 *value, struct acpi_gpe_address *reg);
82f06011adSRafael J. Wysocki
839da8e9acSRafael J. Wysocki acpi_status acpi_hw_gpe_write(u64 value, struct acpi_gpe_address *reg);
84f06011adSRafael J. Wysocki
851d94e1e8SFeng Tang u32 acpi_hw_get_gpe_register_bit(struct acpi_gpe_event_info *gpe_event_info);
86e4e9a735SRafael J. Wysocki
87fd247447SRafael J. Wysocki acpi_status
88da503373SLin Ming acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action);
89e2f7a777SLen Brown
90e2f7a777SLen Brown acpi_status
91e2f7a777SLen Brown acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
92e2f7a777SLen Brown struct acpi_gpe_block_info *gpe_block, void *context);
93e2f7a777SLen Brown
94e2f7a777SLen Brown acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info);
95e2f7a777SLen Brown
96e2f7a777SLen Brown acpi_status
97e2f7a777SLen Brown acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
98e2f7a777SLen Brown struct acpi_gpe_block_info *gpe_block, void *context);
99e2f7a777SLen Brown
100e2f7a777SLen Brown acpi_status
101e2f7a777SLen Brown acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
102e2f7a777SLen Brown acpi_event_status *event_status);
103e2f7a777SLen Brown
104e2f7a777SLen Brown acpi_status acpi_hw_enable_all_runtime_gpes(void);
105e2f7a777SLen Brown
1060ce792d6SRafael J. Wysocki u8 acpi_hw_check_all_gpes(acpi_handle gpe_skip_device, u32 gpe_skip_number);
107ea128834SRafael J. Wysocki
108e2f7a777SLen Brown acpi_status
109e2f7a777SLen Brown acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
110e2f7a777SLen Brown struct acpi_gpe_block_info *gpe_block,
111e2f7a777SLen Brown void *context);
112e2f7a777SLen Brown
113bd23fac3SSinan Kaya #ifdef ACPI_PCI_CONFIGURED
114e2f7a777SLen Brown /*
11595abccb5SBob Moore * hwpci - PCI configuration support
11695abccb5SBob Moore */
11795abccb5SBob Moore acpi_status
11895abccb5SBob Moore acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id,
11995abccb5SBob Moore acpi_handle root_pci_device, acpi_handle pci_region);
120bd23fac3SSinan Kaya #else
121bd23fac3SSinan Kaya static inline acpi_status
acpi_hw_derive_pci_id(struct acpi_pci_id * pci_id,acpi_handle root_pci_device,acpi_handle pci_region)122bd23fac3SSinan Kaya acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id, acpi_handle root_pci_device,
123bd23fac3SSinan Kaya acpi_handle pci_region)
124bd23fac3SSinan Kaya {
125bd23fac3SSinan Kaya return AE_SUPPORT;
126bd23fac3SSinan Kaya }
127bd23fac3SSinan Kaya #endif
12895abccb5SBob Moore
129e2f7a777SLen Brown #endif /* __ACHWARE_H__ */
130