brintos

brintos / linux-shallow public Read only

0
0
Text · 10.7 KiB · ced7dff Raw
314 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * acpi/internal.h4 * For use by Linux/ACPI infrastructure, not drivers5 *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 14extern struct acpi_device *acpi_root;15 16int early_acpi_osi_init(void);17int acpi_osi_init(void);18acpi_status acpi_os_initialize1(void);19void acpi_scan_init(void);20#ifdef CONFIG_PCI21void acpi_pci_root_init(void);22void acpi_pci_link_init(void);23#else24static inline void acpi_pci_root_init(void) {}25static inline void acpi_pci_link_init(void) {}26#endif27void acpi_processor_init(void);28void acpi_platform_init(void);29void acpi_pnp_init(void);30void acpi_int340x_thermal_init(void);31int acpi_sysfs_init(void);32void acpi_gpe_apply_masked_gpes(void);33void acpi_container_init(void);34void acpi_memory_hotplug_init(void);35#ifdef	CONFIG_ACPI_HOTPLUG_IOAPIC36void pci_ioapic_remove(struct acpi_pci_root *root);37int acpi_ioapic_remove(struct acpi_pci_root *root);38#else39static inline void pci_ioapic_remove(struct acpi_pci_root *root) { return; }40static inline int acpi_ioapic_remove(struct acpi_pci_root *root) { return 0; }41#endif42#ifdef CONFIG_ACPI_DOCK43void register_dock_dependent_device(struct acpi_device *adev,44				    acpi_handle dshandle);45int dock_notify(struct acpi_device *adev, u32 event);46void acpi_dock_add(struct acpi_device *adev);47#else48static inline void register_dock_dependent_device(struct acpi_device *adev,49						  acpi_handle dshandle) {}50static inline int dock_notify(struct acpi_device *adev, u32 event) { return -ENODEV; }51static inline void acpi_dock_add(struct acpi_device *adev) {}52#endif53#ifdef CONFIG_X8654void acpi_cmos_rtc_init(void);55#else56static inline void acpi_cmos_rtc_init(void) {}57#endif58int acpi_rev_override_setup(char *str);59 60void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug,61				    const char *name);62int acpi_scan_add_handler_with_hotplug(struct acpi_scan_handler *handler,63				       const char *hotplug_profile_name);64void acpi_scan_hotplug_enabled(struct acpi_hotplug_profile *hotplug, bool val);65 66#ifdef CONFIG_DEBUG_FS67extern struct dentry *acpi_debugfs_dir;68void acpi_debugfs_init(void);69#else70static inline void acpi_debugfs_init(void) { return; }71#endif72 73#if defined(CONFIG_X86) && defined(CONFIG_PCI)74void acpi_lpss_init(void);75#else76static inline void acpi_lpss_init(void) {}77#endif78 79void acpi_apd_init(void);80 81acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src);82bool acpi_queue_hotplug_work(struct work_struct *work);83void acpi_device_hotplug(struct acpi_device *adev, u32 src);84bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent);85 86acpi_status acpi_sysfs_table_handler(u32 event, void *table, void *context);87void acpi_scan_table_notify(void);88 89int acpi_active_trip_temp(struct acpi_device *adev, int id, int *ret_temp);90int acpi_passive_trip_temp(struct acpi_device *adev, int *ret_temp);91int acpi_hot_trip_temp(struct acpi_device *adev, int *ret_temp);92int acpi_critical_trip_temp(struct acpi_device *adev, int *ret_temp);93 94#ifdef CONFIG_ARM6495int acpi_arch_thermal_cpufreq_pctg(void);96#else97static inline int acpi_arch_thermal_cpufreq_pctg(void)98{99	return 0;100}101#endif102 103/* --------------------------------------------------------------------------104                     Device Node Initialization / Removal105   -------------------------------------------------------------------------- */106#define ACPI_STA_DEFAULT (ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED | \107			  ACPI_STA_DEVICE_UI | ACPI_STA_DEVICE_FUNCTIONING)108 109extern struct list_head acpi_bus_id_list;110 111struct acpi_device_bus_id {112	const char *bus_id;113	struct ida instance_ida;114	struct list_head node;115};116 117void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,118			     int type, void (*release)(struct device *));119int acpi_tie_acpi_dev(struct acpi_device *adev);120int acpi_device_add(struct acpi_device *device);121void acpi_device_setup_files(struct acpi_device *dev);122void acpi_device_remove_files(struct acpi_device *dev);123extern const struct attribute_group *acpi_groups[];124void acpi_device_add_finalize(struct acpi_device *device);125void acpi_free_pnp_ids(struct acpi_device_pnp *pnp);126bool acpi_device_is_enabled(const struct acpi_device *adev);127bool acpi_device_is_present(const struct acpi_device *adev);128bool acpi_device_is_battery(struct acpi_device *adev);129bool acpi_device_is_first_physical_node(struct acpi_device *adev,130					const struct device *dev);131int acpi_bus_register_early_device(int type);132 133/* --------------------------------------------------------------------------134                     Device Matching and Notification135   -------------------------------------------------------------------------- */136const struct acpi_device *acpi_companion_match(const struct device *dev);137int __acpi_device_uevent_modalias(const struct acpi_device *adev,138				  struct kobj_uevent_env *env);139 140/* --------------------------------------------------------------------------141                                  Power Resource142   -------------------------------------------------------------------------- */143void acpi_power_resources_list_free(struct list_head *list);144int acpi_extract_power_resources(union acpi_object *package, unsigned int start,145				 struct list_head *list);146struct acpi_device *acpi_add_power_resource(acpi_handle handle);147void acpi_power_add_remove_device(struct acpi_device *adev, bool add);148int acpi_power_wakeup_list_init(struct list_head *list, int *system_level);149int acpi_device_sleep_wake(struct acpi_device *dev,150			   int enable, int sleep_state, int dev_state);151int acpi_power_get_inferred_state(struct acpi_device *device, int *state);152int acpi_power_on_resources(struct acpi_device *device, int state);153int acpi_power_transition(struct acpi_device *device, int state);154void acpi_turn_off_unused_power_resources(void);155 156/* --------------------------------------------------------------------------157                              Device Power Management158   -------------------------------------------------------------------------- */159int acpi_device_get_power(struct acpi_device *device, int *state);160int acpi_wakeup_device_init(void);161 162/* --------------------------------------------------------------------------163                                  Processor164   -------------------------------------------------------------------------- */165#ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC166void acpi_early_processor_control_setup(void);167void acpi_early_processor_set_pdc(void);168#ifdef CONFIG_X86169void acpi_proc_quirk_mwait_check(void);170#else171static inline void acpi_proc_quirk_mwait_check(void) {}172#endif173bool processor_physically_present(acpi_handle handle);174#else175static inline void acpi_early_processor_control_setup(void) {}176#endif177 178/* --------------------------------------------------------------------------179                                  Embedded Controller180   -------------------------------------------------------------------------- */181 182enum acpi_ec_event_state {183	EC_EVENT_READY = 0,	/* Event work can be submitted */184	EC_EVENT_IN_PROGRESS,	/* Event work is pending or being processed */185	EC_EVENT_COMPLETE,	/* Event work processing has completed */186};187 188struct acpi_ec {189	acpi_handle handle;190	int gpe;191	int irq;192	unsigned long command_addr;193	unsigned long data_addr;194	bool global_lock;195	unsigned long flags;196	unsigned long reference_count;197	struct mutex mutex;198	wait_queue_head_t wait;199	struct list_head list;200	struct transaction *curr;201	spinlock_t lock;202	struct work_struct work;203	unsigned long timestamp;204	enum acpi_ec_event_state event_state;205	unsigned int events_to_process;206	unsigned int events_in_progress;207	unsigned int queries_in_progress;208	bool busy_polling;209	unsigned int polling_guard;210};211 212extern struct acpi_ec *first_ec;213 214/* If we find an EC via the ECDT, we need to keep a ptr to its context */215/* External interfaces use first EC only, so remember */216typedef int (*acpi_ec_query_func) (void *data);217 218void acpi_ec_init(void);219void acpi_ec_ecdt_probe(void);220void acpi_ec_dsdt_probe(void);221void acpi_ec_block_transactions(void);222void acpi_ec_unblock_transactions(void);223int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,224			      acpi_handle handle, acpi_ec_query_func func,225			      void *data);226void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit);227void acpi_ec_register_opregions(struct acpi_device *adev);228 229#ifdef CONFIG_PM_SLEEP230void acpi_ec_flush_work(void);231bool acpi_ec_dispatch_gpe(void);232#endif233 234 235/*--------------------------------------------------------------------------236                                  Suspend/Resume237  -------------------------------------------------------------------------- */238#ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT239extern bool acpi_s2idle_wakeup(void);240extern int acpi_sleep_init(void);241#else242static inline bool acpi_s2idle_wakeup(void) { return false; }243static inline int acpi_sleep_init(void) { return -ENXIO; }244#endif245 246#ifdef CONFIG_ACPI_SLEEP247void acpi_sleep_proc_init(void);248int suspend_nvs_alloc(void);249void suspend_nvs_free(void);250int suspend_nvs_save(void);251void suspend_nvs_restore(void);252#else253static inline void acpi_sleep_proc_init(void) {}254static inline int suspend_nvs_alloc(void) { return 0; }255static inline void suspend_nvs_free(void) {}256static inline int suspend_nvs_save(void) { return 0; }257static inline void suspend_nvs_restore(void) {}258#endif259 260#ifdef CONFIG_X86261bool force_storage_d3(void);262#else263static inline bool force_storage_d3(void)264{265	return false;266}267#endif268 269/*--------------------------------------------------------------------------270				Device properties271  -------------------------------------------------------------------------- */272#define ACPI_DT_NAMESPACE_HID	"PRP0001"273 274void acpi_init_properties(struct acpi_device *adev);275void acpi_free_properties(struct acpi_device *adev);276 277#ifdef CONFIG_X86278void acpi_extract_apple_properties(struct acpi_device *adev);279#else280static inline void acpi_extract_apple_properties(struct acpi_device *adev) {}281#endif282 283/*--------------------------------------------------------------------------284				Watchdog285  -------------------------------------------------------------------------- */286 287#ifdef CONFIG_ACPI_WATCHDOG288void acpi_watchdog_init(void);289#else290static inline void acpi_watchdog_init(void) {}291#endif292 293#ifdef CONFIG_ACPI_LPIT294void acpi_init_lpit(void);295#else296static inline void acpi_init_lpit(void) { }297#endif298 299/*--------------------------------------------------------------------------300		ACPI _CRS CSI-2 and MIPI DisCo for Imaging301  -------------------------------------------------------------------------- */302 303void acpi_mipi_check_crs_csi2(acpi_handle handle);304void acpi_mipi_scan_crs_csi2(void);305void acpi_mipi_init_crs_csi2_swnodes(void);306void acpi_mipi_crs_csi2_cleanup(void);307#ifdef CONFIG_X86308bool acpi_graph_ignore_port(acpi_handle handle);309#else310static inline bool acpi_graph_ignore_port(acpi_handle handle) { return false; }311#endif312 313#endif /* _ACPI_INTERNAL_H_ */314