at v3.19 24 kB view raw
1/* 2 * acpi.h - ACPI Interface 3 * 4 * Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 5 * 6 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 */ 24 25#ifndef _LINUX_ACPI_H 26#define _LINUX_ACPI_H 27 28#include <linux/errno.h> 29#include <linux/ioport.h> /* for struct resource */ 30#include <linux/device.h> 31#include <linux/property.h> 32 33#ifndef _LINUX 34#define _LINUX 35#endif 36#include <acpi/acpi.h> 37 38#ifdef CONFIG_ACPI 39 40#include <linux/list.h> 41#include <linux/mod_devicetable.h> 42#include <linux/dynamic_debug.h> 43 44#include <acpi/acpi_bus.h> 45#include <acpi/acpi_drivers.h> 46#include <acpi/acpi_numa.h> 47#include <acpi/acpi_io.h> 48#include <asm/acpi.h> 49 50static inline acpi_handle acpi_device_handle(struct acpi_device *adev) 51{ 52 return adev ? adev->handle : NULL; 53} 54 55#define ACPI_COMPANION(dev) ((dev)->acpi_node.companion) 56#define ACPI_COMPANION_SET(dev, adev) ACPI_COMPANION(dev) = (adev) 57#define ACPI_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev)) 58 59static inline void acpi_preset_companion(struct device *dev, 60 struct acpi_device *parent, u64 addr) 61{ 62 ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, NULL)); 63} 64 65static inline const char *acpi_dev_name(struct acpi_device *adev) 66{ 67 return dev_name(&adev->dev); 68} 69 70enum acpi_irq_model_id { 71 ACPI_IRQ_MODEL_PIC = 0, 72 ACPI_IRQ_MODEL_IOAPIC, 73 ACPI_IRQ_MODEL_IOSAPIC, 74 ACPI_IRQ_MODEL_PLATFORM, 75 ACPI_IRQ_MODEL_COUNT 76}; 77 78extern enum acpi_irq_model_id acpi_irq_model; 79 80enum acpi_interrupt_id { 81 ACPI_INTERRUPT_PMI = 1, 82 ACPI_INTERRUPT_INIT, 83 ACPI_INTERRUPT_CPEI, 84 ACPI_INTERRUPT_COUNT 85}; 86 87#define ACPI_SPACE_MEM 0 88 89enum acpi_address_range_id { 90 ACPI_ADDRESS_RANGE_MEMORY = 1, 91 ACPI_ADDRESS_RANGE_RESERVED = 2, 92 ACPI_ADDRESS_RANGE_ACPI = 3, 93 ACPI_ADDRESS_RANGE_NVS = 4, 94 ACPI_ADDRESS_RANGE_COUNT 95}; 96 97 98/* Table Handlers */ 99 100typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table); 101 102typedef int (*acpi_tbl_entry_handler)(struct acpi_subtable_header *header, 103 const unsigned long end); 104 105#ifdef CONFIG_ACPI_INITRD_TABLE_OVERRIDE 106void acpi_initrd_override(void *data, size_t size); 107#else 108static inline void acpi_initrd_override(void *data, size_t size) 109{ 110} 111#endif 112 113#define BAD_MADT_ENTRY(entry, end) ( \ 114 (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ 115 ((struct acpi_subtable_header *)entry)->length < sizeof(*entry)) 116 117char * __acpi_map_table (unsigned long phys_addr, unsigned long size); 118void __acpi_unmap_table(char *map, unsigned long size); 119int early_acpi_boot_init(void); 120int acpi_boot_init (void); 121void acpi_boot_table_init (void); 122int acpi_mps_check (void); 123int acpi_numa_init (void); 124 125int acpi_table_init (void); 126int acpi_table_parse(char *id, acpi_tbl_table_handler handler); 127int __init acpi_parse_entries(char *id, unsigned long table_size, 128 acpi_tbl_entry_handler handler, 129 struct acpi_table_header *table_header, 130 int entry_id, unsigned int max_entries); 131int __init acpi_table_parse_entries(char *id, unsigned long table_size, 132 int entry_id, 133 acpi_tbl_entry_handler handler, 134 unsigned int max_entries); 135int acpi_table_parse_madt(enum acpi_madt_type id, 136 acpi_tbl_entry_handler handler, 137 unsigned int max_entries); 138int acpi_parse_mcfg (struct acpi_table_header *header); 139void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); 140 141/* the following four functions are architecture-dependent */ 142void acpi_numa_slit_init (struct acpi_table_slit *slit); 143void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa); 144void acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa); 145int acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma); 146void acpi_numa_arch_fixup(void); 147 148#ifdef CONFIG_ACPI_HOTPLUG_CPU 149/* Arch dependent functions for cpu hotplug support */ 150int acpi_map_cpu(acpi_handle handle, int physid, int *pcpu); 151int acpi_unmap_cpu(int cpu); 152#endif /* CONFIG_ACPI_HOTPLUG_CPU */ 153 154int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base); 155int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base); 156int acpi_ioapic_registered(acpi_handle handle, u32 gsi_base); 157void acpi_irq_stats_init(void); 158extern u32 acpi_irq_handled; 159extern u32 acpi_irq_not_handled; 160 161extern int sbf_port; 162extern unsigned long acpi_realmode_flags; 163 164int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity); 165int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); 166int acpi_isa_irq_to_gsi (unsigned isa_irq, u32 *gsi); 167 168#ifdef CONFIG_X86_IO_APIC 169extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); 170#else 171#define acpi_get_override_irq(gsi, trigger, polarity) (-1) 172#endif 173/* 174 * This function undoes the effect of one call to acpi_register_gsi(). 175 * If this matches the last registration, any IRQ resources for gsi 176 * are freed. 177 */ 178void acpi_unregister_gsi (u32 gsi); 179 180struct pci_dev; 181 182int acpi_pci_irq_enable (struct pci_dev *dev); 183void acpi_penalize_isa_irq(int irq, int active); 184 185void acpi_pci_irq_disable (struct pci_dev *dev); 186 187extern int ec_read(u8 addr, u8 *val); 188extern int ec_write(u8 addr, u8 val); 189extern int ec_transaction(u8 command, 190 const u8 *wdata, unsigned wdata_len, 191 u8 *rdata, unsigned rdata_len); 192extern acpi_handle ec_get_handle(void); 193 194extern bool acpi_is_pnp_device(struct acpi_device *); 195 196#if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) 197 198typedef void (*wmi_notify_handler) (u32 value, void *context); 199 200extern acpi_status wmi_evaluate_method(const char *guid, u8 instance, 201 u32 method_id, 202 const struct acpi_buffer *in, 203 struct acpi_buffer *out); 204extern acpi_status wmi_query_block(const char *guid, u8 instance, 205 struct acpi_buffer *out); 206extern acpi_status wmi_set_block(const char *guid, u8 instance, 207 const struct acpi_buffer *in); 208extern acpi_status wmi_install_notify_handler(const char *guid, 209 wmi_notify_handler handler, void *data); 210extern acpi_status wmi_remove_notify_handler(const char *guid); 211extern acpi_status wmi_get_event_data(u32 event, struct acpi_buffer *out); 212extern bool wmi_has_guid(const char *guid); 213 214#endif /* CONFIG_ACPI_WMI */ 215 216#define ACPI_VIDEO_OUTPUT_SWITCHING 0x0001 217#define ACPI_VIDEO_DEVICE_POSTING 0x0002 218#define ACPI_VIDEO_ROM_AVAILABLE 0x0004 219#define ACPI_VIDEO_BACKLIGHT 0x0008 220#define ACPI_VIDEO_BACKLIGHT_FORCE_VENDOR 0x0010 221#define ACPI_VIDEO_BACKLIGHT_FORCE_VIDEO 0x0020 222#define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VENDOR 0x0040 223#define ACPI_VIDEO_OUTPUT_SWITCHING_FORCE_VIDEO 0x0080 224#define ACPI_VIDEO_BACKLIGHT_DMI_VENDOR 0x0100 225#define ACPI_VIDEO_BACKLIGHT_DMI_VIDEO 0x0200 226#define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VENDOR 0x0400 227#define ACPI_VIDEO_OUTPUT_SWITCHING_DMI_VIDEO 0x0800 228 229#if defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) 230 231extern long acpi_video_get_capabilities(acpi_handle graphics_dev_handle); 232extern long acpi_is_video_device(acpi_handle handle); 233extern void acpi_video_dmi_promote_vendor(void); 234extern void acpi_video_dmi_demote_vendor(void); 235extern int acpi_video_backlight_support(void); 236extern int acpi_video_display_switch_support(void); 237 238#else 239 240static inline long acpi_video_get_capabilities(acpi_handle graphics_dev_handle) 241{ 242 return 0; 243} 244 245static inline long acpi_is_video_device(acpi_handle handle) 246{ 247 return 0; 248} 249 250static inline void acpi_video_dmi_promote_vendor(void) 251{ 252} 253 254static inline void acpi_video_dmi_demote_vendor(void) 255{ 256} 257 258static inline int acpi_video_backlight_support(void) 259{ 260 return 0; 261} 262 263static inline int acpi_video_display_switch_support(void) 264{ 265 return 0; 266} 267 268#endif /* defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) */ 269 270extern int acpi_blacklisted(void); 271extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d); 272extern void acpi_osi_setup(char *str); 273 274#ifdef CONFIG_ACPI_NUMA 275int acpi_get_node(acpi_handle handle); 276#else 277static inline int acpi_get_node(acpi_handle handle) 278{ 279 return 0; 280} 281#endif 282extern int acpi_paddr_to_node(u64 start_addr, u64 size); 283 284extern int pnpacpi_disabled; 285 286#define PXM_INVAL (-1) 287 288bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res); 289bool acpi_dev_resource_io(struct acpi_resource *ares, struct resource *res); 290bool acpi_dev_resource_address_space(struct acpi_resource *ares, 291 struct resource *res); 292bool acpi_dev_resource_ext_address_space(struct acpi_resource *ares, 293 struct resource *res); 294unsigned long acpi_dev_irq_flags(u8 triggering, u8 polarity, u8 shareable); 295bool acpi_dev_resource_interrupt(struct acpi_resource *ares, int index, 296 struct resource *res); 297 298struct resource_list_entry { 299 struct list_head node; 300 struct resource res; 301}; 302 303void acpi_dev_free_resource_list(struct list_head *list); 304int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list, 305 int (*preproc)(struct acpi_resource *, void *), 306 void *preproc_data); 307 308int acpi_check_resource_conflict(const struct resource *res); 309 310int acpi_check_region(resource_size_t start, resource_size_t n, 311 const char *name); 312 313int acpi_resources_are_enforced(void); 314 315#ifdef CONFIG_HIBERNATION 316void __init acpi_no_s4_hw_signature(void); 317#endif 318 319#ifdef CONFIG_PM_SLEEP 320void __init acpi_old_suspend_ordering(void); 321void __init acpi_nvs_nosave(void); 322void __init acpi_nvs_nosave_s3(void); 323#endif /* CONFIG_PM_SLEEP */ 324 325struct acpi_osc_context { 326 char *uuid_str; /* UUID string */ 327 int rev; 328 struct acpi_buffer cap; /* list of DWORD capabilities */ 329 struct acpi_buffer ret; /* free by caller if success */ 330}; 331 332acpi_status acpi_str_to_uuid(char *str, u8 *uuid); 333acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context); 334 335/* Indexes into _OSC Capabilities Buffer (DWORDs 2 & 3 are device-specific) */ 336#define OSC_QUERY_DWORD 0 /* DWORD 1 */ 337#define OSC_SUPPORT_DWORD 1 /* DWORD 2 */ 338#define OSC_CONTROL_DWORD 2 /* DWORD 3 */ 339 340/* _OSC Capabilities DWORD 1: Query/Control and Error Returns (generic) */ 341#define OSC_QUERY_ENABLE 0x00000001 /* input */ 342#define OSC_REQUEST_ERROR 0x00000002 /* return */ 343#define OSC_INVALID_UUID_ERROR 0x00000004 /* return */ 344#define OSC_INVALID_REVISION_ERROR 0x00000008 /* return */ 345#define OSC_CAPABILITIES_MASK_ERROR 0x00000010 /* return */ 346 347/* Platform-Wide Capabilities _OSC: Capabilities DWORD 2: Support Field */ 348#define OSC_SB_PAD_SUPPORT 0x00000001 349#define OSC_SB_PPC_OST_SUPPORT 0x00000002 350#define OSC_SB_PR3_SUPPORT 0x00000004 351#define OSC_SB_HOTPLUG_OST_SUPPORT 0x00000008 352#define OSC_SB_APEI_SUPPORT 0x00000010 353#define OSC_SB_CPC_SUPPORT 0x00000020 354 355extern bool osc_sb_apei_support_acked; 356 357/* PCI Host Bridge _OSC: Capabilities DWORD 2: Support Field */ 358#define OSC_PCI_EXT_CONFIG_SUPPORT 0x00000001 359#define OSC_PCI_ASPM_SUPPORT 0x00000002 360#define OSC_PCI_CLOCK_PM_SUPPORT 0x00000004 361#define OSC_PCI_SEGMENT_GROUPS_SUPPORT 0x00000008 362#define OSC_PCI_MSI_SUPPORT 0x00000010 363#define OSC_PCI_SUPPORT_MASKS 0x0000001f 364 365/* PCI Host Bridge _OSC: Capabilities DWORD 3: Control Field */ 366#define OSC_PCI_EXPRESS_NATIVE_HP_CONTROL 0x00000001 367#define OSC_PCI_SHPC_NATIVE_HP_CONTROL 0x00000002 368#define OSC_PCI_EXPRESS_PME_CONTROL 0x00000004 369#define OSC_PCI_EXPRESS_AER_CONTROL 0x00000008 370#define OSC_PCI_EXPRESS_CAPABILITY_CONTROL 0x00000010 371#define OSC_PCI_CONTROL_MASKS 0x0000001f 372 373#define ACPI_GSB_ACCESS_ATTRIB_QUICK 0x00000002 374#define ACPI_GSB_ACCESS_ATTRIB_SEND_RCV 0x00000004 375#define ACPI_GSB_ACCESS_ATTRIB_BYTE 0x00000006 376#define ACPI_GSB_ACCESS_ATTRIB_WORD 0x00000008 377#define ACPI_GSB_ACCESS_ATTRIB_BLOCK 0x0000000A 378#define ACPI_GSB_ACCESS_ATTRIB_MULTIBYTE 0x0000000B 379#define ACPI_GSB_ACCESS_ATTRIB_WORD_CALL 0x0000000C 380#define ACPI_GSB_ACCESS_ATTRIB_BLOCK_CALL 0x0000000D 381#define ACPI_GSB_ACCESS_ATTRIB_RAW_BYTES 0x0000000E 382#define ACPI_GSB_ACCESS_ATTRIB_RAW_PROCESS 0x0000000F 383 384extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, 385 u32 *mask, u32 req); 386 387/* Enable _OST when all relevant hotplug operations are enabled */ 388#if defined(CONFIG_ACPI_HOTPLUG_CPU) && \ 389 defined(CONFIG_ACPI_HOTPLUG_MEMORY) && \ 390 defined(CONFIG_ACPI_CONTAINER) 391#define ACPI_HOTPLUG_OST 392#endif 393 394/* _OST Source Event Code (OSPM Action) */ 395#define ACPI_OST_EC_OSPM_SHUTDOWN 0x100 396#define ACPI_OST_EC_OSPM_EJECT 0x103 397#define ACPI_OST_EC_OSPM_INSERTION 0x200 398 399/* _OST General Processing Status Code */ 400#define ACPI_OST_SC_SUCCESS 0x0 401#define ACPI_OST_SC_NON_SPECIFIC_FAILURE 0x1 402#define ACPI_OST_SC_UNRECOGNIZED_NOTIFY 0x2 403 404/* _OST OS Shutdown Processing (0x100) Status Code */ 405#define ACPI_OST_SC_OS_SHUTDOWN_DENIED 0x80 406#define ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS 0x81 407#define ACPI_OST_SC_OS_SHUTDOWN_COMPLETED 0x82 408#define ACPI_OST_SC_OS_SHUTDOWN_NOT_SUPPORTED 0x83 409 410/* _OST Ejection Request (0x3, 0x103) Status Code */ 411#define ACPI_OST_SC_EJECT_NOT_SUPPORTED 0x80 412#define ACPI_OST_SC_DEVICE_IN_USE 0x81 413#define ACPI_OST_SC_DEVICE_BUSY 0x82 414#define ACPI_OST_SC_EJECT_DEPENDENCY_BUSY 0x83 415#define ACPI_OST_SC_EJECT_IN_PROGRESS 0x84 416 417/* _OST Insertion Request (0x200) Status Code */ 418#define ACPI_OST_SC_INSERT_IN_PROGRESS 0x80 419#define ACPI_OST_SC_DRIVER_LOAD_FAILURE 0x81 420#define ACPI_OST_SC_INSERT_NOT_SUPPORTED 0x82 421 422extern void acpi_early_init(void); 423 424extern int acpi_nvs_register(__u64 start, __u64 size); 425 426extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *), 427 void *data); 428 429const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids, 430 const struct device *dev); 431 432extern bool acpi_driver_match_device(struct device *dev, 433 const struct device_driver *drv); 434int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *); 435int acpi_device_modalias(struct device *, char *, int); 436void acpi_walk_dep_device_list(acpi_handle handle); 437 438struct platform_device *acpi_create_platform_device(struct acpi_device *); 439#define ACPI_PTR(_ptr) (_ptr) 440 441#else /* !CONFIG_ACPI */ 442 443#define acpi_disabled 1 444 445#define ACPI_COMPANION(dev) (NULL) 446#define ACPI_COMPANION_SET(dev, adev) do { } while (0) 447#define ACPI_HANDLE(dev) (NULL) 448 449struct fwnode_handle; 450 451static inline bool is_acpi_node(struct fwnode_handle *fwnode) 452{ 453 return false; 454} 455 456static inline struct acpi_device *acpi_node(struct fwnode_handle *fwnode) 457{ 458 return NULL; 459} 460 461static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev) 462{ 463 return NULL; 464} 465 466static inline const char *acpi_dev_name(struct acpi_device *adev) 467{ 468 return NULL; 469} 470 471static inline void acpi_early_init(void) { } 472 473static inline int early_acpi_boot_init(void) 474{ 475 return 0; 476} 477static inline int acpi_boot_init(void) 478{ 479 return 0; 480} 481 482static inline void acpi_boot_table_init(void) 483{ 484 return; 485} 486 487static inline int acpi_mps_check(void) 488{ 489 return 0; 490} 491 492static inline int acpi_check_resource_conflict(struct resource *res) 493{ 494 return 0; 495} 496 497static inline int acpi_check_region(resource_size_t start, resource_size_t n, 498 const char *name) 499{ 500 return 0; 501} 502 503struct acpi_table_header; 504static inline int acpi_table_parse(char *id, 505 int (*handler)(struct acpi_table_header *)) 506{ 507 return -ENODEV; 508} 509 510static inline int acpi_nvs_register(__u64 start, __u64 size) 511{ 512 return 0; 513} 514 515static inline int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *), 516 void *data) 517{ 518 return 0; 519} 520 521struct acpi_device_id; 522 523static inline const struct acpi_device_id *acpi_match_device( 524 const struct acpi_device_id *ids, const struct device *dev) 525{ 526 return NULL; 527} 528 529static inline bool acpi_driver_match_device(struct device *dev, 530 const struct device_driver *drv) 531{ 532 return false; 533} 534 535static inline int acpi_device_uevent_modalias(struct device *dev, 536 struct kobj_uevent_env *env) 537{ 538 return -ENODEV; 539} 540 541static inline int acpi_device_modalias(struct device *dev, 542 char *buf, int size) 543{ 544 return -ENODEV; 545} 546 547#define ACPI_PTR(_ptr) (NULL) 548 549#endif /* !CONFIG_ACPI */ 550 551#ifdef CONFIG_ACPI 552void acpi_os_set_prepare_sleep(int (*func)(u8 sleep_state, 553 u32 pm1a_ctrl, u32 pm1b_ctrl)); 554 555acpi_status acpi_os_prepare_sleep(u8 sleep_state, 556 u32 pm1a_control, u32 pm1b_control); 557 558void acpi_os_set_prepare_extended_sleep(int (*func)(u8 sleep_state, 559 u32 val_a, u32 val_b)); 560 561acpi_status acpi_os_prepare_extended_sleep(u8 sleep_state, 562 u32 val_a, u32 val_b); 563 564#ifdef CONFIG_X86 565void arch_reserve_mem_area(acpi_physical_address addr, size_t size); 566#else 567static inline void arch_reserve_mem_area(acpi_physical_address addr, 568 size_t size) 569{ 570} 571#endif /* CONFIG_X86 */ 572#else 573#define acpi_os_set_prepare_sleep(func, pm1a_ctrl, pm1b_ctrl) do { } while (0) 574#endif 575 576#if defined(CONFIG_ACPI) && defined(CONFIG_PM) 577int acpi_dev_runtime_suspend(struct device *dev); 578int acpi_dev_runtime_resume(struct device *dev); 579int acpi_subsys_runtime_suspend(struct device *dev); 580int acpi_subsys_runtime_resume(struct device *dev); 581struct acpi_device *acpi_dev_pm_get_node(struct device *dev); 582int acpi_dev_pm_attach(struct device *dev, bool power_on); 583#else 584static inline int acpi_dev_runtime_suspend(struct device *dev) { return 0; } 585static inline int acpi_dev_runtime_resume(struct device *dev) { return 0; } 586static inline int acpi_subsys_runtime_suspend(struct device *dev) { return 0; } 587static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } 588static inline struct acpi_device *acpi_dev_pm_get_node(struct device *dev) 589{ 590 return NULL; 591} 592static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) 593{ 594 return -ENODEV; 595} 596#endif 597 598#if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP) 599int acpi_dev_suspend_late(struct device *dev); 600int acpi_dev_resume_early(struct device *dev); 601int acpi_subsys_prepare(struct device *dev); 602void acpi_subsys_complete(struct device *dev); 603int acpi_subsys_suspend_late(struct device *dev); 604int acpi_subsys_resume_early(struct device *dev); 605int acpi_subsys_suspend(struct device *dev); 606int acpi_subsys_freeze(struct device *dev); 607#else 608static inline int acpi_dev_suspend_late(struct device *dev) { return 0; } 609static inline int acpi_dev_resume_early(struct device *dev) { return 0; } 610static inline int acpi_subsys_prepare(struct device *dev) { return 0; } 611static inline void acpi_subsys_complete(struct device *dev) {} 612static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; } 613static inline int acpi_subsys_resume_early(struct device *dev) { return 0; } 614static inline int acpi_subsys_suspend(struct device *dev) { return 0; } 615static inline int acpi_subsys_freeze(struct device *dev) { return 0; } 616#endif 617 618#ifdef CONFIG_ACPI 619__printf(3, 4) 620void acpi_handle_printk(const char *level, acpi_handle handle, 621 const char *fmt, ...); 622#else /* !CONFIG_ACPI */ 623static inline __printf(3, 4) void 624acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} 625#endif /* !CONFIG_ACPI */ 626 627#if defined(CONFIG_ACPI) && defined(CONFIG_DYNAMIC_DEBUG) 628__printf(3, 4) 629void __acpi_handle_debug(struct _ddebug *descriptor, acpi_handle handle, const char *fmt, ...); 630#else 631#define __acpi_handle_debug(descriptor, handle, fmt, ...) \ 632 acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__); 633#endif 634 635/* 636 * acpi_handle_<level>: Print message with ACPI prefix and object path 637 * 638 * These interfaces acquire the global namespace mutex to obtain an object 639 * path. In interrupt context, it shows the object path as <n/a>. 640 */ 641#define acpi_handle_emerg(handle, fmt, ...) \ 642 acpi_handle_printk(KERN_EMERG, handle, fmt, ##__VA_ARGS__) 643#define acpi_handle_alert(handle, fmt, ...) \ 644 acpi_handle_printk(KERN_ALERT, handle, fmt, ##__VA_ARGS__) 645#define acpi_handle_crit(handle, fmt, ...) \ 646 acpi_handle_printk(KERN_CRIT, handle, fmt, ##__VA_ARGS__) 647#define acpi_handle_err(handle, fmt, ...) \ 648 acpi_handle_printk(KERN_ERR, handle, fmt, ##__VA_ARGS__) 649#define acpi_handle_warn(handle, fmt, ...) \ 650 acpi_handle_printk(KERN_WARNING, handle, fmt, ##__VA_ARGS__) 651#define acpi_handle_notice(handle, fmt, ...) \ 652 acpi_handle_printk(KERN_NOTICE, handle, fmt, ##__VA_ARGS__) 653#define acpi_handle_info(handle, fmt, ...) \ 654 acpi_handle_printk(KERN_INFO, handle, fmt, ##__VA_ARGS__) 655 656#if defined(DEBUG) 657#define acpi_handle_debug(handle, fmt, ...) \ 658 acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__) 659#else 660#if defined(CONFIG_DYNAMIC_DEBUG) 661#define acpi_handle_debug(handle, fmt, ...) \ 662do { \ 663 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ 664 if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) \ 665 __acpi_handle_debug(&descriptor, handle, pr_fmt(fmt), \ 666 ##__VA_ARGS__); \ 667} while (0) 668#else 669#define acpi_handle_debug(handle, fmt, ...) \ 670({ \ 671 if (0) \ 672 acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__); \ 673 0; \ 674}) 675#endif 676#endif 677 678struct acpi_gpio_params { 679 unsigned int crs_entry_index; 680 unsigned int line_index; 681 bool active_low; 682}; 683 684struct acpi_gpio_mapping { 685 const char *name; 686 const struct acpi_gpio_params *data; 687 unsigned int size; 688}; 689 690#if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB) 691int acpi_dev_add_driver_gpios(struct acpi_device *adev, 692 const struct acpi_gpio_mapping *gpios); 693 694static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) 695{ 696 if (adev) 697 adev->driver_gpios = NULL; 698} 699#else 700static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev, 701 const struct acpi_gpio_mapping *gpios) 702{ 703 return -ENXIO; 704} 705static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {} 706#endif 707 708/* Device properties */ 709 710#define MAX_ACPI_REFERENCE_ARGS 8 711struct acpi_reference_args { 712 struct acpi_device *adev; 713 size_t nargs; 714 u64 args[MAX_ACPI_REFERENCE_ARGS]; 715}; 716 717#ifdef CONFIG_ACPI 718int acpi_dev_get_property(struct acpi_device *adev, const char *name, 719 acpi_object_type type, const union acpi_object **obj); 720int acpi_dev_get_property_array(struct acpi_device *adev, const char *name, 721 acpi_object_type type, 722 const union acpi_object **obj); 723int acpi_dev_get_property_reference(struct acpi_device *adev, 724 const char *name, size_t index, 725 struct acpi_reference_args *args); 726 727int acpi_dev_prop_get(struct acpi_device *adev, const char *propname, 728 void **valptr); 729int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname, 730 enum dev_prop_type proptype, void *val); 731int acpi_dev_prop_read(struct acpi_device *adev, const char *propname, 732 enum dev_prop_type proptype, void *val, size_t nval); 733 734struct acpi_device *acpi_get_next_child(struct device *dev, 735 struct acpi_device *child); 736#else 737static inline int acpi_dev_get_property(struct acpi_device *adev, 738 const char *name, acpi_object_type type, 739 const union acpi_object **obj) 740{ 741 return -ENXIO; 742} 743static inline int acpi_dev_get_property_array(struct acpi_device *adev, 744 const char *name, 745 acpi_object_type type, 746 const union acpi_object **obj) 747{ 748 return -ENXIO; 749} 750static inline int acpi_dev_get_property_reference(struct acpi_device *adev, 751 const char *name, const char *cells_name, 752 size_t index, struct acpi_reference_args *args) 753{ 754 return -ENXIO; 755} 756 757static inline int acpi_dev_prop_get(struct acpi_device *adev, 758 const char *propname, 759 void **valptr) 760{ 761 return -ENXIO; 762} 763 764static inline int acpi_dev_prop_read_single(struct acpi_device *adev, 765 const char *propname, 766 enum dev_prop_type proptype, 767 void *val) 768{ 769 return -ENXIO; 770} 771 772static inline int acpi_dev_prop_read(struct acpi_device *adev, 773 const char *propname, 774 enum dev_prop_type proptype, 775 void *val, size_t nval) 776{ 777 return -ENXIO; 778} 779 780static inline struct acpi_device *acpi_get_next_child(struct device *dev, 781 struct acpi_device *child) 782{ 783 return NULL; 784} 785 786#endif 787 788#endif /*_LINUX_ACPI_H*/