| Len Brown | a192a95 | 2009-07-28 16:45:54 -0400 | [diff] [blame] | 1 | /* | 
 | 2 |  * acpi/internal.h | 
 | 3 |  * For use by Linux/ACPI infrastructure, not drivers | 
 | 4 |  * | 
 | 5 |  * Copyright (c) 2009, Intel Corporation. | 
 | 6 |  * | 
 | 7 |  * This program is free software; you can redistribute it and/or modify it | 
 | 8 |  * under the terms and conditions of the GNU General Public License, | 
 | 9 |  * version 2, as published by the Free Software Foundation. | 
 | 10 |  * | 
 | 11 |  * This program is distributed in the hope it will be useful, but WITHOUT | 
 | 12 |  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 
 | 13 |  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for | 
 | 14 |  * more details. | 
 | 15 |  * | 
| Len Brown | a192a95 | 2009-07-28 16:45:54 -0400 | [diff] [blame] | 16 |  */ | 
 | 17 |  | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 18 | #ifndef _ACPI_INTERNAL_H_ | 
 | 19 | #define _ACPI_INTERNAL_H_ | 
 | 20 |  | 
| Len Brown | a192a95 | 2009-07-28 16:45:54 -0400 | [diff] [blame] | 21 | #define PREFIX "ACPI: " | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 22 |  | 
| Lv Zheng | 1129c92 | 2013-07-23 16:11:55 +0800 | [diff] [blame] | 23 | acpi_status acpi_os_initialize1(void); | 
| Bjorn Helgaas | 0e46517 | 2009-03-24 16:50:09 -0600 | [diff] [blame] | 24 | int init_acpi_device_notify(void); | 
| Bjorn Helgaas | e747f27 | 2009-03-24 16:49:43 -0600 | [diff] [blame] | 25 | int acpi_scan_init(void); | 
| Rafael J. Wysocki | 00c43b9 | 2013-01-30 14:27:33 +0100 | [diff] [blame] | 26 | void acpi_pci_root_init(void); | 
| Rafael J. Wysocki | 4daeaf6 | 2013-01-30 14:27:37 +0100 | [diff] [blame] | 27 | void acpi_pci_link_init(void); | 
| Rafael J. Wysocki | ac212b6 | 2013-05-03 00:26:22 +0200 | [diff] [blame] | 28 | void acpi_processor_init(void); | 
| Rafael J. Wysocki | 141a297 | 2013-01-30 14:27:40 +0100 | [diff] [blame] | 29 | void acpi_platform_init(void); | 
| Zhang Rui | eec15ed | 2014-05-30 04:23:01 +0200 | [diff] [blame] | 30 | void acpi_pnp_init(void); | 
| Zhang Rui | 3230bbf | 2014-03-14 00:34:05 +0800 | [diff] [blame] | 31 | void acpi_int340x_thermal_init(void); | 
| Zhang Rui | 1c8fce2 | 2010-07-15 10:46:30 +0800 | [diff] [blame] | 32 | int acpi_sysfs_init(void); | 
| Rafael J. Wysocki | 737f1a9 | 2013-02-08 23:52:39 +0100 | [diff] [blame] | 33 | void acpi_container_init(void); | 
| Rafael J. Wysocki | cccd420 | 2014-05-30 04:29:14 +0200 | [diff] [blame] | 34 | void acpi_memory_hotplug_init(void); | 
| Jiang Liu | c183619 | 2015-02-05 13:44:49 +0800 | [diff] [blame] | 35 | #ifdef	CONFIG_ACPI_HOTPLUG_IOAPIC | 
 | 36 | int acpi_ioapic_add(struct acpi_pci_root *root); | 
 | 37 | int acpi_ioapic_remove(struct acpi_pci_root *root); | 
 | 38 | #else | 
 | 39 | static inline int acpi_ioapic_add(struct acpi_pci_root *root) { return 0; } | 
 | 40 | static inline int acpi_ioapic_remove(struct acpi_pci_root *root) { return 0; } | 
 | 41 | #endif | 
| Jiang Liu | 94add0f | 2013-06-23 00:59:55 +0200 | [diff] [blame] | 42 | #ifdef CONFIG_ACPI_DOCK | 
| Rafael J. Wysocki | 1e2380c | 2014-02-16 01:51:01 +0100 | [diff] [blame] | 43 | void register_dock_dependent_device(struct acpi_device *adev, | 
 | 44 | 				    acpi_handle dshandle); | 
 | 45 | int dock_notify(struct acpi_device *adev, u32 event); | 
 | 46 | void acpi_dock_add(struct acpi_device *adev); | 
| Jiang Liu | 94add0f | 2013-06-23 00:59:55 +0200 | [diff] [blame] | 47 | #else | 
| Rafael J. Wysocki | 1e2380c | 2014-02-16 01:51:01 +0100 | [diff] [blame] | 48 | static inline void register_dock_dependent_device(struct acpi_device *adev, | 
 | 49 | 						  acpi_handle dshandle) {} | 
 | 50 | static inline int dock_notify(struct acpi_device *adev, u32 event) { return -ENODEV; } | 
 | 51 | static inline void acpi_dock_add(struct acpi_device *adev) {} | 
| Jiang Liu | 94add0f | 2013-06-23 00:59:55 +0200 | [diff] [blame] | 52 | #endif | 
| Lan Tianyu | 2fa97fe | 2013-06-05 02:27:50 +0000 | [diff] [blame] | 53 | #ifdef CONFIG_X86 | 
 | 54 | void acpi_cmos_rtc_init(void); | 
 | 55 | #else | 
 | 56 | static inline void acpi_cmos_rtc_init(void) {} | 
 | 57 | #endif | 
| Rafael J. Wysocki | 18d78b6 | 2015-07-03 01:06:00 +0200 | [diff] [blame] | 58 | int acpi_rev_override_setup(char *str); | 
| Bjorn Helgaas | e747f27 | 2009-03-24 16:49:43 -0600 | [diff] [blame] | 59 |  | 
| Rafael J. Wysocki | 683058e | 2013-05-03 00:26:16 +0200 | [diff] [blame] | 60 | extern bool acpi_force_hot_remove; | 
 | 61 |  | 
| Rafael J. Wysocki | 3f8055c | 2013-03-03 23:08:16 +0100 | [diff] [blame] | 62 | void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug, | 
 | 63 | 				    const char *name); | 
 | 64 | int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler, | 
 | 65 | 				       const char *hotplug_profile_name); | 
 | 66 | void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val); | 
 | 67 |  | 
| Zhang Rui | a25ee92 | 2010-07-15 10:46:15 +0800 | [diff] [blame] | 68 | #ifdef CONFIG_DEBUG_FS | 
| Thomas Renninger | aecad43 | 2011-05-26 12:26:23 +0200 | [diff] [blame] | 69 | extern struct dentry *acpi_debugfs_dir; | 
| Nicolas Iooss | 1074261 | 2015-08-01 21:32:17 +0800 | [diff] [blame] | 70 | void acpi_debugfs_init(void); | 
| Zhang Rui | a25ee92 | 2010-07-15 10:46:15 +0800 | [diff] [blame] | 71 | #else | 
| Thomas Renninger | aecad43 | 2011-05-26 12:26:23 +0200 | [diff] [blame] | 72 | static inline void acpi_debugfs_init(void) { return; } | 
| Zhang Rui | a25ee92 | 2010-07-15 10:46:15 +0800 | [diff] [blame] | 73 | #endif | 
| Rafael J. Wysocki | f58b082 | 2013-03-06 23:46:20 +0100 | [diff] [blame] | 74 | void acpi_lpss_init(void); | 
| Zhang Rui | a25ee92 | 2010-07-15 10:46:15 +0800 | [diff] [blame] | 75 |  | 
| Ken Xue | 92082a8 | 2015-02-06 08:27:51 +0800 | [diff] [blame] | 76 | void acpi_apd_init(void); | 
 | 77 |  | 
| Rafael J. Wysocki | 1e3bcb5 | 2014-03-03 00:40:38 +0100 | [diff] [blame] | 78 | acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src); | 
| Rafael J. Wysocki | d783156 | 2013-11-22 21:52:12 +0100 | [diff] [blame] | 79 | bool acpi_queue_hotplug_work(struct work_struct *work); | 
| Rafael J. Wysocki | 1e3bcb5 | 2014-03-03 00:40:38 +0100 | [diff] [blame] | 80 | void acpi_device_hotplug(struct acpi_device *adev, u32 src); | 
| Rafael J. Wysocki | caa73ea | 2013-12-29 15:25:48 +0100 | [diff] [blame] | 81 | bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent); | 
| Rafael J. Wysocki | d783156 | 2013-11-22 21:52:12 +0100 | [diff] [blame] | 82 |  | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 83 | /* -------------------------------------------------------------------------- | 
| Rafael J. Wysocki | 82c7d5e | 2013-01-17 14:11:05 +0100 | [diff] [blame] | 84 |                      Device Node Initialization / Removal | 
 | 85 |    -------------------------------------------------------------------------- */ | 
 | 86 | #define ACPI_STA_DEFAULT (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED | \ | 
 | 87 | 			  ACPI_STA_DEVICE_UI | ACPI_STA_DEVICE_FUNCTIONING) | 
 | 88 |  | 
| Rafael J. Wysocki | cf860be | 2013-01-24 12:49:49 +0100 | [diff] [blame] | 89 | int acpi_device_add(struct acpi_device *device, | 
 | 90 | 		    void (*release)(struct device *)); | 
| Rafael J. Wysocki | 82c7d5e | 2013-01-17 14:11:05 +0100 | [diff] [blame] | 91 | void acpi_init_device_object(struct acpi_device *device, acpi_handle handle, | 
 | 92 | 			     int type, unsigned long long sta); | 
| Rafael J. Wysocki | c2efefb | 2015-07-17 22:53:43 +0200 | [diff] [blame] | 93 | int acpi_device_setup_files(struct acpi_device *dev); | 
 | 94 | void acpi_device_remove_files(struct acpi_device *dev); | 
| Rafael J. Wysocki | cf860be | 2013-01-24 12:49:49 +0100 | [diff] [blame] | 95 | void acpi_device_add_finalize(struct acpi_device *device); | 
| Toshi Kani | c0af417 | 2013-03-04 21:30:42 +0000 | [diff] [blame] | 96 | void acpi_free_pnp_ids(struct acpi_device_pnp *pnp); | 
| Rafael J. Wysocki | 202317a | 2013-11-22 21:54:37 +0100 | [diff] [blame] | 97 | bool acpi_device_is_present(struct acpi_device *adev); | 
| Rafael J. Wysocki | b43109f | 2014-02-16 00:09:34 +0100 | [diff] [blame] | 98 | bool acpi_device_is_battery(struct acpi_device *adev); | 
| Mika Westerberg | 712e960 | 2015-07-27 18:03:57 +0300 | [diff] [blame] | 99 | bool acpi_device_is_first_physical_node(struct acpi_device *adev, | 
 | 100 | 					const struct device *dev); | 
| Rafael J. Wysocki | 82c7d5e | 2013-01-17 14:11:05 +0100 | [diff] [blame] | 101 |  | 
 | 102 | /* -------------------------------------------------------------------------- | 
| Rafael J. Wysocki | c2efefb | 2015-07-17 22:53:43 +0200 | [diff] [blame] | 103 |                      Device Matching and Notification | 
 | 104 |    -------------------------------------------------------------------------- */ | 
 | 105 | struct acpi_device *acpi_companion_match(const struct device *dev); | 
 | 106 | int __acpi_device_uevent_modalias(struct acpi_device *adev, | 
 | 107 | 				  struct kobj_uevent_env *env); | 
 | 108 |  | 
 | 109 | /* -------------------------------------------------------------------------- | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 110 |                                   Power Resource | 
 | 111 |    -------------------------------------------------------------------------- */ | 
| Bjorn Helgaas | 4451537 | 2009-03-24 16:49:53 -0600 | [diff] [blame] | 112 | int acpi_power_init(void); | 
| Rafael J. Wysocki | 0b22452 | 2013-01-17 14:11:06 +0100 | [diff] [blame] | 113 | void acpi_power_resources_list_free(struct list_head *list); | 
| Rafael J. Wysocki | e88c9c6 | 2013-01-17 14:11:07 +0100 | [diff] [blame] | 114 | int acpi_extract_power_resources(union acpi_object *package, unsigned int start, | 
 | 115 | 				 struct list_head *list); | 
 | 116 | int acpi_add_power_resource(acpi_handle handle); | 
| Rafael J. Wysocki | bc9b640 | 2013-01-17 14:11:05 +0100 | [diff] [blame] | 117 | void acpi_power_add_remove_device(struct acpi_device *adev, bool add); | 
| Rafael J. Wysocki | b5d667e | 2013-02-23 23:15:21 +0100 | [diff] [blame] | 118 | int acpi_power_wakeup_list_init(struct list_head *list, int *system_level); | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 119 | int acpi_device_sleep_wake(struct acpi_device *dev, | 
 | 120 |                            int enable, int sleep_state, int dev_state); | 
| Rafael J. Wysocki | 32a00d2 | 2010-11-25 00:05:17 +0100 | [diff] [blame] | 121 | int acpi_power_get_inferred_state(struct acpi_device *device, int *state); | 
| Rafael J. Wysocki | 30d3df4 | 2010-11-25 00:06:55 +0100 | [diff] [blame] | 122 | int acpi_power_on_resources(struct acpi_device *device, int state); | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 123 | int acpi_power_transition(struct acpi_device *device, int state); | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 124 |  | 
| Bjorn Helgaas | 201b8c6 | 2009-03-24 16:50:19 -0600 | [diff] [blame] | 125 | int acpi_wakeup_device_init(void); | 
| Hanjun Guo | 46ba51e | 2014-07-18 18:02:54 +0800 | [diff] [blame] | 126 |  | 
 | 127 | #ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC | 
| Alex Chiang | 78f1699 | 2009-12-20 12:19:09 -0700 | [diff] [blame] | 128 | void acpi_early_processor_set_pdc(void); | 
| Hanjun Guo | 46ba51e | 2014-07-18 18:02:54 +0800 | [diff] [blame] | 129 | #else | 
 | 130 | static inline void acpi_early_processor_set_pdc(void) {} | 
 | 131 | #endif | 
| Bjorn Helgaas | 201b8c6 | 2009-03-24 16:50:19 -0600 | [diff] [blame] | 132 |  | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 133 | /* -------------------------------------------------------------------------- | 
 | 134 |                                   Embedded Controller | 
 | 135 |    -------------------------------------------------------------------------- */ | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 136 | struct acpi_ec { | 
 | 137 | 	acpi_handle handle; | 
 | 138 | 	unsigned long gpe; | 
 | 139 | 	unsigned long command_addr; | 
 | 140 | 	unsigned long data_addr; | 
 | 141 | 	unsigned long global_lock; | 
 | 142 | 	unsigned long flags; | 
| Lv Zheng | 9887d22 | 2015-02-06 08:57:59 +0800 | [diff] [blame] | 143 | 	unsigned long reference_count; | 
| Feng Tang | f351d02 | 2012-10-23 01:29:27 +0200 | [diff] [blame] | 144 | 	struct mutex mutex; | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 145 | 	wait_queue_head_t wait; | 
 | 146 | 	struct list_head list; | 
 | 147 | 	struct transaction *curr; | 
| Feng Tang | f351d02 | 2012-10-23 01:29:27 +0200 | [diff] [blame] | 148 | 	spinlock_t lock; | 
| Lv Zheng | 74443bb | 2015-01-14 19:28:47 +0800 | [diff] [blame] | 149 | 	struct work_struct work; | 
| Lv Zheng | d8d031a | 2015-05-15 14:16:42 +0800 | [diff] [blame] | 150 | 	unsigned long timestamp; | 
| Lv Zheng | 9d8993b | 2015-06-11 13:21:32 +0800 | [diff] [blame] | 151 | 	unsigned long nr_pending_queries; | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 152 | }; | 
 | 153 |  | 
 | 154 | extern struct acpi_ec *first_ec; | 
 | 155 |  | 
| Rashika | b8a0b0d | 2013-12-17 15:02:14 +0530 | [diff] [blame] | 156 | /* If we find an EC via the ECDT, we need to keep a ptr to its context */ | 
 | 157 | /* External interfaces use first EC only, so remember */ | 
 | 158 | typedef int (*acpi_ec_query_func) (void *data); | 
 | 159 |  | 
| Bjorn Helgaas | a5f820f | 2009-03-24 16:49:48 -0600 | [diff] [blame] | 160 | int acpi_ec_init(void); | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 161 | int acpi_ec_ecdt_probe(void); | 
 | 162 | int acpi_boot_ec_enable(void); | 
| Rafael J. Wysocki | fe95568 | 2010-04-09 01:40:38 +0200 | [diff] [blame] | 163 | void acpi_ec_block_transactions(void); | 
 | 164 | void acpi_ec_unblock_transactions(void); | 
 | 165 | void acpi_ec_unblock_transactions_early(void); | 
| Rashika | b8a0b0d | 2013-12-17 15:02:14 +0530 | [diff] [blame] | 166 | int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit, | 
 | 167 | 			      acpi_handle handle, acpi_ec_query_func func, | 
 | 168 | 			      void *data); | 
 | 169 | void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit); | 
 | 170 |  | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 171 |  | 
 | 172 | /*-------------------------------------------------------------------------- | 
 | 173 |                                   Suspend/Resume | 
 | 174 |   -------------------------------------------------------------------------- */ | 
| Graeme Gregory | 6e0a0ea | 2015-03-24 14:02:39 +0000 | [diff] [blame] | 175 | #ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT | 
| Bjorn Helgaas | e60cc7a | 2009-03-13 12:08:26 -0600 | [diff] [blame] | 176 | extern int acpi_sleep_init(void); | 
| Graeme Gregory | 6e0a0ea | 2015-03-24 14:02:39 +0000 | [diff] [blame] | 177 | #else | 
 | 178 | static inline int acpi_sleep_init(void) { return -ENXIO; } | 
 | 179 | #endif | 
| Bjorn Helgaas | 9cee43e | 2009-03-24 16:50:14 -0600 | [diff] [blame] | 180 |  | 
 | 181 | #ifdef CONFIG_ACPI_SLEEP | 
 | 182 | int acpi_sleep_proc_init(void); | 
| Rafael J. Wysocki | 976513d | 2011-01-07 01:43:44 +0100 | [diff] [blame] | 183 | int suspend_nvs_alloc(void); | 
 | 184 | void suspend_nvs_free(void); | 
 | 185 | int suspend_nvs_save(void); | 
 | 186 | void suspend_nvs_restore(void); | 
| Bjorn Helgaas | 9cee43e | 2009-03-24 16:50:14 -0600 | [diff] [blame] | 187 | #else | 
 | 188 | static inline int acpi_sleep_proc_init(void) { return 0; } | 
| Rafael J. Wysocki | 976513d | 2011-01-07 01:43:44 +0100 | [diff] [blame] | 189 | static inline int suspend_nvs_alloc(void) { return 0; } | 
 | 190 | static inline void suspend_nvs_free(void) {} | 
| Rafael J. Wysocki | 6fed05c | 2011-01-12 22:03:20 +0100 | [diff] [blame] | 191 | static inline int suspend_nvs_save(void) { return 0; } | 
| Rafael J. Wysocki | 976513d | 2011-01-07 01:43:44 +0100 | [diff] [blame] | 192 | static inline void suspend_nvs_restore(void) {} | 
| Bjorn Helgaas | 9cee43e | 2009-03-24 16:50:14 -0600 | [diff] [blame] | 193 | #endif | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 194 |  | 
| Mika Westerberg | 91e5687 | 2012-10-31 22:45:02 +0100 | [diff] [blame] | 195 | /*-------------------------------------------------------------------------- | 
| Mika Westerberg | ffdcd95 | 2014-10-21 13:33:55 +0200 | [diff] [blame] | 196 | 				Device properties | 
 | 197 |   -------------------------------------------------------------------------- */ | 
| Rafael J. Wysocki | ee89209 | 2015-05-22 04:24:34 +0200 | [diff] [blame] | 198 | #define ACPI_DT_NAMESPACE_HID	"PRP0001" | 
 | 199 |  | 
| Mika Westerberg | ffdcd95 | 2014-10-21 13:33:55 +0200 | [diff] [blame] | 200 | void acpi_init_properties(struct acpi_device *adev); | 
 | 201 | void acpi_free_properties(struct acpi_device *adev); | 
 | 202 |  | 
| Thomas Renninger | 1195a09 | 2010-07-16 13:11:31 +0200 | [diff] [blame] | 203 | #endif /* _ACPI_INTERNAL_H_ */ |