| 1 |
|
| 2 | |
| 3 | * acpi/internal.h
|
| 4 | * For use by Linux/ACPI infrastructure, not drivers
|
| 5 | *
|
| 6 | * Copyright (c) 2009, Intel Corporation.
|
| 7 |
|
| 8 |
|
| 9 | #ifndef _ACPI_INTERNAL_H_
|
| 10 | #define _ACPI_INTERNAL_H_
|
| 11 |
|
| 12 | #include <linux/idr.h>
|
| 13 |
|
| 14 | extern struct acpi_device *acpi_root;
|
| 15 |
|
| 16 | int early_acpi_osi_init(void);
|
| 17 | int acpi_osi_init(void);
|
| 18 | acpi_status acpi_os_initialize1(void);
|
| 19 | void acpi_scan_init(void);
|
| 20 | #ifdef CONFIG_PCI
|
| 21 | void acpi_pci_root_init(void);
|
| 22 | void acpi_pci_link_init(void);
|
| 23 | #else
|
| 24 | static inline void acpi_pci_root_init(void) {}
|
| 25 | static inline void acpi_pci_link_init(void) {}
|
| 26 | #endif
|
| 27 | void acpi_processor_init(void);
|
| 28 | void acpi_platform_init(void);
|
| 29 | void acpi_pnp_init(void);
|
| 30 | int acpi_sysfs_init(void);
|
| 31 | void acpi_gpe_apply_masked_gpes(void);
|
| 32 | void acpi_container_init(void);
|
| 33 | void acpi_memory_hotplug_init(void);
|
| 34 | #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
|
| 35 | void pci_ioapic_remove(struct acpi_pci_root *root);
|
| 36 | int acpi_ioapic_remove(struct acpi_pci_root *root);
|
| 37 | #else
|
| 38 | static inline void pci_ioapic_remove(struct acpi_pci_root *root) { return; }
|
| 39 | static inline int acpi_ioapic_remove(struct acpi_pci_root *root) { return 0; }
|
| 40 | #endif
|
| 41 | #ifdef CONFIG_ACPI_DOCK
|
| 42 | void register_dock_dependent_device(struct acpi_device *adev,
|
| 43 | acpi_handle dshandle);
|
| 44 | int dock_notify(struct acpi_device *adev, u32 event);
|
| 45 | void acpi_dock_add(struct acpi_device *adev);
|
| 46 | #else
|
| 47 | static inline void register_dock_dependent_device(struct acpi_device *adev,
|
| 48 | acpi_handle dshandle) {}
|
| 49 | static inline int dock_notify(struct acpi_device *adev, u32 event) { return -ENODEV; }
|
| 50 | static inline void acpi_dock_add(struct acpi_device *adev) {}
|
| 51 | #endif
|
| 52 | #ifdef CONFIG_X86
|
| 53 | void acpi_cmos_rtc_init(void);
|
| 54 | #else
|
| 55 | static inline void acpi_cmos_rtc_init(void) {}
|
| 56 | #endif
|
| 57 | int acpi_rev_override_setup(char *str);
|
| 58 |
|
| 59 | void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug,
|
| 60 | const char *name);
|
| 61 | int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler,
|
| 62 | const char *hotplug_profile_name);
|
| 63 | void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val);
|
| 64 |
|
| 65 | #ifdef CONFIG_DEBUG_FS
|
| 66 | extern struct dentry *acpi_debugfs_dir;
|
| 67 | void acpi_debugfs_init(void);
|
| 68 | #else
|
| 69 | static inline void acpi_debugfs_init(void) { return; }
|
| 70 | #endif
|
| 71 |
|
| 72 | #if defined(CONFIG_X86) && defined(CONFIG_PCI)
|
| 73 | void acpi_lpss_init(void);
|
| 74 | #else
|
| 75 | static inline void acpi_lpss_init(void) {}
|
| 76 | #endif
|
| 77 |
|
| 78 | void acpi_apd_init(void);
|
| 79 |
|
| 80 | acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src);
|
| 81 | bool acpi_queue_hotplug_work(struct work_struct *work);
|
| 82 | void acpi_device_hotplug(struct acpi_device *adev, u32 src);
|
| 83 | bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent);
|
| 84 |
|
| 85 | acpi_status acpi_sysfs_table_handler(u32 event, void *table, void *context);
|
| 86 | void acpi_scan_table_notify(void);
|
| 87 |
|
| 88 | int acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp);
|
| 89 | int acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp);
|
| 90 | int acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp);
|
| 91 | int acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp);
|
| 92 |
|
| 93 | #ifdef CONFIG_ARM64
|
| 94 | int acpi_arch_thermal_cpufreq_pctg(void);
|
| 95 | #else
|
| 96 | static inline int acpi_arch_thermal_cpufreq_pctg(void)
|
| 97 | {
|
| 98 | return 0;
|
| 99 | }
|
| 100 | #endif
|
| 101 |
|
| 102 | |
| 103 | Device Node Initialization / Removal
|
| 104 | --------------------------------------------------------------------------
|
| 105 | #define ACPI_STA_DEFAULT (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED | \
|
| 106 | ACPI_STA_DEVICE_UI | ACPI_STA_DEVICE_FUNCTIONING)
|
| 107 |
|
| 108 | extern struct list_head acpi_bus_id_list;
|
| 109 |
|
| 110 | struct acpi_device_bus_id {
|
| 111 | const char *bus_id;
|
| 112 | struct ida instance_ida;
|
| 113 | struct list_head node;
|
| 114 | };
|
| 115 |
|
| 116 | void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
|
| 117 | int type, void (*release)(struct device *));
|
| 118 | int acpi_tie_acpi_dev(struct acpi_device *adev);
|
| 119 | int acpi_device_add(struct acpi_device *device);
|
| 120 | void acpi_device_setup_files(struct acpi_device *dev);
|
| 121 | void acpi_device_remove_files(struct acpi_device *dev);
|
| 122 | extern const struct attribute_group *acpi_groups[];
|
| 123 | void acpi_device_add_finalize(struct acpi_device *device);
|
| 124 | void acpi_free_pnp_ids(struct acpi_device_pnp *pnp);
|
| 125 | bool acpi_device_is_enabled(const struct acpi_device *adev);
|
| 126 | bool acpi_device_is_present(const struct acpi_device *adev);
|
| 127 | bool acpi_device_is_battery(struct acpi_device *adev);
|
| 128 | bool acpi_device_is_first_physical_node(struct acpi_device *adev,
|
| 129 | const struct device *dev);
|
| 130 | int acpi_bus_register_early_device(int type);
|
| 131 |
|
| 132 | |
| 133 | Device Matching and Notification
|
| 134 | --------------------------------------------------------------------------
|
| 135 | const struct acpi_device *acpi_companion_match(const struct device *dev);
|
| 136 | int __acpi_device_uevent_modalias(const struct acpi_device *adev,
|
| 137 | struct kobj_uevent_env *env);
|
| 138 |
|
| 139 | |
| 140 | Power Resource
|
| 141 | --------------------------------------------------------------------------
|
| 142 | void acpi_power_resources_init(void);
|
| 143 | void acpi_power_resources_list_free(struct list_head *list);
|
| 144 | int acpi_extract_power_resources(union acpi_object *package, unsigned int start,
|
| 145 | struct list_head *list);
|
| 146 | struct acpi_device *acpi_add_power_resource(acpi_handle handle);
|
| 147 | void acpi_power_add_remove_device(struct acpi_device *adev, bool add);
|
| 148 | int acpi_power_wakeup_list_init(struct list_head *list, int *system_level);
|
| 149 | int acpi_device_sleep_wake(struct acpi_device *dev,
|
| 150 | int enable, int sleep_state, int dev_state);
|
| 151 | int acpi_power_get_inferred_state(struct acpi_device *device, int *state);
|
| 152 | int acpi_power_on_resources(struct acpi_device *device, int state);
|
| 153 | int acpi_power_transition(struct acpi_device *device, int state);
|
| 154 | void acpi_turn_off_unused_power_resources(void);
|
| 155 |
|
| 156 | |
| 157 | Device Power Management
|
| 158 | --------------------------------------------------------------------------
|
| 159 | int acpi_device_get_power(struct acpi_device *device, int *state);
|
| 160 | int acpi_wakeup_device_init(void);
|
| 161 |
|
| 162 | |
| 163 | Processor
|
| 164 | --------------------------------------------------------------------------
|
| 165 | #ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC
|
| 166 | void acpi_early_processor_control_setup(void);
|
| 167 | void acpi_early_processor_set_pdc(void);
|
| 168 | #ifdef CONFIG_X86
|
| 169 | void acpi_proc_quirk_mwait_check(void);
|
| 170 | #else
|
| 171 | static inline void acpi_proc_quirk_mwait_check(void) {}
|
| 172 | #endif
|
| 173 | bool processor_physically_present(acpi_handle handle);
|
| 174 | #else
|
| 175 | static inline void acpi_early_processor_control_setup(void) {}
|
| 176 | #endif
|
| 177 |
|
| 178 | #ifdef CONFIG_ACPI_PROCESSOR_CSTATE
|
| 179 | void acpi_idle_rescan_dead_smt_siblings(void);
|
| 180 | #else
|
| 181 | static inline void acpi_idle_rescan_dead_smt_siblings(void) {}
|
| 182 | #endif
|
| 183 |
|
| 184 | |
| 185 | Embedded Controller
|
| 186 | --------------------------------------------------------------------------
|
| 187 |
|
| 188 | enum acpi_ec_event_state {
|
| 189 | EC_EVENT_READY = 0,
|
| 190 | EC_EVENT_IN_PROGRESS,
|
| 191 | EC_EVENT_COMPLETE,
|
| 192 | };
|
| 193 |
|
| 194 | struct acpi_ec {
|
| 195 | acpi_handle handle;
|
| 196 | int gpe;
|
| 197 | int irq;
|
| 198 | unsigned long command_addr;
|
| 199 | unsigned long data_addr;
|
| 200 | bool global_lock;
|
| 201 | unsigned long flags;
|
| 202 | unsigned long reference_count;
|
| 203 | struct mutex mutex;
|
| 204 | wait_queue_head_t wait;
|
| 205 | struct list_head list;
|
| 206 | struct transaction *curr;
|
| 207 | spinlock_t lock;
|
| 208 | struct work_struct work;
|
| 209 | unsigned long timestamp;
|
| 210 | enum acpi_ec_event_state event_state;
|
| 211 | unsigned int events_to_process;
|
| 212 | unsigned int events_in_progress;
|
| 213 | unsigned int queries_in_progress;
|
| 214 | bool busy_polling;
|
| 215 | unsigned int polling_guard;
|
| 216 | };
|
| 217 |
|
| 218 | extern struct acpi_ec *first_ec;
|
| 219 |
|
| 220 |
|
| 221 |
|
| 222 | typedef int (*acpi_ec_query_func) (void *data);
|
| 223 |
|
| 224 | #ifdef CONFIG_ACPI_EC
|
| 225 |
|
| 226 | void acpi_ec_init(void);
|
| 227 | void acpi_ec_ecdt_probe(void);
|
| 228 | void acpi_ec_dsdt_probe(void);
|
| 229 | void acpi_ec_block_transactions(void);
|
| 230 | void acpi_ec_unblock_transactions(void);
|
| 231 | int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
|
| 232 | acpi_handle handle, acpi_ec_query_func func,
|
| 233 | void *data);
|
| 234 | void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit);
|
| 235 | void acpi_ec_register_opregions(struct acpi_device *adev);
|
| 236 |
|
| 237 | #ifdef CONFIG_PM_SLEEP
|
| 238 | void acpi_ec_flush_work(void);
|
| 239 | bool acpi_ec_dispatch_gpe(void);
|
| 240 | #endif
|
| 241 |
|
| 242 | #else
|
| 243 |
|
| 244 | static inline void acpi_ec_init(void) {}
|
| 245 | static inline void acpi_ec_ecdt_probe(void) {}
|
| 246 | static inline void acpi_ec_dsdt_probe(void) {}
|
| 247 | static inline void acpi_ec_block_transactions(void) {}
|
| 248 | static inline void acpi_ec_unblock_transactions(void) {}
|
| 249 | static inline int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
|
| 250 | acpi_handle handle, acpi_ec_query_func func,
|
| 251 | void *data)
|
| 252 | {
|
| 253 | return -ENXIO;
|
| 254 | }
|
| 255 | static inline void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) {}
|
| 256 | static inline void acpi_ec_register_opregions(struct acpi_device *adev) {}
|
| 257 |
|
| 258 | static inline void acpi_ec_flush_work(void) {}
|
| 259 | static inline bool acpi_ec_dispatch_gpe(void)
|
| 260 | {
|
| 261 | return false;
|
| 262 | }
|
| 263 |
|
| 264 | #endif
|
| 265 |
|
| 266 | |
| 267 | Suspend/Resume
|
| 268 | --------------------------------------------------------------------------
|
| 269 | #ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT
|
| 270 | extern bool acpi_s2idle_wakeup(void);
|
| 271 | extern int acpi_sleep_init(void);
|
| 272 | #else
|
| 273 | static inline bool acpi_s2idle_wakeup(void) { return false; }
|
| 274 | static inline int acpi_sleep_init(void) { return -ENXIO; }
|
| 275 | #endif
|
| 276 |
|
| 277 | #ifdef CONFIG_ACPI_SLEEP
|
| 278 | void acpi_sleep_proc_init(void);
|
| 279 | int suspend_nvs_alloc(void);
|
| 280 | void suspend_nvs_free(void);
|
| 281 | int suspend_nvs_save(void);
|
| 282 | void suspend_nvs_restore(void);
|
| 283 | #else
|
| 284 | static inline void acpi_sleep_proc_init(void) {}
|
| 285 | static inline int suspend_nvs_alloc(void) { return 0; }
|
| 286 | static inline void suspend_nvs_free(void) {}
|
| 287 | static inline int suspend_nvs_save(void) { return 0; }
|
| 288 | static inline void suspend_nvs_restore(void) {}
|
| 289 | #endif
|
| 290 |
|
| 291 | #ifdef CONFIG_X86
|
| 292 | bool force_storage_d3(void);
|
| 293 | #else
|
| 294 | static inline bool force_storage_d3(void)
|
| 295 | {
|
| 296 | return false;
|
| 297 | }
|
| 298 | #endif
|
| 299 |
|
| 300 | |
| 301 | Device properties
|
| 302 | --------------------------------------------------------------------------
|
| 303 | #define ACPI_DT_NAMESPACE_HID "PRP0001"
|
| 304 |
|
| 305 | void acpi_init_properties(struct acpi_device *adev);
|
| 306 | void acpi_free_properties(struct acpi_device *adev);
|
| 307 |
|
| 308 | #ifdef CONFIG_X86
|
| 309 | void acpi_extract_apple_properties(struct acpi_device *adev);
|
| 310 | #else
|
| 311 | static inline void acpi_extract_apple_properties(struct acpi_device *adev) {}
|
| 312 | #endif
|
| 313 |
|
| 314 | |
| 315 | Watchdog
|
| 316 | --------------------------------------------------------------------------
|
| 317 |
|
| 318 | #ifdef CONFIG_ACPI_WATCHDOG
|
| 319 | void acpi_watchdog_init(void);
|
| 320 | #else
|
| 321 | static inline void acpi_watchdog_init(void) {}
|
| 322 | #endif
|
| 323 |
|
| 324 | #ifdef CONFIG_ACPI_LPIT
|
| 325 | void acpi_init_lpit(void);
|
| 326 | #else
|
| 327 | static inline void acpi_init_lpit(void) { }
|
| 328 | #endif
|
| 329 |
|
| 330 | |
| 331 | ACPI _CRS CSI-2 and MIPI DisCo for Imaging
|
| 332 | --------------------------------------------------------------------------
|
| 333 |
|
| 334 | void acpi_mipi_check_crs_csi2(acpi_handle handle);
|
| 335 | void acpi_mipi_scan_crs_csi2(void);
|
| 336 | void acpi_mipi_init_crs_csi2_swnodes(void);
|
| 337 | void acpi_mipi_crs_csi2_cleanup(void);
|
| 338 | #ifdef CONFIG_X86
|
| 339 | bool acpi_graph_ignore_port(acpi_handle handle);
|
| 340 | #else
|
| 341 | static inline bool acpi_graph_ignore_port(acpi_handle handle) { return false; }
|
| 342 | #endif
|
| 343 |
|
| 344 | #endif
|