LCOV - code coverage report
Current view: top level - include/linux - acpi.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 17 27 63.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

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

Generated by: LCOV version 1.14