xref: /openbmc/linux/drivers/acpi/acpica/achware.h (revision 060f35a317ef09101b128f399dce7ed13d019461)
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