| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | 
|---|
| 2 | /* | 
|---|
| 3 | * acpi.h - ACPI Interface | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef _LINUX_ACPI_H | 
|---|
| 9 | #define _LINUX_ACPI_H | 
|---|
| 10 |  | 
|---|
| 11 | #include <linux/errno.h> | 
|---|
| 12 | #include <linux/ioport.h>	/* for struct resource */ | 
|---|
| 13 | #include <linux/resource_ext.h> | 
|---|
| 14 | #include <linux/device.h> | 
|---|
| 15 | #include <linux/mod_devicetable.h> | 
|---|
| 16 | #include <linux/property.h> | 
|---|
| 17 | #include <linux/uuid.h> | 
|---|
| 18 | #include <linux/node.h> | 
|---|
| 19 |  | 
|---|
| 20 | struct irq_domain; | 
|---|
| 21 | struct irq_domain_ops; | 
|---|
| 22 |  | 
|---|
| 23 | #ifndef _LINUX | 
|---|
| 24 | #define _LINUX | 
|---|
| 25 | #endif | 
|---|
| 26 | #include <acpi/acpi.h> | 
|---|
| 27 | #include <acpi/acpi_numa.h> | 
|---|
| 28 |  | 
|---|
| 29 | #ifdef	CONFIG_ACPI | 
|---|
| 30 |  | 
|---|
| 31 | #include <linux/list.h> | 
|---|
| 32 | #include <linux/dynamic_debug.h> | 
|---|
| 33 | #include <linux/module.h> | 
|---|
| 34 | #include <linux/mutex.h> | 
|---|
| 35 | #include <linux/fw_table.h> | 
|---|
| 36 |  | 
|---|
| 37 | #include <acpi/acpi_bus.h> | 
|---|
| 38 | #include <acpi/acpi_drivers.h> | 
|---|
| 39 | #include <acpi/acpi_io.h> | 
|---|
| 40 | #include <asm/acpi.h> | 
|---|
| 41 |  | 
|---|
| 42 | #ifdef CONFIG_ACPI_TABLE_LIB | 
|---|
| 43 | #define EXPORT_SYMBOL_ACPI_LIB(x) EXPORT_SYMBOL_NS_GPL(x, "ACPI") | 
|---|
| 44 | #define __init_or_acpilib | 
|---|
| 45 | #define __initdata_or_acpilib | 
|---|
| 46 | #else | 
|---|
| 47 | #define EXPORT_SYMBOL_ACPI_LIB(x) | 
|---|
| 48 | #define __init_or_acpilib __init | 
|---|
| 49 | #define __initdata_or_acpilib __initdata | 
|---|
| 50 | #endif | 
|---|
| 51 |  | 
|---|
| 52 | static inline acpi_handle acpi_device_handle(struct acpi_device *adev) | 
|---|
| 53 | { | 
|---|
| 54 | return adev ? adev->handle : NULL; | 
|---|
| 55 | } | 
|---|
| 56 |  | 
|---|
| 57 | #define ACPI_COMPANION(dev)		to_acpi_device_node((dev)->fwnode) | 
|---|
| 58 | #define ACPI_COMPANION_SET(dev, adev)	set_primary_fwnode(dev, (adev) ? \ | 
|---|
| 59 | acpi_fwnode_handle(adev) : NULL) | 
|---|
| 60 | #define ACPI_HANDLE(dev)		acpi_device_handle(ACPI_COMPANION(dev)) | 
|---|
| 61 | #define ACPI_HANDLE_FWNODE(fwnode)	\ | 
|---|
| 62 | acpi_device_handle(to_acpi_device_node(fwnode)) | 
|---|
| 63 |  | 
|---|
| 64 | static inline struct fwnode_handle *acpi_alloc_fwnode_static(void) | 
|---|
| 65 | { | 
|---|
| 66 | struct fwnode_handle *fwnode; | 
|---|
| 67 |  | 
|---|
| 68 | fwnode = kzalloc(sizeof(struct fwnode_handle), GFP_KERNEL); | 
|---|
| 69 | if (!fwnode) | 
|---|
| 70 | return NULL; | 
|---|
| 71 |  | 
|---|
| 72 | fwnode_init(fwnode, ops: &acpi_static_fwnode_ops); | 
|---|
| 73 |  | 
|---|
| 74 | return fwnode; | 
|---|
| 75 | } | 
|---|
| 76 |  | 
|---|
| 77 | static inline void acpi_free_fwnode_static(struct fwnode_handle *fwnode) | 
|---|
| 78 | { | 
|---|
| 79 | if (WARN_ON(!is_acpi_static_node(fwnode))) | 
|---|
| 80 | return; | 
|---|
| 81 |  | 
|---|
| 82 | kfree(objp: fwnode); | 
|---|
| 83 | } | 
|---|
| 84 |  | 
|---|
| 85 | static inline bool has_acpi_companion(struct device *dev) | 
|---|
| 86 | { | 
|---|
| 87 | return is_acpi_device_node(fwnode: dev->fwnode); | 
|---|
| 88 | } | 
|---|
| 89 |  | 
|---|
| 90 | static inline void acpi_preset_companion(struct device *dev, | 
|---|
| 91 | struct acpi_device *parent, u64 addr) | 
|---|
| 92 | { | 
|---|
| 93 | ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, false)); | 
|---|
| 94 | } | 
|---|
| 95 |  | 
|---|
| 96 | static inline const char *acpi_dev_name(struct acpi_device *adev) | 
|---|
| 97 | { | 
|---|
| 98 | return dev_name(dev: &adev->dev); | 
|---|
| 99 | } | 
|---|
| 100 |  | 
|---|
| 101 | struct device *acpi_get_first_physical_node(struct acpi_device *adev); | 
|---|
| 102 |  | 
|---|
| 103 | enum acpi_irq_model_id { | 
|---|
| 104 | ACPI_IRQ_MODEL_PIC = 0, | 
|---|
| 105 | ACPI_IRQ_MODEL_IOAPIC, | 
|---|
| 106 | ACPI_IRQ_MODEL_IOSAPIC, | 
|---|
| 107 | ACPI_IRQ_MODEL_PLATFORM, | 
|---|
| 108 | ACPI_IRQ_MODEL_GIC, | 
|---|
| 109 | ACPI_IRQ_MODEL_LPIC, | 
|---|
| 110 | ACPI_IRQ_MODEL_RINTC, | 
|---|
| 111 | ACPI_IRQ_MODEL_COUNT | 
|---|
| 112 | }; | 
|---|
| 113 |  | 
|---|
| 114 | extern enum acpi_irq_model_id	acpi_irq_model; | 
|---|
| 115 |  | 
|---|
| 116 | enum acpi_interrupt_id { | 
|---|
| 117 | ACPI_INTERRUPT_PMI	= 1, | 
|---|
| 118 | ACPI_INTERRUPT_INIT, | 
|---|
| 119 | ACPI_INTERRUPT_CPEI, | 
|---|
| 120 | ACPI_INTERRUPT_COUNT | 
|---|
| 121 | }; | 
|---|
| 122 |  | 
|---|
| 123 | #define	ACPI_SPACE_MEM		0 | 
|---|
| 124 |  | 
|---|
| 125 | enum acpi_address_range_id { | 
|---|
| 126 | ACPI_ADDRESS_RANGE_MEMORY = 1, | 
|---|
| 127 | ACPI_ADDRESS_RANGE_RESERVED = 2, | 
|---|
| 128 | ACPI_ADDRESS_RANGE_ACPI = 3, | 
|---|
| 129 | ACPI_ADDRESS_RANGE_NVS	= 4, | 
|---|
| 130 | ACPI_ADDRESS_RANGE_COUNT | 
|---|
| 131 | }; | 
|---|
| 132 |  | 
|---|
| 133 |  | 
|---|
| 134 | /* Table Handlers */ | 
|---|
| 135 | typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table); | 
|---|
| 136 |  | 
|---|
| 137 | /* Debugger support */ | 
|---|
| 138 |  | 
|---|
| 139 | struct acpi_debugger_ops { | 
|---|
| 140 | int (*create_thread)(acpi_osd_exec_callback function, void *context); | 
|---|
| 141 | ssize_t (*write_log)(const char *msg); | 
|---|
| 142 | ssize_t (*read_cmd)(char *buffer, size_t length); | 
|---|
| 143 | int (*wait_command_ready)(bool single_step, char *buffer, size_t length); | 
|---|
| 144 | int (*notify_command_complete)(void); | 
|---|
| 145 | }; | 
|---|
| 146 |  | 
|---|
| 147 | struct acpi_debugger { | 
|---|
| 148 | const struct acpi_debugger_ops *ops; | 
|---|
| 149 | struct module *owner; | 
|---|
| 150 | struct mutex lock; | 
|---|
| 151 | }; | 
|---|
| 152 |  | 
|---|
| 153 | #ifdef CONFIG_ACPI_DEBUGGER | 
|---|
| 154 | int __init acpi_debugger_init(void); | 
|---|
| 155 | int acpi_register_debugger(struct module *owner, | 
|---|
| 156 | const struct acpi_debugger_ops *ops); | 
|---|
| 157 | void acpi_unregister_debugger(const struct acpi_debugger_ops *ops); | 
|---|
| 158 | int acpi_debugger_create_thread(acpi_osd_exec_callback function, void *context); | 
|---|
| 159 | ssize_t acpi_debugger_write_log(const char *msg); | 
|---|
| 160 | ssize_t acpi_debugger_read_cmd(char *buffer, size_t buffer_length); | 
|---|
| 161 | int acpi_debugger_wait_command_ready(void); | 
|---|
| 162 | int acpi_debugger_notify_command_complete(void); | 
|---|
| 163 | #else | 
|---|
| 164 | static inline int acpi_debugger_init(void) | 
|---|
| 165 | { | 
|---|
| 166 | return -ENODEV; | 
|---|
| 167 | } | 
|---|
| 168 |  | 
|---|
| 169 | static inline int acpi_register_debugger(struct module *owner, | 
|---|
| 170 | const struct acpi_debugger_ops *ops) | 
|---|
| 171 | { | 
|---|
| 172 | return -ENODEV; | 
|---|
| 173 | } | 
|---|
| 174 |  | 
|---|
| 175 | static inline void acpi_unregister_debugger(const struct acpi_debugger_ops *ops) | 
|---|
| 176 | { | 
|---|
| 177 | } | 
|---|
| 178 |  | 
|---|
| 179 | static inline int acpi_debugger_create_thread(acpi_osd_exec_callback function, | 
|---|
| 180 | void *context) | 
|---|
| 181 | { | 
|---|
| 182 | return -ENODEV; | 
|---|
| 183 | } | 
|---|
| 184 |  | 
|---|
| 185 | static inline int acpi_debugger_write_log(const char *msg) | 
|---|
| 186 | { | 
|---|
| 187 | return -ENODEV; | 
|---|
| 188 | } | 
|---|
| 189 |  | 
|---|
| 190 | static inline int acpi_debugger_read_cmd(char *buffer, u32 buffer_length) | 
|---|
| 191 | { | 
|---|
| 192 | return -ENODEV; | 
|---|
| 193 | } | 
|---|
| 194 |  | 
|---|
| 195 | static inline int acpi_debugger_wait_command_ready(void) | 
|---|
| 196 | { | 
|---|
| 197 | return -ENODEV; | 
|---|
| 198 | } | 
|---|
| 199 |  | 
|---|
| 200 | static inline int acpi_debugger_notify_command_complete(void) | 
|---|
| 201 | { | 
|---|
| 202 | return -ENODEV; | 
|---|
| 203 | } | 
|---|
| 204 | #endif | 
|---|
| 205 |  | 
|---|
| 206 | #define BAD_MADT_ENTRY(entry, end) (					    \ | 
|---|
| 207 | (!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \ | 
|---|
| 208 | ((struct acpi_subtable_header *)entry)->length < sizeof(*entry)) | 
|---|
| 209 |  | 
|---|
| 210 | void __iomem *__acpi_map_table(unsigned long phys, unsigned long size); | 
|---|
| 211 | void __acpi_unmap_table(void __iomem *map, unsigned long size); | 
|---|
| 212 | int early_acpi_boot_init(void); | 
|---|
| 213 | int acpi_boot_init (void); | 
|---|
| 214 | void acpi_boot_table_prepare (void); | 
|---|
| 215 | void acpi_boot_table_init (void); | 
|---|
| 216 | int acpi_mps_check (void); | 
|---|
| 217 | int acpi_numa_init (void); | 
|---|
| 218 |  | 
|---|
| 219 | int acpi_locate_initial_tables (void); | 
|---|
| 220 | void acpi_reserve_initial_tables (void); | 
|---|
| 221 | void acpi_table_init_complete (void); | 
|---|
| 222 | int acpi_table_init (void); | 
|---|
| 223 |  | 
|---|
| 224 | int acpi_table_parse(char *id, acpi_tbl_table_handler handler); | 
|---|
| 225 | int __init_or_acpilib acpi_table_parse_entries(char *id, | 
|---|
| 226 | unsigned long table_size, int entry_id, | 
|---|
| 227 | acpi_tbl_entry_handler handler, unsigned int max_entries); | 
|---|
| 228 | int __init_or_acpilib acpi_table_parse_entries_array(char *id, | 
|---|
| 229 | unsigned long table_size, struct acpi_subtable_proc *proc, | 
|---|
| 230 | int proc_num, unsigned int max_entries); | 
|---|
| 231 | int acpi_table_parse_madt(enum acpi_madt_type id, | 
|---|
| 232 | acpi_tbl_entry_handler handler, | 
|---|
| 233 | unsigned int max_entries); | 
|---|
| 234 | int __init_or_acpilib | 
|---|
| 235 | acpi_table_parse_cedt(enum acpi_cedt_type id, | 
|---|
| 236 | acpi_tbl_entry_handler_arg handler_arg, void *arg); | 
|---|
| 237 |  | 
|---|
| 238 | int acpi_parse_mcfg (struct acpi_table_header *); | 
|---|
| 239 | void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); | 
|---|
| 240 |  | 
|---|
| 241 | #if defined(CONFIG_X86) || defined(CONFIG_LOONGARCH) | 
|---|
| 242 | void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa); | 
|---|
| 243 | #else | 
|---|
| 244 | static inline void | 
|---|
| 245 | acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) { } | 
|---|
| 246 | #endif | 
|---|
| 247 |  | 
|---|
| 248 | void acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa); | 
|---|
| 249 |  | 
|---|
| 250 | #if defined(CONFIG_ARM64) || defined(CONFIG_LOONGARCH) | 
|---|
| 251 | void acpi_arch_dma_setup(struct device *dev); | 
|---|
| 252 | #else | 
|---|
| 253 | static inline void acpi_arch_dma_setup(struct device *dev) { } | 
|---|
| 254 | #endif | 
|---|
| 255 |  | 
|---|
| 256 | #ifdef CONFIG_ARM64 | 
|---|
| 257 | void acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa); | 
|---|
| 258 | #else | 
|---|
| 259 | static inline void | 
|---|
| 260 | acpi_numa_gicc_affinity_init(struct acpi_srat_gicc_affinity *pa) { } | 
|---|
| 261 | #endif | 
|---|
| 262 |  | 
|---|
| 263 | #ifdef CONFIG_RISCV | 
|---|
| 264 | void acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity *pa); | 
|---|
| 265 | #else | 
|---|
| 266 | static inline void acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity *pa) { } | 
|---|
| 267 | #endif | 
|---|
| 268 |  | 
|---|
| 269 | #ifndef PHYS_CPUID_INVALID | 
|---|
| 270 | typedef u32 phys_cpuid_t; | 
|---|
| 271 | #define PHYS_CPUID_INVALID (phys_cpuid_t)(-1) | 
|---|
| 272 | #endif | 
|---|
| 273 |  | 
|---|
| 274 | static inline bool invalid_logical_cpuid(u32 cpuid) | 
|---|
| 275 | { | 
|---|
| 276 | return (int)cpuid < 0; | 
|---|
| 277 | } | 
|---|
| 278 |  | 
|---|
| 279 | static inline bool invalid_phys_cpuid(phys_cpuid_t phys_id) | 
|---|
| 280 | { | 
|---|
| 281 | return phys_id == PHYS_CPUID_INVALID; | 
|---|
| 282 | } | 
|---|
| 283 |  | 
|---|
| 284 |  | 
|---|
| 285 | int __init acpi_get_madt_revision(void); | 
|---|
| 286 |  | 
|---|
| 287 | /* Validate the processor object's proc_id */ | 
|---|
| 288 | bool acpi_duplicate_processor_id(int proc_id); | 
|---|
| 289 | /* Processor _CTS control */ | 
|---|
| 290 | struct acpi_processor_power; | 
|---|
| 291 |  | 
|---|
| 292 | #ifdef CONFIG_ACPI_PROCESSOR_CSTATE | 
|---|
| 293 | bool acpi_processor_claim_cst_control(void); | 
|---|
| 294 | int acpi_processor_evaluate_cst(acpi_handle handle, u32 cpu, | 
|---|
| 295 | struct acpi_processor_power *info); | 
|---|
| 296 | #else | 
|---|
| 297 | static inline bool acpi_processor_claim_cst_control(void) { return false; } | 
|---|
| 298 | static inline int acpi_processor_evaluate_cst(acpi_handle handle, u32 cpu, | 
|---|
| 299 | struct acpi_processor_power *info) | 
|---|
| 300 | { | 
|---|
| 301 | return -ENODEV; | 
|---|
| 302 | } | 
|---|
| 303 | #endif | 
|---|
| 304 |  | 
|---|
| 305 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | 
|---|
| 306 | /* Arch dependent functions for cpu hotplug support */ | 
|---|
| 307 | int acpi_map_cpu(acpi_handle handle, phys_cpuid_t physid, u32 acpi_id, | 
|---|
| 308 | int *pcpu); | 
|---|
| 309 | int acpi_unmap_cpu(int cpu); | 
|---|
| 310 | #endif /* CONFIG_ACPI_HOTPLUG_CPU */ | 
|---|
| 311 |  | 
|---|
| 312 | acpi_handle acpi_get_processor_handle(int cpu); | 
|---|
| 313 |  | 
|---|
| 314 | #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC | 
|---|
| 315 | int acpi_get_ioapic_id(acpi_handle handle, u32 gsi_base, u64 *phys_addr); | 
|---|
| 316 | #endif | 
|---|
| 317 |  | 
|---|
| 318 | int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base); | 
|---|
| 319 | int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base); | 
|---|
| 320 | int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base); | 
|---|
| 321 | void acpi_irq_stats_init(void); | 
|---|
| 322 | extern u32 acpi_irq_handled; | 
|---|
| 323 | extern u32 acpi_irq_not_handled; | 
|---|
| 324 | extern unsigned int acpi_sci_irq; | 
|---|
| 325 | extern bool acpi_no_s5; | 
|---|
| 326 | #define INVALID_ACPI_IRQ	((unsigned)-1) | 
|---|
| 327 | static inline bool acpi_sci_irq_valid(void) | 
|---|
| 328 | { | 
|---|
| 329 | return acpi_sci_irq != INVALID_ACPI_IRQ; | 
|---|
| 330 | } | 
|---|
| 331 |  | 
|---|
| 332 | extern int sbf_port; | 
|---|
| 333 |  | 
|---|
| 334 | int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity); | 
|---|
| 335 | int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); | 
|---|
| 336 | int acpi_isa_irq_to_gsi (unsigned isa_irq, u32 *gsi); | 
|---|
| 337 |  | 
|---|
| 338 | typedef struct fwnode_handle *(*acpi_gsi_domain_disp_fn)(u32); | 
|---|
| 339 |  | 
|---|
| 340 | void acpi_set_irq_model(enum acpi_irq_model_id model, | 
|---|
| 341 | acpi_gsi_domain_disp_fn fn); | 
|---|
| 342 | acpi_gsi_domain_disp_fn acpi_get_gsi_dispatcher(void); | 
|---|
| 343 | void acpi_set_gsi_to_irq_fallback(u32 (*)(u32)); | 
|---|
| 344 |  | 
|---|
| 345 | struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags, | 
|---|
| 346 | unsigned int size, | 
|---|
| 347 | struct fwnode_handle *fwnode, | 
|---|
| 348 | const struct irq_domain_ops *ops, | 
|---|
| 349 | void *host_data); | 
|---|
| 350 |  | 
|---|
| 351 | #ifdef CONFIG_X86_IO_APIC | 
|---|
| 352 | extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); | 
|---|
| 353 | #else | 
|---|
| 354 | static inline int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity) | 
|---|
| 355 | { | 
|---|
| 356 | return -1; | 
|---|
| 357 | } | 
|---|
| 358 | #endif | 
|---|
| 359 | /* | 
|---|
| 360 | * This function undoes the effect of one call to acpi_register_gsi(). | 
|---|
| 361 | * If this matches the last registration, any IRQ resources for gsi | 
|---|
| 362 | * are freed. | 
|---|
| 363 | */ | 
|---|
| 364 | void acpi_unregister_gsi (u32 gsi); | 
|---|
| 365 |  | 
|---|
| 366 | struct pci_dev; | 
|---|
| 367 |  | 
|---|
| 368 | struct acpi_prt_entry *acpi_pci_irq_lookup(struct pci_dev *dev, int pin); | 
|---|
| 369 | int acpi_pci_irq_enable (struct pci_dev *dev); | 
|---|
| 370 | void acpi_penalize_isa_irq(int irq, int active); | 
|---|
| 371 | bool acpi_isa_irq_available(int irq); | 
|---|
| 372 | #ifdef CONFIG_PCI | 
|---|
| 373 | void acpi_penalize_sci_irq(int irq, int trigger, int polarity); | 
|---|
| 374 | #else | 
|---|
| 375 | static inline void acpi_penalize_sci_irq(int irq, int trigger, | 
|---|
| 376 | int polarity) | 
|---|
| 377 | { | 
|---|
| 378 | } | 
|---|
| 379 | #endif | 
|---|
| 380 | void acpi_pci_irq_disable (struct pci_dev *dev); | 
|---|
| 381 |  | 
|---|
| 382 | extern int ec_read(u8 addr, u8 *val); | 
|---|
| 383 | extern int ec_write(u8 addr, u8 val); | 
|---|
| 384 | extern int ec_transaction(u8 command, | 
|---|
| 385 | const u8 *wdata, unsigned wdata_len, | 
|---|
| 386 | u8 *rdata, unsigned rdata_len); | 
|---|
| 387 | extern acpi_handle ec_get_handle(void); | 
|---|
| 388 |  | 
|---|
| 389 | extern bool acpi_is_pnp_device(struct acpi_device *); | 
|---|
| 390 |  | 
|---|
| 391 | #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) | 
|---|
| 392 |  | 
|---|
| 393 | typedef void (*wmi_notify_handler) (union acpi_object *data, void *context); | 
|---|
| 394 |  | 
|---|
| 395 | int wmi_instance_count(const char *guid); | 
|---|
| 396 |  | 
|---|
| 397 | extern acpi_status wmi_evaluate_method(const char *guid, u8 instance, | 
|---|
| 398 | u32 method_id, | 
|---|
| 399 | const struct acpi_buffer *in, | 
|---|
| 400 | struct acpi_buffer *out); | 
|---|
| 401 | extern acpi_status wmi_query_block(const char *guid, u8 instance, | 
|---|
| 402 | struct acpi_buffer *out); | 
|---|
| 403 | extern acpi_status wmi_set_block(const char *guid, u8 instance, | 
|---|
| 404 | const struct acpi_buffer *in); | 
|---|
| 405 | extern acpi_status wmi_install_notify_handler(const char *guid, | 
|---|
| 406 | wmi_notify_handler handler, void *data); | 
|---|
| 407 | extern acpi_status wmi_remove_notify_handler(const char *guid); | 
|---|
| 408 | extern bool wmi_has_guid(const char *guid); | 
|---|
| 409 | extern char *wmi_get_acpi_device_uid(const char *guid); | 
|---|
| 410 |  | 
|---|
| 411 | #endif	/* CONFIG_ACPI_WMI */ | 
|---|
| 412 |  | 
|---|
| 413 | #define ACPI_VIDEO_OUTPUT_SWITCHING			0x0001 | 
|---|
| 414 | #define ACPI_VIDEO_DEVICE_POSTING			0x0002 | 
|---|
| 415 | #define ACPI_VIDEO_ROM_AVAILABLE			0x0004 | 
|---|
| 416 | #define ACPI_VIDEO_BACKLIGHT				0x0008 | 
|---|
| 417 | #define ACPI_VIDEO_BACKLIGHT_FORCE_VENDOR		0x0010 | 
|---|
| 418 | #define ACPI_VIDEO_BACKLIGHT_FORCE_VIDEO		0x0020 | 
|---|
| 419 | #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR	0x0040 | 
|---|
| 420 | #define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO		0x0080 | 
|---|
| 421 | #define ACPI_VIDEO_BACKLIGHT_DMI_VENDOR			0x0100 | 
|---|
| 422 | #define ACPI_VIDEO_BACKLIGHT_DMI_VIDEO			0x0200 | 
|---|
| 423 | #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR		0x0400 | 
|---|
| 424 | #define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO		0x0800 | 
|---|
| 425 |  | 
|---|
| 426 | extern char acpi_video_backlight_string[]; | 
|---|
| 427 | extern long acpi_is_video_device(acpi_handle handle); | 
|---|
| 428 |  | 
|---|
| 429 | extern void acpi_osi_setup(char *str); | 
|---|
| 430 | extern bool acpi_osi_is_win8(void); | 
|---|
| 431 |  | 
|---|
| 432 | #ifdef CONFIG_ACPI_THERMAL_LIB | 
|---|
| 433 | int thermal_acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp); | 
|---|
| 434 | int thermal_acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp); | 
|---|
| 435 | int thermal_acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp); | 
|---|
| 436 | int thermal_acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp); | 
|---|
| 437 | #endif | 
|---|
| 438 |  | 
|---|
| 439 | #ifdef CONFIG_ACPI_HMAT | 
|---|
| 440 | int acpi_get_genport_coordinates(u32 uid, struct access_coordinate *coord); | 
|---|
| 441 | #else | 
|---|
| 442 | static inline int acpi_get_genport_coordinates(u32 uid, | 
|---|
| 443 | struct access_coordinate *coord) | 
|---|
| 444 | { | 
|---|
| 445 | return -EOPNOTSUPP; | 
|---|
| 446 | } | 
|---|
| 447 | #endif | 
|---|
| 448 |  | 
|---|
| 449 | #ifdef CONFIG_ACPI_NUMA | 
|---|
| 450 | int acpi_map_pxm_to_node(int pxm); | 
|---|
| 451 | int acpi_get_node(acpi_handle handle); | 
|---|
| 452 |  | 
|---|
| 453 | /** | 
|---|
| 454 | * pxm_to_online_node - Map proximity ID to online node | 
|---|
| 455 | * @pxm: ACPI proximity ID | 
|---|
| 456 | * | 
|---|
| 457 | * This is similar to pxm_to_node(), but always returns an online | 
|---|
| 458 | * node.  When the mapped node from a given proximity ID is offline, it | 
|---|
| 459 | * looks up the node distance table and returns the nearest online node. | 
|---|
| 460 | * | 
|---|
| 461 | * ACPI device drivers, which are called after the NUMA initialization has | 
|---|
| 462 | * completed in the kernel, can call this interface to obtain their device | 
|---|
| 463 | * NUMA topology from ACPI tables.  Such drivers do not have to deal with | 
|---|
| 464 | * offline nodes.  A node may be offline when SRAT memory entry does not exist, | 
|---|
| 465 | * or NUMA is disabled, ex. "numa=off" on x86. | 
|---|
| 466 | */ | 
|---|
| 467 | static inline int pxm_to_online_node(int pxm) | 
|---|
| 468 | { | 
|---|
| 469 | int node = pxm_to_node(pxm); | 
|---|
| 470 |  | 
|---|
| 471 | return numa_map_to_online_node(node); | 
|---|
| 472 | } | 
|---|
| 473 | #else | 
|---|
| 474 | static inline int pxm_to_online_node(int pxm) | 
|---|
| 475 | { | 
|---|
| 476 | return 0; | 
|---|
| 477 | } | 
|---|
| 478 | static inline int acpi_map_pxm_to_node(int pxm) | 
|---|
| 479 | { | 
|---|
| 480 | return 0; | 
|---|
| 481 | } | 
|---|
| 482 | static inline int acpi_get_node(acpi_handle handle) | 
|---|
| 483 | { | 
|---|
| 484 | return 0; | 
|---|
| 485 | } | 
|---|
| 486 | #endif | 
|---|
| 487 | extern int pnpacpi_disabled; | 
|---|
| 488 |  | 
|---|
| 489 | #define PXM_INVAL	(-1) | 
|---|
| 490 |  | 
|---|
| 491 | bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res); | 
|---|
| 492 | bool acpi_dev_resource_io(struct acpi_resource *ares, struct resource *res); | 
|---|
| 493 | bool acpi_dev_resource_address_space(struct acpi_resource *ares, | 
|---|
| 494 | struct resource_win *win); | 
|---|
| 495 | bool acpi_dev_resource_ext_address_space(struct acpi_resource *ares, | 
|---|
| 496 | struct resource_win *win); | 
|---|
| 497 | unsigned long acpi_dev_irq_flags(u8 triggering, u8 polarity, u8 shareable, u8 wake_capable); | 
|---|
| 498 | unsigned int acpi_dev_get_irq_type(int triggering, int polarity); | 
|---|
| 499 | bool acpi_dev_resource_interrupt(struct acpi_resource *ares, int index, | 
|---|
| 500 | struct resource *res); | 
|---|
| 501 |  | 
|---|
| 502 | void acpi_dev_free_resource_list(struct list_head *list); | 
|---|
| 503 | int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list, | 
|---|
| 504 | int (*preproc)(struct acpi_resource *, void *), | 
|---|
| 505 | void *preproc_data); | 
|---|
| 506 | int acpi_dev_get_dma_resources(struct acpi_device *adev, | 
|---|
| 507 | struct list_head *list); | 
|---|
| 508 | int acpi_dev_get_memory_resources(struct acpi_device *adev, struct list_head *list); | 
|---|
| 509 | int acpi_dev_filter_resource_type(struct acpi_resource *ares, | 
|---|
| 510 | unsigned long types); | 
|---|
| 511 |  | 
|---|
| 512 | static inline int acpi_dev_filter_resource_type_cb(struct acpi_resource *ares, | 
|---|
| 513 | void *arg) | 
|---|
| 514 | { | 
|---|
| 515 | return acpi_dev_filter_resource_type(ares, types: (unsigned long)arg); | 
|---|
| 516 | } | 
|---|
| 517 |  | 
|---|
| 518 | struct acpi_device *acpi_resource_consumer(struct resource *res); | 
|---|
| 519 |  | 
|---|
| 520 | int acpi_check_resource_conflict(const struct resource *res); | 
|---|
| 521 |  | 
|---|
| 522 | int acpi_check_region(resource_size_t start, resource_size_t n, | 
|---|
| 523 | const char *name); | 
|---|
| 524 |  | 
|---|
| 525 | int acpi_resources_are_enforced(void); | 
|---|
| 526 |  | 
|---|
| 527 | #ifdef CONFIG_HIBERNATION | 
|---|
| 528 | extern int acpi_check_s4_hw_signature; | 
|---|
| 529 | #endif | 
|---|
| 530 |  | 
|---|
| 531 | #ifdef CONFIG_PM_SLEEP | 
|---|
| 532 | void __init acpi_old_suspend_ordering(void); | 
|---|
| 533 | void __init acpi_nvs_nosave(void); | 
|---|
| 534 | void __init acpi_nvs_nosave_s3(void); | 
|---|
| 535 | void __init acpi_sleep_no_blacklist(void); | 
|---|
| 536 | #endif /* CONFIG_PM_SLEEP */ | 
|---|
| 537 |  | 
|---|
| 538 | int acpi_register_wakeup_handler( | 
|---|
| 539 | int wake_irq, bool (*wakeup)(void *context), void *context); | 
|---|
| 540 | void acpi_unregister_wakeup_handler( | 
|---|
| 541 | bool (*wakeup)(void *context), void *context); | 
|---|
| 542 |  | 
|---|
| 543 | struct acpi_osc_context { | 
|---|
| 544 | char *uuid_str;			/* UUID string */ | 
|---|
| 545 | int rev; | 
|---|
| 546 | struct acpi_buffer cap;		/* list of DWORD capabilities */ | 
|---|
| 547 | struct acpi_buffer ret;		/* free by caller if success */ | 
|---|
| 548 | }; | 
|---|
| 549 |  | 
|---|
| 550 | acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); | 
|---|
| 551 |  | 
|---|
| 552 | /* Number of _OSC capability DWORDS depends on bridge type */ | 
|---|
| 553 | #define OSC_PCI_CAPABILITY_DWORDS		3 | 
|---|
| 554 | #define OSC_CXL_CAPABILITY_DWORDS		5 | 
|---|
| 555 |  | 
|---|
| 556 | /* Indexes into _OSC Capabilities Buffer (DWORDs 2 to 5 are device-specific) */ | 
|---|
| 557 | #define OSC_QUERY_DWORD				0	/* DWORD 1 */ | 
|---|
| 558 | #define OSC_SUPPORT_DWORD			1	/* DWORD 2 */ | 
|---|
| 559 | #define OSC_CONTROL_DWORD			2	/* DWORD 3 */ | 
|---|
| 560 | #define OSC_EXT_SUPPORT_DWORD			3	/* DWORD 4 */ | 
|---|
| 561 | #define OSC_EXT_CONTROL_DWORD			4	/* DWORD 5 */ | 
|---|
| 562 |  | 
|---|
| 563 | /* _OSC Capabilities DWORD 1: Query/Control and Error Returns (generic) */ | 
|---|
| 564 | #define OSC_QUERY_ENABLE			0x00000001  /* input */ | 
|---|
| 565 | #define OSC_REQUEST_ERROR			0x00000002  /* return */ | 
|---|
| 566 | #define OSC_INVALID_UUID_ERROR			0x00000004  /* return */ | 
|---|
| 567 | #define OSC_INVALID_REVISION_ERROR		0x00000008  /* return */ | 
|---|
| 568 | #define OSC_CAPABILITIES_MASK_ERROR		0x00000010  /* return */ | 
|---|
| 569 |  | 
|---|
| 570 | /* Platform-Wide Capabilities _OSC: Capabilities DWORD 2: Support Field */ | 
|---|
| 571 | #define OSC_SB_PAD_SUPPORT			0x00000001 | 
|---|
| 572 | #define OSC_SB_PPC_OST_SUPPORT			0x00000002 | 
|---|
| 573 | #define OSC_SB_PR3_SUPPORT			0x00000004 | 
|---|
| 574 | #define OSC_SB_HOTPLUG_OST_SUPPORT		0x00000008 | 
|---|
| 575 | #define OSC_SB_APEI_SUPPORT			0x00000010 | 
|---|
| 576 | #define OSC_SB_CPC_SUPPORT			0x00000020 | 
|---|
| 577 | #define OSC_SB_CPCV2_SUPPORT			0x00000040 | 
|---|
| 578 | #define OSC_SB_PCLPI_SUPPORT			0x00000080 | 
|---|
| 579 | #define OSC_SB_OSLPI_SUPPORT			0x00000100 | 
|---|
| 580 | #define OSC_SB_FAST_THERMAL_SAMPLING_SUPPORT	0x00000200 | 
|---|
| 581 | #define OSC_SB_OVER_16_PSTATES_SUPPORT		0x00000400 | 
|---|
| 582 | #define OSC_SB_GED_SUPPORT			0x00000800 | 
|---|
| 583 | #define OSC_SB_CPC_DIVERSE_HIGH_SUPPORT		0x00001000 | 
|---|
| 584 | #define OSC_SB_IRQ_RESOURCE_SOURCE_SUPPORT	0x00002000 | 
|---|
| 585 | #define OSC_SB_CPC_FLEXIBLE_ADR_SPACE		0x00004000 | 
|---|
| 586 | #define OSC_SB_GENERIC_INITIATOR_SUPPORT	0x00020000 | 
|---|
| 587 | #define OSC_SB_NATIVE_USB4_SUPPORT		0x00040000 | 
|---|
| 588 | #define OSC_SB_BATTERY_CHARGE_LIMITING_SUPPORT	0x00080000 | 
|---|
| 589 | #define OSC_SB_PRM_SUPPORT			0x00200000 | 
|---|
| 590 | #define OSC_SB_FFH_OPR_SUPPORT			0x00400000 | 
|---|
| 591 |  | 
|---|
| 592 | extern bool osc_sb_apei_support_acked; | 
|---|
| 593 | extern bool osc_pc_lpi_support_confirmed; | 
|---|
| 594 | extern bool osc_sb_native_usb4_support_confirmed; | 
|---|
| 595 | extern bool osc_sb_cppc2_support_acked; | 
|---|
| 596 | extern bool osc_cpc_flexible_adr_space_confirmed; | 
|---|
| 597 |  | 
|---|
| 598 | /* USB4 Capabilities */ | 
|---|
| 599 | #define OSC_USB_USB3_TUNNELING			0x00000001 | 
|---|
| 600 | #define OSC_USB_DP_TUNNELING			0x00000002 | 
|---|
| 601 | #define OSC_USB_PCIE_TUNNELING			0x00000004 | 
|---|
| 602 | #define OSC_USB_XDOMAIN				0x00000008 | 
|---|
| 603 |  | 
|---|
| 604 | extern u32 osc_sb_native_usb4_control; | 
|---|
| 605 |  | 
|---|
| 606 | /* PCI Host Bridge _OSC: Capabilities DWORD 2: Support Field */ | 
|---|
| 607 | #define OSC_PCI_EXT_CONFIG_SUPPORT		0x00000001 | 
|---|
| 608 | #define OSC_PCI_ASPM_SUPPORT			0x00000002 | 
|---|
| 609 | #define OSC_PCI_CLOCK_PM_SUPPORT		0x00000004 | 
|---|
| 610 | #define OSC_PCI_SEGMENT_GROUPS_SUPPORT		0x00000008 | 
|---|
| 611 | #define OSC_PCI_MSI_SUPPORT			0x00000010 | 
|---|
| 612 | #define OSC_PCI_EDR_SUPPORT			0x00000080 | 
|---|
| 613 | #define OSC_PCI_HPX_TYPE_3_SUPPORT		0x00000100 | 
|---|
| 614 |  | 
|---|
| 615 | /* PCI Host Bridge _OSC: Capabilities DWORD 3: Control Field */ | 
|---|
| 616 | #define OSC_PCI_EXPRESS_NATIVE_HP_CONTROL	0x00000001 | 
|---|
| 617 | #define OSC_PCI_SHPC_NATIVE_HP_CONTROL		0x00000002 | 
|---|
| 618 | #define OSC_PCI_EXPRESS_PME_CONTROL		0x00000004 | 
|---|
| 619 | #define OSC_PCI_EXPRESS_AER_CONTROL		0x00000008 | 
|---|
| 620 | #define OSC_PCI_EXPRESS_CAPABILITY_CONTROL	0x00000010 | 
|---|
| 621 | #define OSC_PCI_EXPRESS_LTR_CONTROL		0x00000020 | 
|---|
| 622 | #define OSC_PCI_EXPRESS_DPC_CONTROL		0x00000080 | 
|---|
| 623 |  | 
|---|
| 624 | /* CXL _OSC: Capabilities DWORD 4: Support Field */ | 
|---|
| 625 | #define OSC_CXL_1_1_PORT_REG_ACCESS_SUPPORT	0x00000001 | 
|---|
| 626 | #define OSC_CXL_2_0_PORT_DEV_REG_ACCESS_SUPPORT	0x00000002 | 
|---|
| 627 | #define OSC_CXL_PROTOCOL_ERR_REPORTING_SUPPORT	0x00000004 | 
|---|
| 628 | #define OSC_CXL_NATIVE_HP_SUPPORT		0x00000008 | 
|---|
| 629 |  | 
|---|
| 630 | /* CXL _OSC: Capabilities DWORD 5: Control Field */ | 
|---|
| 631 | #define OSC_CXL_ERROR_REPORTING_CONTROL		0x00000001 | 
|---|
| 632 |  | 
|---|
| 633 | static inline u32 acpi_osc_ctx_get_pci_control(struct acpi_osc_context *context) | 
|---|
| 634 | { | 
|---|
| 635 | u32 *ret = context->ret.pointer; | 
|---|
| 636 |  | 
|---|
| 637 | return ret[OSC_CONTROL_DWORD]; | 
|---|
| 638 | } | 
|---|
| 639 |  | 
|---|
| 640 | static inline u32 acpi_osc_ctx_get_cxl_control(struct acpi_osc_context *context) | 
|---|
| 641 | { | 
|---|
| 642 | u32 *ret = context->ret.pointer; | 
|---|
| 643 |  | 
|---|
| 644 | return ret[OSC_EXT_CONTROL_DWORD]; | 
|---|
| 645 | } | 
|---|
| 646 |  | 
|---|
| 647 | #define ACPI_GSB_ACCESS_ATTRIB_QUICK		0x00000002 | 
|---|
| 648 | #define ACPI_GSB_ACCESS_ATTRIB_SEND_RCV         0x00000004 | 
|---|
| 649 | #define ACPI_GSB_ACCESS_ATTRIB_BYTE		0x00000006 | 
|---|
| 650 | #define ACPI_GSB_ACCESS_ATTRIB_WORD		0x00000008 | 
|---|
| 651 | #define ACPI_GSB_ACCESS_ATTRIB_BLOCK		0x0000000A | 
|---|
| 652 | #define ACPI_GSB_ACCESS_ATTRIB_MULTIBYTE	0x0000000B | 
|---|
| 653 | #define ACPI_GSB_ACCESS_ATTRIB_WORD_CALL	0x0000000C | 
|---|
| 654 | #define ACPI_GSB_ACCESS_ATTRIB_BLOCK_CALL	0x0000000D | 
|---|
| 655 | #define ACPI_GSB_ACCESS_ATTRIB_RAW_BYTES	0x0000000E | 
|---|
| 656 | #define ACPI_GSB_ACCESS_ATTRIB_RAW_PROCESS	0x0000000F | 
|---|
| 657 |  | 
|---|
| 658 | /* Enable _OST when all relevant hotplug operations are enabled */ | 
|---|
| 659 | #if defined(CONFIG_ACPI_HOTPLUG_CPU) &&			\ | 
|---|
| 660 | defined(CONFIG_ACPI_HOTPLUG_MEMORY) &&		\ | 
|---|
| 661 | defined(CONFIG_ACPI_CONTAINER) | 
|---|
| 662 | #define ACPI_HOTPLUG_OST | 
|---|
| 663 | #endif | 
|---|
| 664 |  | 
|---|
| 665 | /* _OST Source Event Code (OSPM Action) */ | 
|---|
| 666 | #define ACPI_OST_EC_OSPM_SHUTDOWN		0x100 | 
|---|
| 667 | #define ACPI_OST_EC_OSPM_EJECT			0x103 | 
|---|
| 668 | #define ACPI_OST_EC_OSPM_INSERTION		0x200 | 
|---|
| 669 |  | 
|---|
| 670 | /* _OST General Processing Status Code */ | 
|---|
| 671 | #define ACPI_OST_SC_SUCCESS			0x0 | 
|---|
| 672 | #define ACPI_OST_SC_NON_SPECIFIC_FAILURE	0x1 | 
|---|
| 673 | #define ACPI_OST_SC_UNRECOGNIZED_NOTIFY		0x2 | 
|---|
| 674 |  | 
|---|
| 675 | /* _OST OS Shutdown Processing (0x100) Status Code */ | 
|---|
| 676 | #define ACPI_OST_SC_OS_SHUTDOWN_DENIED		0x80 | 
|---|
| 677 | #define ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS	0x81 | 
|---|
| 678 | #define ACPI_OST_SC_OS_SHUTDOWN_COMPLETED	0x82 | 
|---|
| 679 | #define ACPI_OST_SC_OS_SHUTDOWN_NOT_SUPPORTED	0x83 | 
|---|
| 680 |  | 
|---|
| 681 | /* _OST Ejection Request (0x3, 0x103) Status Code */ | 
|---|
| 682 | #define ACPI_OST_SC_EJECT_NOT_SUPPORTED		0x80 | 
|---|
| 683 | #define ACPI_OST_SC_DEVICE_IN_USE		0x81 | 
|---|
| 684 | #define ACPI_OST_SC_DEVICE_BUSY			0x82 | 
|---|
| 685 | #define ACPI_OST_SC_EJECT_DEPENDENCY_BUSY	0x83 | 
|---|
| 686 | #define ACPI_OST_SC_EJECT_IN_PROGRESS		0x84 | 
|---|
| 687 |  | 
|---|
| 688 | /* _OST Insertion Request (0x200) Status Code */ | 
|---|
| 689 | #define ACPI_OST_SC_INSERT_IN_PROGRESS		0x80 | 
|---|
| 690 | #define ACPI_OST_SC_DRIVER_LOAD_FAILURE		0x81 | 
|---|
| 691 | #define ACPI_OST_SC_INSERT_NOT_SUPPORTED	0x82 | 
|---|
| 692 |  | 
|---|
| 693 | enum acpi_predicate { | 
|---|
| 694 | all_versions, | 
|---|
| 695 | less_than_or_equal, | 
|---|
| 696 | equal, | 
|---|
| 697 | greater_than_or_equal, | 
|---|
| 698 | }; | 
|---|
| 699 |  | 
|---|
| 700 | /* Table must be terminted by a NULL entry */ | 
|---|
| 701 | struct acpi_platform_list { | 
|---|
| 702 | char	oem_id[ACPI_OEM_ID_SIZE+1]; | 
|---|
| 703 | char	oem_table_id[ACPI_OEM_TABLE_ID_SIZE+1]; | 
|---|
| 704 | u32	oem_revision; | 
|---|
| 705 | char	*table; | 
|---|
| 706 | enum acpi_predicate pred; | 
|---|
| 707 | char	*reason; | 
|---|
| 708 | u32	data; | 
|---|
| 709 | }; | 
|---|
| 710 | int acpi_match_platform_list(const struct acpi_platform_list *plat); | 
|---|
| 711 |  | 
|---|
| 712 | extern void acpi_early_init(void); | 
|---|
| 713 | extern void acpi_subsystem_init(void); | 
|---|
| 714 |  | 
|---|
| 715 | extern int acpi_nvs_register(__u64 start, __u64 size); | 
|---|
| 716 |  | 
|---|
| 717 | extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *), | 
|---|
| 718 | void *data); | 
|---|
| 719 |  | 
|---|
| 720 | const struct acpi_device_id *acpi_match_acpi_device(const struct acpi_device_id *ids, | 
|---|
| 721 | const struct acpi_device *adev); | 
|---|
| 722 |  | 
|---|
| 723 | const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids, | 
|---|
| 724 | const struct device *dev); | 
|---|
| 725 |  | 
|---|
| 726 | const void *acpi_device_get_match_data(const struct device *dev); | 
|---|
| 727 | extern bool acpi_driver_match_device(struct device *dev, | 
|---|
| 728 | const struct device_driver *drv); | 
|---|
| 729 | int acpi_device_uevent_modalias(const struct device *, struct kobj_uevent_env *); | 
|---|
| 730 | int acpi_device_modalias(struct device *, char *, int); | 
|---|
| 731 |  | 
|---|
| 732 | struct platform_device *acpi_create_platform_device(struct acpi_device *, | 
|---|
| 733 | const struct property_entry *); | 
|---|
| 734 | #define ACPI_PTR(_ptr)	(_ptr) | 
|---|
| 735 |  | 
|---|
| 736 | static inline void acpi_device_set_enumerated(struct acpi_device *adev) | 
|---|
| 737 | { | 
|---|
| 738 | adev->flags.visited = true; | 
|---|
| 739 | } | 
|---|
| 740 |  | 
|---|
| 741 | static inline void acpi_device_clear_enumerated(struct acpi_device *adev) | 
|---|
| 742 | { | 
|---|
| 743 | adev->flags.visited = false; | 
|---|
| 744 | } | 
|---|
| 745 |  | 
|---|
| 746 | enum acpi_reconfig_event  { | 
|---|
| 747 | ACPI_RECONFIG_DEVICE_ADD = 0, | 
|---|
| 748 | ACPI_RECONFIG_DEVICE_REMOVE, | 
|---|
| 749 | }; | 
|---|
| 750 |  | 
|---|
| 751 | int acpi_reconfig_notifier_register(struct notifier_block *nb); | 
|---|
| 752 | int acpi_reconfig_notifier_unregister(struct notifier_block *nb); | 
|---|
| 753 |  | 
|---|
| 754 | #ifdef CONFIG_ACPI_GTDT | 
|---|
| 755 | int acpi_gtdt_init(struct acpi_table_header *table, int *platform_timer_count); | 
|---|
| 756 | int acpi_gtdt_map_ppi(int type); | 
|---|
| 757 | bool acpi_gtdt_c3stop(int type); | 
|---|
| 758 | int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count); | 
|---|
| 759 | #endif | 
|---|
| 760 |  | 
|---|
| 761 | #ifndef ACPI_HAVE_ARCH_SET_ROOT_POINTER | 
|---|
| 762 | static __always_inline void acpi_arch_set_root_pointer(u64 addr) | 
|---|
| 763 | { | 
|---|
| 764 | } | 
|---|
| 765 | #endif | 
|---|
| 766 |  | 
|---|
| 767 | #ifndef ACPI_HAVE_ARCH_GET_ROOT_POINTER | 
|---|
| 768 | static __always_inline u64 acpi_arch_get_root_pointer(void) | 
|---|
| 769 | { | 
|---|
| 770 | return 0; | 
|---|
| 771 | } | 
|---|
| 772 | #endif | 
|---|
| 773 |  | 
|---|
| 774 | int acpi_get_local_u64_address(acpi_handle handle, u64 *addr); | 
|---|
| 775 | int acpi_get_local_address(acpi_handle handle, u32 *addr); | 
|---|
| 776 | const char *acpi_get_subsystem_id(acpi_handle handle); | 
|---|
| 777 |  | 
|---|
| 778 | #ifdef CONFIG_ACPI_MRRM | 
|---|
| 779 | int acpi_mrrm_max_mem_region(void); | 
|---|
| 780 | #endif | 
|---|
| 781 |  | 
|---|
| 782 | #else	/* !CONFIG_ACPI */ | 
|---|
| 783 |  | 
|---|
| 784 | #define acpi_disabled 1 | 
|---|
| 785 |  | 
|---|
| 786 | #define ACPI_COMPANION(dev)		(NULL) | 
|---|
| 787 | #define ACPI_COMPANION_SET(dev, adev)	do { } while (0) | 
|---|
| 788 | #define ACPI_HANDLE(dev)		(NULL) | 
|---|
| 789 | #define ACPI_HANDLE_FWNODE(fwnode)	(NULL) | 
|---|
| 790 |  | 
|---|
| 791 | /* Get rid of the -Wunused-variable for adev */ | 
|---|
| 792 | #define acpi_dev_uid_match(adev, uid2)			(adev && false) | 
|---|
| 793 | #define acpi_dev_hid_uid_match(adev, hid2, uid2)	(adev && false) | 
|---|
| 794 |  | 
|---|
| 795 | struct fwnode_handle; | 
|---|
| 796 |  | 
|---|
| 797 | static inline bool acpi_dev_found(const char *hid) | 
|---|
| 798 | { | 
|---|
| 799 | return false; | 
|---|
| 800 | } | 
|---|
| 801 |  | 
|---|
| 802 | static inline bool acpi_dev_present(const char *hid, const char *uid, s64 hrv) | 
|---|
| 803 | { | 
|---|
| 804 | return false; | 
|---|
| 805 | } | 
|---|
| 806 |  | 
|---|
| 807 | struct acpi_device; | 
|---|
| 808 |  | 
|---|
| 809 | static inline int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer) | 
|---|
| 810 | { | 
|---|
| 811 | return -ENODEV; | 
|---|
| 812 | } | 
|---|
| 813 |  | 
|---|
| 814 | static inline struct acpi_device * | 
|---|
| 815 | acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv) | 
|---|
| 816 | { | 
|---|
| 817 | return NULL; | 
|---|
| 818 | } | 
|---|
| 819 |  | 
|---|
| 820 | static inline bool acpi_reduced_hardware(void) | 
|---|
| 821 | { | 
|---|
| 822 | return false; | 
|---|
| 823 | } | 
|---|
| 824 |  | 
|---|
| 825 | static inline void acpi_dev_put(struct acpi_device *adev) {} | 
|---|
| 826 |  | 
|---|
| 827 | static inline bool is_acpi_node(const struct fwnode_handle *fwnode) | 
|---|
| 828 | { | 
|---|
| 829 | return false; | 
|---|
| 830 | } | 
|---|
| 831 |  | 
|---|
| 832 | static inline bool is_acpi_device_node(const struct fwnode_handle *fwnode) | 
|---|
| 833 | { | 
|---|
| 834 | return false; | 
|---|
| 835 | } | 
|---|
| 836 |  | 
|---|
| 837 | static inline struct acpi_device *to_acpi_device_node(const struct fwnode_handle *fwnode) | 
|---|
| 838 | { | 
|---|
| 839 | return NULL; | 
|---|
| 840 | } | 
|---|
| 841 |  | 
|---|
| 842 | static inline bool is_acpi_data_node(const struct fwnode_handle *fwnode) | 
|---|
| 843 | { | 
|---|
| 844 | return false; | 
|---|
| 845 | } | 
|---|
| 846 |  | 
|---|
| 847 | static inline struct acpi_data_node *to_acpi_data_node(const struct fwnode_handle *fwnode) | 
|---|
| 848 | { | 
|---|
| 849 | return NULL; | 
|---|
| 850 | } | 
|---|
| 851 |  | 
|---|
| 852 | static inline bool acpi_data_node_match(const struct fwnode_handle *fwnode, | 
|---|
| 853 | const char *name) | 
|---|
| 854 | { | 
|---|
| 855 | return false; | 
|---|
| 856 | } | 
|---|
| 857 |  | 
|---|
| 858 | static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev) | 
|---|
| 859 | { | 
|---|
| 860 | return NULL; | 
|---|
| 861 | } | 
|---|
| 862 |  | 
|---|
| 863 | static inline acpi_handle acpi_device_handle(struct acpi_device *adev) | 
|---|
| 864 | { | 
|---|
| 865 | return NULL; | 
|---|
| 866 | } | 
|---|
| 867 |  | 
|---|
| 868 | static inline bool has_acpi_companion(struct device *dev) | 
|---|
| 869 | { | 
|---|
| 870 | return false; | 
|---|
| 871 | } | 
|---|
| 872 |  | 
|---|
| 873 | static inline void acpi_preset_companion(struct device *dev, | 
|---|
| 874 | struct acpi_device *parent, u64 addr) | 
|---|
| 875 | { | 
|---|
| 876 | } | 
|---|
| 877 |  | 
|---|
| 878 | static inline const char *acpi_dev_name(struct acpi_device *adev) | 
|---|
| 879 | { | 
|---|
| 880 | return NULL; | 
|---|
| 881 | } | 
|---|
| 882 |  | 
|---|
| 883 | static inline struct device *acpi_get_first_physical_node(struct acpi_device *adev) | 
|---|
| 884 | { | 
|---|
| 885 | return NULL; | 
|---|
| 886 | } | 
|---|
| 887 |  | 
|---|
| 888 | static inline void acpi_early_init(void) { } | 
|---|
| 889 | static inline void acpi_subsystem_init(void) { } | 
|---|
| 890 |  | 
|---|
| 891 | static inline int early_acpi_boot_init(void) | 
|---|
| 892 | { | 
|---|
| 893 | return 0; | 
|---|
| 894 | } | 
|---|
| 895 | static inline int acpi_boot_init(void) | 
|---|
| 896 | { | 
|---|
| 897 | return 0; | 
|---|
| 898 | } | 
|---|
| 899 |  | 
|---|
| 900 | static inline void acpi_boot_table_prepare(void) | 
|---|
| 901 | { | 
|---|
| 902 | } | 
|---|
| 903 |  | 
|---|
| 904 | static inline void acpi_boot_table_init(void) | 
|---|
| 905 | { | 
|---|
| 906 | } | 
|---|
| 907 |  | 
|---|
| 908 | static inline int acpi_mps_check(void) | 
|---|
| 909 | { | 
|---|
| 910 | return 0; | 
|---|
| 911 | } | 
|---|
| 912 |  | 
|---|
| 913 | static inline int acpi_check_resource_conflict(struct resource *res) | 
|---|
| 914 | { | 
|---|
| 915 | return 0; | 
|---|
| 916 | } | 
|---|
| 917 |  | 
|---|
| 918 | static inline int acpi_check_region(resource_size_t start, resource_size_t n, | 
|---|
| 919 | const char *name) | 
|---|
| 920 | { | 
|---|
| 921 | return 0; | 
|---|
| 922 | } | 
|---|
| 923 |  | 
|---|
| 924 | struct acpi_table_header; | 
|---|
| 925 | static inline int acpi_table_parse(char *id, | 
|---|
| 926 | int (*handler)(struct acpi_table_header *)) | 
|---|
| 927 | { | 
|---|
| 928 | return -ENODEV; | 
|---|
| 929 | } | 
|---|
| 930 |  | 
|---|
| 931 | static inline int acpi_nvs_register(__u64 start, __u64 size) | 
|---|
| 932 | { | 
|---|
| 933 | return 0; | 
|---|
| 934 | } | 
|---|
| 935 |  | 
|---|
| 936 | static inline int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *), | 
|---|
| 937 | void *data) | 
|---|
| 938 | { | 
|---|
| 939 | return 0; | 
|---|
| 940 | } | 
|---|
| 941 |  | 
|---|
| 942 | struct acpi_device_id; | 
|---|
| 943 |  | 
|---|
| 944 | static inline const struct acpi_device_id *acpi_match_acpi_device( | 
|---|
| 945 | const struct acpi_device_id *ids, const struct acpi_device *adev) | 
|---|
| 946 | { | 
|---|
| 947 | return NULL; | 
|---|
| 948 | } | 
|---|
| 949 |  | 
|---|
| 950 | static inline const struct acpi_device_id *acpi_match_device( | 
|---|
| 951 | const struct acpi_device_id *ids, const struct device *dev) | 
|---|
| 952 | { | 
|---|
| 953 | return NULL; | 
|---|
| 954 | } | 
|---|
| 955 |  | 
|---|
| 956 | static inline const void *acpi_device_get_match_data(const struct device *dev) | 
|---|
| 957 | { | 
|---|
| 958 | return NULL; | 
|---|
| 959 | } | 
|---|
| 960 |  | 
|---|
| 961 | static inline bool acpi_driver_match_device(struct device *dev, | 
|---|
| 962 | const struct device_driver *drv) | 
|---|
| 963 | { | 
|---|
| 964 | return false; | 
|---|
| 965 | } | 
|---|
| 966 |  | 
|---|
| 967 | static inline bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, | 
|---|
| 968 | u64 rev, u64 funcs) | 
|---|
| 969 | { | 
|---|
| 970 | return false; | 
|---|
| 971 | } | 
|---|
| 972 |  | 
|---|
| 973 | static inline union acpi_object *acpi_evaluate_dsm(acpi_handle handle, | 
|---|
| 974 | const guid_t *guid, | 
|---|
| 975 | u64 rev, u64 func, | 
|---|
| 976 | union acpi_object *argv4) | 
|---|
| 977 | { | 
|---|
| 978 | return NULL; | 
|---|
| 979 | } | 
|---|
| 980 |  | 
|---|
| 981 | static inline union acpi_object *acpi_evaluate_dsm_typed(acpi_handle handle, | 
|---|
| 982 | const guid_t *guid, | 
|---|
| 983 | u64 rev, u64 func, | 
|---|
| 984 | union acpi_object *argv4, | 
|---|
| 985 | acpi_object_type type) | 
|---|
| 986 | { | 
|---|
| 987 | return NULL; | 
|---|
| 988 | } | 
|---|
| 989 |  | 
|---|
| 990 | static inline int acpi_device_uevent_modalias(const struct device *dev, | 
|---|
| 991 | struct kobj_uevent_env *env) | 
|---|
| 992 | { | 
|---|
| 993 | return -ENODEV; | 
|---|
| 994 | } | 
|---|
| 995 |  | 
|---|
| 996 | static inline int acpi_device_modalias(struct device *dev, | 
|---|
| 997 | char *buf, int size) | 
|---|
| 998 | { | 
|---|
| 999 | return -ENODEV; | 
|---|
| 1000 | } | 
|---|
| 1001 |  | 
|---|
| 1002 | static inline struct platform_device * | 
|---|
| 1003 | acpi_create_platform_device(struct acpi_device *adev, | 
|---|
| 1004 | const struct property_entry *properties) | 
|---|
| 1005 | { | 
|---|
| 1006 | return NULL; | 
|---|
| 1007 | } | 
|---|
| 1008 |  | 
|---|
| 1009 | static inline bool acpi_dma_supported(const struct acpi_device *adev) | 
|---|
| 1010 | { | 
|---|
| 1011 | return false; | 
|---|
| 1012 | } | 
|---|
| 1013 |  | 
|---|
| 1014 | static inline enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev) | 
|---|
| 1015 | { | 
|---|
| 1016 | return DEV_DMA_NOT_SUPPORTED; | 
|---|
| 1017 | } | 
|---|
| 1018 |  | 
|---|
| 1019 | static inline int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map) | 
|---|
| 1020 | { | 
|---|
| 1021 | return -ENODEV; | 
|---|
| 1022 | } | 
|---|
| 1023 |  | 
|---|
| 1024 | static inline int acpi_dma_configure(struct device *dev, | 
|---|
| 1025 | enum dev_dma_attr attr) | 
|---|
| 1026 | { | 
|---|
| 1027 | return 0; | 
|---|
| 1028 | } | 
|---|
| 1029 |  | 
|---|
| 1030 | static inline int acpi_dma_configure_id(struct device *dev, | 
|---|
| 1031 | enum dev_dma_attr attr, | 
|---|
| 1032 | const u32 *input_id) | 
|---|
| 1033 | { | 
|---|
| 1034 | return 0; | 
|---|
| 1035 | } | 
|---|
| 1036 |  | 
|---|
| 1037 | #define ACPI_PTR(_ptr)	(NULL) | 
|---|
| 1038 |  | 
|---|
| 1039 | static inline void acpi_device_set_enumerated(struct acpi_device *adev) | 
|---|
| 1040 | { | 
|---|
| 1041 | } | 
|---|
| 1042 |  | 
|---|
| 1043 | static inline void acpi_device_clear_enumerated(struct acpi_device *adev) | 
|---|
| 1044 | { | 
|---|
| 1045 | } | 
|---|
| 1046 |  | 
|---|
| 1047 | static inline int acpi_reconfig_notifier_register(struct notifier_block *nb) | 
|---|
| 1048 | { | 
|---|
| 1049 | return -EINVAL; | 
|---|
| 1050 | } | 
|---|
| 1051 |  | 
|---|
| 1052 | static inline int acpi_reconfig_notifier_unregister(struct notifier_block *nb) | 
|---|
| 1053 | { | 
|---|
| 1054 | return -EINVAL; | 
|---|
| 1055 | } | 
|---|
| 1056 |  | 
|---|
| 1057 | static inline struct acpi_device *acpi_resource_consumer(struct resource *res) | 
|---|
| 1058 | { | 
|---|
| 1059 | return NULL; | 
|---|
| 1060 | } | 
|---|
| 1061 |  | 
|---|
| 1062 | static inline int acpi_get_local_address(acpi_handle handle, u32 *addr) | 
|---|
| 1063 | { | 
|---|
| 1064 | return -ENODEV; | 
|---|
| 1065 | } | 
|---|
| 1066 |  | 
|---|
| 1067 | static inline const char *acpi_get_subsystem_id(acpi_handle handle) | 
|---|
| 1068 | { | 
|---|
| 1069 | return ERR_PTR(-ENODEV); | 
|---|
| 1070 | } | 
|---|
| 1071 |  | 
|---|
| 1072 | static inline int acpi_register_wakeup_handler(int wake_irq, | 
|---|
| 1073 | bool (*wakeup)(void *context), void *context) | 
|---|
| 1074 | { | 
|---|
| 1075 | return -ENXIO; | 
|---|
| 1076 | } | 
|---|
| 1077 |  | 
|---|
| 1078 | static inline void acpi_unregister_wakeup_handler( | 
|---|
| 1079 | bool (*wakeup)(void *context), void *context) { } | 
|---|
| 1080 |  | 
|---|
| 1081 | struct acpi_osc_context; | 
|---|
| 1082 | static inline u32 acpi_osc_ctx_get_pci_control(struct acpi_osc_context *context) | 
|---|
| 1083 | { | 
|---|
| 1084 | return 0; | 
|---|
| 1085 | } | 
|---|
| 1086 |  | 
|---|
| 1087 | static inline u32 acpi_osc_ctx_get_cxl_control(struct acpi_osc_context *context) | 
|---|
| 1088 | { | 
|---|
| 1089 | return 0; | 
|---|
| 1090 | } | 
|---|
| 1091 |  | 
|---|
| 1092 | static inline bool acpi_sleep_state_supported(u8 sleep_state) | 
|---|
| 1093 | { | 
|---|
| 1094 | return false; | 
|---|
| 1095 | } | 
|---|
| 1096 |  | 
|---|
| 1097 | static inline acpi_handle acpi_get_processor_handle(int cpu) | 
|---|
| 1098 | { | 
|---|
| 1099 | return NULL; | 
|---|
| 1100 | } | 
|---|
| 1101 |  | 
|---|
| 1102 | static inline int acpi_mrrm_max_mem_region(void) | 
|---|
| 1103 | { | 
|---|
| 1104 | return 1; | 
|---|
| 1105 | } | 
|---|
| 1106 |  | 
|---|
| 1107 | #endif	/* !CONFIG_ACPI */ | 
|---|
| 1108 |  | 
|---|
| 1109 | #ifdef CONFIG_ACPI_HMAT | 
|---|
| 1110 | int hmat_get_extended_linear_cache_size(struct resource *backing_res, int nid, | 
|---|
| 1111 | resource_size_t *size); | 
|---|
| 1112 | #else | 
|---|
| 1113 | static inline int hmat_get_extended_linear_cache_size(struct resource *backing_res, | 
|---|
| 1114 | int nid, resource_size_t *size) | 
|---|
| 1115 | { | 
|---|
| 1116 | return -EOPNOTSUPP; | 
|---|
| 1117 | } | 
|---|
| 1118 | #endif | 
|---|
| 1119 |  | 
|---|
| 1120 | extern void arch_post_acpi_subsys_init(void); | 
|---|
| 1121 |  | 
|---|
| 1122 | #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC | 
|---|
| 1123 | int acpi_ioapic_add(acpi_handle root); | 
|---|
| 1124 | #else | 
|---|
| 1125 | static inline int acpi_ioapic_add(acpi_handle root) { return 0; } | 
|---|
| 1126 | #endif | 
|---|
| 1127 |  | 
|---|
| 1128 | #ifdef CONFIG_ACPI | 
|---|
| 1129 | void acpi_os_set_prepare_sleep(int (*func)(u8 sleep_state, | 
|---|
| 1130 | u32 pm1a_ctrl,  u32 pm1b_ctrl)); | 
|---|
| 1131 |  | 
|---|
| 1132 | acpi_status acpi_os_prepare_sleep(u8 sleep_state, | 
|---|
| 1133 | u32 pm1a_control, u32 pm1b_control); | 
|---|
| 1134 |  | 
|---|
| 1135 | void acpi_os_set_prepare_extended_sleep(int (*func)(u8 sleep_state, | 
|---|
| 1136 | u32 val_a,  u32 val_b)); | 
|---|
| 1137 |  | 
|---|
| 1138 | acpi_status acpi_os_prepare_extended_sleep(u8 sleep_state, | 
|---|
| 1139 | u32 val_a, u32 val_b); | 
|---|
| 1140 | struct acpi_s2idle_dev_ops { | 
|---|
| 1141 | struct list_head list_node; | 
|---|
| 1142 | void (*prepare)(void); | 
|---|
| 1143 | void (*check)(void); | 
|---|
| 1144 | void (*restore)(void); | 
|---|
| 1145 | }; | 
|---|
| 1146 | #if defined(CONFIG_SUSPEND) && defined(CONFIG_X86) | 
|---|
| 1147 | int acpi_register_lps0_dev(struct acpi_s2idle_dev_ops *arg); | 
|---|
| 1148 | void acpi_unregister_lps0_dev(struct acpi_s2idle_dev_ops *arg); | 
|---|
| 1149 | int acpi_get_lps0_constraint(struct acpi_device *adev); | 
|---|
| 1150 | #else /* CONFIG_SUSPEND && CONFIG_X86 */ | 
|---|
| 1151 | static inline int acpi_get_lps0_constraint(struct device *dev) | 
|---|
| 1152 | { | 
|---|
| 1153 | return ACPI_STATE_UNKNOWN; | 
|---|
| 1154 | } | 
|---|
| 1155 | static inline int acpi_register_lps0_dev(struct acpi_s2idle_dev_ops *arg) | 
|---|
| 1156 | { | 
|---|
| 1157 | return -ENODEV; | 
|---|
| 1158 | } | 
|---|
| 1159 | static inline void acpi_unregister_lps0_dev(struct acpi_s2idle_dev_ops *arg) | 
|---|
| 1160 | { | 
|---|
| 1161 | } | 
|---|
| 1162 | #endif /* CONFIG_SUSPEND && CONFIG_X86 */ | 
|---|
| 1163 | void arch_reserve_mem_area(acpi_physical_address addr, size_t size); | 
|---|
| 1164 | #else | 
|---|
| 1165 | #define acpi_os_set_prepare_sleep(func, pm1a_ctrl, pm1b_ctrl) do { } while (0) | 
|---|
| 1166 | #endif | 
|---|
| 1167 |  | 
|---|
| 1168 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM) | 
|---|
| 1169 | int acpi_dev_suspend(struct device *dev, bool wakeup); | 
|---|
| 1170 | int acpi_dev_resume(struct device *dev); | 
|---|
| 1171 | int acpi_subsys_runtime_suspend(struct device *dev); | 
|---|
| 1172 | int acpi_subsys_runtime_resume(struct device *dev); | 
|---|
| 1173 | int acpi_dev_pm_attach(struct device *dev, bool power_on); | 
|---|
| 1174 | bool acpi_storage_d3(struct device *dev); | 
|---|
| 1175 | bool acpi_dev_state_d0(struct device *dev); | 
|---|
| 1176 | #else | 
|---|
| 1177 | static inline int acpi_subsys_runtime_suspend(struct device *dev) { return 0; } | 
|---|
| 1178 | static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } | 
|---|
| 1179 | static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) | 
|---|
| 1180 | { | 
|---|
| 1181 | return 0; | 
|---|
| 1182 | } | 
|---|
| 1183 | static inline bool acpi_storage_d3(struct device *dev) | 
|---|
| 1184 | { | 
|---|
| 1185 | return false; | 
|---|
| 1186 | } | 
|---|
| 1187 | static inline bool acpi_dev_state_d0(struct device *dev) | 
|---|
| 1188 | { | 
|---|
| 1189 | return true; | 
|---|
| 1190 | } | 
|---|
| 1191 | #endif | 
|---|
| 1192 |  | 
|---|
| 1193 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP) | 
|---|
| 1194 | int acpi_subsys_prepare(struct device *dev); | 
|---|
| 1195 | void acpi_subsys_complete(struct device *dev); | 
|---|
| 1196 | int acpi_subsys_suspend_late(struct device *dev); | 
|---|
| 1197 | int acpi_subsys_suspend_noirq(struct device *dev); | 
|---|
| 1198 | int acpi_subsys_suspend(struct device *dev); | 
|---|
| 1199 | int acpi_subsys_freeze(struct device *dev); | 
|---|
| 1200 | int acpi_subsys_poweroff(struct device *dev); | 
|---|
| 1201 | int acpi_subsys_restore_early(struct device *dev); | 
|---|
| 1202 | #else | 
|---|
| 1203 | static inline int acpi_subsys_prepare(struct device *dev) { return 0; } | 
|---|
| 1204 | static inline void acpi_subsys_complete(struct device *dev) {} | 
|---|
| 1205 | static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; } | 
|---|
| 1206 | static inline int acpi_subsys_suspend_noirq(struct device *dev) { return 0; } | 
|---|
| 1207 | static inline int acpi_subsys_suspend(struct device *dev) { return 0; } | 
|---|
| 1208 | static inline int acpi_subsys_freeze(struct device *dev) { return 0; } | 
|---|
| 1209 | static inline int acpi_subsys_poweroff(struct device *dev) { return 0; } | 
|---|
| 1210 | static inline int acpi_subsys_restore_early(struct device *dev) { return 0; } | 
|---|
| 1211 | #endif | 
|---|
| 1212 |  | 
|---|
| 1213 | #if defined(CONFIG_ACPI_EC) && defined(CONFIG_PM_SLEEP) | 
|---|
| 1214 | void acpi_ec_mark_gpe_for_wake(void); | 
|---|
| 1215 | void acpi_ec_set_gpe_wake_mask(u8 action); | 
|---|
| 1216 | #else | 
|---|
| 1217 | static inline void acpi_ec_mark_gpe_for_wake(void) {} | 
|---|
| 1218 | static inline void acpi_ec_set_gpe_wake_mask(u8 action) {} | 
|---|
| 1219 | #endif | 
|---|
| 1220 |  | 
|---|
| 1221 | #ifdef CONFIG_ACPI | 
|---|
| 1222 | char *acpi_handle_path(acpi_handle handle); | 
|---|
| 1223 | __printf(3, 4) | 
|---|
| 1224 | void acpi_handle_printk(const char *level, acpi_handle handle, | 
|---|
| 1225 | const char *fmt, ...); | 
|---|
| 1226 | void acpi_evaluation_failure_warn(acpi_handle handle, const char *name, | 
|---|
| 1227 | acpi_status status); | 
|---|
| 1228 | #else	/* !CONFIG_ACPI */ | 
|---|
| 1229 | static inline __printf(3, 4) void | 
|---|
| 1230 | acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} | 
|---|
| 1231 | static inline void acpi_evaluation_failure_warn(acpi_handle handle, | 
|---|
| 1232 | const char *name, | 
|---|
| 1233 | acpi_status status) {} | 
|---|
| 1234 | #endif	/* !CONFIG_ACPI */ | 
|---|
| 1235 |  | 
|---|
| 1236 | #if defined(CONFIG_ACPI) && defined(CONFIG_DYNAMIC_DEBUG) | 
|---|
| 1237 | __printf(3, 4) | 
|---|
| 1238 | void __acpi_handle_debug(struct _ddebug *descriptor, acpi_handle handle, const char *fmt, ...); | 
|---|
| 1239 | #endif | 
|---|
| 1240 |  | 
|---|
| 1241 | /* | 
|---|
| 1242 | * acpi_handle_<level>: Print message with ACPI prefix and object path | 
|---|
| 1243 | * | 
|---|
| 1244 | * These interfaces acquire the global namespace mutex to obtain an object | 
|---|
| 1245 | * path.  In interrupt context, it shows the object path as <n/a>. | 
|---|
| 1246 | */ | 
|---|
| 1247 | #define acpi_handle_emerg(handle, fmt, ...)				\ | 
|---|
| 1248 | acpi_handle_printk(KERN_EMERG, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1249 | #define acpi_handle_alert(handle, fmt, ...)				\ | 
|---|
| 1250 | acpi_handle_printk(KERN_ALERT, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1251 | #define acpi_handle_crit(handle, fmt, ...)				\ | 
|---|
| 1252 | acpi_handle_printk(KERN_CRIT, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1253 | #define acpi_handle_err(handle, fmt, ...)				\ | 
|---|
| 1254 | acpi_handle_printk(KERN_ERR, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1255 | #define acpi_handle_warn(handle, fmt, ...)				\ | 
|---|
| 1256 | acpi_handle_printk(KERN_WARNING, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1257 | #define acpi_handle_notice(handle, fmt, ...)				\ | 
|---|
| 1258 | acpi_handle_printk(KERN_NOTICE, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1259 | #define acpi_handle_info(handle, fmt, ...)				\ | 
|---|
| 1260 | acpi_handle_printk(KERN_INFO, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1261 |  | 
|---|
| 1262 | #if defined(DEBUG) | 
|---|
| 1263 | #define acpi_handle_debug(handle, fmt, ...)				\ | 
|---|
| 1264 | acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__) | 
|---|
| 1265 | #else | 
|---|
| 1266 | #if defined(CONFIG_DYNAMIC_DEBUG) | 
|---|
| 1267 | #define acpi_handle_debug(handle, fmt, ...)				\ | 
|---|
| 1268 | _dynamic_func_call(fmt, __acpi_handle_debug,			\ | 
|---|
| 1269 | handle, pr_fmt(fmt), ##__VA_ARGS__) | 
|---|
| 1270 | #else | 
|---|
| 1271 | #define acpi_handle_debug(handle, fmt, ...)				\ | 
|---|
| 1272 | ({									\ | 
|---|
| 1273 | if (0)								\ | 
|---|
| 1274 | acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__); \ | 
|---|
| 1275 | 0;								\ | 
|---|
| 1276 | }) | 
|---|
| 1277 | #endif | 
|---|
| 1278 | #endif | 
|---|
| 1279 |  | 
|---|
| 1280 | #if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB) | 
|---|
| 1281 | bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, | 
|---|
| 1282 | struct acpi_resource_gpio **agpio); | 
|---|
| 1283 | bool acpi_gpio_get_io_resource(struct acpi_resource *ares, | 
|---|
| 1284 | struct acpi_resource_gpio **agpio); | 
|---|
| 1285 | int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id, int index, | 
|---|
| 1286 | bool *wake_capable); | 
|---|
| 1287 | #else | 
|---|
| 1288 | static inline bool acpi_gpio_get_irq_resource(struct acpi_resource *ares, | 
|---|
| 1289 | struct acpi_resource_gpio **agpio) | 
|---|
| 1290 | { | 
|---|
| 1291 | return false; | 
|---|
| 1292 | } | 
|---|
| 1293 | static inline bool acpi_gpio_get_io_resource(struct acpi_resource *ares, | 
|---|
| 1294 | struct acpi_resource_gpio **agpio) | 
|---|
| 1295 | { | 
|---|
| 1296 | return false; | 
|---|
| 1297 | } | 
|---|
| 1298 | static inline int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id, | 
|---|
| 1299 | int index, bool *wake_capable) | 
|---|
| 1300 | { | 
|---|
| 1301 | return -ENXIO; | 
|---|
| 1302 | } | 
|---|
| 1303 | #endif | 
|---|
| 1304 |  | 
|---|
| 1305 | static inline int acpi_dev_gpio_irq_wake_get(struct acpi_device *adev, int index, | 
|---|
| 1306 | bool *wake_capable) | 
|---|
| 1307 | { | 
|---|
| 1308 | return acpi_dev_gpio_irq_wake_get_by(adev, NULL, index, wake_capable); | 
|---|
| 1309 | } | 
|---|
| 1310 |  | 
|---|
| 1311 | static inline int acpi_dev_gpio_irq_get_by(struct acpi_device *adev, const char *con_id, | 
|---|
| 1312 | int index) | 
|---|
| 1313 | { | 
|---|
| 1314 | return acpi_dev_gpio_irq_wake_get_by(adev, con_id, index, NULL); | 
|---|
| 1315 | } | 
|---|
| 1316 |  | 
|---|
| 1317 | static inline int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index) | 
|---|
| 1318 | { | 
|---|
| 1319 | return acpi_dev_gpio_irq_wake_get_by(adev, NULL, index, NULL); | 
|---|
| 1320 | } | 
|---|
| 1321 |  | 
|---|
| 1322 | /* Device properties */ | 
|---|
| 1323 |  | 
|---|
| 1324 | #ifdef CONFIG_ACPI | 
|---|
| 1325 | int acpi_dev_get_property(const struct acpi_device *adev, const char *name, | 
|---|
| 1326 | acpi_object_type type, const union acpi_object **obj); | 
|---|
| 1327 | int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode, | 
|---|
| 1328 | const char *name, size_t index, size_t num_args, | 
|---|
| 1329 | struct fwnode_reference_args *args); | 
|---|
| 1330 |  | 
|---|
| 1331 | static inline int acpi_node_get_property_reference( | 
|---|
| 1332 | const struct fwnode_handle *fwnode, | 
|---|
| 1333 | const char *name, size_t index, | 
|---|
| 1334 | struct fwnode_reference_args *args) | 
|---|
| 1335 | { | 
|---|
| 1336 | return __acpi_node_get_property_reference(fwnode, name, index, | 
|---|
| 1337 | NR_FWNODE_REFERENCE_ARGS, args); | 
|---|
| 1338 | } | 
|---|
| 1339 |  | 
|---|
| 1340 | static inline bool acpi_dev_has_props(const struct acpi_device *adev) | 
|---|
| 1341 | { | 
|---|
| 1342 | return !list_empty(head: &adev->data.properties); | 
|---|
| 1343 | } | 
|---|
| 1344 |  | 
|---|
| 1345 | struct acpi_device_properties * | 
|---|
| 1346 | acpi_data_add_props(struct acpi_device_data *data, const guid_t *guid, | 
|---|
| 1347 | union acpi_object *properties); | 
|---|
| 1348 |  | 
|---|
| 1349 | int acpi_node_prop_get(const struct fwnode_handle *fwnode, const char *propname, | 
|---|
| 1350 | void **valptr); | 
|---|
| 1351 |  | 
|---|
| 1352 | struct fwnode_handle *acpi_get_next_subnode(const struct fwnode_handle *fwnode, | 
|---|
| 1353 | struct fwnode_handle *child); | 
|---|
| 1354 |  | 
|---|
| 1355 | struct acpi_probe_entry; | 
|---|
| 1356 | typedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, | 
|---|
| 1357 | struct acpi_probe_entry *); | 
|---|
| 1358 |  | 
|---|
| 1359 | #define ACPI_TABLE_ID_LEN	5 | 
|---|
| 1360 |  | 
|---|
| 1361 | /** | 
|---|
| 1362 | * struct acpi_probe_entry - boot-time probing entry | 
|---|
| 1363 | * @id:			ACPI table name | 
|---|
| 1364 | * @type:		Optional subtable type to match | 
|---|
| 1365 | *			(if @id contains subtables) | 
|---|
| 1366 | * @subtable_valid:	Optional callback to check the validity of | 
|---|
| 1367 | *			the subtable | 
|---|
| 1368 | * @probe_table:	Callback to the driver being probed when table | 
|---|
| 1369 | *			match is successful | 
|---|
| 1370 | * @probe_subtbl:	Callback to the driver being probed when table and | 
|---|
| 1371 | *			subtable match (and optional callback is successful) | 
|---|
| 1372 | * @driver_data:	Sideband data provided back to the driver | 
|---|
| 1373 | */ | 
|---|
| 1374 | struct acpi_probe_entry { | 
|---|
| 1375 | __u8 id[ACPI_TABLE_ID_LEN]; | 
|---|
| 1376 | __u8 type; | 
|---|
| 1377 | acpi_probe_entry_validate_subtbl subtable_valid; | 
|---|
| 1378 | union { | 
|---|
| 1379 | acpi_tbl_table_handler probe_table; | 
|---|
| 1380 | acpi_tbl_entry_handler probe_subtbl; | 
|---|
| 1381 | }; | 
|---|
| 1382 | kernel_ulong_t driver_data; | 
|---|
| 1383 | }; | 
|---|
| 1384 |  | 
|---|
| 1385 | void arch_sort_irqchip_probe(struct acpi_probe_entry *ap_head, int nr); | 
|---|
| 1386 |  | 
|---|
| 1387 | #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable,	\ | 
|---|
| 1388 | valid, data, fn)			\ | 
|---|
| 1389 | static const struct acpi_probe_entry __acpi_probe_##name	\ | 
|---|
| 1390 | __used __section("__" #table "_acpi_probe_table") = {	\ | 
|---|
| 1391 | .id = table_id,					\ | 
|---|
| 1392 | .type = subtable,				\ | 
|---|
| 1393 | .subtable_valid = valid,			\ | 
|---|
| 1394 | .probe_table = fn,				\ | 
|---|
| 1395 | .driver_data = data,				\ | 
|---|
| 1396 | } | 
|---|
| 1397 |  | 
|---|
| 1398 | #define ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(table, name, table_id,	\ | 
|---|
| 1399 | subtable, valid, data, fn)	\ | 
|---|
| 1400 | static const struct acpi_probe_entry __acpi_probe_##name	\ | 
|---|
| 1401 | __used __section("__" #table "_acpi_probe_table") = {	\ | 
|---|
| 1402 | .id = table_id,					\ | 
|---|
| 1403 | .type = subtable,				\ | 
|---|
| 1404 | .subtable_valid = valid,			\ | 
|---|
| 1405 | .probe_subtbl = fn,				\ | 
|---|
| 1406 | .driver_data = data,				\ | 
|---|
| 1407 | } | 
|---|
| 1408 |  | 
|---|
| 1409 | #define ACPI_PROBE_TABLE(name)		__##name##_acpi_probe_table | 
|---|
| 1410 | #define ACPI_PROBE_TABLE_END(name)	__##name##_acpi_probe_table_end | 
|---|
| 1411 |  | 
|---|
| 1412 | int __acpi_probe_device_table(struct acpi_probe_entry *start, int nr); | 
|---|
| 1413 |  | 
|---|
| 1414 | #define acpi_probe_device_table(t)					\ | 
|---|
| 1415 | ({ 								\ | 
|---|
| 1416 | extern struct acpi_probe_entry ACPI_PROBE_TABLE(t),	\ | 
|---|
| 1417 | ACPI_PROBE_TABLE_END(t);	\ | 
|---|
| 1418 | __acpi_probe_device_table(&ACPI_PROBE_TABLE(t),		\ | 
|---|
| 1419 | (&ACPI_PROBE_TABLE_END(t) -	\ | 
|---|
| 1420 | &ACPI_PROBE_TABLE(t)));	\ | 
|---|
| 1421 | }) | 
|---|
| 1422 | #else | 
|---|
| 1423 | static inline int acpi_dev_get_property(struct acpi_device *adev, | 
|---|
| 1424 | const char *name, acpi_object_type type, | 
|---|
| 1425 | const union acpi_object **obj) | 
|---|
| 1426 | { | 
|---|
| 1427 | return -ENXIO; | 
|---|
| 1428 | } | 
|---|
| 1429 |  | 
|---|
| 1430 | static inline int | 
|---|
| 1431 | __acpi_node_get_property_reference(const struct fwnode_handle *fwnode, | 
|---|
| 1432 | const char *name, size_t index, size_t num_args, | 
|---|
| 1433 | struct fwnode_reference_args *args) | 
|---|
| 1434 | { | 
|---|
| 1435 | return -ENXIO; | 
|---|
| 1436 | } | 
|---|
| 1437 |  | 
|---|
| 1438 | static inline int | 
|---|
| 1439 | acpi_node_get_property_reference(const struct fwnode_handle *fwnode, | 
|---|
| 1440 | const char *name, size_t index, | 
|---|
| 1441 | struct fwnode_reference_args *args) | 
|---|
| 1442 | { | 
|---|
| 1443 | return -ENXIO; | 
|---|
| 1444 | } | 
|---|
| 1445 |  | 
|---|
| 1446 | static inline int acpi_node_prop_get(const struct fwnode_handle *fwnode, | 
|---|
| 1447 | const char *propname, | 
|---|
| 1448 | void **valptr) | 
|---|
| 1449 | { | 
|---|
| 1450 | return -ENXIO; | 
|---|
| 1451 | } | 
|---|
| 1452 |  | 
|---|
| 1453 | static inline struct fwnode_handle * | 
|---|
| 1454 | acpi_get_next_subnode(const struct fwnode_handle *fwnode, | 
|---|
| 1455 | struct fwnode_handle *child) | 
|---|
| 1456 | { | 
|---|
| 1457 | return NULL; | 
|---|
| 1458 | } | 
|---|
| 1459 |  | 
|---|
| 1460 | static inline struct fwnode_handle * | 
|---|
| 1461 | acpi_graph_get_next_endpoint(const struct fwnode_handle *fwnode, | 
|---|
| 1462 | struct fwnode_handle *prev) | 
|---|
| 1463 | { | 
|---|
| 1464 | return ERR_PTR(-ENXIO); | 
|---|
| 1465 | } | 
|---|
| 1466 |  | 
|---|
| 1467 | static inline int | 
|---|
| 1468 | acpi_graph_get_remote_endpoint(const struct fwnode_handle *fwnode, | 
|---|
| 1469 | struct fwnode_handle **remote, | 
|---|
| 1470 | struct fwnode_handle **port, | 
|---|
| 1471 | struct fwnode_handle **endpoint) | 
|---|
| 1472 | { | 
|---|
| 1473 | return -ENXIO; | 
|---|
| 1474 | } | 
|---|
| 1475 |  | 
|---|
| 1476 | #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \ | 
|---|
| 1477 | static const void * __acpi_table_##name[]			\ | 
|---|
| 1478 | __attribute__((unused))					\ | 
|---|
| 1479 | = { (void *) table_id,					\ | 
|---|
| 1480 | (void *) subtable,					\ | 
|---|
| 1481 | (void *) valid,					\ | 
|---|
| 1482 | (void *) fn,					\ | 
|---|
| 1483 | (void *) data } | 
|---|
| 1484 |  | 
|---|
| 1485 | #define acpi_probe_device_table(t)	({ int __r = 0; __r;}) | 
|---|
| 1486 | #endif | 
|---|
| 1487 |  | 
|---|
| 1488 | #ifdef CONFIG_ACPI_TABLE_UPGRADE | 
|---|
| 1489 | void acpi_table_upgrade(void); | 
|---|
| 1490 | #else | 
|---|
| 1491 | static inline void acpi_table_upgrade(void) { } | 
|---|
| 1492 | #endif | 
|---|
| 1493 |  | 
|---|
| 1494 | #if defined(CONFIG_ACPI) && defined(CONFIG_ACPI_WATCHDOG) | 
|---|
| 1495 | extern bool acpi_has_watchdog(void); | 
|---|
| 1496 | #else | 
|---|
| 1497 | static inline bool acpi_has_watchdog(void) { return false; } | 
|---|
| 1498 | #endif | 
|---|
| 1499 |  | 
|---|
| 1500 | #ifdef CONFIG_ACPI_SPCR_TABLE | 
|---|
| 1501 | extern bool qdf2400_e44_present; | 
|---|
| 1502 | int acpi_parse_spcr(bool enable_earlycon, bool enable_console); | 
|---|
| 1503 | #else | 
|---|
| 1504 | static inline int acpi_parse_spcr(bool enable_earlycon, bool enable_console) | 
|---|
| 1505 | { | 
|---|
| 1506 | return -ENODEV; | 
|---|
| 1507 | } | 
|---|
| 1508 | #endif | 
|---|
| 1509 |  | 
|---|
| 1510 | #if IS_ENABLED(CONFIG_ACPI_GENERIC_GSI) | 
|---|
| 1511 | int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res); | 
|---|
| 1512 | #else | 
|---|
| 1513 | static inline | 
|---|
| 1514 | int acpi_irq_get(acpi_handle handle, unsigned int index, struct resource *res) | 
|---|
| 1515 | { | 
|---|
| 1516 | return -EINVAL; | 
|---|
| 1517 | } | 
|---|
| 1518 | #endif | 
|---|
| 1519 |  | 
|---|
| 1520 | #ifdef CONFIG_ACPI_LPIT | 
|---|
| 1521 | int lpit_read_residency_count_address(u64 *address); | 
|---|
| 1522 | #else | 
|---|
| 1523 | static inline int lpit_read_residency_count_address(u64 *address) | 
|---|
| 1524 | { | 
|---|
| 1525 | return -EINVAL; | 
|---|
| 1526 | } | 
|---|
| 1527 | #endif | 
|---|
| 1528 |  | 
|---|
| 1529 | #ifdef CONFIG_ACPI_PROCESSOR_IDLE | 
|---|
| 1530 | #ifndef arch_get_idle_state_flags | 
|---|
| 1531 | static inline unsigned int arch_get_idle_state_flags(u32 arch_flags) | 
|---|
| 1532 | { | 
|---|
| 1533 | return 0; | 
|---|
| 1534 | } | 
|---|
| 1535 | #endif | 
|---|
| 1536 | #endif /* CONFIG_ACPI_PROCESSOR_IDLE */ | 
|---|
| 1537 |  | 
|---|
| 1538 | #ifdef CONFIG_ACPI_PPTT | 
|---|
| 1539 | int acpi_pptt_cpu_is_thread(unsigned int cpu); | 
|---|
| 1540 | int find_acpi_cpu_topology(unsigned int cpu, int level); | 
|---|
| 1541 | int find_acpi_cpu_topology_cluster(unsigned int cpu); | 
|---|
| 1542 | int find_acpi_cpu_topology_package(unsigned int cpu); | 
|---|
| 1543 | int find_acpi_cpu_topology_hetero_id(unsigned int cpu); | 
|---|
| 1544 | #else | 
|---|
| 1545 | static inline int acpi_pptt_cpu_is_thread(unsigned int cpu) | 
|---|
| 1546 | { | 
|---|
| 1547 | return -EINVAL; | 
|---|
| 1548 | } | 
|---|
| 1549 | static inline int find_acpi_cpu_topology(unsigned int cpu, int level) | 
|---|
| 1550 | { | 
|---|
| 1551 | return -EINVAL; | 
|---|
| 1552 | } | 
|---|
| 1553 | static inline int find_acpi_cpu_topology_cluster(unsigned int cpu) | 
|---|
| 1554 | { | 
|---|
| 1555 | return -EINVAL; | 
|---|
| 1556 | } | 
|---|
| 1557 | static inline int find_acpi_cpu_topology_package(unsigned int cpu) | 
|---|
| 1558 | { | 
|---|
| 1559 | return -EINVAL; | 
|---|
| 1560 | } | 
|---|
| 1561 | static inline int find_acpi_cpu_topology_hetero_id(unsigned int cpu) | 
|---|
| 1562 | { | 
|---|
| 1563 | return -EINVAL; | 
|---|
| 1564 | } | 
|---|
| 1565 | #endif | 
|---|
| 1566 |  | 
|---|
| 1567 | void acpi_arch_init(void); | 
|---|
| 1568 |  | 
|---|
| 1569 | #ifdef CONFIG_ACPI_PCC | 
|---|
| 1570 | void acpi_init_pcc(void); | 
|---|
| 1571 | #else | 
|---|
| 1572 | static inline void acpi_init_pcc(void) { } | 
|---|
| 1573 | #endif | 
|---|
| 1574 |  | 
|---|
| 1575 | #ifdef CONFIG_ACPI_FFH | 
|---|
| 1576 | void acpi_init_ffh(void); | 
|---|
| 1577 | extern int acpi_ffh_address_space_arch_setup(void *handler_ctxt, | 
|---|
| 1578 | void **region_ctxt); | 
|---|
| 1579 | extern int acpi_ffh_address_space_arch_handler(acpi_integer *value, | 
|---|
| 1580 | void *region_context); | 
|---|
| 1581 | #else | 
|---|
| 1582 | static inline void acpi_init_ffh(void) { } | 
|---|
| 1583 | #endif | 
|---|
| 1584 |  | 
|---|
| 1585 | #ifdef CONFIG_ACPI | 
|---|
| 1586 | extern void acpi_device_notify(struct device *dev); | 
|---|
| 1587 | extern void acpi_device_notify_remove(struct device *dev); | 
|---|
| 1588 | #else | 
|---|
| 1589 | static inline void acpi_device_notify(struct device *dev) { } | 
|---|
| 1590 | static inline void acpi_device_notify_remove(struct device *dev) { } | 
|---|
| 1591 | #endif | 
|---|
| 1592 |  | 
|---|
| 1593 | static inline void acpi_use_parent_companion(struct device *dev) | 
|---|
| 1594 | { | 
|---|
| 1595 | ACPI_COMPANION_SET(dev, ACPI_COMPANION(dev->parent)); | 
|---|
| 1596 | } | 
|---|
| 1597 |  | 
|---|
| 1598 | #ifdef CONFIG_ACPI_NUMA | 
|---|
| 1599 | bool acpi_node_backed_by_real_pxm(int nid); | 
|---|
| 1600 | #else | 
|---|
| 1601 | static inline bool acpi_node_backed_by_real_pxm(int nid) | 
|---|
| 1602 | { | 
|---|
| 1603 | return false; | 
|---|
| 1604 | } | 
|---|
| 1605 | #endif | 
|---|
| 1606 |  | 
|---|
| 1607 | #endif	/*_LINUX_ACPI_H*/ | 
|---|
| 1608 |  | 
|---|