1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * acpi.h - ACPI Interface
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Copyright (C) 2001 Paul Diefenbaugh <[email protected]>
61da177e4SLinus Torvalds */
71da177e4SLinus Torvalds
81da177e4SLinus Torvalds #ifndef _LINUX_ACPI_H
91da177e4SLinus Torvalds #define _LINUX_ACPI_H
101da177e4SLinus Torvalds
115133375bSRafael J. Wysocki #include <linux/errno.h>
12443dea72SThomas Renninger #include <linux/ioport.h> /* for struct resource */
1390e97820SJiang Liu #include <linux/resource_ext.h>
14cf761af9SMika Westerberg #include <linux/device.h>
1545166620SRob Herring #include <linux/mod_devicetable.h>
16b31384faSRafael J. Wysocki #include <linux/property.h>
17bcbc2265SChristoph Hellwig #include <linux/uuid.h>
18ca53543dSDave Jiang #include <linux/node.h>
193f5948faSDavid Mosberger
2045166620SRob Herring struct irq_domain;
2145166620SRob Herring struct irq_domain_ops;
2245166620SRob Herring
231da177e4SLinus Torvalds #ifndef _LINUX
241da177e4SLinus Torvalds #define _LINUX
251da177e4SLinus Torvalds #endif
26633adabaSLv Zheng #include <acpi/acpi.h>
2779a947bdSThorsten Blum #include <acpi/acpi_numa.h>
28633adabaSLv Zheng
2935732699SDave Jiang #ifdef CONFIG_ACPI
3035732699SDave Jiang
3135732699SDave Jiang #include <linux/list.h>
3235732699SDave Jiang #include <linux/dynamic_debug.h>
3335732699SDave Jiang #include <linux/module.h>
3435732699SDave Jiang #include <linux/mutex.h>
3535732699SDave Jiang #include <linux/fw_table.h>
3635732699SDave Jiang
3735732699SDave Jiang #include <acpi/acpi_bus.h>
3835732699SDave Jiang #include <acpi/acpi_drivers.h>
3935732699SDave Jiang #include <acpi/acpi_io.h>
4035732699SDave Jiang #include <asm/acpi.h>
4135732699SDave Jiang
42a103f466SDave Jiang #ifdef CONFIG_ACPI_TABLE_LIB
43cdd30ebbSPeter Zijlstra #define EXPORT_SYMBOL_ACPI_LIB(x) EXPORT_SYMBOL_NS_GPL(x, "ACPI")
44a103f466SDave Jiang #define __init_or_acpilib
45a103f466SDave Jiang #define __initdata_or_acpilib
46a103f466SDave Jiang #else
47a103f466SDave Jiang #define EXPORT_SYMBOL_ACPI_LIB(x)
48a103f466SDave Jiang #define __init_or_acpilib __init
49a103f466SDave Jiang #define __initdata_or_acpilib __initdata
50a103f466SDave Jiang #endif
51a103f466SDave Jiang
acpi_device_handle(struct acpi_device * adev)527b199811SRafael J. Wysocki static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
537b199811SRafael J. Wysocki {
547b199811SRafael J. Wysocki return adev ? adev->handle : NULL;
557b199811SRafael J. Wysocki }
567b199811SRafael J. Wysocki
573a7a2ab8SRafael J. Wysocki #define ACPI_COMPANION(dev) to_acpi_device_node((dev)->fwnode)
5897badf87SRafael J. Wysocki #define ACPI_COMPANION_SET(dev, adev) set_primary_fwnode(dev, (adev) ? \
5997badf87SRafael J. Wysocki acpi_fwnode_handle(adev) : NULL)
607b199811SRafael J. Wysocki #define ACPI_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev))
617c6c57f2SMarcin Wojtas #define ACPI_HANDLE_FWNODE(fwnode) \
627c6c57f2SMarcin Wojtas acpi_device_handle(to_acpi_device_node(fwnode))
637b199811SRafael J. Wysocki
acpi_alloc_fwnode_static(void)64027b25b2SLorenzo Pieralisi static inline struct fwnode_handle *acpi_alloc_fwnode_static(void)
65027b25b2SLorenzo Pieralisi {
66027b25b2SLorenzo Pieralisi struct fwnode_handle *fwnode;
67027b25b2SLorenzo Pieralisi
68027b25b2SLorenzo Pieralisi fwnode = kzalloc(sizeof(struct fwnode_handle), GFP_KERNEL);
69027b25b2SLorenzo Pieralisi if (!fwnode)
70027b25b2SLorenzo Pieralisi return NULL;
71027b25b2SLorenzo Pieralisi
722ab695aaSSaravana Kannan fwnode_init(fwnode, &acpi_static_fwnode_ops);
73027b25b2SLorenzo Pieralisi
74027b25b2SLorenzo Pieralisi return fwnode;
75027b25b2SLorenzo Pieralisi }
76027b25b2SLorenzo Pieralisi
acpi_free_fwnode_static(struct fwnode_handle * fwnode)77027b25b2SLorenzo Pieralisi static inline void acpi_free_fwnode_static(struct fwnode_handle *fwnode)
78027b25b2SLorenzo Pieralisi {
79db3e50f3SSakari Ailus if (WARN_ON(!is_acpi_static_node(fwnode)))
80027b25b2SLorenzo Pieralisi return;
81027b25b2SLorenzo Pieralisi
82027b25b2SLorenzo Pieralisi kfree(fwnode);
83027b25b2SLorenzo Pieralisi }
84027b25b2SLorenzo Pieralisi
has_acpi_companion(struct device * dev)85ca5b74d2SRafael J. Wysocki static inline bool has_acpi_companion(struct device *dev)
86ca5b74d2SRafael J. Wysocki {
873a7a2ab8SRafael J. Wysocki return is_acpi_device_node(dev->fwnode);
88ca5b74d2SRafael J. Wysocki }
89ca5b74d2SRafael J. Wysocki
acpi_preset_companion(struct device * dev,struct acpi_device * parent,u64 addr)909c5ad36dSRafael J. Wysocki static inline void acpi_preset_companion(struct device *dev,
919c5ad36dSRafael J. Wysocki struct acpi_device *parent, u64 addr)
929c5ad36dSRafael J. Wysocki {
93f8c6d140SAlexey Dobriyan ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, false));
949c5ad36dSRafael J. Wysocki }
959c5ad36dSRafael J. Wysocki
acpi_dev_name(struct acpi_device * adev)9645c42a7fSJarkko Nikula static inline const char *acpi_dev_name(struct acpi_device *adev)
9745c42a7fSJarkko Nikula {
9845c42a7fSJarkko Nikula return dev_name(&adev->dev);
9945c42a7fSJarkko Nikula }
10045c42a7fSJarkko Nikula
101daae45caSLukas Wunner struct device *acpi_get_first_physical_node(struct acpi_device *adev);
102daae45caSLukas Wunner
1031da177e4SLinus Torvalds enum acpi_irq_model_id {
1041da177e4SLinus Torvalds ACPI_IRQ_MODEL_PIC = 0,
1051da177e4SLinus Torvalds ACPI_IRQ_MODEL_IOAPIC,
1061da177e4SLinus Torvalds ACPI_IRQ_MODEL_IOSAPIC,
1073948ec94SJohn Keller ACPI_IRQ_MODEL_PLATFORM,
108fbe61ec7SHanjun Guo ACPI_IRQ_MODEL_GIC,
109e8bba72bSJianmin Lv ACPI_IRQ_MODEL_LPIC,
11021734d29SSunil V L ACPI_IRQ_MODEL_RINTC,
1111da177e4SLinus Torvalds ACPI_IRQ_MODEL_COUNT
1121da177e4SLinus Torvalds };
1131da177e4SLinus Torvalds
1141da177e4SLinus Torvalds extern enum acpi_irq_model_id acpi_irq_model;
1151da177e4SLinus Torvalds
1161da177e4SLinus Torvalds enum acpi_interrupt_id {
1171da177e4SLinus Torvalds ACPI_INTERRUPT_PMI = 1,
1181da177e4SLinus Torvalds ACPI_INTERRUPT_INIT,
1191da177e4SLinus Torvalds ACPI_INTERRUPT_CPEI,
1201da177e4SLinus Torvalds ACPI_INTERRUPT_COUNT
1211da177e4SLinus Torvalds };
1221da177e4SLinus Torvalds
1231da177e4SLinus Torvalds #define ACPI_SPACE_MEM 0
1241da177e4SLinus Torvalds
1251da177e4SLinus Torvalds enum acpi_address_range_id {
1261da177e4SLinus Torvalds ACPI_ADDRESS_RANGE_MEMORY = 1,
1271da177e4SLinus Torvalds ACPI_ADDRESS_RANGE_RESERVED = 2,
1281da177e4SLinus Torvalds ACPI_ADDRESS_RANGE_ACPI = 3,
1291da177e4SLinus Torvalds ACPI_ADDRESS_RANGE_NVS = 4,
1301da177e4SLinus Torvalds ACPI_ADDRESS_RANGE_COUNT
1311da177e4SLinus Torvalds };
1321da177e4SLinus Torvalds
1331da177e4SLinus Torvalds
1341da177e4SLinus Torvalds /* Table Handlers */
135b43e1065SLv Zheng typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table);
1361da177e4SLinus Torvalds
137836d0830SLv Zheng /* Debugger support */
138836d0830SLv Zheng
139836d0830SLv Zheng struct acpi_debugger_ops {
140836d0830SLv Zheng int (*create_thread)(acpi_osd_exec_callback function, void *context);
141836d0830SLv Zheng ssize_t (*write_log)(const char *msg);
142836d0830SLv Zheng ssize_t (*read_cmd)(char *buffer, size_t length);
143836d0830SLv Zheng int (*wait_command_ready)(bool single_step, char *buffer, size_t length);
144836d0830SLv Zheng int (*notify_command_complete)(void);
145836d0830SLv Zheng };
146836d0830SLv Zheng
147836d0830SLv Zheng struct acpi_debugger {
148836d0830SLv Zheng const struct acpi_debugger_ops *ops;
149836d0830SLv Zheng struct module *owner;
150836d0830SLv Zheng struct mutex lock;
151836d0830SLv Zheng };
152836d0830SLv Zheng
153836d0830SLv Zheng #ifdef CONFIG_ACPI_DEBUGGER
154836d0830SLv Zheng int __init acpi_debugger_init(void);
155836d0830SLv Zheng int acpi_register_debugger(struct module *owner,
156836d0830SLv Zheng const struct acpi_debugger_ops *ops);
157836d0830SLv Zheng void acpi_unregister_debugger(const struct acpi_debugger_ops *ops);
158836d0830SLv Zheng int acpi_debugger_create_thread(acpi_osd_exec_callback function, void *context);
159836d0830SLv Zheng ssize_t acpi_debugger_write_log(const char *msg);
160836d0830SLv Zheng ssize_t acpi_debugger_read_cmd(char *buffer, size_t buffer_length);
161836d0830SLv Zheng int acpi_debugger_wait_command_ready(void);
162836d0830SLv Zheng int acpi_debugger_notify_command_complete(void);
163836d0830SLv Zheng #else
acpi_debugger_init(void)164836d0830SLv Zheng static inline int acpi_debugger_init(void)
165836d0830SLv Zheng {
166836d0830SLv Zheng return -ENODEV;
167836d0830SLv Zheng }
168836d0830SLv Zheng
acpi_register_debugger(struct module * owner,const struct acpi_debugger_ops * ops)169836d0830SLv Zheng static inline int acpi_register_debugger(struct module *owner,
170836d0830SLv Zheng const struct acpi_debugger_ops *ops)
171836d0830SLv Zheng {
172836d0830SLv Zheng return -ENODEV;
173836d0830SLv Zheng }
174836d0830SLv Zheng
acpi_unregister_debugger(const struct acpi_debugger_ops * ops)175836d0830SLv Zheng static inline void acpi_unregister_debugger(const struct acpi_debugger_ops *ops)
176836d0830SLv Zheng {
177836d0830SLv Zheng }
178836d0830SLv Zheng
acpi_debugger_create_thread(acpi_osd_exec_callback function,void * context)179836d0830SLv Zheng static inline int acpi_debugger_create_thread(acpi_osd_exec_callback function,
180836d0830SLv Zheng void *context)
181836d0830SLv Zheng {
182836d0830SLv Zheng return -ENODEV;
183836d0830SLv Zheng }
184836d0830SLv Zheng
acpi_debugger_write_log(const char * msg)185836d0830SLv Zheng static inline int acpi_debugger_write_log(const char *msg)
186836d0830SLv Zheng {
187836d0830SLv Zheng return -ENODEV;
188836d0830SLv Zheng }
189836d0830SLv Zheng
acpi_debugger_read_cmd(char * buffer,u32 buffer_length)190836d0830SLv Zheng static inline int acpi_debugger_read_cmd(char *buffer, u32 buffer_length)
191836d0830SLv Zheng {
192836d0830SLv Zheng return -ENODEV;
193836d0830SLv Zheng }
194836d0830SLv Zheng
acpi_debugger_wait_command_ready(void)195836d0830SLv Zheng static inline int acpi_debugger_wait_command_ready(void)
196836d0830SLv Zheng {
197836d0830SLv Zheng return -ENODEV;
198836d0830SLv Zheng }
199836d0830SLv Zheng
acpi_debugger_notify_command_complete(void)200836d0830SLv Zheng static inline int acpi_debugger_notify_command_complete(void)
201836d0830SLv Zheng {
202836d0830SLv Zheng return -ENODEV;
203836d0830SLv Zheng }
204836d0830SLv Zheng #endif
205836d0830SLv Zheng
206328281b1SHanjun Guo #define BAD_MADT_ENTRY(entry, end) ( \
207328281b1SHanjun Guo (!entry) || (unsigned long)entry + sizeof(*entry) > end || \
208328281b1SHanjun Guo ((struct acpi_subtable_header *)entry)->length < sizeof(*entry))
209328281b1SHanjun Guo
2106c9a58e8SAndy Shevchenko void __iomem *__acpi_map_table(unsigned long phys, unsigned long size);
2116c9a58e8SAndy Shevchenko void __acpi_unmap_table(void __iomem *map, unsigned long size);
212cbf9bd60SYinghai Lu int early_acpi_boot_init(void);
2131da177e4SLinus Torvalds int acpi_boot_init (void);
2141a1c130aSRafael J. Wysocki void acpi_boot_table_prepare (void);
2158558e394SLen Brown void acpi_boot_table_init (void);
2163c999f14SYinghai Lu int acpi_mps_check (void);
2171da177e4SLinus Torvalds int acpi_numa_init (void);
2181da177e4SLinus Torvalds
2191a1c130aSRafael J. Wysocki int acpi_locate_initial_tables (void);
2201a1c130aSRafael J. Wysocki void acpi_reserve_initial_tables (void);
2211a1c130aSRafael J. Wysocki void acpi_table_init_complete (void);
2221da177e4SLinus Torvalds int acpi_table_init (void);
223f64bd790SDan Williams
224b43e1065SLv Zheng int acpi_table_parse(char *id, acpi_tbl_table_handler handler);
225f64bd790SDan Williams int __init_or_acpilib acpi_table_parse_entries(char *id,
226f64bd790SDan Williams unsigned long table_size, int entry_id,
227f64bd790SDan Williams acpi_tbl_entry_handler handler, unsigned int max_entries);
228f64bd790SDan Williams int __init_or_acpilib acpi_table_parse_entries_array(char *id,
229f64bd790SDan Williams unsigned long table_size, struct acpi_subtable_proc *proc,
230f64bd790SDan Williams int proc_num, unsigned int max_entries);
231b43e1065SLv Zheng int acpi_table_parse_madt(enum acpi_madt_type id,
232b43e1065SLv Zheng acpi_tbl_entry_handler handler,
233b43e1065SLv Zheng unsigned int max_entries);
2342d03e46aSDan Williams int __init_or_acpilib
2352d03e46aSDan Williams acpi_table_parse_cedt(enum acpi_cedt_type id,
2362d03e46aSDan Williams acpi_tbl_entry_handler_arg handler_arg, void *arg);
2372d03e46aSDan Williams
238ceb6c468SAlexey Starikovskiy int acpi_parse_mcfg (struct acpi_table_header *header);
2395f3b1a8bSAlexey Starikovskiy void acpi_table_print_madt_entry (struct acpi_subtable_header *madt);
2401da177e4SLinus Torvalds
241cf8e8658SArd Biesheuvel #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH)
24215a58ed1SAlexey Starikovskiy void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa);
2434bac6fa7SHanjun Guo #else
2444bac6fa7SHanjun Guo static inline void
acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity * pa)2454bac6fa7SHanjun Guo acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) { }
2464bac6fa7SHanjun Guo #endif
2474bac6fa7SHanjun Guo
2487237d3deSSuresh Siddha void acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa);
2494bac6fa7SHanjun Guo
250c78c43feSJianmin Lv #if defined(CONFIG_ARM64) || defined(CONFIG_LOONGARCH)
251c78c43feSJianmin Lv void acpi_arch_dma_setup(struct device *dev);
252c78c43feSJianmin Lv #else
acpi_arch_dma_setup(struct device * dev)253c78c43feSJianmin Lv static inline void acpi_arch_dma_setup(struct device *dev) { }
254c78c43feSJianmin Lv #endif
255c78c43feSJianmin Lv
2564bac6fa7SHanjun Guo #ifdef CONFIG_ARM64
2574bac6fa7SHanjun Guo void acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa);
2584bac6fa7SHanjun Guo #else
2594bac6fa7SHanjun Guo static inline void
acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity * pa)2604bac6fa7SHanjun Guo acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa) { }
2614bac6fa7SHanjun Guo #endif
2624bac6fa7SHanjun Guo
263eabd9db6SHaibo Xu #ifdef CONFIG_RISCV
264eabd9db6SHaibo Xu void acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity *pa);
265eabd9db6SHaibo Xu #else
acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity * pa)266eabd9db6SHaibo Xu static inline void acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity *pa) { }
267eabd9db6SHaibo Xu #endif
268eabd9db6SHaibo Xu
269828aef37SCatalin Marinas #ifndef PHYS_CPUID_INVALID
270828aef37SCatalin Marinas typedef u32 phys_cpuid_t;
271828aef37SCatalin Marinas #define PHYS_CPUID_INVALID (phys_cpuid_t)(-1)
272828aef37SCatalin Marinas #endif
273828aef37SCatalin Marinas
invalid_logical_cpuid(u32 cpuid)27425956b66SHanjun Guo static inline bool invalid_logical_cpuid(u32 cpuid)
27525956b66SHanjun Guo {
27625956b66SHanjun Guo return (int)cpuid < 0;
27725956b66SHanjun Guo }
27825956b66SHanjun Guo
invalid_phys_cpuid(phys_cpuid_t phys_id)279ddcc18f5SHanjun Guo static inline bool invalid_phys_cpuid(phys_cpuid_t phys_id)
280ddcc18f5SHanjun Guo {
281ddcc18f5SHanjun Guo return phys_id == PHYS_CPUID_INVALID;
282ddcc18f5SHanjun Guo }
283ddcc18f5SHanjun Guo
284ababa16fSLorenzo Pieralisi
285ababa16fSLorenzo Pieralisi int __init acpi_get_madt_revision(void);
286ababa16fSLorenzo Pieralisi
287fd74da21SDou Liyang /* Validate the processor object's proc_id */
288a77d6cd9SDou Liyang bool acpi_duplicate_processor_id(int proc_id);
289bc946388SRafael J. Wysocki /* Processor _CTS control */
29077fb4e0aSRafael J. Wysocki struct acpi_processor_power;
29177fb4e0aSRafael J. Wysocki
292bc946388SRafael J. Wysocki #ifdef CONFIG_ACPI_PROCESSOR_CSTATE
293bc946388SRafael J. Wysocki bool acpi_processor_claim_cst_control(void);
29477fb4e0aSRafael J. Wysocki int acpi_processor_evaluate_cst(acpi_handle handle, u32 cpu,
29577fb4e0aSRafael J. Wysocki struct acpi_processor_power *info);
296bc946388SRafael J. Wysocki #else
acpi_processor_claim_cst_control(void)297bc946388SRafael J. Wysocki static inline bool acpi_processor_claim_cst_control(void) { return false; }
acpi_processor_evaluate_cst(acpi_handle handle,u32 cpu,struct acpi_processor_power * info)29877fb4e0aSRafael J. Wysocki static inline int acpi_processor_evaluate_cst(acpi_handle handle, u32 cpu,
29977fb4e0aSRafael J. Wysocki struct acpi_processor_power *info)
30077fb4e0aSRafael J. Wysocki {
30177fb4e0aSRafael J. Wysocki return -ENODEV;
30277fb4e0aSRafael J. Wysocki }
303bc946388SRafael J. Wysocki #endif
304fd74da21SDou Liyang
3051da177e4SLinus Torvalds #ifdef CONFIG_ACPI_HOTPLUG_CPU
3061da177e4SLinus Torvalds /* Arch dependent functions for cpu hotplug support */
307febf2407SVitaly Kuznetsov int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id,
308febf2407SVitaly Kuznetsov int *pcpu);
309d02dc27dSHanjun Guo int acpi_unmap_cpu(int cpu);
3101da177e4SLinus Torvalds #endif /* CONFIG_ACPI_HOTPLUG_CPU */
3111da177e4SLinus Torvalds
31236b92163SJonathan Cameron acpi_handle acpi_get_processor_handle(int cpu);
31336b92163SJonathan Cameron
314ecf5636dSYinghai Lu #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
315ecf5636dSYinghai Lu int acpi_get_ioapic_id(acpi_handle handle, u32 gsi_base, u64 *phys_addr);
316ecf5636dSYinghai Lu #endif
317ecf5636dSYinghai Lu
318b1bb248aSKenji Kaneshige int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base);
319b1bb248aSKenji Kaneshige int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base);
320e89900c9SJiang Liu int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base);
3215229e87dSLen Brown void acpi_irq_stats_init(void);
3225229e87dSLen Brown extern u32 acpi_irq_handled;
32388bea188SLen Brown extern u32 acpi_irq_not_handled;
32449e4b843SChen Yu extern unsigned int acpi_sci_irq;
32513737181SChen Yu extern bool acpi_no_s5;
32649e4b843SChen Yu #define INVALID_ACPI_IRQ ((unsigned)-1)
acpi_sci_irq_valid(void)32749e4b843SChen Yu static inline bool acpi_sci_irq_valid(void)
32849e4b843SChen Yu {
32949e4b843SChen Yu return acpi_sci_irq != INVALID_ACPI_IRQ;
33049e4b843SChen Yu }
3311da177e4SLinus Torvalds
3321da177e4SLinus Torvalds extern int sbf_port;
33377afcf78SPavel Machek
3341da177e4SLinus Torvalds int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity);
335a2f809b0SYinghai Lu int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
3361da177e4SLinus Torvalds int acpi_isa_irq_to_gsi (unsigned isa_irq, u32 *gsi);
3372c2df841SEric W. Biederman
3381da177e4SLinus Torvalds void acpi_set_irq_model(enum acpi_irq_model_id model,
3392bc6eba4SMarc Zyngier struct fwnode_handle *(*)(u32));
3407327b16fSMarc Zyngier void acpi_set_gsi_to_irq_fallback(u32 (*)(u32));
341744b9a0cSMarc Zyngier
3422bc6eba4SMarc Zyngier struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags,
343621dc2fdSArd Biesheuvel unsigned int size,
344621dc2fdSArd Biesheuvel struct fwnode_handle *fwnode,
345621dc2fdSArd Biesheuvel const struct irq_domain_ops *ops,
346621dc2fdSArd Biesheuvel void *host_data);
347621dc2fdSArd Biesheuvel
348621dc2fdSArd Biesheuvel #ifdef CONFIG_X86_IO_APIC
34961fd47e0SShaohua Li extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity);
3509a0a91bbSEric W. Biederman #else
acpi_get_override_irq(u32 gsi,int * trigger,int * polarity)35161fd47e0SShaohua Li static inline int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity)
352dfd6f9adSArnd Bergmann {
353dfd6f9adSArnd Bergmann return -1;
354dfd6f9adSArnd Bergmann }
355dfd6f9adSArnd Bergmann #endif
35661fd47e0SShaohua Li /*
3571da177e4SLinus Torvalds * This function undoes the effect of one call to acpi_register_gsi().
3581da177e4SLinus Torvalds * If this matches the last registration, any IRQ resources for gsi
3591da177e4SLinus Torvalds * are freed.
3601da177e4SLinus Torvalds */
3611da177e4SLinus Torvalds void acpi_unregister_gsi (u32 gsi);
3621da177e4SLinus Torvalds
3631da177e4SLinus Torvalds struct pci_dev;
3641da177e4SLinus Torvalds
3651da177e4SLinus Torvalds struct acpi_prt_entry *acpi_pci_irq_lookup(struct pci_dev *dev, int pin);
366b166b8abSJiqian Chen int acpi_pci_irq_enable (struct pci_dev *dev);
3671da177e4SLinus Torvalds void acpi_penalize_isa_irq(int irq, int active);
368c9c3e457SDavid Shaohua Li bool acpi_isa_irq_available(int irq);
3695ebc7603SJiang Liu #ifdef CONFIG_PCI
3705d32a665SSinan Kaya void acpi_penalize_sci_irq(int irq, int trigger, int polarity);
371f1caa61dSSinan Kaya #else
acpi_penalize_sci_irq(int irq,int trigger,int polarity)3725d32a665SSinan Kaya static inline void acpi_penalize_sci_irq(int irq, int trigger,
3735d32a665SSinan Kaya int polarity)
3745d32a665SSinan Kaya {
3755d32a665SSinan Kaya }
3765d32a665SSinan Kaya #endif
3775d32a665SSinan Kaya void acpi_pci_irq_disable (struct pci_dev *dev);
3781da177e4SLinus Torvalds
3791da177e4SLinus Torvalds extern int ec_read(u8 addr, u8 *val);
3801da177e4SLinus Torvalds extern int ec_write(u8 addr, u8 val);
3811da177e4SLinus Torvalds extern int ec_transaction(u8 command,
382d7a76e4cSLennart Poettering const u8 *wdata, unsigned wdata_len,
383d7a76e4cSLennart Poettering u8 *rdata, unsigned rdata_len);
3841cb7b1e0SThomas Renninger extern acpi_handle ec_get_handle(void);
3853e2abc5aSSeth Forshee
3861da177e4SLinus Torvalds extern bool acpi_is_pnp_device(struct acpi_device *);
387eec15edbSZhang Rui
388eec15edbSZhang Rui #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE)
389bff431e4SCarlos Corbacho
390bff431e4SCarlos Corbacho typedef void (*wmi_notify_handler) (union acpi_object *data, void *context);
391e04e2b76SArmin Wolf
392bff431e4SCarlos Corbacho int wmi_instance_count(const char *guid);
3932a2b13aeSArmin Wolf
3942a2b13aeSArmin Wolf extern acpi_status wmi_evaluate_method(const char *guid, u8 instance,
395bff431e4SCarlos Corbacho u32 method_id,
396bff431e4SCarlos Corbacho const struct acpi_buffer *in,
397bff431e4SCarlos Corbacho struct acpi_buffer *out);
398bff431e4SCarlos Corbacho extern acpi_status wmi_query_block(const char *guid, u8 instance,
399bff431e4SCarlos Corbacho struct acpi_buffer *out);
400bff431e4SCarlos Corbacho extern acpi_status wmi_set_block(const char *guid, u8 instance,
401bff431e4SCarlos Corbacho const struct acpi_buffer *in);
402bff431e4SCarlos Corbacho extern acpi_status wmi_install_notify_handler(const char *guid,
403bff431e4SCarlos Corbacho wmi_notify_handler handler, void *data);
404bff431e4SCarlos Corbacho extern acpi_status wmi_remove_notify_handler(const char *guid);
405bff431e4SCarlos Corbacho extern bool wmi_has_guid(const char *guid);
406bff431e4SCarlos Corbacho extern char *wmi_get_acpi_device_uid(const char *guid);
407e7488e58SYurii Pavlovskyi
408bff431e4SCarlos Corbacho #endif /* CONFIG_ACPI_WMI */
409bff431e4SCarlos Corbacho
410bff431e4SCarlos Corbacho #define ACPI_VIDEO_OUTPUT_SWITCHING 0x0001
411c3d6de69SThomas Renninger #define ACPI_VIDEO_DEVICE_POSTING 0x0002
412c3d6de69SThomas Renninger #define ACPI_VIDEO_ROM_AVAILABLE 0x0004
413c3d6de69SThomas Renninger #define ACPI_VIDEO_BACKLIGHT 0x0008
414c3d6de69SThomas Renninger #define ACPI_VIDEO_BACKLIGHT_FORCE_VENDOR 0x0010
415c3d6de69SThomas Renninger #define ACPI_VIDEO_BACKLIGHT_FORCE_VIDEO 0x0020
416c3d6de69SThomas Renninger #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR 0x0040
417c3d6de69SThomas Renninger #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO 0x0080
418c3d6de69SThomas Renninger #define ACPI_VIDEO_BACKLIGHT_DMI_VENDOR 0x0100
419c3d6de69SThomas Renninger #define ACPI_VIDEO_BACKLIGHT_DMI_VIDEO 0x0200
420c3d6de69SThomas Renninger #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR 0x0400
421c3d6de69SThomas Renninger #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO 0x0800
422c3d6de69SThomas Renninger
423c3d6de69SThomas Renninger extern char acpi_video_backlight_string[];
42414ca7a47SHans de Goede extern long acpi_is_video_device(acpi_handle handle);
425d4e1a692SToshi Kani
426dfac21b1SKuppuswamy Sathyanarayanan extern void acpi_osi_setup(char *str);
427d90aa92cSLin Ming extern bool acpi_osi_is_win8(void);
428a87878baSHans de Goede
4291da177e4SLinus Torvalds #ifdef CONFIG_ACPI_THERMAL_LIB
430f4750798SRafael J. Wysocki int thermal_acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp);
431f4750798SRafael J. Wysocki int thermal_acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp);
432f4750798SRafael J. Wysocki int thermal_acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp);
433f4750798SRafael J. Wysocki int thermal_acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp);
434f4750798SRafael J. Wysocki #endif
435f4750798SRafael J. Wysocki
436f4750798SRafael J. Wysocki #ifdef CONFIG_ACPI_HMAT
437ca53543dSDave Jiang int acpi_get_genport_coordinates(u32 uid, struct access_coordinate *coord);
438ca53543dSDave Jiang #else
acpi_get_genport_coordinates(u32 uid,struct access_coordinate * coord)439ca53543dSDave Jiang static inline int acpi_get_genport_coordinates(u32 uid,
440ca53543dSDave Jiang struct access_coordinate *coord)
441ca53543dSDave Jiang {
442ca53543dSDave Jiang return -EOPNOTSUPP;
443ca53543dSDave Jiang }
444ca53543dSDave Jiang #endif
445ca53543dSDave Jiang
446ca53543dSDave Jiang #ifdef CONFIG_ACPI_NUMA
4471da177e4SLinus Torvalds int acpi_map_pxm_to_node(int pxm);
4488fc5c735SDan Williams int acpi_get_node(acpi_handle handle);
449486c79b5SBjorn Helgaas
450b2ca916cSDan Williams /**
451b2ca916cSDan Williams * pxm_to_online_node - Map proximity ID to online node
4524eb3723fSJonathan Cameron * @pxm: ACPI proximity ID
453b2ca916cSDan Williams *
454b2ca916cSDan Williams * This is similar to pxm_to_node(), but always returns an online
4554eb3723fSJonathan Cameron * node. When the mapped node from a given proximity ID is offline, it
456b2ca916cSDan Williams * looks up the node distance table and returns the nearest online node.
457b2ca916cSDan Williams *
458b2ca916cSDan Williams * ACPI device drivers, which are called after the NUMA initialization has
459b2ca916cSDan Williams * completed in the kernel, can call this interface to obtain their device
460b2ca916cSDan Williams * NUMA topology from ACPI tables. Such drivers do not have to deal with
461b2ca916cSDan Williams * offline nodes. A node may be offline when SRAT memory entry does not exist,
462fe205d98SJonathan Cameron * or NUMA is disabled, ex. "numa=off" on x86.
463fe205d98SJonathan Cameron */
pxm_to_online_node(int pxm)464b2ca916cSDan Williams static inline int pxm_to_online_node(int pxm)
4654eb3723fSJonathan Cameron {
466b2ca916cSDan Williams int node = pxm_to_node(pxm);
467fe205d98SJonathan Cameron
468b2ca916cSDan Williams return numa_map_to_online_node(node);
469b2ca916cSDan Williams }
470b2ca916cSDan Williams #else
pxm_to_online_node(int pxm)4711da177e4SLinus Torvalds static inline int pxm_to_online_node(int pxm)
4724eb3723fSJonathan Cameron {
47399759869SToshi Kani return 0;
47499759869SToshi Kani }
acpi_map_pxm_to_node(int pxm)47599759869SToshi Kani static inline int acpi_map_pxm_to_node(int pxm)
4768fc5c735SDan Williams {
4778fc5c735SDan Williams return 0;
4788fc5c735SDan Williams }
acpi_get_node(acpi_handle handle)4798fc5c735SDan Williams static inline int acpi_get_node(acpi_handle handle)
480486c79b5SBjorn Helgaas {
4811e3590e2SYasunori Goto return 0;
4821e3590e2SYasunori Goto }
4831e3590e2SYasunori Goto #endif
4841da177e4SLinus Torvalds extern int pnpacpi_disabled;
4851da177e4SLinus Torvalds
4861da177e4SLinus Torvalds #define PXM_INVAL (-1)
4873484d798SDavid Rientjes
4883484d798SDavid Rientjes bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res);
489046d9ce6SRafael J. Wysocki bool acpi_dev_resource_io(struct acpi_resource *ares, struct resource *res);
490046d9ce6SRafael J. Wysocki bool acpi_dev_resource_address_space(struct acpi_resource *ares,
491046d9ce6SRafael J. Wysocki struct resource_win *win);
492a49170b5SJiang Liu bool acpi_dev_resource_ext_address_space(struct acpi_resource *ares,
493046d9ce6SRafael J. Wysocki struct resource_win *win);
494a49170b5SJiang Liu unsigned long acpi_dev_irq_flags(u8 triggering, u8 polarity, u8 shareable, u8 wake_capable);
4955ff81160SRaul E Rangel unsigned int acpi_dev_get_irq_type(int triggering, int polarity);
49655a93417SChristophe RICARD bool acpi_dev_resource_interrupt(struct acpi_resource *ares, int index,
497046d9ce6SRafael J. Wysocki struct resource *res);
498046d9ce6SRafael J. Wysocki
499046d9ce6SRafael J. Wysocki void acpi_dev_free_resource_list(struct list_head *list);
5008e345c99SRafael J. Wysocki int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list,
5018e345c99SRafael J. Wysocki int (*preproc)(struct acpi_resource *, void *),
5028e345c99SRafael J. Wysocki void *preproc_data);
5038e345c99SRafael J. Wysocki int acpi_dev_get_dma_resources(struct acpi_device *adev,
504c04ac679SLorenzo Pieralisi struct list_head *list);
505c04ac679SLorenzo Pieralisi int acpi_dev_get_memory_resources(struct acpi_device *adev, struct list_head *list);
5066bb057bfSHeikki Krogerus int acpi_dev_filter_resource_type(struct acpi_resource *ares,
50762d1141fSJiang Liu unsigned long types);
50862d1141fSJiang Liu
acpi_dev_filter_resource_type_cb(struct acpi_resource * ares,void * arg)50962d1141fSJiang Liu static inline int acpi_dev_filter_resource_type_cb(struct acpi_resource *ares,
51062d1141fSJiang Liu void *arg)
51162d1141fSJiang Liu {
51262d1141fSJiang Liu return acpi_dev_filter_resource_type(ares, (unsigned long)arg);
51362d1141fSJiang Liu }
51462d1141fSJiang Liu
5158e345c99SRafael J. Wysocki struct acpi_device *acpi_resource_consumer(struct resource *res);
51600710984SBjorn Helgaas
51700710984SBjorn Helgaas int acpi_check_resource_conflict(const struct resource *res);
518876fba43SJean Delvare
519443dea72SThomas Renninger int acpi_check_region(resource_size_t start, resource_size_t n,
520df92e695SThomas Renninger const char *name);
521df92e695SThomas Renninger
522df92e695SThomas Renninger int acpi_resources_are_enforced(void);
52370dd6beaSJean Delvare
52470dd6beaSJean Delvare #ifdef CONFIG_HIBERNATION
5259743fdeaSYuanhan Liu extern int acpi_check_s4_hw_signature;
526f6c46b1dSDavid Woodhouse #endif
5279743fdeaSYuanhan Liu
5289743fdeaSYuanhan Liu #ifdef CONFIG_PM_SLEEP
5299743fdeaSYuanhan Liu void __init acpi_old_suspend_ordering(void);
530d8f3de0dSRafael J. Wysocki void __init acpi_nvs_nosave(void);
53172ad5d77SRafael J. Wysocki void __init acpi_nvs_nosave_s3(void);
5321bad2f19SKristen Carlson Accardi void __init acpi_sleep_no_blacklist(void);
53357044031SRafael J. Wysocki #endif /* CONFIG_PM_SLEEP */
534d8f3de0dSRafael J. Wysocki
5359f5404d8SKenji Kaneshige int acpi_register_wakeup_handler(
536ddfd9dcfSHans de Goede int wake_irq, bool (*wakeup)(void *context), void *context);
537ddfd9dcfSHans de Goede void acpi_unregister_wakeup_handler(
538ddfd9dcfSHans de Goede bool (*wakeup)(void *context), void *context);
539ddfd9dcfSHans de Goede
540ddfd9dcfSHans de Goede struct acpi_osc_context {
54170023de8SShaohua Li char *uuid_str; /* UUID string */
542c8678473SBjorn Helgaas int rev;
54370023de8SShaohua Li struct acpi_buffer cap; /* list of DWORD capabilities */
544c8678473SBjorn Helgaas struct acpi_buffer ret; /* free by caller if success */
54570023de8SShaohua Li };
54670023de8SShaohua Li
54770023de8SShaohua Li acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context);
54870023de8SShaohua Li
54970023de8SShaohua Li /* Number of _OSC capability DWORDS depends on bridge type */
550241d26bcSDan Williams #define OSC_PCI_CAPABILITY_DWORDS 3
551241d26bcSDan Williams #define OSC_CXL_CAPABILITY_DWORDS 5
552241d26bcSDan Williams
553241d26bcSDan Williams /* Indexes into _OSC Capabilities Buffer (DWORDs 2 to 5 are device-specific) */
55456368029SVishal Verma #define OSC_QUERY_DWORD 0 /* DWORD 1 */
555b938a229SBjorn Helgaas #define OSC_SUPPORT_DWORD 1 /* DWORD 2 */
556b938a229SBjorn Helgaas #define OSC_CONTROL_DWORD 2 /* DWORD 3 */
557b938a229SBjorn Helgaas #define OSC_EXT_SUPPORT_DWORD 3 /* DWORD 4 */
55856368029SVishal Verma #define OSC_EXT_CONTROL_DWORD 4 /* DWORD 5 */
55956368029SVishal Verma
5609f5404d8SKenji Kaneshige /* _OSC Capabilities DWORD 1: Query/Control and Error Returns (generic) */
561dedf1e4dSBjorn Helgaas #define OSC_QUERY_ENABLE 0x00000001 /* input */
562dedf1e4dSBjorn Helgaas #define OSC_REQUEST_ERROR 0x00000002 /* return */
563dedf1e4dSBjorn Helgaas #define OSC_INVALID_UUID_ERROR 0x00000004 /* return */
564dedf1e4dSBjorn Helgaas #define OSC_INVALID_REVISION_ERROR 0x00000008 /* return */
565dedf1e4dSBjorn Helgaas #define OSC_CAPABILITIES_MASK_ERROR 0x00000010 /* return */
566dedf1e4dSBjorn Helgaas
5679f5404d8SKenji Kaneshige /* Platform-Wide Capabilities _OSC: Capabilities DWORD 2: Support Field */
568dedf1e4dSBjorn Helgaas #define OSC_SB_PAD_SUPPORT 0x00000001
569dedf1e4dSBjorn Helgaas #define OSC_SB_PPC_OST_SUPPORT 0x00000002
570dedf1e4dSBjorn Helgaas #define OSC_SB_PR3_SUPPORT 0x00000004
571dedf1e4dSBjorn Helgaas #define OSC_SB_HOTPLUG_OST_SUPPORT 0x00000008
572dedf1e4dSBjorn Helgaas #define OSC_SB_APEI_SUPPORT 0x00000010
573dedf1e4dSBjorn Helgaas #define OSC_SB_CPC_SUPPORT 0x00000020
574dedf1e4dSBjorn Helgaas #define OSC_SB_CPCV2_SUPPORT 0x00000040
575a36a7fecSSudeep Holla #define OSC_SB_PCLPI_SUPPORT 0x00000080
576a36a7fecSSudeep Holla #define OSC_SB_OSLPI_SUPPORT 0x00000100
577a36a7fecSSudeep Holla #define OSC_SB_FAST_THERMAL_SAMPLING_SUPPORT 0x00000200
57895d43290SArmin Wolf #define OSC_SB_OVER_16_PSTATES_SUPPORT 0x00000400
5796e8345f2SArmin Wolf #define OSC_SB_GED_SUPPORT 0x00000800
580a8a967a2SArmin Wolf #define OSC_SB_CPC_DIVERSE_HIGH_SUPPORT 0x00001000
5818b533a0eSSrinivas Pandruvada #define OSC_SB_IRQ_RESOURCE_SOURCE_SUPPORT 0x00002000
582403ad17cSArmin Wolf #define OSC_SB_CPC_FLEXIBLE_ADR_SPACE 0x00004000
5830651ab90SPierre Gondois #define OSC_SB_GENERIC_INITIATOR_SUPPORT 0x00020000
584d0d4f147SArmin Wolf #define OSC_SB_NATIVE_USB4_SUPPORT 0x00040000
5855a6a2c0fSMika Westerberg #define OSC_SB_BATTERY_CHARGE_LIMITING_SUPPORT 0x00080000
586face1c54SArmin Wolf #define OSC_SB_PRM_SUPPORT 0x00200000
587bd7a94c0SAubrey Li #define OSC_SB_FFH_OPR_SUPPORT 0x00400000
588e81c782cSSudeep Holla
5893563ff96SShaohua Li extern bool osc_sb_apei_support_acked;
590eccddd32SHuang Ying extern bool osc_pc_lpi_support_confirmed;
591a36a7fecSSudeep Holla extern bool osc_sb_native_usb4_support_confirmed;
5925a6a2c0fSMika Westerberg extern bool osc_sb_cppc2_support_acked;
5937feec743SMario Limonciello extern bool osc_cpc_flexible_adr_space_confirmed;
5940651ab90SPierre Gondois
5955a6a2c0fSMika Westerberg /* USB4 Capabilities */
5965a6a2c0fSMika Westerberg #define OSC_USB_USB3_TUNNELING 0x00000001
5975a6a2c0fSMika Westerberg #define OSC_USB_DP_TUNNELING 0x00000002
5985a6a2c0fSMika Westerberg #define OSC_USB_PCIE_TUNNELING 0x00000004
5995a6a2c0fSMika Westerberg #define OSC_USB_XDOMAIN 0x00000008
6005a6a2c0fSMika Westerberg
6015a6a2c0fSMika Westerberg extern u32 osc_sb_native_usb4_control;
6025a6a2c0fSMika Westerberg
603eccddd32SHuang Ying /* PCI Host Bridge _OSC: Capabilities DWORD 2: Support Field */
604dedf1e4dSBjorn Helgaas #define OSC_PCI_EXT_CONFIG_SUPPORT 0x00000001
6057dab9ef4SBjorn Helgaas #define OSC_PCI_ASPM_SUPPORT 0x00000002
6067dab9ef4SBjorn Helgaas #define OSC_PCI_CLOCK_PM_SUPPORT 0x00000004
6077dab9ef4SBjorn Helgaas #define OSC_PCI_SEGMENT_GROUPS_SUPPORT 0x00000008
608dedf1e4dSBjorn Helgaas #define OSC_PCI_MSI_SUPPORT 0x00000010
6097dab9ef4SBjorn Helgaas #define OSC_PCI_EDR_SUPPORT 0x00000080
610ac1c8e35SKuppuswamy Sathyanarayanan #define OSC_PCI_HPX_TYPE_3_SUPPORT 0x00000100
611ba11edc6SAlexandru Gagniuc
6129f5404d8SKenji Kaneshige /* PCI Host Bridge _OSC: Capabilities DWORD 3: Control Field */
613dedf1e4dSBjorn Helgaas #define OSC_PCI_EXPRESS_NATIVE_HP_CONTROL 0x00000001
614dedf1e4dSBjorn Helgaas #define OSC_PCI_SHPC_NATIVE_HP_CONTROL 0x00000002
6157dab9ef4SBjorn Helgaas #define OSC_PCI_EXPRESS_PME_CONTROL 0x00000004
616dedf1e4dSBjorn Helgaas #define OSC_PCI_EXPRESS_AER_CONTROL 0x00000008
617dedf1e4dSBjorn Helgaas #define OSC_PCI_EXPRESS_CAPABILITY_CONTROL 0x00000010
6187dab9ef4SBjorn Helgaas #define OSC_PCI_EXPRESS_LTR_CONTROL 0x00000020
619af8bb9f8SBjorn Helgaas #define OSC_PCI_EXPRESS_DPC_CONTROL 0x00000080
620ac1c8e35SKuppuswamy Sathyanarayanan
621d90116eaSRafael J. Wysocki /* CXL _OSC: Capabilities DWORD 4: Support Field */
62256368029SVishal Verma #define OSC_CXL_1_1_PORT_REG_ACCESS_SUPPORT 0x00000001
62356368029SVishal Verma #define OSC_CXL_2_0_PORT_DEV_REG_ACCESS_SUPPORT 0x00000002
62456368029SVishal Verma #define OSC_CXL_PROTOCOL_ERR_REPORTING_SUPPORT 0x00000004
62556368029SVishal Verma #define OSC_CXL_NATIVE_HP_SUPPORT 0x00000008
62656368029SVishal Verma
62756368029SVishal Verma /* CXL _OSC: Capabilities DWORD 5: Control Field */
62856368029SVishal Verma #define OSC_CXL_ERROR_REPORTING_CONTROL 0x00000001
62956368029SVishal Verma
acpi_osc_ctx_get_pci_control(struct acpi_osc_context * context)63056368029SVishal Verma static inline u32 acpi_osc_ctx_get_pci_control(struct acpi_osc_context *context)
631cc10eee9SVishal Verma {
632cc10eee9SVishal Verma u32 *ret = context->ret.pointer;
633cc10eee9SVishal Verma
634cc10eee9SVishal Verma return ret[OSC_CONTROL_DWORD];
635cc10eee9SVishal Verma }
636cc10eee9SVishal Verma
acpi_osc_ctx_get_cxl_control(struct acpi_osc_context * context)637cc10eee9SVishal Verma static inline u32 acpi_osc_ctx_get_cxl_control(struct acpi_osc_context *context)
63856368029SVishal Verma {
63956368029SVishal Verma u32 *ret = context->ret.pointer;
64056368029SVishal Verma
64156368029SVishal Verma return ret[OSC_EXT_CONTROL_DWORD];
64256368029SVishal Verma }
64356368029SVishal Verma
64456368029SVishal Verma #define ACPI_GSB_ACCESS_ATTRIB_QUICK 0x00000002
6455d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_SEND_RCV 0x00000004
6465d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_BYTE 0x00000006
6475d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_WORD 0x00000008
6485d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_BLOCK 0x0000000A
6495d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_MULTIBYTE 0x0000000B
6505d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_WORD_CALL 0x0000000C
6515d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_BLOCK_CALL 0x0000000D
6525d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_RAW_BYTES 0x0000000E
6535d98e61dSLan Tianyu #define ACPI_GSB_ACCESS_ATTRIB_RAW_PROCESS 0x0000000F
6545d98e61dSLan Tianyu
6555d98e61dSLan Tianyu /* Enable _OST when all relevant hotplug operations are enabled */
656275c58d7SToshi Kani #if defined(CONFIG_ACPI_HOTPLUG_CPU) && \
657275c58d7SToshi Kani defined(CONFIG_ACPI_HOTPLUG_MEMORY) && \
65808f502c1SToshi Kani defined(CONFIG_ACPI_CONTAINER)
65964fd7401SToshi Kani #define ACPI_HOTPLUG_OST
660275c58d7SToshi Kani #endif
661275c58d7SToshi Kani
662275c58d7SToshi Kani /* _OST Source Event Code (OSPM Action) */
663275c58d7SToshi Kani #define ACPI_OST_EC_OSPM_SHUTDOWN 0x100
664275c58d7SToshi Kani #define ACPI_OST_EC_OSPM_EJECT 0x103
665275c58d7SToshi Kani #define ACPI_OST_EC_OSPM_INSERTION 0x200
666275c58d7SToshi Kani
667275c58d7SToshi Kani /* _OST General Processing Status Code */
668275c58d7SToshi Kani #define ACPI_OST_SC_SUCCESS 0x0
669275c58d7SToshi Kani #define ACPI_OST_SC_NON_SPECIFIC_FAILURE 0x1
670275c58d7SToshi Kani #define ACPI_OST_SC_UNRECOGNIZED_NOTIFY 0x2
671275c58d7SToshi Kani
672275c58d7SToshi Kani /* _OST OS Shutdown Processing (0x100) Status Code */
673275c58d7SToshi Kani #define ACPI_OST_SC_OS_SHUTDOWN_DENIED 0x80
674275c58d7SToshi Kani #define ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS 0x81
675275c58d7SToshi Kani #define ACPI_OST_SC_OS_SHUTDOWN_COMPLETED 0x82
676275c58d7SToshi Kani #define ACPI_OST_SC_OS_SHUTDOWN_NOT_SUPPORTED 0x83
677275c58d7SToshi Kani
678275c58d7SToshi Kani /* _OST Ejection Request (0x3, 0x103) Status Code */
679275c58d7SToshi Kani #define ACPI_OST_SC_EJECT_NOT_SUPPORTED 0x80
680275c58d7SToshi Kani #define ACPI_OST_SC_DEVICE_IN_USE 0x81
681275c58d7SToshi Kani #define ACPI_OST_SC_DEVICE_BUSY 0x82
682275c58d7SToshi Kani #define ACPI_OST_SC_EJECT_DEPENDENCY_BUSY 0x83
683275c58d7SToshi Kani #define ACPI_OST_SC_EJECT_IN_PROGRESS 0x84
684275c58d7SToshi Kani
685275c58d7SToshi Kani /* _OST Insertion Request (0x200) Status Code */
686275c58d7SToshi Kani #define ACPI_OST_SC_INSERT_IN_PROGRESS 0x80
687275c58d7SToshi Kani #define ACPI_OST_SC_DRIVER_LOAD_FAILURE 0x81
688275c58d7SToshi Kani #define ACPI_OST_SC_INSERT_NOT_SUPPORTED 0x82
689275c58d7SToshi Kani
690275c58d7SToshi Kani enum acpi_predicate {
6915aa5911aSToshi Kani all_versions,
6925aa5911aSToshi Kani less_than_or_equal,
6935aa5911aSToshi Kani equal,
6945aa5911aSToshi Kani greater_than_or_equal,
6955aa5911aSToshi Kani };
6965aa5911aSToshi Kani
6975aa5911aSToshi Kani /* Table must be terminted by a NULL entry */
6985aa5911aSToshi Kani struct acpi_platform_list {
6995aa5911aSToshi Kani char oem_id[ACPI_OEM_ID_SIZE+1];
7005aa5911aSToshi Kani char oem_table_id[ACPI_OEM_TABLE_ID_SIZE+1];
7015aa5911aSToshi Kani u32 oem_revision;
7025aa5911aSToshi Kani char *table;
7035aa5911aSToshi Kani enum acpi_predicate pred;
7045aa5911aSToshi Kani char *reason;
7055aa5911aSToshi Kani u32 data;
7065aa5911aSToshi Kani };
7075aa5911aSToshi Kani int acpi_match_platform_list(const struct acpi_platform_list *plat);
7085aa5911aSToshi Kani
7095aa5911aSToshi Kani extern void acpi_early_init(void);
7104a7a16dcSLen Brown extern void acpi_subsystem_init(void);
711b064a8faSRafael J. Wysocki
7124a7a16dcSLen Brown extern int acpi_nvs_register(__u64 start, __u64 size);
713b54ac6d2SHuang Ying
714b54ac6d2SHuang Ying extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
715b54ac6d2SHuang Ying void *data);
716b54ac6d2SHuang Ying
717b54ac6d2SHuang Ying const struct acpi_device_id *acpi_match_acpi_device(const struct acpi_device_id *ids,
7182b5ae960SAndy Shevchenko const struct acpi_device *adev);
7192b5ae960SAndy Shevchenko
7202b5ae960SAndy Shevchenko const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
721cf761af9SMika Westerberg const struct device *dev);
722cf761af9SMika Westerberg
723cf761af9SMika Westerberg const void *acpi_device_get_match_data(const struct device *dev);
72467dcc26dSAndy Shevchenko extern bool acpi_driver_match_device(struct device *dev,
725733e6251SMika Westerberg const struct device_driver *drv);
726733e6251SMika Westerberg int acpi_device_uevent_modalias(const struct device *, struct kobj_uevent_env *);
727162736b0SGreg Kroah-Hartman int acpi_device_modalias(struct device *, char *, int);
7286eb2451fSZhang Rui
7296eb2451fSZhang Rui struct platform_device *acpi_create_platform_device(struct acpi_device *,
7301571875bSHeikki Krogerus const struct property_entry *);
7312cbfae0fSAndy Shevchenko #define ACPI_PTR(_ptr) (_ptr)
732cf761af9SMika Westerberg
acpi_device_set_enumerated(struct acpi_device * adev)733cf761af9SMika Westerberg static inline void acpi_device_set_enumerated(struct acpi_device *adev)
73410c7e20bSOctavian Purdila {
73510c7e20bSOctavian Purdila adev->flags.visited = true;
73610c7e20bSOctavian Purdila }
73710c7e20bSOctavian Purdila
acpi_device_clear_enumerated(struct acpi_device * adev)73810c7e20bSOctavian Purdila static inline void acpi_device_clear_enumerated(struct acpi_device *adev)
73910c7e20bSOctavian Purdila {
74010c7e20bSOctavian Purdila adev->flags.visited = false;
74110c7e20bSOctavian Purdila }
74210c7e20bSOctavian Purdila
74310c7e20bSOctavian Purdila enum acpi_reconfig_event {
74468bdb677SOctavian Purdila ACPI_RECONFIG_DEVICE_ADD = 0,
74568bdb677SOctavian Purdila ACPI_RECONFIG_DEVICE_REMOVE,
74668bdb677SOctavian Purdila };
74768bdb677SOctavian Purdila
74868bdb677SOctavian Purdila int acpi_reconfig_notifier_register(struct notifier_block *nb);
74968bdb677SOctavian Purdila int acpi_reconfig_notifier_unregister(struct notifier_block *nb);
75068bdb677SOctavian Purdila
75168bdb677SOctavian Purdila #ifdef CONFIG_ACPI_GTDT
7525f1ae4ebSFu Wei int acpi_gtdt_init(struct acpi_table_header *table, int *platform_timer_count);
7535f1ae4ebSFu Wei int acpi_gtdt_map_ppi(int type);
7545f1ae4ebSFu Wei bool acpi_gtdt_c3stop(int type);
7555f1ae4ebSFu Wei int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count);
756a712c3edSFu Wei #endif
7575f1ae4ebSFu Wei
7585f1ae4ebSFu Wei #ifndef ACPI_HAVE_ARCH_SET_ROOT_POINTER
acpi_arch_set_root_pointer(u64 addr)75941fa1ee9SJosh Boyer static inline void acpi_arch_set_root_pointer(u64 addr)
76041fa1ee9SJosh Boyer {
76141fa1ee9SJosh Boyer }
76241fa1ee9SJosh Boyer #endif
76341fa1ee9SJosh Boyer
76441fa1ee9SJosh Boyer #ifndef ACPI_HAVE_ARCH_GET_ROOT_POINTER
acpi_arch_get_root_pointer(void)765dfc9327aSJuergen Gross static inline u64 acpi_arch_get_root_pointer(void)
766dfc9327aSJuergen Gross {
767dfc9327aSJuergen Gross return 0;
768dfc9327aSJuergen Gross }
769dfc9327aSJuergen Gross #endif
770dfc9327aSJuergen Gross
771dfc9327aSJuergen Gross int acpi_get_local_u64_address(acpi_handle handle, u64 *addr);
7720b7e4481SPierre-Louis Bossart int acpi_get_local_address(acpi_handle handle, u32 *addr);
7737ec16433SCalvin Johnson const char *acpi_get_subsystem_id(acpi_handle handle);
77493064e15SStefan Binding
7757ec16433SCalvin Johnson #else /* !CONFIG_ACPI */
776e55a5999SFeng Tang
777e55a5999SFeng Tang #define acpi_disabled 1
778e55a5999SFeng Tang
779e55a5999SFeng Tang #define ACPI_COMPANION(dev) (NULL)
7807b199811SRafael J. Wysocki #define ACPI_COMPANION_SET(dev, adev) do { } while (0)
7817b199811SRafael J. Wysocki #define ACPI_HANDLE(dev) (NULL)
7827b199811SRafael J. Wysocki #define ACPI_HANDLE_FWNODE(fwnode) (NULL)
7837c6c57f2SMarcin Wojtas
7847b199811SRafael J. Wysocki /* Get rid of the -Wunused-variable for adev */
78557b8543cSRaag Jadav #define acpi_dev_uid_match(adev, uid2) (adev && false)
78657b8543cSRaag Jadav #define acpi_dev_hid_uid_match(adev, hid2, uid2) (adev && false)
787b2b32a17SRaag Jadav
78857b8543cSRaag Jadav struct fwnode_handle;
7898a0662d9SRafael J. Wysocki
acpi_dev_found(const char * hid)7908a0662d9SRafael J. Wysocki static inline bool acpi_dev_found(const char *hid)
7916eb17e0dSKejian Yan {
7926eb17e0dSKejian Yan return false;
7936eb17e0dSKejian Yan }
7946eb17e0dSKejian Yan
acpi_dev_present(const char * hid,const char * uid,s64 hrv)7956eb17e0dSKejian Yan static inline bool acpi_dev_present(const char *hid, const char *uid, s64 hrv)
7968661423eSHans de Goede {
7978661423eSHans de Goede return false;
7988661423eSHans de Goede }
7998661423eSHans de Goede
8008661423eSHans de Goede struct acpi_device;
80135009c80SAndy Shevchenko
acpi_dev_uid_to_integer(struct acpi_device * adev,u64 * integer)80235009c80SAndy Shevchenko static inline int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer)
8035db72fdbSAndy Shevchenko {
8045db72fdbSAndy Shevchenko return -ENODEV;
8055db72fdbSAndy Shevchenko }
8065db72fdbSAndy Shevchenko
8075db72fdbSAndy Shevchenko static inline struct acpi_device *
acpi_dev_get_first_match_dev(const char * hid,const char * uid,s64 hrv)808817b4d64SAndy Shevchenko acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
809817b4d64SAndy Shevchenko {
810817b4d64SAndy Shevchenko return NULL;
811817b4d64SAndy Shevchenko }
812817b4d64SAndy Shevchenko
acpi_reduced_hardware(void)813817b4d64SAndy Shevchenko static inline bool acpi_reduced_hardware(void)
8148eb99e9aSHans de Goede {
8158eb99e9aSHans de Goede return false;
8168eb99e9aSHans de Goede }
8178eb99e9aSHans de Goede
acpi_dev_put(struct acpi_device * adev)8188eb99e9aSHans de Goede static inline void acpi_dev_put(struct acpi_device *adev) {}
819fe066621SYueHaibing
is_acpi_node(const struct fwnode_handle * fwnode)820fe066621SYueHaibing static inline bool is_acpi_node(const struct fwnode_handle *fwnode)
821ff70784aSAndy Shevchenko {
8228a0662d9SRafael J. Wysocki return false;
8238a0662d9SRafael J. Wysocki }
8248a0662d9SRafael J. Wysocki
is_acpi_device_node(const struct fwnode_handle * fwnode)8258a0662d9SRafael J. Wysocki static inline bool is_acpi_device_node(const struct fwnode_handle *fwnode)
826ff70784aSAndy Shevchenko {
8273a7a2ab8SRafael J. Wysocki return false;
8283a7a2ab8SRafael J. Wysocki }
8293a7a2ab8SRafael J. Wysocki
to_acpi_device_node(const struct fwnode_handle * fwnode)8303a7a2ab8SRafael J. Wysocki static inline struct acpi_device *to_acpi_device_node(const struct fwnode_handle *fwnode)
8315c1a72a0SAndy Shevchenko {
8323a7a2ab8SRafael J. Wysocki return NULL;
8333a7a2ab8SRafael J. Wysocki }
8343a7a2ab8SRafael J. Wysocki
is_acpi_data_node(const struct fwnode_handle * fwnode)8353a7a2ab8SRafael J. Wysocki static inline bool is_acpi_data_node(const struct fwnode_handle *fwnode)
836ff70784aSAndy Shevchenko {
8373a7a2ab8SRafael J. Wysocki return false;
8383a7a2ab8SRafael J. Wysocki }
8393a7a2ab8SRafael J. Wysocki
to_acpi_data_node(const struct fwnode_handle * fwnode)8403a7a2ab8SRafael J. Wysocki static inline struct acpi_data_node *to_acpi_data_node(const struct fwnode_handle *fwnode)
8415c1a72a0SAndy Shevchenko {
8428a0662d9SRafael J. Wysocki return NULL;
8438a0662d9SRafael J. Wysocki }
8448a0662d9SRafael J. Wysocki
acpi_data_node_match(const struct fwnode_handle * fwnode,const char * name)8458a0662d9SRafael J. Wysocki static inline bool acpi_data_node_match(const struct fwnode_handle *fwnode,
8465c1a72a0SAndy Shevchenko const char *name)
847613e9721SAdam Thomson {
848613e9721SAdam Thomson return false;
849613e9721SAdam Thomson }
850613e9721SAdam Thomson
acpi_fwnode_handle(struct acpi_device * adev)851613e9721SAdam Thomson static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
8528a0662d9SRafael J. Wysocki {
8538a0662d9SRafael J. Wysocki return NULL;
8548a0662d9SRafael J. Wysocki }
8558a0662d9SRafael J. Wysocki
acpi_device_handle(struct acpi_device * adev)8568a0662d9SRafael J. Wysocki static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
8577d3707bbSRicardo Ribalda {
8587d3707bbSRicardo Ribalda return NULL;
8597d3707bbSRicardo Ribalda }
8607d3707bbSRicardo Ribalda
has_acpi_companion(struct device * dev)8617d3707bbSRicardo Ribalda static inline bool has_acpi_companion(struct device *dev)
862ca5b74d2SRafael J. Wysocki {
863ca5b74d2SRafael J. Wysocki return false;
864ca5b74d2SRafael J. Wysocki }
865ca5b74d2SRafael J. Wysocki
acpi_preset_companion(struct device * dev,struct acpi_device * parent,u64 addr)866ca5b74d2SRafael J. Wysocki static inline void acpi_preset_companion(struct device *dev,
867c0e5c445SDustin Byford struct acpi_device *parent, u64 addr)
868c0e5c445SDustin Byford {
869c0e5c445SDustin Byford }
870c0e5c445SDustin Byford
acpi_dev_name(struct acpi_device * adev)871c0e5c445SDustin Byford static inline const char *acpi_dev_name(struct acpi_device *adev)
87245c42a7fSJarkko Nikula {
87345c42a7fSJarkko Nikula return NULL;
87445c42a7fSJarkko Nikula }
87545c42a7fSJarkko Nikula
acpi_get_first_physical_node(struct acpi_device * adev)87645c42a7fSJarkko Nikula static inline struct device *acpi_get_first_physical_node(struct acpi_device *adev)
877daae45caSLukas Wunner {
878daae45caSLukas Wunner return NULL;
879daae45caSLukas Wunner }
880daae45caSLukas Wunner
acpi_early_init(void)881daae45caSLukas Wunner static inline void acpi_early_init(void) { }
acpi_subsystem_init(void)8824a7a16dcSLen Brown static inline void acpi_subsystem_init(void) { }
883b064a8faSRafael J. Wysocki
early_acpi_boot_init(void)88453de49f5SAndrew Morton static inline int early_acpi_boot_init(void)
885cbf9bd60SYinghai Lu {
886cbf9bd60SYinghai Lu return 0;
887cbf9bd60SYinghai Lu }
acpi_boot_init(void)888cbf9bd60SYinghai Lu static inline int acpi_boot_init(void)
88953de49f5SAndrew Morton {
89053de49f5SAndrew Morton return 0;
89153de49f5SAndrew Morton }
89253de49f5SAndrew Morton
acpi_boot_table_prepare(void)89353de49f5SAndrew Morton static inline void acpi_boot_table_prepare(void)
8941a1c130aSRafael J. Wysocki {
8951a1c130aSRafael J. Wysocki }
8961a1c130aSRafael J. Wysocki
acpi_boot_table_init(void)8971a1c130aSRafael J. Wysocki static inline void acpi_boot_table_init(void)
8988558e394SLen Brown {
89953de49f5SAndrew Morton }
90053de49f5SAndrew Morton
acpi_mps_check(void)90153de49f5SAndrew Morton static inline int acpi_mps_check(void)
9023c999f14SYinghai Lu {
9033c999f14SYinghai Lu return 0;
9043c999f14SYinghai Lu }
9053c999f14SYinghai Lu
acpi_check_resource_conflict(struct resource * res)9063c999f14SYinghai Lu static inline int acpi_check_resource_conflict(struct resource *res)
907443dea72SThomas Renninger {
908443dea72SThomas Renninger return 0;
909443dea72SThomas Renninger }
910443dea72SThomas Renninger
acpi_check_region(resource_size_t start,resource_size_t n,const char * name)911443dea72SThomas Renninger static inline int acpi_check_region(resource_size_t start, resource_size_t n,
912df92e695SThomas Renninger const char *name)
913df92e695SThomas Renninger {
914df92e695SThomas Renninger return 0;
915df92e695SThomas Renninger }
916df92e695SThomas Renninger
917df92e695SThomas Renninger struct acpi_table_header;
acpi_table_parse(char * id,int (* handler)(struct acpi_table_header *))918e55a5999SFeng Tang static inline int acpi_table_parse(char *id,
919e55a5999SFeng Tang int (*handler)(struct acpi_table_header *))
920e55a5999SFeng Tang {
921e55a5999SFeng Tang return -ENODEV;
922f8a571b2Stangchen }
923e55a5999SFeng Tang
acpi_nvs_register(__u64 start,__u64 size)9246fed05c9SRafael J. Wysocki static inline int acpi_nvs_register(__u64 start, __u64 size)
925b54ac6d2SHuang Ying {
9266fed05c9SRafael J. Wysocki return 0;
9276fed05c9SRafael J. Wysocki }
9286fed05c9SRafael J. Wysocki
acpi_nvs_for_each_region(int (* func)(__u64,__u64,void *),void * data)929b54ac6d2SHuang Ying static inline int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
930b54ac6d2SHuang Ying void *data)
931b54ac6d2SHuang Ying {
932b54ac6d2SHuang Ying return 0;
933b54ac6d2SHuang Ying }
934b54ac6d2SHuang Ying
935b54ac6d2SHuang Ying struct acpi_device_id;
936cf761af9SMika Westerberg
acpi_match_acpi_device(const struct acpi_device_id * ids,const struct acpi_device * adev)937cf761af9SMika Westerberg static inline const struct acpi_device_id *acpi_match_acpi_device(
9382b5ae960SAndy Shevchenko const struct acpi_device_id *ids, const struct acpi_device *adev)
9392b5ae960SAndy Shevchenko {
9402b5ae960SAndy Shevchenko return NULL;
9412b5ae960SAndy Shevchenko }
9422b5ae960SAndy Shevchenko
acpi_match_device(const struct acpi_device_id * ids,const struct device * dev)9432b5ae960SAndy Shevchenko static inline const struct acpi_device_id *acpi_match_device(
944cf761af9SMika Westerberg const struct acpi_device_id *ids, const struct device *dev)
945cf761af9SMika Westerberg {
946cf761af9SMika Westerberg return NULL;
947cf761af9SMika Westerberg }
948cf761af9SMika Westerberg
acpi_device_get_match_data(const struct device * dev)949cf761af9SMika Westerberg static inline const void *acpi_device_get_match_data(const struct device *dev)
95067dcc26dSAndy Shevchenko {
95180212a16SSinan Kaya return NULL;
95280212a16SSinan Kaya }
95380212a16SSinan Kaya
acpi_driver_match_device(struct device * dev,const struct device_driver * drv)95480212a16SSinan Kaya static inline bool acpi_driver_match_device(struct device *dev,
955cf761af9SMika Westerberg const struct device_driver *drv)
956cf761af9SMika Westerberg {
957cf761af9SMika Westerberg return false;
958cf761af9SMika Westerberg }
959cf761af9SMika Westerberg
acpi_check_dsm(acpi_handle handle,const guid_t * guid,u64 rev,u64 funcs)960cf761af9SMika Westerberg static inline bool acpi_check_dsm(acpi_handle handle, const guid_t *guid,
9611b94ad7cSAndy Shevchenko u64 rev, u64 funcs)
9621b94ad7cSAndy Shevchenko {
9631b94ad7cSAndy Shevchenko return false;
9641b94ad7cSAndy Shevchenko }
9651b94ad7cSAndy Shevchenko
acpi_evaluate_dsm(acpi_handle handle,const guid_t * guid,u64 rev,u64 func,union acpi_object * argv4)9661b94ad7cSAndy Shevchenko static inline union acpi_object *acpi_evaluate_dsm(acpi_handle handle,
9674ae39924SKejian Yan const guid_t *guid,
96894116f81SAndy Shevchenko u64 rev, u64 func,
9691e0cb59dSJohn Garry union acpi_object *argv4)
9704ae39924SKejian Yan {
9714ae39924SKejian Yan return NULL;
9724ae39924SKejian Yan }
9734ae39924SKejian Yan
acpi_evaluate_dsm_typed(acpi_handle handle,const guid_t * guid,u64 rev,u64 func,union acpi_object * argv4,acpi_object_type type)9744ae39924SKejian Yan static inline union acpi_object *acpi_evaluate_dsm_typed(acpi_handle handle,
9751b94ad7cSAndy Shevchenko const guid_t *guid,
9761b94ad7cSAndy Shevchenko u64 rev, u64 func,
9771b94ad7cSAndy Shevchenko union acpi_object *argv4,
9781b94ad7cSAndy Shevchenko acpi_object_type type)
9791b94ad7cSAndy Shevchenko {
9801b94ad7cSAndy Shevchenko return NULL;
9811b94ad7cSAndy Shevchenko }
9821b94ad7cSAndy Shevchenko
acpi_device_uevent_modalias(const struct device * dev,struct kobj_uevent_env * env)9831b94ad7cSAndy Shevchenko static inline int acpi_device_uevent_modalias(const struct device *dev,
984162736b0SGreg Kroah-Hartman struct kobj_uevent_env *env)
9856eb2451fSZhang Rui {
9866eb2451fSZhang Rui return -ENODEV;
9876eb2451fSZhang Rui }
9886eb2451fSZhang Rui
acpi_device_modalias(struct device * dev,char * buf,int size)9896eb2451fSZhang Rui static inline int acpi_device_modalias(struct device *dev,
9906eb2451fSZhang Rui char *buf, int size)
9916eb2451fSZhang Rui {
9926eb2451fSZhang Rui return -ENODEV;
9936eb2451fSZhang Rui }
9946eb2451fSZhang Rui
9956eb2451fSZhang Rui static inline struct platform_device *
acpi_create_platform_device(struct acpi_device * adev,const struct property_entry * properties)996ee61cfd9SShawn Guo acpi_create_platform_device(struct acpi_device *adev,
997ee61cfd9SShawn Guo const struct property_entry *properties)
9982cbfae0fSAndy Shevchenko {
999ee61cfd9SShawn Guo return NULL;
1000ee61cfd9SShawn Guo }
1001ee61cfd9SShawn Guo
acpi_dma_supported(const struct acpi_device * adev)1002ee61cfd9SShawn Guo static inline bool acpi_dma_supported(const struct acpi_device *adev)
10033d7c821cSAndy Shevchenko {
1004d0562674SSuthikulpanit, Suravee return false;
1005d0562674SSuthikulpanit, Suravee }
1006d0562674SSuthikulpanit, Suravee
acpi_get_dma_attr(struct acpi_device * adev)1007d0562674SSuthikulpanit, Suravee static inline enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev)
1008b84f196dSSuthikulpanit, Suravee {
1009b84f196dSSuthikulpanit, Suravee return DEV_DMA_NOT_SUPPORTED;
1010b84f196dSSuthikulpanit, Suravee }
1011b84f196dSSuthikulpanit, Suravee
acpi_dma_get_range(struct device * dev,const struct bus_dma_region ** map)1012b84f196dSSuthikulpanit, Suravee static inline int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map)
1013bf2ee8d0SJianmin Lv {
1014c04ac679SLorenzo Pieralisi return -ENODEV;
1015c04ac679SLorenzo Pieralisi }
1016c04ac679SLorenzo Pieralisi
acpi_dma_configure(struct device * dev,enum dev_dma_attr attr)1017c04ac679SLorenzo Pieralisi static inline int acpi_dma_configure(struct device *dev,
10185a1bb638SSricharan R enum dev_dma_attr attr)
10195a1bb638SSricharan R {
10205a1bb638SSricharan R return 0;
10215a1bb638SSricharan R }
10225a1bb638SSricharan R
acpi_dma_configure_id(struct device * dev,enum dev_dma_attr attr,const u32 * input_id)1023d760a1baSLorenzo Pieralisi static inline int acpi_dma_configure_id(struct device *dev,
1024b8e069a2SLorenzo Pieralisi enum dev_dma_attr attr,
1025b8e069a2SLorenzo Pieralisi const u32 *input_id)
1026b8e069a2SLorenzo Pieralisi {
1027b8e069a2SLorenzo Pieralisi return 0;
1028b8e069a2SLorenzo Pieralisi }
1029b8e069a2SLorenzo Pieralisi
1030b8e069a2SLorenzo Pieralisi #define ACPI_PTR(_ptr) (NULL)
1031cf761af9SMika Westerberg
acpi_device_set_enumerated(struct acpi_device * adev)1032cf761af9SMika Westerberg static inline void acpi_device_set_enumerated(struct acpi_device *adev)
103310c7e20bSOctavian Purdila {
103410c7e20bSOctavian Purdila }
103510c7e20bSOctavian Purdila
acpi_device_clear_enumerated(struct acpi_device * adev)103610c7e20bSOctavian Purdila static inline void acpi_device_clear_enumerated(struct acpi_device *adev)
103710c7e20bSOctavian Purdila {
103810c7e20bSOctavian Purdila }
103910c7e20bSOctavian Purdila
acpi_reconfig_notifier_register(struct notifier_block * nb)104010c7e20bSOctavian Purdila static inline int acpi_reconfig_notifier_register(struct notifier_block *nb)
104168bdb677SOctavian Purdila {
104268bdb677SOctavian Purdila return -EINVAL;
104368bdb677SOctavian Purdila }
104468bdb677SOctavian Purdila
acpi_reconfig_notifier_unregister(struct notifier_block * nb)104568bdb677SOctavian Purdila static inline int acpi_reconfig_notifier_unregister(struct notifier_block *nb)
104668bdb677SOctavian Purdila {
104768bdb677SOctavian Purdila return -EINVAL;
104868bdb677SOctavian Purdila }
104968bdb677SOctavian Purdila
acpi_resource_consumer(struct resource * res)105068bdb677SOctavian Purdila static inline struct acpi_device *acpi_resource_consumer(struct resource *res)
105100710984SBjorn Helgaas {
105200710984SBjorn Helgaas return NULL;
105300710984SBjorn Helgaas }
105400710984SBjorn Helgaas
acpi_get_local_address(acpi_handle handle,u32 * addr)105500710984SBjorn Helgaas static inline int acpi_get_local_address(acpi_handle handle, u32 *addr)
10567ec16433SCalvin Johnson {
10577ec16433SCalvin Johnson return -ENODEV;
10587ec16433SCalvin Johnson }
10597ec16433SCalvin Johnson
acpi_get_subsystem_id(acpi_handle handle)10607ec16433SCalvin Johnson static inline const char *acpi_get_subsystem_id(acpi_handle handle)
106193064e15SStefan Binding {
106293064e15SStefan Binding return ERR_PTR(-ENODEV);
106393064e15SStefan Binding }
106493064e15SStefan Binding
acpi_register_wakeup_handler(int wake_irq,bool (* wakeup)(void * context),void * context)106593064e15SStefan Binding static inline int acpi_register_wakeup_handler(int wake_irq,
1066e9380df8SMario Limonciello bool (*wakeup)(void *context), void *context)
1067e9380df8SMario Limonciello {
1068e9380df8SMario Limonciello return -ENXIO;
1069e9380df8SMario Limonciello }
1070e9380df8SMario Limonciello
acpi_unregister_wakeup_handler(bool (* wakeup)(void * context),void * context)1071e9380df8SMario Limonciello static inline void acpi_unregister_wakeup_handler(
1072e9380df8SMario Limonciello bool (*wakeup)(void *context), void *context) { }
1073e9380df8SMario Limonciello
1074e9380df8SMario Limonciello struct acpi_osc_context;
acpi_osc_ctx_get_pci_control(struct acpi_osc_context * context)1075cc10eee9SVishal Verma static inline u32 acpi_osc_ctx_get_pci_control(struct acpi_osc_context *context)
1076cc10eee9SVishal Verma {
1077cc10eee9SVishal Verma return 0;
1078cc10eee9SVishal Verma }
1079cc10eee9SVishal Verma
acpi_osc_ctx_get_cxl_control(struct acpi_osc_context * context)1080cc10eee9SVishal Verma static inline u32 acpi_osc_ctx_get_cxl_control(struct acpi_osc_context *context)
108156368029SVishal Verma {
108256368029SVishal Verma return 0;
108356368029SVishal Verma }
108456368029SVishal Verma
acpi_sleep_state_supported(u8 sleep_state)108556368029SVishal Verma static inline bool acpi_sleep_state_supported(u8 sleep_state)
10861f6277bfSSaurabh Sengar {
10871f6277bfSSaurabh Sengar return false;
10881f6277bfSSaurabh Sengar }
10891f6277bfSSaurabh Sengar
acpi_get_processor_handle(int cpu)10901f6277bfSSaurabh Sengar static inline acpi_handle acpi_get_processor_handle(int cpu)
109136b92163SJonathan Cameron {
109236b92163SJonathan Cameron return NULL;
109336b92163SJonathan Cameron }
109436b92163SJonathan Cameron
109536b92163SJonathan Cameron #endif /* !CONFIG_ACPI */
1096b54ac6d2SHuang Ying
10976fed05c9SRafael J. Wysocki #ifdef CONFIG_ACPI_HMAT
1098*0ec9849bSDave Jiang int hmat_get_extended_linear_cache_size(struct resource *backing_res, int nid,
1099*0ec9849bSDave Jiang resource_size_t *size);
1100*0ec9849bSDave Jiang #else
hmat_get_extended_linear_cache_size(struct resource * backing_res,int nid,resource_size_t * size)1101*0ec9849bSDave Jiang static inline int hmat_get_extended_linear_cache_size(struct resource *backing_res,
1102*0ec9849bSDave Jiang int nid, resource_size_t *size)
1103*0ec9849bSDave Jiang {
1104*0ec9849bSDave Jiang return -EOPNOTSUPP;
1105*0ec9849bSDave Jiang }
1106*0ec9849bSDave Jiang #endif
1107*0ec9849bSDave Jiang
1108*0ec9849bSDave Jiang extern void arch_post_acpi_subsys_init(void);
1109ad1a4830SArnd Bergmann
1110ad1a4830SArnd Bergmann #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
1111fe7bd58fSRui Wang int acpi_ioapic_add(acpi_handle root);
1112fe7bd58fSRui Wang #else
acpi_ioapic_add(acpi_handle root)1113fe7bd58fSRui Wang static inline int acpi_ioapic_add(acpi_handle root) { return 0; }
1114fe7bd58fSRui Wang #endif
1115fe7bd58fSRui Wang
1116fe7bd58fSRui Wang #ifdef CONFIG_ACPI
111709f98a82STang Liang void acpi_os_set_prepare_sleep(int (*func)(u8 sleep_state,
111809f98a82STang Liang u32 pm1a_ctrl, u32 pm1b_ctrl));
111909f98a82STang Liang
112009f98a82STang Liang acpi_status acpi_os_prepare_sleep(u8 sleep_state,
112109f98a82STang Liang u32 pm1a_control, u32 pm1b_control);
112209f98a82STang Liang
1123d6b47b12SBen Guthro void acpi_os_set_prepare_extended_sleep(int (*func)(u8 sleep_state,
1124d6b47b12SBen Guthro u32 val_a, u32 val_b));
1125d6b47b12SBen Guthro
1126d6b47b12SBen Guthro acpi_status acpi_os_prepare_extended_sleep(u8 sleep_state,
1127d6b47b12SBen Guthro u32 val_a, u32 val_b);
1128d6b47b12SBen Guthro #if defined(CONFIG_SUSPEND) && defined(CONFIG_X86)
11293ac9b733SMario Limonciello struct acpi_s2idle_dev_ops {
113020e1d640SMario Limonciello struct list_head list_node;
113120e1d640SMario Limonciello void (*prepare)(void);
113220e1d640SMario Limonciello void (*check)(void);
1133811d59fdSMario Limonciello void (*restore)(void);
113420e1d640SMario Limonciello };
113520e1d640SMario Limonciello int acpi_register_lps0_dev(struct acpi_s2idle_dev_ops *arg);
113620e1d640SMario Limonciello void acpi_unregister_lps0_dev(struct acpi_s2idle_dev_ops *arg);
113720e1d640SMario Limonciello int acpi_get_lps0_constraint(struct acpi_device *adev);
11381c2a66d4SMario Limonciello #else /* CONFIG_SUSPEND && CONFIG_X86 */
acpi_get_lps0_constraint(struct device * dev)11391c2a66d4SMario Limonciello static inline int acpi_get_lps0_constraint(struct device *dev)
11401c2a66d4SMario Limonciello {
11411c2a66d4SMario Limonciello return ACPI_STATE_UNKNOWN;
11421c2a66d4SMario Limonciello }
11431c2a66d4SMario Limonciello #endif /* CONFIG_SUSPEND && CONFIG_X86 */
11443ac9b733SMario Limonciello void arch_reserve_mem_area(acpi_physical_address addr, size_t size);
11458e30524dSThomas Renninger #else
11468e30524dSThomas Renninger #define acpi_os_set_prepare_sleep(func, pm1a_ctrl, pm1b_ctrl) do { } while (0)
114709f98a82STang Liang #endif
114809f98a82STang Liang
114909f98a82STang Liang #if defined(CONFIG_ACPI) && defined(CONFIG_PM)
11505de21bb9SRafael J. Wysocki int acpi_dev_suspend(struct device *dev, bool wakeup);
1151cbe25ce3SRafael J. Wysocki int acpi_dev_resume(struct device *dev);
115263705c40SRafael J. Wysocki int acpi_subsys_runtime_suspend(struct device *dev);
1153e5cc8ef3SRafael J. Wysocki int acpi_subsys_runtime_resume(struct device *dev);
1154e5cc8ef3SRafael J. Wysocki int acpi_dev_pm_attach(struct device *dev, bool power_on);
11555de21bb9SRafael J. Wysocki bool acpi_storage_d3(struct device *dev);
11562744d7a0SMario Limonciello bool acpi_dev_state_d0(struct device *dev);
1157b82a7df4SSakari Ailus #else
acpi_subsys_runtime_suspend(struct device * dev)1158e5cc8ef3SRafael J. Wysocki static inline int acpi_subsys_runtime_suspend(struct device *dev) { return 0; }
acpi_subsys_runtime_resume(struct device * dev)1159e5cc8ef3SRafael J. Wysocki static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; }
acpi_dev_pm_attach(struct device * dev,bool power_on)1160e5cc8ef3SRafael J. Wysocki static inline int acpi_dev_pm_attach(struct device *dev, bool power_on)
11615de21bb9SRafael J. Wysocki {
11625de21bb9SRafael J. Wysocki return 0;
1163919b7308SUlf Hansson }
acpi_storage_d3(struct device * dev)11645de21bb9SRafael J. Wysocki static inline bool acpi_storage_d3(struct device *dev)
11652744d7a0SMario Limonciello {
11662744d7a0SMario Limonciello return false;
11672744d7a0SMario Limonciello }
acpi_dev_state_d0(struct device * dev)11682744d7a0SMario Limonciello static inline bool acpi_dev_state_d0(struct device *dev)
1169b82a7df4SSakari Ailus {
1170b82a7df4SSakari Ailus return true;
1171b82a7df4SSakari Ailus }
1172b82a7df4SSakari Ailus #endif
1173e5cc8ef3SRafael J. Wysocki
1174e5cc8ef3SRafael J. Wysocki #if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP)
1175d79beb39SRafael J. Wysocki int acpi_subsys_prepare(struct device *dev);
1176e5cc8ef3SRafael J. Wysocki void acpi_subsys_complete(struct device *dev);
11774cf563c5SHeikki Krogerus int acpi_subsys_suspend_late(struct device *dev);
1178e5cc8ef3SRafael J. Wysocki int acpi_subsys_suspend_noirq(struct device *dev);
117905087360SRafael J. Wysocki int acpi_subsys_suspend(struct device *dev);
11804cf563c5SHeikki Krogerus int acpi_subsys_freeze(struct device *dev);
11814cf563c5SHeikki Krogerus int acpi_subsys_poweroff(struct device *dev);
1182c95b7595SRafael J. Wysocki int acpi_subsys_restore_early(struct device *dev);
1183d96d30d8SSudeep Holla #else
acpi_subsys_prepare(struct device * dev)1184e5cc8ef3SRafael J. Wysocki static inline int acpi_subsys_prepare(struct device *dev) { return 0; }
acpi_subsys_complete(struct device * dev)1185e5cc8ef3SRafael J. Wysocki static inline void acpi_subsys_complete(struct device *dev) {}
acpi_subsys_suspend_late(struct device * dev)11864cf563c5SHeikki Krogerus static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; }
acpi_subsys_suspend_noirq(struct device * dev)1187e5cc8ef3SRafael J. Wysocki static inline int acpi_subsys_suspend_noirq(struct device *dev) { return 0; }
acpi_subsys_suspend(struct device * dev)118805087360SRafael J. Wysocki static inline int acpi_subsys_suspend(struct device *dev) { return 0; }
acpi_subsys_freeze(struct device * dev)11894cf563c5SHeikki Krogerus static inline int acpi_subsys_freeze(struct device *dev) { return 0; }
acpi_subsys_poweroff(struct device * dev)11904cf563c5SHeikki Krogerus static inline int acpi_subsys_poweroff(struct device *dev) { return 0; }
acpi_subsys_restore_early(struct device * dev)1191c95b7595SRafael J. Wysocki static inline int acpi_subsys_restore_early(struct device *dev) { return 0; }
1192d96d30d8SSudeep Holla #endif
1193a6021aa2SArnd Bergmann
1194a6021aa2SArnd Bergmann #if defined(CONFIG_ACPI_EC) && defined(CONFIG_PM_SLEEP)
1195a6021aa2SArnd Bergmann void acpi_ec_mark_gpe_for_wake(void);
1196a6021aa2SArnd Bergmann void acpi_ec_set_gpe_wake_mask(u8 action);
1197a6021aa2SArnd Bergmann #else
acpi_ec_mark_gpe_for_wake(void)1198a6021aa2SArnd Bergmann static inline void acpi_ec_mark_gpe_for_wake(void) {}
acpi_ec_set_gpe_wake_mask(u8 action)119910a08fd6SRafael J. Wysocki static inline void acpi_ec_set_gpe_wake_mask(u8 action) {}
120010a08fd6SRafael J. Wysocki #endif
1201e5cc8ef3SRafael J. Wysocki
1202e5cc8ef3SRafael J. Wysocki #ifdef CONFIG_ACPI
1203fbfddae6SToshi Kani char *acpi_handle_path(acpi_handle handle);
12041269b6d7SSakari Ailus __printf(3, 4)
1205fbfddae6SToshi Kani void acpi_handle_printk(const char *level, acpi_handle handle,
1206fbfddae6SToshi Kani const char *fmt, ...);
1207fbfddae6SToshi Kani void acpi_evaluation_failure_warn(acpi_handle handle, const char *name,
12084c324548SRafael J. Wysocki acpi_status status);
12094c324548SRafael J. Wysocki #else /* !CONFIG_ACPI */
1210fbfddae6SToshi Kani static inline __printf(3, 4) void
acpi_handle_printk(const char * level,void * handle,const char * fmt,...)1211fbfddae6SToshi Kani acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {}
acpi_evaluation_failure_warn(acpi_handle handle,const char * name,acpi_status status)1212fbfddae6SToshi Kani static inline void acpi_evaluation_failure_warn(acpi_handle handle,
12134c324548SRafael J. Wysocki const char *name,
12144c324548SRafael J. Wysocki acpi_status status) {}
12154c324548SRafael J. Wysocki #endif /* !CONFIG_ACPI */
1216fbfddae6SToshi Kani
1217fbfddae6SToshi Kani #if defined(CONFIG_ACPI) && defined(CONFIG_DYNAMIC_DEBUG)
121845fef5b8SBjørn Mork __printf(3, 4)
121945fef5b8SBjørn Mork void __acpi_handle_debug(struct _ddebug *descriptor, acpi_handle handle, const char *fmt, ...);
122045fef5b8SBjørn Mork #endif
122145fef5b8SBjørn Mork
122245fef5b8SBjørn Mork /*
1223fbfddae6SToshi Kani * acpi_handle_<level>: Print message with ACPI prefix and object path
1224fbfddae6SToshi Kani *
1225fbfddae6SToshi Kani * These interfaces acquire the global namespace mutex to obtain an object
1226fbfddae6SToshi Kani * path. In interrupt context, it shows the object path as <n/a>.
1227fbfddae6SToshi Kani */
1228fbfddae6SToshi Kani #define acpi_handle_emerg(handle, fmt, ...) \
1229fbfddae6SToshi Kani acpi_handle_printk(KERN_EMERG, handle, fmt, ##__VA_ARGS__)
1230fbfddae6SToshi Kani #define acpi_handle_alert(handle, fmt, ...) \
1231fbfddae6SToshi Kani acpi_handle_printk(KERN_ALERT, handle, fmt, ##__VA_ARGS__)
1232fbfddae6SToshi Kani #define acpi_handle_crit(handle, fmt, ...) \
1233fbfddae6SToshi Kani acpi_handle_printk(KERN_CRIT, handle, fmt, ##__VA_ARGS__)
1234fbfddae6SToshi Kani #define acpi_handle_err(handle, fmt, ...) \
1235fbfddae6SToshi Kani acpi_handle_printk(KERN_ERR, handle, fmt, ##__VA_ARGS__)
1236fbfddae6SToshi Kani #define acpi_handle_warn(handle, fmt, ...) \
1237fbfddae6SToshi Kani acpi_handle_printk(KERN_WARNING, handle, fmt, ##__VA_ARGS__)
1238fbfddae6SToshi Kani #define acpi_handle_notice(handle, fmt, ...) \
1239fbfddae6SToshi Kani acpi_handle_printk(KERN_NOTICE, handle, fmt, ##__VA_ARGS__)
1240fbfddae6SToshi Kani #define acpi_handle_info(handle, fmt, ...) \
1241fbfddae6SToshi Kani acpi_handle_printk(KERN_INFO, handle, fmt, ##__VA_ARGS__)
1242fbfddae6SToshi Kani
1243fbfddae6SToshi Kani #if defined(DEBUG)
124445fef5b8SBjørn Mork #define acpi_handle_debug(handle, fmt, ...) \
1245fbfddae6SToshi Kani acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__)
1246fbfddae6SToshi Kani #else
1247fbfddae6SToshi Kani #if defined(CONFIG_DYNAMIC_DEBUG)
124845fef5b8SBjørn Mork #define acpi_handle_debug(handle, fmt, ...) \
124945fef5b8SBjørn Mork _dynamic_func_call(fmt, __acpi_handle_debug, \
1250f1ebe04fSRasmus Villemoes handle, pr_fmt(fmt), ##__VA_ARGS__)
1251f1ebe04fSRasmus Villemoes #else
125245fef5b8SBjørn Mork #define acpi_handle_debug(handle, fmt, ...) \
1253fbfddae6SToshi Kani ({ \
1254fbfddae6SToshi Kani if (0) \
1255fbfddae6SToshi Kani acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__); \
1256fbfddae6SToshi Kani 0; \
1257fbfddae6SToshi Kani })
1258fbfddae6SToshi Kani #endif
1259fbfddae6SToshi Kani #endif
126045fef5b8SBjørn Mork
1261fbfddae6SToshi Kani #if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB)
1262f028d524SRafael J. Wysocki bool acpi_gpio_get_irq_resource(struct acpi_resource *ares,
126325e3ef89SAndy Shevchenko struct acpi_resource_gpio **agpio);
126425e3ef89SAndy Shevchenko bool acpi_gpio_get_io_resource(struct acpi_resource *ares,
1265043d7f09SDaniel Scally struct acpi_resource_gpio **agpio);
1266043d7f09SDaniel Scally int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id, int index,
126757b60ec4SAndy Shevchenko bool *wake_capable);
12684c992560SRaul E Rangel #else
acpi_gpio_get_irq_resource(struct acpi_resource * ares,struct acpi_resource_gpio ** agpio)1269f028d524SRafael J. Wysocki static inline bool acpi_gpio_get_irq_resource(struct acpi_resource *ares,
127025e3ef89SAndy Shevchenko struct acpi_resource_gpio **agpio)
127125e3ef89SAndy Shevchenko {
127225e3ef89SAndy Shevchenko return false;
127325e3ef89SAndy Shevchenko }
acpi_gpio_get_io_resource(struct acpi_resource * ares,struct acpi_resource_gpio ** agpio)127425e3ef89SAndy Shevchenko static inline bool acpi_gpio_get_io_resource(struct acpi_resource *ares,
1275043d7f09SDaniel Scally struct acpi_resource_gpio **agpio)
1276043d7f09SDaniel Scally {
1277043d7f09SDaniel Scally return false;
1278043d7f09SDaniel Scally }
acpi_dev_gpio_irq_wake_get_by(struct acpi_device * adev,const char * con_id,int index,bool * wake_capable)1279043d7f09SDaniel Scally static inline int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id,
128057b60ec4SAndy Shevchenko int index, bool *wake_capable)
12814c992560SRaul E Rangel {
1282c884fbd4SMika Westerberg return -ENXIO;
1283c884fbd4SMika Westerberg }
1284c884fbd4SMika Westerberg #endif
1285f028d524SRafael J. Wysocki
acpi_dev_gpio_irq_wake_get(struct acpi_device * adev,int index,bool * wake_capable)1286f028d524SRafael J. Wysocki static inline int acpi_dev_gpio_irq_wake_get(struct acpi_device *adev, int index,
12874c992560SRaul E Rangel bool *wake_capable)
12884c992560SRaul E Rangel {
12894c992560SRaul E Rangel return acpi_dev_gpio_irq_wake_get_by(adev, NULL, index, wake_capable);
12904c992560SRaul E Rangel }
12914c992560SRaul E Rangel
acpi_dev_gpio_irq_get_by(struct acpi_device * adev,const char * con_id,int index)12924c992560SRaul E Rangel static inline int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *con_id,
129357b60ec4SAndy Shevchenko int index)
12944c992560SRaul E Rangel {
12954c992560SRaul E Rangel return acpi_dev_gpio_irq_wake_get_by(adev, con_id, index, NULL);
129657b60ec4SAndy Shevchenko }
12974c992560SRaul E Rangel
acpi_dev_gpio_irq_get(struct acpi_device * adev,int index)12984c992560SRaul E Rangel static inline int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
129980939021SAndy Shevchenko {
130080939021SAndy Shevchenko return acpi_dev_gpio_irq_wake_get_by(adev, NULL, index, NULL);
13014c992560SRaul E Rangel }
130280939021SAndy Shevchenko
130380939021SAndy Shevchenko /* Device properties */
1304ffdcd955SMika Westerberg
1305ffdcd955SMika Westerberg #ifdef CONFIG_ACPI
1306ffdcd955SMika Westerberg int acpi_dev_get_property(const struct acpi_device *adev, const char *name,
130799a85464SSakari Ailus acpi_object_type type, const union acpi_object **obj);
1308ffdcd955SMika Westerberg int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
130999a85464SSakari Ailus const char *name, size_t index, size_t num_args,
1310b60e4ea4SMika Westerberg struct fwnode_reference_args *args);
1311977d5ad3SSakari Ailus
acpi_node_get_property_reference(const struct fwnode_handle * fwnode,const char * name,size_t index,struct fwnode_reference_args * args)1312b31384faSRafael J. Wysocki static inline int acpi_node_get_property_reference(
131399a85464SSakari Ailus const struct fwnode_handle *fwnode,
131499a85464SSakari Ailus const char *name, size_t index,
1315b60e4ea4SMika Westerberg struct fwnode_reference_args *args)
1316977d5ad3SSakari Ailus {
1317b60e4ea4SMika Westerberg return __acpi_node_get_property_reference(fwnode, name, index,
1318b60e4ea4SMika Westerberg NR_FWNODE_REFERENCE_ARGS, args);
1319977d5ad3SSakari Ailus }
1320b60e4ea4SMika Westerberg
acpi_dev_has_props(const struct acpi_device * adev)1321b60e4ea4SMika Westerberg static inline bool acpi_dev_has_props(const struct acpi_device *adev)
13225f5e4890SMika Westerberg {
13235f5e4890SMika Westerberg return !list_empty(&adev->data.properties);
13245f5e4890SMika Westerberg }
13255f5e4890SMika Westerberg
13265f5e4890SMika Westerberg struct acpi_device_properties *
13275f5e4890SMika Westerberg acpi_data_add_props(struct acpi_device_data *data, const guid_t *guid,
13285f5e4890SMika Westerberg union acpi_object *properties);
1329103e10c6SSakari Ailus
13305f5e4890SMika Westerberg int acpi_node_prop_get(const struct fwnode_handle *fwnode, const char *propname,
133199a85464SSakari Ailus void **valptr);
1332b31384faSRafael J. Wysocki
13338a0662d9SRafael J. Wysocki struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode,
133437ba983cSSakari Ailus struct fwnode_handle *child);
133534055190SMika Westerberg
1336e647b532SMarc Zyngier struct acpi_probe_entry;
1337e647b532SMarc Zyngier typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *,
1338e647b532SMarc Zyngier struct acpi_probe_entry *);
1339e647b532SMarc Zyngier
1340e647b532SMarc Zyngier #define ACPI_TABLE_ID_LEN 5
1341e647b532SMarc Zyngier
1342e647b532SMarc Zyngier /**
1343e647b532SMarc Zyngier * struct acpi_probe_entry - boot-time probing entry
1344e647b532SMarc Zyngier * @id: ACPI table name
1345e647b532SMarc Zyngier * @type: Optional subtable type to match
1346e647b532SMarc Zyngier * (if @id contains subtables)
1347e647b532SMarc Zyngier * @subtable_valid: Optional callback to check the validity of
1348e647b532SMarc Zyngier * the subtable
1349e647b532SMarc Zyngier * @probe_table: Callback to the driver being probed when table
1350e647b532SMarc Zyngier * match is successful
1351e647b532SMarc Zyngier * @probe_subtbl: Callback to the driver being probed when table and
1352e647b532SMarc Zyngier * subtable match (and optional callback is successful)
1353e647b532SMarc Zyngier * @driver_data: Sideband data provided back to the driver
1354e647b532SMarc Zyngier */
1355e647b532SMarc Zyngier struct acpi_probe_entry {
1356e647b532SMarc Zyngier __u8 id[ACPI_TABLE_ID_LEN];
1357e647b532SMarc Zyngier __u8 type;
1358e647b532SMarc Zyngier acpi_probe_entry_validate_subtbl subtable_valid;
1359e647b532SMarc Zyngier union {
1360e647b532SMarc Zyngier acpi_tbl_table_handler probe_table;
1361e647b532SMarc Zyngier acpi_tbl_entry_handler probe_subtbl;
1362e647b532SMarc Zyngier };
1363e647b532SMarc Zyngier kernel_ulong_t driver_data;
1364e647b532SMarc Zyngier };
1365e647b532SMarc Zyngier
1366e647b532SMarc Zyngier void arch_sort_irqchip_probe(struct acpi_probe_entry *ap_head, int nr);
1367a9b8f337SSunil V L
1368a9b8f337SSunil V L #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, \
13698ebf642fSOscar Carter valid, data, fn) \
13708ebf642fSOscar Carter static const struct acpi_probe_entry __acpi_probe_##name \
1371e647b532SMarc Zyngier __used __section("__" #table "_acpi_probe_table") = { \
137233def849SJoe Perches .id = table_id, \
1373e647b532SMarc Zyngier .type = subtable, \
1374e647b532SMarc Zyngier .subtable_valid = valid, \
1375e647b532SMarc Zyngier .probe_table = fn, \
13768ebf642fSOscar Carter .driver_data = data, \
1377e647b532SMarc Zyngier }
1378e647b532SMarc Zyngier
1379e647b532SMarc Zyngier #define ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(table, name, table_id, \
138089778093SOscar Carter subtable, valid, data, fn) \
138189778093SOscar Carter static const struct acpi_probe_entry __acpi_probe_##name \
138289778093SOscar Carter __used __section("__" #table "_acpi_probe_table") = { \
138333def849SJoe Perches .id = table_id, \
138489778093SOscar Carter .type = subtable, \
138589778093SOscar Carter .subtable_valid = valid, \
138689778093SOscar Carter .probe_subtbl = fn, \
138789778093SOscar Carter .driver_data = data, \
1388e647b532SMarc Zyngier }
1389e647b532SMarc Zyngier
1390e647b532SMarc Zyngier #define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table
1391e647b532SMarc Zyngier #define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end
1392e647b532SMarc Zyngier
1393e647b532SMarc Zyngier int __acpi_probe_device_table(struct acpi_probe_entry *start, int nr);
1394e647b532SMarc Zyngier
1395e647b532SMarc Zyngier #define acpi_probe_device_table(t) \
1396e647b532SMarc Zyngier ({ \
1397e647b532SMarc Zyngier extern struct acpi_probe_entry ACPI_PROBE_TABLE(t), \
1398e647b532SMarc Zyngier ACPI_PROBE_TABLE_END(t); \
1399e647b532SMarc Zyngier __acpi_probe_device_table(&ACPI_PROBE_TABLE(t), \
1400e647b532SMarc Zyngier (&ACPI_PROBE_TABLE_END(t) - \
1401e647b532SMarc Zyngier &ACPI_PROBE_TABLE(t))); \
1402e647b532SMarc Zyngier })
1403e647b532SMarc Zyngier #else
acpi_dev_get_property(struct acpi_device * adev,const char * name,acpi_object_type type,const union acpi_object ** obj)1404ffdcd955SMika Westerberg static inline int acpi_dev_get_property(struct acpi_device *adev,
1405ffdcd955SMika Westerberg const char *name, acpi_object_type type,
1406ffdcd955SMika Westerberg const union acpi_object **obj)
1407ffdcd955SMika Westerberg {
1408ffdcd955SMika Westerberg return -ENXIO;
1409ffdcd955SMika Westerberg }
1410ffdcd955SMika Westerberg
14113a7a2ab8SRafael J. Wysocki static inline int
__acpi_node_get_property_reference(const struct fwnode_handle * fwnode,const char * name,size_t index,size_t num_args,struct fwnode_reference_args * args)1412b60e4ea4SMika Westerberg __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
141399a85464SSakari Ailus const char *name, size_t index, size_t num_args,
1414b60e4ea4SMika Westerberg struct fwnode_reference_args *args)
1415977d5ad3SSakari Ailus {
1416b60e4ea4SMika Westerberg return -ENXIO;
1417b60e4ea4SMika Westerberg }
1418b60e4ea4SMika Westerberg
1419b60e4ea4SMika Westerberg static inline int
acpi_node_get_property_reference(const struct fwnode_handle * fwnode,const char * name,size_t index,struct fwnode_reference_args * args)142099a85464SSakari Ailus acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
142199a85464SSakari Ailus const char *name, size_t index,
142264031e3eSHanjun Guo struct fwnode_reference_args *args)
1423977d5ad3SSakari Ailus {
1424ffdcd955SMika Westerberg return -ENXIO;
1425ffdcd955SMika Westerberg }
1426ffdcd955SMika Westerberg
acpi_node_prop_get(const struct fwnode_handle * fwnode,const char * propname,void ** valptr)1427b31384faSRafael J. Wysocki static inline int acpi_node_prop_get(const struct fwnode_handle *fwnode,
142899a85464SSakari Ailus const char *propname,
14293a7a2ab8SRafael J. Wysocki void **valptr)
14303a7a2ab8SRafael J. Wysocki {
1431ffdcd955SMika Westerberg return -ENXIO;
1432ffdcd955SMika Westerberg }
1433ffdcd955SMika Westerberg
1434b31384faSRafael J. Wysocki static inline struct fwnode_handle *
acpi_get_next_subnode(const struct fwnode_handle * fwnode,struct fwnode_handle * child)143534055190SMika Westerberg acpi_get_next_subnode(const struct fwnode_handle *fwnode,
143637ba983cSSakari Ailus struct fwnode_handle *child)
143737ba983cSSakari Ailus {
14388a0662d9SRafael J. Wysocki return NULL;
14398a0662d9SRafael J. Wysocki }
14408a0662d9SRafael J. Wysocki
14418a0662d9SRafael J. Wysocki static inline struct fwnode_handle *
acpi_graph_get_next_endpoint(const struct fwnode_handle * fwnode,struct fwnode_handle * prev)1442dfa672fbSMika Westerberg acpi_graph_get_next_endpoint(const struct fwnode_handle *fwnode,
144337ba983cSSakari Ailus struct fwnode_handle *prev)
144479389a83SMika Westerberg {
144579389a83SMika Westerberg return ERR_PTR(-ENXIO);
144679389a83SMika Westerberg }
144779389a83SMika Westerberg
144879389a83SMika Westerberg static inline int
acpi_graph_get_remote_endpoint(const struct fwnode_handle * fwnode,struct fwnode_handle ** remote,struct fwnode_handle ** port,struct fwnode_handle ** endpoint)144979389a83SMika Westerberg acpi_graph_get_remote_endpoint(const struct fwnode_handle *fwnode,
145037ba983cSSakari Ailus struct fwnode_handle **remote,
145179389a83SMika Westerberg struct fwnode_handle **port,
145279389a83SMika Westerberg struct fwnode_handle **endpoint)
145379389a83SMika Westerberg {
145479389a83SMika Westerberg return -ENXIO;
145579389a83SMika Westerberg }
145679389a83SMika Westerberg
145779389a83SMika Westerberg #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \
14583feab13cSLorenzo Pieralisi static const void * __acpi_table_##name[] \
1459e647b532SMarc Zyngier __attribute__((unused)) \
1460e647b532SMarc Zyngier = { (void *) table_id, \
1461e647b532SMarc Zyngier (void *) subtable, \
1462e647b532SMarc Zyngier (void *) valid, \
1463e647b532SMarc Zyngier (void *) fn, \
1464e647b532SMarc Zyngier (void *) data }
1465e647b532SMarc Zyngier
1466e647b532SMarc Zyngier #define acpi_probe_device_table(t) ({ int __r = 0; __r;})
1467e647b532SMarc Zyngier #endif
1468ffdcd955SMika Westerberg
1469ffdcd955SMika Westerberg #ifdef CONFIG_ACPI_TABLE_UPGRADE
1470da3d3f98SAleksey Makarov void acpi_table_upgrade(void);
1471da3d3f98SAleksey Makarov #else
acpi_table_upgrade(void)1472da3d3f98SAleksey Makarov static inline void acpi_table_upgrade(void) { }
1473da3d3f98SAleksey Makarov #endif
1474da3d3f98SAleksey Makarov
1475da3d3f98SAleksey Makarov #if defined(CONFIG_ACPI) && defined(CONFIG_ACPI_WATCHDOG)
1476058dfc76SMika Westerberg extern bool acpi_has_watchdog(void);
1477058dfc76SMika Westerberg #else
acpi_has_watchdog(void)1478058dfc76SMika Westerberg static inline bool acpi_has_watchdog(void) { return false; }
1479058dfc76SMika Westerberg #endif
1480058dfc76SMika Westerberg
1481058dfc76SMika Westerberg #ifdef CONFIG_ACPI_SPCR_TABLE
1482ad1696f6SAleksey Makarov extern bool qdf2400_e44_present;
148337ef38f3STimur Tabi int acpi_parse_spcr(bool enable_earlycon, bool enable_console);
14840231d000SPrarit Bhargava #else
acpi_parse_spcr(bool enable_earlycon,bool enable_console)1485ad1696f6SAleksey Makarov static inline int acpi_parse_spcr(bool enable_earlycon, bool enable_console)
14860231d000SPrarit Bhargava {
14870231d000SPrarit Bhargava return 0;
14880231d000SPrarit Bhargava }
14890231d000SPrarit Bhargava #endif
1490ad1696f6SAleksey Makarov
1491ad1696f6SAleksey Makarov #if IS_ENABLED(CONFIG_ACPI_GENERIC_GSI)
1492d44fa3d4SAgustin Vega-Frias int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res);
1493d44fa3d4SAgustin Vega-Frias #else
1494d44fa3d4SAgustin Vega-Frias static inline
acpi_irq_get(acpi_handle handle,unsigned int index,struct resource * res)1495d44fa3d4SAgustin Vega-Frias int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res)
1496d44fa3d4SAgustin Vega-Frias {
1497d44fa3d4SAgustin Vega-Frias return -EINVAL;
1498d44fa3d4SAgustin Vega-Frias }
1499d44fa3d4SAgustin Vega-Frias #endif
1500d44fa3d4SAgustin Vega-Frias
1501d44fa3d4SAgustin Vega-Frias #ifdef CONFIG_ACPI_LPIT
1502eeb2d80dSSrinivas Pandruvada int lpit_read_residency_count_address(u64 *address);
1503eeb2d80dSSrinivas Pandruvada #else
lpit_read_residency_count_address(u64 * address)1504eeb2d80dSSrinivas Pandruvada static inline int lpit_read_residency_count_address(u64 *address)
1505eeb2d80dSSrinivas Pandruvada {
1506eeb2d80dSSrinivas Pandruvada return -EINVAL;
1507eeb2d80dSSrinivas Pandruvada }
1508eeb2d80dSSrinivas Pandruvada #endif
1509eeb2d80dSSrinivas Pandruvada
1510eeb2d80dSSrinivas Pandruvada #ifdef CONFIG_ACPI_PROCESSOR_IDLE
15114785aa80SOza Pawandeep #ifndef arch_get_idle_state_flags
arch_get_idle_state_flags(u32 arch_flags)15124785aa80SOza Pawandeep static inline unsigned int arch_get_idle_state_flags(u32 arch_flags)
15134785aa80SOza Pawandeep {
15144785aa80SOza Pawandeep return 0;
15154785aa80SOza Pawandeep }
15164785aa80SOza Pawandeep #endif
15174785aa80SOza Pawandeep #endif /* CONFIG_ACPI_PROCESSOR_IDLE */
15184785aa80SOza Pawandeep
15194785aa80SOza Pawandeep #ifdef CONFIG_ACPI_PPTT
15202520e627SSudeep Holla int acpi_pptt_cpu_is_thread(unsigned int cpu);
1521bbd1b706SJeremy Linton int find_acpi_cpu_topology(unsigned int cpu, int level);
15222bd00bcdSJeremy Linton int find_acpi_cpu_topology_cluster(unsigned int cpu);
1523c5e22fefSJonathan Cameron int find_acpi_cpu_topology_package(unsigned int cpu);
15242bd00bcdSJeremy Linton int find_acpi_cpu_topology_hetero_id(unsigned int cpu);
152556855a99SJeremy Linton #else
acpi_pptt_cpu_is_thread(unsigned int cpu)15262520e627SSudeep Holla static inline int acpi_pptt_cpu_is_thread(unsigned int cpu)
1527bbd1b706SJeremy Linton {
1528bbd1b706SJeremy Linton return -EINVAL;
1529bbd1b706SJeremy Linton }
find_acpi_cpu_topology(unsigned int cpu,int level)1530bbd1b706SJeremy Linton static inline int find_acpi_cpu_topology(unsigned int cpu, int level)
15312520e627SSudeep Holla {
15322520e627SSudeep Holla return -EINVAL;
15332520e627SSudeep Holla }
find_acpi_cpu_topology_cluster(unsigned int cpu)15342520e627SSudeep Holla static inline int find_acpi_cpu_topology_cluster(unsigned int cpu)
1535c5e22fefSJonathan Cameron {
1536c5e22fefSJonathan Cameron return -EINVAL;
1537c5e22fefSJonathan Cameron }
find_acpi_cpu_topology_package(unsigned int cpu)1538c5e22fefSJonathan Cameron static inline int find_acpi_cpu_topology_package(unsigned int cpu)
15392520e627SSudeep Holla {
15402520e627SSudeep Holla return -EINVAL;
15412520e627SSudeep Holla }
find_acpi_cpu_topology_hetero_id(unsigned int cpu)15422520e627SSudeep Holla static inline int find_acpi_cpu_topology_hetero_id(unsigned int cpu)
154356855a99SJeremy Linton {
154456855a99SJeremy Linton return -EINVAL;
154556855a99SJeremy Linton }
154656855a99SJeremy Linton #endif
15472520e627SSudeep Holla
15482bd00bcdSJeremy Linton void acpi_arch_init(void);
15499d8a2b03SMiao Wang
1550f7d7ccf9SSunil V L #ifdef CONFIG_ACPI_PCC
155177e2a047SSudeep Holla void acpi_init_pcc(void);
155277e2a047SSudeep Holla #else
acpi_init_pcc(void)155377e2a047SSudeep Holla static inline void acpi_init_pcc(void) { }
155477e2a047SSudeep Holla #endif
155577e2a047SSudeep Holla
155677e2a047SSudeep Holla #ifdef CONFIG_ACPI_FFH
1557e81c782cSSudeep Holla void acpi_init_ffh(void);
1558e81c782cSSudeep Holla extern int acpi_ffh_address_space_arch_setup(void *handler_ctxt,
15593223417dSSudeep Holla void **region_ctxt);
15603223417dSSudeep Holla extern int acpi_ffh_address_space_arch_handler(acpi_integer *value,
15613223417dSSudeep Holla void *region_context);
15623223417dSSudeep Holla #else
acpi_init_ffh(void)1563e81c782cSSudeep Holla static inline void acpi_init_ffh(void) { }
1564e81c782cSSudeep Holla #endif
1565e81c782cSSudeep Holla
1566e81c782cSSudeep Holla #ifdef CONFIG_ACPI
15677847a145SHeikki Krogerus extern void acpi_device_notify(struct device *dev);
1568d0b8e398SRafael J. Wysocki extern void acpi_device_notify_remove(struct device *dev);
1569d0b8e398SRafael J. Wysocki #else
acpi_device_notify(struct device * dev)15707847a145SHeikki Krogerus static inline void acpi_device_notify(struct device *dev) { }
acpi_device_notify_remove(struct device * dev)1571d0b8e398SRafael J. Wysocki static inline void acpi_device_notify_remove(struct device *dev) { }
1572d0b8e398SRafael J. Wysocki #endif
15737847a145SHeikki Krogerus
acpi_use_parent_companion(struct device * dev)15747847a145SHeikki Krogerus static inline void acpi_use_parent_companion(struct device *dev)
157529166faaSHeiner Kallweit {
157629166faaSHeiner Kallweit ACPI_COMPANION_SET(dev, ACPI_COMPANION(dev->parent));
157729166faaSHeiner Kallweit }
157829166faaSHeiner Kallweit
157929166faaSHeiner Kallweit #ifdef CONFIG_ACPI_HMAT
1580067353a4SDave Jiang int hmat_update_target_coordinates(int nid, struct access_coordinate *coord,
1581067353a4SDave Jiang enum access_coordinate_class access);
1582067353a4SDave Jiang #else
hmat_update_target_coordinates(int nid,struct access_coordinate * coord,enum access_coordinate_class access)1583067353a4SDave Jiang static inline int hmat_update_target_coordinates(int nid,
1584067353a4SDave Jiang struct access_coordinate *coord,
1585067353a4SDave Jiang enum access_coordinate_class access)
1586067353a4SDave Jiang {
1587067353a4SDave Jiang return -EOPNOTSUPP;
1588067353a4SDave Jiang }
1589067353a4SDave Jiang #endif
1590067353a4SDave Jiang
1591067353a4SDave Jiang #ifdef CONFIG_ACPI_NUMA
1592debdce20SDave Jiang bool acpi_node_backed_by_real_pxm(int nid);
1593debdce20SDave Jiang #else
acpi_node_backed_by_real_pxm(int nid)1594debdce20SDave Jiang static inline bool acpi_node_backed_by_real_pxm(int nid)
1595debdce20SDave Jiang {
1596debdce20SDave Jiang return false;
1597debdce20SDave Jiang }
1598debdce20SDave Jiang #endif
1599debdce20SDave Jiang
1600debdce20SDave Jiang #endif /*_LINUX_ACPI_H*/
16011da177e4SLinus Torvalds