???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ???????????????????????????? ??????????????/????????????????? ............/............... .........................../... ????????????????????????????? >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>> ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>/>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PKk]5pcc.hnu[/* SPDX-License-Identifier: GPL-2.0-only */ /* * PCC (Platform Communications Channel) methods */ #ifndef _PCC_H #define _PCC_H #include #include struct pcc_mbox_chan { struct mbox_chan *mchan; u64 shmem_base_addr; void __iomem *shmem; u64 shmem_size; u32 latency; u32 max_access_rate; u16 min_turnaround_time; }; /* Generic Communications Channel Shared Memory Region */ #define PCC_SIGNATURE 0x50434300 /* Generic Communications Channel Command Field */ #define PCC_CMD_GENERATE_DB_INTR BIT(15) /* Generic Communications Channel Status Field */ #define PCC_STATUS_CMD_COMPLETE BIT(0) #define PCC_STATUS_SCI_DOORBELL BIT(1) #define PCC_STATUS_ERROR BIT(2) #define PCC_STATUS_PLATFORM_NOTIFY BIT(3) /* Initiator Responder Communications Channel Flags */ #define PCC_CMD_COMPLETION_NOTIFY BIT(0) #define MAX_PCC_SUBSPACES 256 #define PCC_ACK_FLAG_MASK 0x1 #ifdef CONFIG_PCC extern struct pcc_mbox_chan * pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id); extern void pcc_mbox_free_channel(struct pcc_mbox_chan *chan); extern int pcc_mbox_ioremap(struct mbox_chan *chan); #else static inline struct pcc_mbox_chan * pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id) { return ERR_PTR(-ENODEV); } static inline void pcc_mbox_free_channel(struct pcc_mbox_chan *chan) { } static inline int pcc_mbox_ioremap(struct mbox_chan *chan) { return 0; }; #endif #endif /* _PCC_H */ PKk]6'apei.hnu[/* SPDX-License-Identifier: GPL-2.0 */ /* * apei.h - ACPI Platform Error Interface */ #ifndef ACPI_APEI_H #define ACPI_APEI_H #include #include #include #define APEI_ERST_INVALID_RECORD_ID 0xffffffffffffffffULL #define APEI_ERST_CLEAR_RECORD _IOW('E', 1, u64) #define APEI_ERST_GET_RECORD_COUNT _IOR('E', 2, u32) #ifdef __KERNEL__ enum hest_status { HEST_ENABLED, HEST_DISABLED, HEST_NOT_FOUND, }; extern int hest_disable; extern int erst_disable; #ifdef CONFIG_ACPI_APEI_GHES extern bool ghes_disable; void __init acpi_ghes_init(void); #else #define ghes_disable 1 static inline void acpi_ghes_init(void) { } #endif #ifdef CONFIG_ACPI_APEI void __init acpi_hest_init(void); #else static inline void acpi_hest_init(void) { } #endif int erst_write(const struct cper_record_header *record); ssize_t erst_get_record_count(void); int erst_get_record_id_begin(int *pos); int erst_get_record_id_next(int *pos, u64 *record_id); void erst_get_record_id_end(void); ssize_t erst_read(u64 record_id, struct cper_record_header *record, size_t buflen); ssize_t erst_read_record(u64 record_id, struct cper_record_header *record, size_t buflen, size_t recordlen, const guid_t *creatorid); int erst_clear(u64 record_id); int arch_apei_enable_cmcff(struct acpi_hest_header *hest_hdr, void *data); void arch_apei_report_mem_error(int sev, struct cper_sec_mem_err *mem_err); #endif #endif PKk]Ni cppc_acpi.hnu[/* SPDX-License-Identifier: GPL-2.0-only */ /* * CPPC (Collaborative Processor Performance Control) methods used * by CPUfreq drivers. * * (C) Copyright 2014, 2015 Linaro Ltd. * Author: Ashwin Chaugule */ #ifndef _CPPC_ACPI_H #define _CPPC_ACPI_H #include #include #include #include #include /* CPPCv2 and CPPCv3 support */ #define CPPC_V2_REV 2 #define CPPC_V3_REV 3 #define CPPC_V2_NUM_ENT 21 #define CPPC_V3_NUM_ENT 23 #define PCC_CMD_COMPLETE_MASK (1 << 0) #define PCC_ERROR_MASK (1 << 2) #define MAX_CPC_REG_ENT 21 /* CPPC specific PCC commands. */ #define CMD_READ 0 #define CMD_WRITE 1 /* Each register has the folowing format. */ struct cpc_reg { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 access_width; u64 address; } __packed; /* * Each entry in the CPC table is either * of type ACPI_TYPE_BUFFER or * ACPI_TYPE_INTEGER. */ struct cpc_register_resource { acpi_object_type type; u64 __iomem *sys_mem_vaddr; union { struct cpc_reg reg; u64 int_value; } cpc_entry; }; /* Container to hold the CPC details for each CPU */ struct cpc_desc { int num_entries; int version; int cpu_id; int write_cmd_status; int write_cmd_id; /* Lock used for RMW operations in cpc_write() */ raw_spinlock_t rmw_lock; struct cpc_register_resource cpc_regs[MAX_CPC_REG_ENT]; struct acpi_psd_package domain_info; struct kobject kobj; }; /* These are indexes into the per-cpu cpc_regs[]. Order is important. */ enum cppc_regs { HIGHEST_PERF, NOMINAL_PERF, LOW_NON_LINEAR_PERF, LOWEST_PERF, GUARANTEED_PERF, DESIRED_PERF, MIN_PERF, MAX_PERF, PERF_REDUC_TOLERANCE, TIME_WINDOW, CTR_WRAP_TIME, REFERENCE_CTR, DELIVERED_CTR, PERF_LIMITED, ENABLE, AUTO_SEL_ENABLE, AUTO_ACT_WINDOW, ENERGY_PERF, REFERENCE_PERF, LOWEST_FREQ, NOMINAL_FREQ, }; /* * Categorization of registers as described * in the ACPI v.5.1 spec. * XXX: Only filling up ones which are used by governors * today. */ struct cppc_perf_caps { u32 guaranteed_perf; u32 highest_perf; u32 nominal_perf; u32 lowest_perf; u32 lowest_nonlinear_perf; u32 lowest_freq; u32 nominal_freq; u32 energy_perf; bool auto_sel; }; struct cppc_perf_ctrls { u32 max_perf; u32 min_perf; u32 desired_perf; u32 energy_perf; }; struct cppc_perf_fb_ctrs { u64 reference; u64 delivered; u64 reference_perf; u64 wraparound_time; }; /* Per CPU container for runtime CPPC management. */ struct cppc_cpudata { struct list_head node; struct cppc_perf_caps perf_caps; struct cppc_perf_ctrls perf_ctrls; struct cppc_perf_fb_ctrs perf_fb_ctrs; unsigned int shared_type; cpumask_var_t shared_cpu_map; }; #ifdef CONFIG_ACPI_CPPC_LIB extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf); extern int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf); extern int cppc_get_highest_perf(int cpunum, u64 *highest_perf); extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs); extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls); extern int cppc_set_enable(int cpu, bool enable); extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps); extern bool cppc_perf_ctrs_in_pcc(void); extern unsigned int cppc_perf_to_khz(struct cppc_perf_caps *caps, unsigned int perf); extern unsigned int cppc_khz_to_perf(struct cppc_perf_caps *caps, unsigned int freq); extern bool acpi_cpc_valid(void); extern bool cppc_allow_fast_switch(void); extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data); extern unsigned int cppc_get_transition_latency(int cpu); extern bool cpc_ffh_supported(void); extern bool cpc_supported_by_cpu(void); extern int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val); extern int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val); extern int cppc_get_epp_perf(int cpunum, u64 *epp_perf); extern int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable); extern int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps); extern int cppc_set_auto_sel(int cpu, bool enable); #else /* !CONFIG_ACPI_CPPC_LIB */ static inline int cppc_get_desired_perf(int cpunum, u64 *desired_perf) { return -ENOTSUPP; } static inline int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf) { return -ENOTSUPP; } static inline int cppc_get_highest_perf(int cpunum, u64 *highest_perf) { return -ENOTSUPP; } static inline int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs) { return -ENOTSUPP; } static inline int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls) { return -ENOTSUPP; } static inline int cppc_set_enable(int cpu, bool enable) { return -ENOTSUPP; } static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps) { return -ENOTSUPP; } static inline bool cppc_perf_ctrs_in_pcc(void) { return false; } static inline bool acpi_cpc_valid(void) { return false; } static inline bool cppc_allow_fast_switch(void) { return false; } static inline unsigned int cppc_get_transition_latency(int cpu) { return CPUFREQ_ETERNAL; } static inline bool cpc_ffh_supported(void) { return false; } static inline int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val) { return -ENOTSUPP; } static inline int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val) { return -ENOTSUPP; } static inline int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable) { return -ENOTSUPP; } static inline int cppc_get_epp_perf(int cpunum, u64 *epp_perf) { return -ENOTSUPP; } static inline int cppc_set_auto_sel(int cpu, bool enable) { return -ENOTSUPP; } static inline int cppc_get_auto_sel_caps(int cpunum, struct cppc_perf_caps *perf_caps) { return -ENOTSUPP; } #endif /* !CONFIG_ACPI_CPPC_LIB */ #endif /* _CPPC_ACPI_H*/ PKk]i4c-c- acpiosxf.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These * interfaces must be implemented by OSL to interface the * ACPI components to the host operating system. * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACPIOSXF_H__ #define __ACPIOSXF_H__ #include #include /* Types for acpi_os_execute */ typedef enum { OSL_GLOBAL_LOCK_HANDLER, OSL_NOTIFY_HANDLER, OSL_GPE_HANDLER, OSL_DEBUGGER_MAIN_THREAD, OSL_DEBUGGER_EXEC_THREAD, OSL_EC_POLL_HANDLER, OSL_EC_BURST_HANDLER } acpi_execute_type; #define ACPI_NO_UNIT_LIMIT ((u32) -1) #define ACPI_MUTEX_SEM 1 /* Functions for acpi_os_signal */ #define ACPI_SIGNAL_FATAL 0 #define ACPI_SIGNAL_BREAKPOINT 1 struct acpi_signal_fatal_info { u32 type; u32 code; u32 argument; }; /* * OSL Initialization and shutdown primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize acpi_status acpi_os_initialize(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate acpi_status acpi_os_terminate(void); #endif /* * ACPI Table interfaces */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_root_pointer acpi_physical_address acpi_os_get_root_pointer(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override acpi_status acpi_os_predefined_override(const struct acpi_predefined_names *init_val, acpi_string *new_val); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override acpi_status acpi_os_table_override(struct acpi_table_header *existing_table, struct acpi_table_header **new_table); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_physical_table_override acpi_status acpi_os_physical_table_override(struct acpi_table_header *existing_table, acpi_physical_address *new_address, u32 *new_table_length); #endif /* * Spinlock primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock acpi_status acpi_os_create_lock(acpi_spinlock * out_handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock void acpi_os_delete_lock(acpi_spinlock handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags); #endif /* * RAW spinlock primitives. If the OS does not provide them, fallback to * spinlock primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock # define acpi_os_create_raw_lock(out_handle) acpi_os_create_lock(out_handle) #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock # define acpi_os_delete_raw_lock(handle) acpi_os_delete_lock(handle) #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock # define acpi_os_acquire_raw_lock(handle) acpi_os_acquire_lock(handle) #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock # define acpi_os_release_raw_lock(handle, flags) \ acpi_os_release_lock(handle, flags) #endif /* * Semaphore primitives */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore acpi_status acpi_os_create_semaphore(u32 max_units, u32 initial_units, acpi_semaphore * out_handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore acpi_status acpi_os_delete_semaphore(acpi_semaphore handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore acpi_status acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units); #endif /* * Mutex primitives. May be configured to use semaphores instead via * ACPI_MUTEX_TYPE (see platform/acenv.h) */ #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE) #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_mutex acpi_status acpi_os_create_mutex(acpi_mutex * out_handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex void acpi_os_delete_mutex(acpi_mutex handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex void acpi_os_release_mutex(acpi_mutex handle); #endif #endif /* * Memory allocation and mapping */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate void *acpi_os_allocate(acpi_size size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed void *acpi_os_allocate_zeroed(acpi_size size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free void acpi_os_free(void *memory); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory void *acpi_os_map_memory(acpi_physical_address where, acpi_size length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory void acpi_os_unmap_memory(void *logical_address, acpi_size size); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address acpi_status acpi_os_get_physical_address(void *logical_address, acpi_physical_address *physical_address); #endif /* * Memory/Object Cache */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache acpi_status acpi_os_create_cache(char *cache_name, u16 object_size, u16 max_depth, acpi_cache_t ** return_cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache acpi_status acpi_os_delete_cache(acpi_cache_t * cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache acpi_status acpi_os_purge_cache(acpi_cache_t * cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object void *acpi_os_acquire_object(acpi_cache_t * cache); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object); #endif /* * Interrupt handlers */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler acpi_status acpi_os_install_interrupt_handler(u32 interrupt_number, acpi_osd_handler service_routine, void *context); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler acpi_status acpi_os_remove_interrupt_handler(u32 interrupt_number, acpi_osd_handler service_routine); #endif /* * Threads and Scheduling */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id acpi_thread_id acpi_os_get_thread_id(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute acpi_status acpi_os_execute(acpi_execute_type type, acpi_osd_exec_callback function, void *context); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete void acpi_os_wait_events_complete(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep void acpi_os_sleep(u64 milliseconds); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall void acpi_os_stall(u32 microseconds); #endif /* * Platform and hardware-independent I/O interfaces */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width); #endif /* * Platform and hardware-independent physical memory interfaces */ int acpi_os_read_iomem(void __iomem *virt_addr, u64 *value, u32 width); #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory acpi_status acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory acpi_status acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width); #endif /* * Platform and hardware-independent PCI configuration space access * Note: Can't use "Register" as a parameter, changed to "Reg" -- * certain compilers complain. */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_pci_configuration acpi_status acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id, u32 reg, u64 *value, u32 width); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration acpi_status acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id, u32 reg, u64 value, u32 width); #endif /* * Miscellaneous */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable u8 acpi_os_readable(void *pointer, acpi_size length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable u8 acpi_os_writable(void *pointer, acpi_size length); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer u64 acpi_os_get_timer(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal acpi_status acpi_os_signal(u32 function, void *info); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_enter_sleep acpi_status acpi_os_enter_sleep(u8 sleep_state, u32 rega_value, u32 regb_value); #endif /* * Debug print routines */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf ACPI_PRINTF_LIKE(1) void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf void acpi_os_vprintf(const char *format, va_list args); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output void acpi_os_redirect_output(void *destination); #endif /* * Debug IO */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger acpi_status acpi_os_initialize_debugger(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger void acpi_os_terminate_debugger(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_command_ready acpi_status acpi_os_wait_command_ready(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_notify_command_complete acpi_status acpi_os_notify_command_complete(void); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point void acpi_os_trace_point(acpi_trace_event_type type, u8 begin, u8 *aml, char *pathname); #endif /* * Obtain ACPI table(s) */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name acpi_status acpi_os_get_table_by_name(char *signature, u32 instance, struct acpi_table_header **table, acpi_physical_address *address); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index acpi_status acpi_os_get_table_by_index(u32 index, struct acpi_table_header **table, u32 *instance, acpi_physical_address *address); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address acpi_status acpi_os_get_table_by_address(acpi_physical_address address, struct acpi_table_header **table); #endif /* * Directory manipulation */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory void *acpi_os_open_directory(char *pathname, char *wildcard_spec, char requested_file_type); #endif /* requeste_file_type values */ #define REQUEST_FILE_ONLY 0 #define REQUEST_DIR_ONLY 1 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename char *acpi_os_get_next_filename(void *dir_handle); #endif #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory void acpi_os_close_directory(void *dir_handle); #endif #endif /* __ACPIOSXF_H__ */ PKk]30U.BB acoutput.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acoutput.h -- debug output * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACOUTPUT_H__ #define __ACOUTPUT_H__ /* * Debug levels and component IDs. These are used to control the * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a * per-component basis and a per-exception-type basis. */ /* Component IDs are used in the global "DebugLayer" */ #define ACPI_UTILITIES 0x00000001 #define ACPI_HARDWARE 0x00000002 #define ACPI_EVENTS 0x00000004 #define ACPI_TABLES 0x00000008 #define ACPI_NAMESPACE 0x00000010 #define ACPI_PARSER 0x00000020 #define ACPI_DISPATCHER 0x00000040 #define ACPI_EXECUTER 0x00000080 #define ACPI_RESOURCES 0x00000100 #define ACPI_CA_DEBUGGER 0x00000200 #define ACPI_OS_SERVICES 0x00000400 #define ACPI_CA_DISASSEMBLER 0x00000800 /* Component IDs for ACPI tools and utilities */ #define ACPI_COMPILER 0x00001000 #define ACPI_TOOLS 0x00002000 #define ACPI_EXAMPLE 0x00004000 #define ACPI_DRIVER 0x00008000 #define DT_COMPILER 0x00010000 #define ASL_PREPROCESSOR 0x00020000 #define ACPI_ALL_COMPONENTS 0x0001FFFF #define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS) /* Component IDs reserved for ACPI drivers */ #define ACPI_ALL_DRIVERS 0xFFFF0000 /* * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros */ #define ACPI_LV_INIT 0x00000001 #define ACPI_LV_DEBUG_OBJECT 0x00000002 #define ACPI_LV_INFO 0x00000004 #define ACPI_LV_REPAIR 0x00000008 #define ACPI_LV_TRACE_POINT 0x00000010 #define ACPI_LV_ALL_EXCEPTIONS 0x0000001F /* Trace verbosity level 1 [Standard Trace Level] */ #define ACPI_LV_INIT_NAMES 0x00000020 #define ACPI_LV_PARSE 0x00000040 #define ACPI_LV_LOAD 0x00000080 #define ACPI_LV_DISPATCH 0x00000100 #define ACPI_LV_EXEC 0x00000200 #define ACPI_LV_NAMES 0x00000400 #define ACPI_LV_OPREGION 0x00000800 #define ACPI_LV_BFIELD 0x00001000 #define ACPI_LV_TABLES 0x00002000 #define ACPI_LV_VALUES 0x00004000 #define ACPI_LV_OBJECTS 0x00008000 #define ACPI_LV_RESOURCES 0x00010000 #define ACPI_LV_USER_REQUESTS 0x00020000 #define ACPI_LV_PACKAGE 0x00040000 #define ACPI_LV_EVALUATION 0x00080000 #define ACPI_LV_VERBOSITY1 0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS /* Trace verbosity level 2 [Function tracing and memory allocation] */ #define ACPI_LV_ALLOCATIONS 0x00100000 #define ACPI_LV_FUNCTIONS 0x00200000 #define ACPI_LV_OPTIMIZATIONS 0x00400000 #define ACPI_LV_PARSE_TREES 0x00800000 #define ACPI_LV_VERBOSITY2 0x00F00000 | ACPI_LV_VERBOSITY1 #define ACPI_LV_ALL ACPI_LV_VERBOSITY2 /* Trace verbosity level 3 [Threading, I/O, and Interrupts] */ #define ACPI_LV_MUTEX 0x01000000 #define ACPI_LV_THREADS 0x02000000 #define ACPI_LV_IO 0x04000000 #define ACPI_LV_INTERRUPTS 0x08000000 #define ACPI_LV_VERBOSITY3 0x0F000000 | ACPI_LV_VERBOSITY2 /* Exceptionally verbose output -- also used in the global "DebugLevel" */ #define ACPI_LV_AML_DISASSEMBLE 0x10000000 #define ACPI_LV_VERBOSE_INFO 0x20000000 #define ACPI_LV_FULL_TABLES 0x40000000 #define ACPI_LV_EVENTS 0x80000000 #define ACPI_LV_VERBOSE 0xF0000000 /* * Debug level macros that are used in the DEBUG_PRINT macros */ #define ACPI_DEBUG_LEVEL(dl) (u32) dl,ACPI_DEBUG_PARAMETERS /* * Exception level -- used in the global "DebugLevel" * * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces. * For warnings, use ACPI_WARNING. */ #define ACPI_DB_INIT ACPI_DEBUG_LEVEL (ACPI_LV_INIT) #define ACPI_DB_DEBUG_OBJECT ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT) #define ACPI_DB_INFO ACPI_DEBUG_LEVEL (ACPI_LV_INFO) #define ACPI_DB_REPAIR ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR) #define ACPI_DB_TRACE_POINT ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT) #define ACPI_DB_ALL_EXCEPTIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS) /* Trace level -- also used in the global "DebugLevel" */ #define ACPI_DB_INIT_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES) #define ACPI_DB_THREADS ACPI_DEBUG_LEVEL (ACPI_LV_THREADS) #define ACPI_DB_PARSE ACPI_DEBUG_LEVEL (ACPI_LV_PARSE) #define ACPI_DB_DISPATCH ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH) #define ACPI_DB_LOAD ACPI_DEBUG_LEVEL (ACPI_LV_LOAD) #define ACPI_DB_EXEC ACPI_DEBUG_LEVEL (ACPI_LV_EXEC) #define ACPI_DB_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_NAMES) #define ACPI_DB_OPREGION ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION) #define ACPI_DB_BFIELD ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD) #define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES) #define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS) #define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS) #define ACPI_DB_PARSE_TREES ACPI_DEBUG_LEVEL (ACPI_LV_PARSE_TREES) #define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES) #define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS) #define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS) #define ACPI_DB_RESOURCES ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES) #define ACPI_DB_IO ACPI_DEBUG_LEVEL (ACPI_LV_IO) #define ACPI_DB_INTERRUPTS ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS) #define ACPI_DB_USER_REQUESTS ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS) #define ACPI_DB_PACKAGE ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE) #define ACPI_DB_EVALUATION ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION) #define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX) #define ACPI_DB_EVENTS ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS) #define ACPI_DB_ALL ACPI_DEBUG_LEVEL (ACPI_LV_ALL) /* Defaults for debug_level, debug and normal */ #ifndef ACPI_DEBUG_DEFAULT #define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR) #endif #define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR) #define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL) /* * Global trace flags */ #define ACPI_TRACE_ENABLED ((u32) 4) #define ACPI_TRACE_ONESHOT ((u32) 2) #define ACPI_TRACE_OPCODE ((u32) 1) /* Defaults for trace debugging level/layer */ #define ACPI_TRACE_LEVEL_ALL ACPI_LV_ALL #define ACPI_TRACE_LAYER_ALL 0x000001FF #define ACPI_TRACE_LEVEL_DEFAULT ACPI_LV_TRACE_POINT #define ACPI_TRACE_LAYER_DEFAULT ACPI_EXECUTER #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES) /* * The module name is used primarily for error and debug messages. * The __FILE__ macro is not very useful for this, because it * usually includes the entire pathname to the module making the * debug output difficult to read. */ #define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name; #else /* * For the no-debug and no-error-msg cases, we must at least define * a null module name. */ #define ACPI_MODULE_NAME(name) #define _acpi_module_name "" #endif /* * Ascii error messages can be configured out */ #ifndef ACPI_NO_ERROR_MESSAGES #define AE_INFO _acpi_module_name, __LINE__ #define ACPI_ONCE(_fn, _plist) { static char _done; if (!_done) { _done = 1; _fn _plist; } } /* * Error reporting. Callers module and line number are inserted by AE_INFO, * the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ #define ACPI_INFO(plist) acpi_info plist #define ACPI_WARNING(plist) acpi_warning plist #define ACPI_WARNING_ONCE(plist) ACPI_ONCE(acpi_warning, plist) #define ACPI_EXCEPTION(plist) acpi_exception plist #define ACPI_ERROR(plist) acpi_error plist #define ACPI_ERROR_ONCE(plist) ACPI_ONCE(acpi_error, plist) #define ACPI_BIOS_WARNING(plist) acpi_bios_warning plist #define ACPI_BIOS_EXCEPTION(plist) acpi_bios_exception plist #define ACPI_BIOS_ERROR(plist) acpi_bios_error plist #define ACPI_DEBUG_OBJECT(obj,l,i) acpi_ex_do_debug_object(obj,l,i) #else /* No error messages */ #define ACPI_INFO(plist) #define ACPI_WARNING(plist) #define ACPI_WARNING_ONCE(plist) #define ACPI_EXCEPTION(plist) #define ACPI_ERROR(plist) #define ACPI_ERROR_ONCE(plist) #define ACPI_BIOS_WARNING(plist) #define ACPI_BIOS_EXCEPTION(plist) #define ACPI_BIOS_ERROR(plist) #define ACPI_DEBUG_OBJECT(obj,l,i) #endif /* ACPI_NO_ERROR_MESSAGES */ /* * Debug macros that are conditionally compiled */ #ifdef ACPI_DEBUG_OUTPUT /* * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, * define it now. This is the case where there the compiler does not support * a __func__ macro or equivalent. */ #ifndef ACPI_GET_FUNCTION_NAME #define ACPI_GET_FUNCTION_NAME _acpi_function_name /* * The Name parameter should be the procedure name as a non-quoted string. * The function name is also used by the function exit macros below. * Note: (const char) is used to be compatible with the debug interfaces * and macros such as __func__. */ #define ACPI_FUNCTION_NAME(name) static const char _acpi_function_name[] = #name; #else /* Compiler supports __func__ (or equivalent) -- Ignore this macro */ #define ACPI_FUNCTION_NAME(name) #endif /* ACPI_GET_FUNCTION_NAME */ /* * Common parameters used for debug output functions: * line number, function name, module(file) name, component ID */ #define ACPI_DEBUG_PARAMETERS \ __LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT /* Check if debug output is currently dynamically enabled */ #define ACPI_IS_DEBUG_ENABLED(level, component) \ ((level & acpi_dbg_level) && (component & acpi_dbg_layer)) /* * Master debug print macros * Print message if and only if: * 1) Debug print for the current component is enabled * 2) Debug error level or trace level for the print statement is enabled * * November 2012: Moved the runtime check for whether to actually emit the * debug message outside of the print function itself. This improves overall * performance at a relatively small code cost. Implementation involves the * use of variadic macros supported by C99. * * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from * complaining about these constructs. On other compilers the do...while * adds some extra code, so this feature is optional. */ #ifdef ACPI_USE_DO_WHILE_0 #define ACPI_DO_WHILE0(a) do a while(0) #else #define ACPI_DO_WHILE0(a) a #endif /* DEBUG_PRINT functions */ #ifndef COMPILER_VA_MACRO #define ACPI_DEBUG_PRINT(plist) acpi_debug_print plist #define ACPI_DEBUG_PRINT_RAW(plist) acpi_debug_print_raw plist #else /* Helper macros for DEBUG_PRINT */ #define ACPI_DO_DEBUG_PRINT(function, level, line, filename, modulename, component, ...) \ ACPI_DO_WHILE0 ({ \ if (ACPI_IS_DEBUG_ENABLED (level, component)) \ { \ function (level, line, filename, modulename, component, __VA_ARGS__); \ } \ }) #define ACPI_ACTUAL_DEBUG(level, line, filename, modulename, component, ...) \ ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \ filename, modulename, component, __VA_ARGS__) #define ACPI_ACTUAL_DEBUG_RAW(level, line, filename, modulename, component, ...) \ ACPI_DO_DEBUG_PRINT (acpi_debug_print_raw, level, line, \ filename, modulename, component, __VA_ARGS__) #define ACPI_DEBUG_PRINT(plist) ACPI_ACTUAL_DEBUG plist #define ACPI_DEBUG_PRINT_RAW(plist) ACPI_ACTUAL_DEBUG_RAW plist #endif /* * Function entry tracing * * The name of the function is emitted as a local variable that is * intended to be used by both the entry trace and the exit trace. */ /* Helper macro */ #define ACPI_TRACE_ENTRY(name, function, type, param) \ ACPI_FUNCTION_NAME (name) \ function (ACPI_DEBUG_PARAMETERS, (type) (param)) /* The actual entry trace macros */ #define ACPI_FUNCTION_TRACE(name) \ ACPI_FUNCTION_NAME(name) \ acpi_ut_trace (ACPI_DEBUG_PARAMETERS) #define ACPI_FUNCTION_TRACE_PTR(name, pointer) \ ACPI_TRACE_ENTRY (name, acpi_ut_trace_ptr, void *, pointer) #define ACPI_FUNCTION_TRACE_U32(name, value) \ ACPI_TRACE_ENTRY (name, acpi_ut_trace_u32, u32, value) #define ACPI_FUNCTION_TRACE_STR(name, string) \ ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, const char *, string) #define ACPI_FUNCTION_ENTRY() \ acpi_ut_track_stack_ptr() /* * Function exit tracing * * These macros include a return statement. This is usually considered * bad form, but having a separate exit macro before the actual return * is very ugly and difficult to maintain. * * One of the FUNCTION_TRACE macros above must be used in conjunction * with these macros so that "_AcpiFunctionName" is defined. * * There are two versions of most of the return macros. The default version is * safer, since it avoids side-effects by guaranteeing that the argument will * not be evaluated twice. * * A less-safe version of the macros is provided for optional use if the * compiler uses excessive CPU stack (for example, this may happen in the * debug case if code optimization is disabled.) */ /* Exit trace helper macro */ #ifndef ACPI_SIMPLE_RETURN_MACROS #define ACPI_TRACE_EXIT(function, type, param) \ ACPI_DO_WHILE0 ({ \ register type _param = (type) (param); \ function (ACPI_DEBUG_PARAMETERS, _param); \ return (_param); \ }) #else /* Use original less-safe macros */ #define ACPI_TRACE_EXIT(function, type, param) \ ACPI_DO_WHILE0 ({ \ function (ACPI_DEBUG_PARAMETERS, (type) (param)); \ return (param); \ }) #endif /* ACPI_SIMPLE_RETURN_MACROS */ /* The actual exit macros */ #define return_VOID \ ACPI_DO_WHILE0 ({ \ acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \ return; \ }) #define return_ACPI_STATUS(status) \ ACPI_TRACE_EXIT (acpi_ut_status_exit, acpi_status, status) #define return_PTR(pointer) \ ACPI_TRACE_EXIT (acpi_ut_ptr_exit, void *, pointer) #define return_STR(string) \ ACPI_TRACE_EXIT (acpi_ut_str_exit, const char *, string) #define return_VALUE(value) \ ACPI_TRACE_EXIT (acpi_ut_value_exit, u64, value) #define return_UINT32(value) \ ACPI_TRACE_EXIT (acpi_ut_value_exit, u32, value) #define return_UINT8(value) \ ACPI_TRACE_EXIT (acpi_ut_value_exit, u8, value) /* Conditional execution */ #define ACPI_DEBUG_EXEC(a) a #define ACPI_DEBUG_ONLY_MEMBERS(a) a #define _VERBOSE_STRUCTURES /* Various object display routines for debug */ #define ACPI_DUMP_STACK_ENTRY(a) acpi_ex_dump_operand((a), 0) #define ACPI_DUMP_OPERANDS(a, b ,c) acpi_ex_dump_operands(a, b, c) #define ACPI_DUMP_ENTRY(a, b) acpi_ns_dump_entry (a, b) #define ACPI_DUMP_PATHNAME(a, b, c, d) acpi_ns_dump_pathname(a, b, c, d) #define ACPI_DUMP_BUFFER(a, b) acpi_ut_debug_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT) #define ACPI_TRACE_POINT(a, b, c, d) acpi_trace_point (a, b, c, d) #else /* ACPI_DEBUG_OUTPUT */ /* * This is the non-debug case -- make everything go away, * leaving no executable debug code! */ #define ACPI_DEBUG_PRINT(pl) #define ACPI_DEBUG_PRINT_RAW(pl) #define ACPI_DEBUG_EXEC(a) #define ACPI_DEBUG_ONLY_MEMBERS(a) #define ACPI_FUNCTION_NAME(a) #define ACPI_FUNCTION_TRACE(a) #define ACPI_FUNCTION_TRACE_PTR(a, b) #define ACPI_FUNCTION_TRACE_U32(a, b) #define ACPI_FUNCTION_TRACE_STR(a, b) #define ACPI_FUNCTION_ENTRY() #define ACPI_DUMP_STACK_ENTRY(a) #define ACPI_DUMP_OPERANDS(a, b, c) #define ACPI_DUMP_ENTRY(a, b) #define ACPI_DUMP_PATHNAME(a, b, c, d) #define ACPI_DUMP_BUFFER(a, b) #define ACPI_IS_DEBUG_ENABLED(level, component) 0 #define ACPI_TRACE_POINT(a, b, c, d) /* Return macros must have a return statement at the minimum */ #define return_VOID return #define return_ACPI_STATUS(s) return(s) #define return_PTR(s) return(s) #define return_STR(s) return(s) #define return_VALUE(s) return(s) #define return_UINT8(s) return(s) #define return_UINT32(s) return(s) #endif /* ACPI_DEBUG_OUTPUT */ #endif /* __ACOUTPUT_H__ */ PKk]z/]]acuuid.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acuuid.h - ACPI-related UUID/GUID definitions * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACUUID_H__ #define __ACUUID_H__ /* * Note1: UUIDs and GUIDs are defined to be identical in ACPI. * * Note2: This file is standalone and should remain that way. */ /* Controllers */ #define UUID_GPIO_CONTROLLER "4f248f40-d5e2-499f-834c-27758ea1cd3f" #define UUID_USB_CONTROLLER "ce2ee385-00e6-48cb-9f05-2edb927c4899" #define UUID_SATA_CONTROLLER "e4db149b-fcfe-425b-a6d8-92357d78fc7f" /* Devices */ #define UUID_PCI_HOST_BRIDGE "33db4d5b-1ff7-401c-9657-7441c03dd766" #define UUID_I2C_DEVICE "3cdff6f7-4267-4555-ad05-b30a3d8938de" #define UUID_POWER_BUTTON "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c" #define UUID_MEMORY_DEVICE "03b19910-f473-11dd-87af-0800200c9a66" #define UUID_GENERIC_BUTTONS_DEVICE "fa6bd625-9ce8-470d-a2c7-b3ca36c4282e" #define UUID_NVDIMM_ROOT_DEVICE "2f10e7a4-9e91-11e4-89d3-123b93f75cba" #define UUID_CONTROL_METHOD_BATTERY "f18fc78b-0f15-4978-b793-53f833a1d35b" /* Interfaces */ #define UUID_DEVICE_LABELING "e5c937d0-3553-4d7a-9117-ea4d19c3434d" #define UUID_PHYSICAL_PRESENCE "3dddfaa6-361b-4eb4-a424-8d10089d1653" /* NVDIMM - NFIT table */ #define UUID_NFIT_DIMM "4309ac30-0d11-11e4-9191-0800200c9a66" #define UUID_VOLATILE_MEMORY "7305944f-fdda-44e3-b16c-3f22d252e5d0" #define UUID_PERSISTENT_MEMORY "66f0d379-b4f3-4074-ac43-0d3318b78cdb" #define UUID_CONTROL_REGION "92f701f6-13b4-405d-910b-299367e8234c" #define UUID_DATA_REGION "91af0530-5d86-470e-a6b0-0a2db9408249" #define UUID_VOLATILE_VIRTUAL_DISK "77ab535a-45fc-624b-5560-f7b281d1f96e" #define UUID_VOLATILE_VIRTUAL_CD "3d5abd30-4175-87ce-6d64-d2ade523c4bb" #define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9" #define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d" #define UUID_NFIT_DIMM_N_MSFT "1ee68b36-d4bd-4a1a-9a16-4f8e53d46e05" #define UUID_NFIT_DIMM_N_HPE1 "9002c334-acf3-4c0e-9642-a235f0d53bc6" #define UUID_NFIT_DIMM_N_HPE2 "5008664b-b758-41a0-a03c-27c2f2d04f7e" #define UUID_NFIT_DIMM_N_HYPERV "5746c5f2-a9a2-4264-ad0e-e4ddc9e09e80" /* Processor Properties (ACPI 6.2) */ #define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D" #define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7" /* Miscellaneous */ #define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48" #define UUID_DYNAMIC_ENUMERATION "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf" #define UUID_BATTERY_THERMAL_LIMIT "4c2067e3-887d-475c-9720-4af1d3ed602e" #define UUID_THERMAL_EXTENSIONS "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500" #define UUID_DEVICE_PROPERTIES "daffd814-6eba-4d8c-8a91-bc9bbf4aa301" #define UUID_DEVICE_GRAPHS "ab02a46b-74c7-45a2-bd68-f7d344ef2153" #define UUID_HIERARCHICAL_DATA_EXTENSION "dbb8e3e6-5886-4ba6-8795-1319f52a966b" #define UUID_CORESIGHT_GRAPH "3ecbc8b6-1d0e-4fb3-8107-e627f805c6cd" #define UUID_USB4_CAPABILITIES "23a0d13a-26ab-486c-9c5f-0ffa525a575a" #define UUID_1ST_FUNCTION_ID "893f00a6-660c-494e-bcfd-3043f4fb67c0" #define UUID_2ND_FUNCTION_ID "107ededd-d381-4fd7-8da9-08e9a6c79644" #endif /* __ACUUID_H__ */ PKk]>wCC acexcep.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acexcep.h - Exception codes returned by the ACPI subsystem * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACEXCEP_H__ #define __ACEXCEP_H__ /* This module contains all possible exception codes for acpi_status */ /* * Exception code classes */ #define AE_CODE_ENVIRONMENTAL 0x0000 /* General ACPICA environment */ #define AE_CODE_PROGRAMMER 0x1000 /* External ACPICA interface caller */ #define AE_CODE_ACPI_TABLES 0x2000 /* ACPI tables */ #define AE_CODE_AML 0x3000 /* From executing AML code */ #define AE_CODE_CONTROL 0x4000 /* Internal control codes */ #define AE_CODE_MAX 0x4000 #define AE_CODE_MASK 0xF000 /* * Macros to insert the exception code classes */ #define EXCEP_ENV(code) ((acpi_status) (code | AE_CODE_ENVIRONMENTAL)) #define EXCEP_PGM(code) ((acpi_status) (code | AE_CODE_PROGRAMMER)) #define EXCEP_TBL(code) ((acpi_status) (code | AE_CODE_ACPI_TABLES)) #define EXCEP_AML(code) ((acpi_status) (code | AE_CODE_AML)) #define EXCEP_CTL(code) ((acpi_status) (code | AE_CODE_CONTROL)) /* * Exception info table. The "Description" field is used only by the * ACPICA help application (acpihelp). */ struct acpi_exception_info { char *name; #if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER) char *description; #endif }; #if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER) #define EXCEP_TXT(name,description) {name, description} #else #define EXCEP_TXT(name,description) {name} #endif /* * Success is always zero, failure is non-zero */ #define ACPI_SUCCESS(a) (!(a)) #define ACPI_FAILURE(a) (a) #define AE_OK (acpi_status) 0x0000 #define ACPI_ENV_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_ENVIRONMENTAL) #define ACPI_AML_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_AML) #define ACPI_PROG_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_PROGRAMMER) #define ACPI_TABLE_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_ACPI_TABLES) #define ACPI_CNTL_EXCEPTION(status) (((status) & AE_CODE_MASK) == AE_CODE_CONTROL) /* * Environmental exceptions */ #define AE_ERROR EXCEP_ENV (0x0001) #define AE_NO_ACPI_TABLES EXCEP_ENV (0x0002) #define AE_NO_NAMESPACE EXCEP_ENV (0x0003) #define AE_NO_MEMORY EXCEP_ENV (0x0004) #define AE_NOT_FOUND EXCEP_ENV (0x0005) #define AE_NOT_EXIST EXCEP_ENV (0x0006) #define AE_ALREADY_EXISTS EXCEP_ENV (0x0007) #define AE_TYPE EXCEP_ENV (0x0008) #define AE_NULL_OBJECT EXCEP_ENV (0x0009) #define AE_NULL_ENTRY EXCEP_ENV (0x000A) #define AE_BUFFER_OVERFLOW EXCEP_ENV (0x000B) #define AE_STACK_OVERFLOW EXCEP_ENV (0x000C) #define AE_STACK_UNDERFLOW EXCEP_ENV (0x000D) #define AE_NOT_IMPLEMENTED EXCEP_ENV (0x000E) #define AE_SUPPORT EXCEP_ENV (0x000F) #define AE_LIMIT EXCEP_ENV (0x0010) #define AE_TIME EXCEP_ENV (0x0011) #define AE_ACQUIRE_DEADLOCK EXCEP_ENV (0x0012) #define AE_RELEASE_DEADLOCK EXCEP_ENV (0x0013) #define AE_NOT_ACQUIRED EXCEP_ENV (0x0014) #define AE_ALREADY_ACQUIRED EXCEP_ENV (0x0015) #define AE_NO_HARDWARE_RESPONSE EXCEP_ENV (0x0016) #define AE_NO_GLOBAL_LOCK EXCEP_ENV (0x0017) #define AE_ABORT_METHOD EXCEP_ENV (0x0018) #define AE_SAME_HANDLER EXCEP_ENV (0x0019) #define AE_NO_HANDLER EXCEP_ENV (0x001A) #define AE_OWNER_ID_LIMIT EXCEP_ENV (0x001B) #define AE_NOT_CONFIGURED EXCEP_ENV (0x001C) #define AE_ACCESS EXCEP_ENV (0x001D) #define AE_IO_ERROR EXCEP_ENV (0x001E) #define AE_NUMERIC_OVERFLOW EXCEP_ENV (0x001F) #define AE_HEX_OVERFLOW EXCEP_ENV (0x0020) #define AE_DECIMAL_OVERFLOW EXCEP_ENV (0x0021) #define AE_OCTAL_OVERFLOW EXCEP_ENV (0x0022) #define AE_END_OF_TABLE EXCEP_ENV (0x0023) #define AE_CODE_ENV_MAX 0x0023 /* * Programmer exceptions */ #define AE_BAD_PARAMETER EXCEP_PGM (0x0001) #define AE_BAD_CHARACTER EXCEP_PGM (0x0002) #define AE_BAD_PATHNAME EXCEP_PGM (0x0003) #define AE_BAD_DATA EXCEP_PGM (0x0004) #define AE_BAD_HEX_CONSTANT EXCEP_PGM (0x0005) #define AE_BAD_OCTAL_CONSTANT EXCEP_PGM (0x0006) #define AE_BAD_DECIMAL_CONSTANT EXCEP_PGM (0x0007) #define AE_MISSING_ARGUMENTS EXCEP_PGM (0x0008) #define AE_BAD_ADDRESS EXCEP_PGM (0x0009) #define AE_CODE_PGM_MAX 0x0009 /* * Acpi table exceptions */ #define AE_BAD_SIGNATURE EXCEP_TBL (0x0001) #define AE_BAD_HEADER EXCEP_TBL (0x0002) #define AE_BAD_CHECKSUM EXCEP_TBL (0x0003) #define AE_BAD_VALUE EXCEP_TBL (0x0004) #define AE_INVALID_TABLE_LENGTH EXCEP_TBL (0x0005) #define AE_CODE_TBL_MAX 0x0005 /* * AML exceptions. These are caused by problems with * the actual AML byte stream */ #define AE_AML_BAD_OPCODE EXCEP_AML (0x0001) #define AE_AML_NO_OPERAND EXCEP_AML (0x0002) #define AE_AML_OPERAND_TYPE EXCEP_AML (0x0003) #define AE_AML_OPERAND_VALUE EXCEP_AML (0x0004) #define AE_AML_UNINITIALIZED_LOCAL EXCEP_AML (0x0005) #define AE_AML_UNINITIALIZED_ARG EXCEP_AML (0x0006) #define AE_AML_UNINITIALIZED_ELEMENT EXCEP_AML (0x0007) #define AE_AML_NUMERIC_OVERFLOW EXCEP_AML (0x0008) #define AE_AML_REGION_LIMIT EXCEP_AML (0x0009) #define AE_AML_BUFFER_LIMIT EXCEP_AML (0x000A) #define AE_AML_PACKAGE_LIMIT EXCEP_AML (0x000B) #define AE_AML_DIVIDE_BY_ZERO EXCEP_AML (0x000C) #define AE_AML_BAD_NAME EXCEP_AML (0x000D) #define AE_AML_NAME_NOT_FOUND EXCEP_AML (0x000E) #define AE_AML_INTERNAL EXCEP_AML (0x000F) #define AE_AML_INVALID_SPACE_ID EXCEP_AML (0x0010) #define AE_AML_STRING_LIMIT EXCEP_AML (0x0011) #define AE_AML_NO_RETURN_VALUE EXCEP_AML (0x0012) #define AE_AML_METHOD_LIMIT EXCEP_AML (0x0013) #define AE_AML_NOT_OWNER EXCEP_AML (0x0014) #define AE_AML_MUTEX_ORDER EXCEP_AML (0x0015) #define AE_AML_MUTEX_NOT_ACQUIRED EXCEP_AML (0x0016) #define AE_AML_INVALID_RESOURCE_TYPE EXCEP_AML (0x0017) #define AE_AML_INVALID_INDEX EXCEP_AML (0x0018) #define AE_AML_REGISTER_LIMIT EXCEP_AML (0x0019) #define AE_AML_NO_WHILE EXCEP_AML (0x001A) #define AE_AML_ALIGNMENT EXCEP_AML (0x001B) #define AE_AML_NO_RESOURCE_END_TAG EXCEP_AML (0x001C) #define AE_AML_BAD_RESOURCE_VALUE EXCEP_AML (0x001D) #define AE_AML_CIRCULAR_REFERENCE EXCEP_AML (0x001E) #define AE_AML_BAD_RESOURCE_LENGTH EXCEP_AML (0x001F) #define AE_AML_ILLEGAL_ADDRESS EXCEP_AML (0x0020) #define AE_AML_LOOP_TIMEOUT EXCEP_AML (0x0021) #define AE_AML_UNINITIALIZED_NODE EXCEP_AML (0x0022) #define AE_AML_TARGET_TYPE EXCEP_AML (0x0023) #define AE_AML_PROTOCOL EXCEP_AML (0x0024) #define AE_AML_BUFFER_LENGTH EXCEP_AML (0x0025) #define AE_CODE_AML_MAX 0x0025 /* * Internal exceptions used for control */ #define AE_CTRL_RETURN_VALUE EXCEP_CTL (0x0001) #define AE_CTRL_PENDING EXCEP_CTL (0x0002) #define AE_CTRL_TERMINATE EXCEP_CTL (0x0003) #define AE_CTRL_TRUE EXCEP_CTL (0x0004) #define AE_CTRL_FALSE EXCEP_CTL (0x0005) #define AE_CTRL_DEPTH EXCEP_CTL (0x0006) #define AE_CTRL_END EXCEP_CTL (0x0007) #define AE_CTRL_TRANSFER EXCEP_CTL (0x0008) #define AE_CTRL_BREAK EXCEP_CTL (0x0009) #define AE_CTRL_CONTINUE EXCEP_CTL (0x000A) #define AE_CTRL_PARSE_CONTINUE EXCEP_CTL (0x000B) #define AE_CTRL_PARSE_PENDING EXCEP_CTL (0x000C) #define AE_CODE_CTRL_MAX 0x000C /* Exception strings for acpi_format_exception */ #ifdef ACPI_DEFINE_EXCEPTION_TABLE /* * String versions of the exception codes above * These strings must match the corresponding defines exactly */ static const struct acpi_exception_info acpi_gbl_exception_names_env[] = { EXCEP_TXT("AE_OK", "No error"), EXCEP_TXT("AE_ERROR", "Unspecified error"), EXCEP_TXT("AE_NO_ACPI_TABLES", "ACPI tables could not be found"), EXCEP_TXT("AE_NO_NAMESPACE", "A namespace has not been loaded"), EXCEP_TXT("AE_NO_MEMORY", "Insufficient dynamic memory"), EXCEP_TXT("AE_NOT_FOUND", "A requested entity is not found"), EXCEP_TXT("AE_NOT_EXIST", "A required entity does not exist"), EXCEP_TXT("AE_ALREADY_EXISTS", "An entity already exists"), EXCEP_TXT("AE_TYPE", "The object type is incorrect"), EXCEP_TXT("AE_NULL_OBJECT", "A required object was missing"), EXCEP_TXT("AE_NULL_ENTRY", "The requested object does not exist"), EXCEP_TXT("AE_BUFFER_OVERFLOW", "The buffer provided is too small"), EXCEP_TXT("AE_STACK_OVERFLOW", "An internal stack overflowed"), EXCEP_TXT("AE_STACK_UNDERFLOW", "An internal stack underflowed"), EXCEP_TXT("AE_NOT_IMPLEMENTED", "The feature is not implemented"), EXCEP_TXT("AE_SUPPORT", "The feature is not supported"), EXCEP_TXT("AE_LIMIT", "A predefined limit was exceeded"), EXCEP_TXT("AE_TIME", "A time limit or timeout expired"), EXCEP_TXT("AE_ACQUIRE_DEADLOCK", "Internal error, attempt was made to acquire a mutex in improper order"), EXCEP_TXT("AE_RELEASE_DEADLOCK", "Internal error, attempt was made to release a mutex in improper order"), EXCEP_TXT("AE_NOT_ACQUIRED", "An attempt to release a mutex or Global Lock without a previous acquire"), EXCEP_TXT("AE_ALREADY_ACQUIRED", "Internal error, attempt was made to acquire a mutex twice"), EXCEP_TXT("AE_NO_HARDWARE_RESPONSE", "Hardware did not respond after an I/O operation"), EXCEP_TXT("AE_NO_GLOBAL_LOCK", "There is no FACS Global Lock"), EXCEP_TXT("AE_ABORT_METHOD", "A control method was aborted"), EXCEP_TXT("AE_SAME_HANDLER", "Attempt was made to install the same handler that is already installed"), EXCEP_TXT("AE_NO_HANDLER", "A handler for the operation is not installed"), EXCEP_TXT("AE_OWNER_ID_LIMIT", "There are no more Owner IDs available for ACPI tables or control methods"), EXCEP_TXT("AE_NOT_CONFIGURED", "The interface is not part of the current subsystem configuration"), EXCEP_TXT("AE_ACCESS", "Permission denied for the requested operation"), EXCEP_TXT("AE_IO_ERROR", "An I/O error occurred"), EXCEP_TXT("AE_NUMERIC_OVERFLOW", "Overflow during string-to-integer conversion"), EXCEP_TXT("AE_HEX_OVERFLOW", "Overflow during ASCII hex-to-binary conversion"), EXCEP_TXT("AE_DECIMAL_OVERFLOW", "Overflow during ASCII decimal-to-binary conversion"), EXCEP_TXT("AE_OCTAL_OVERFLOW", "Overflow during ASCII octal-to-binary conversion"), EXCEP_TXT("AE_END_OF_TABLE", "Reached the end of table") }; static const struct acpi_exception_info acpi_gbl_exception_names_pgm[] = { EXCEP_TXT(NULL, NULL), EXCEP_TXT("AE_BAD_PARAMETER", "A parameter is out of range or invalid"), EXCEP_TXT("AE_BAD_CHARACTER", "An invalid character was found in a name"), EXCEP_TXT("AE_BAD_PATHNAME", "An invalid character was found in a pathname"), EXCEP_TXT("AE_BAD_DATA", "A package or buffer contained incorrect data"), EXCEP_TXT("AE_BAD_HEX_CONSTANT", "Invalid character in a Hex constant"), EXCEP_TXT("AE_BAD_OCTAL_CONSTANT", "Invalid character in an Octal constant"), EXCEP_TXT("AE_BAD_DECIMAL_CONSTANT", "Invalid character in a Decimal constant"), EXCEP_TXT("AE_MISSING_ARGUMENTS", "Too few arguments were passed to a control method"), EXCEP_TXT("AE_BAD_ADDRESS", "An illegal null I/O address") }; static const struct acpi_exception_info acpi_gbl_exception_names_tbl[] = { EXCEP_TXT(NULL, NULL), EXCEP_TXT("AE_BAD_SIGNATURE", "An ACPI table has an invalid signature"), EXCEP_TXT("AE_BAD_HEADER", "Invalid field in an ACPI table header"), EXCEP_TXT("AE_BAD_CHECKSUM", "An ACPI table checksum is not correct"), EXCEP_TXT("AE_BAD_VALUE", "An invalid value was found in a table"), EXCEP_TXT("AE_INVALID_TABLE_LENGTH", "The FADT or FACS has improper length") }; static const struct acpi_exception_info acpi_gbl_exception_names_aml[] = { EXCEP_TXT(NULL, NULL), EXCEP_TXT("AE_AML_BAD_OPCODE", "Invalid AML opcode encountered"), EXCEP_TXT("AE_AML_NO_OPERAND", "A required operand is missing"), EXCEP_TXT("AE_AML_OPERAND_TYPE", "An operand of an incorrect type was encountered"), EXCEP_TXT("AE_AML_OPERAND_VALUE", "The operand had an inappropriate or invalid value"), EXCEP_TXT("AE_AML_UNINITIALIZED_LOCAL", "Method tried to use an uninitialized local variable"), EXCEP_TXT("AE_AML_UNINITIALIZED_ARG", "Method tried to use an uninitialized argument"), EXCEP_TXT("AE_AML_UNINITIALIZED_ELEMENT", "Method tried to use an empty package element"), EXCEP_TXT("AE_AML_NUMERIC_OVERFLOW", "Overflow during BCD conversion or other"), EXCEP_TXT("AE_AML_REGION_LIMIT", "Tried to access beyond the end of an Operation Region"), EXCEP_TXT("AE_AML_BUFFER_LIMIT", "Tried to access beyond the end of a buffer"), EXCEP_TXT("AE_AML_PACKAGE_LIMIT", "Tried to access beyond the end of a package"), EXCEP_TXT("AE_AML_DIVIDE_BY_ZERO", "During execution of AML Divide operator"), EXCEP_TXT("AE_AML_BAD_NAME", "An ACPI name contains invalid character(s)"), EXCEP_TXT("AE_AML_NAME_NOT_FOUND", "Could not resolve a named reference"), EXCEP_TXT("AE_AML_INTERNAL", "An internal error within the interpreter"), EXCEP_TXT("AE_AML_INVALID_SPACE_ID", "An Operation Region SpaceID is invalid"), EXCEP_TXT("AE_AML_STRING_LIMIT", "String is longer than 200 characters"), EXCEP_TXT("AE_AML_NO_RETURN_VALUE", "A method did not return a required value"), EXCEP_TXT("AE_AML_METHOD_LIMIT", "A control method reached the maximum reentrancy limit of 255"), EXCEP_TXT("AE_AML_NOT_OWNER", "A thread tried to release a mutex that it does not own"), EXCEP_TXT("AE_AML_MUTEX_ORDER", "Mutex SyncLevel release mismatch"), EXCEP_TXT("AE_AML_MUTEX_NOT_ACQUIRED", "Attempt to release a mutex that was not previously acquired"), EXCEP_TXT("AE_AML_INVALID_RESOURCE_TYPE", "Invalid resource type in resource list"), EXCEP_TXT("AE_AML_INVALID_INDEX", "Invalid Argx or Localx (x too large)"), EXCEP_TXT("AE_AML_REGISTER_LIMIT", "Bank value or Index value beyond range of register"), EXCEP_TXT("AE_AML_NO_WHILE", "Break or Continue without a While"), EXCEP_TXT("AE_AML_ALIGNMENT", "Non-aligned memory transfer on platform that does not support this"), EXCEP_TXT("AE_AML_NO_RESOURCE_END_TAG", "No End Tag in a resource list"), EXCEP_TXT("AE_AML_BAD_RESOURCE_VALUE", "Invalid value of a resource element"), EXCEP_TXT("AE_AML_CIRCULAR_REFERENCE", "Two references refer to each other"), EXCEP_TXT("AE_AML_BAD_RESOURCE_LENGTH", "The length of a Resource Descriptor in the AML is incorrect"), EXCEP_TXT("AE_AML_ILLEGAL_ADDRESS", "A memory, I/O, or PCI configuration address is invalid"), EXCEP_TXT("AE_AML_LOOP_TIMEOUT", "An AML While loop exceeded the maximum execution time"), EXCEP_TXT("AE_AML_UNINITIALIZED_NODE", "A namespace node is uninitialized or unresolved"), EXCEP_TXT("AE_AML_TARGET_TYPE", "A target operand of an incorrect type was encountered"), EXCEP_TXT("AE_AML_PROTOCOL", "Violation of a fixed ACPI protocol"), EXCEP_TXT("AE_AML_BUFFER_LENGTH", "The length of the buffer is invalid/incorrect") }; static const struct acpi_exception_info acpi_gbl_exception_names_ctrl[] = { EXCEP_TXT(NULL, NULL), EXCEP_TXT("AE_CTRL_RETURN_VALUE", "A Method returned a value"), EXCEP_TXT("AE_CTRL_PENDING", "Method is calling another method"), EXCEP_TXT("AE_CTRL_TERMINATE", "Terminate the executing method"), EXCEP_TXT("AE_CTRL_TRUE", "An If or While predicate result"), EXCEP_TXT("AE_CTRL_FALSE", "An If or While predicate result"), EXCEP_TXT("AE_CTRL_DEPTH", "Maximum search depth has been reached"), EXCEP_TXT("AE_CTRL_END", "An If or While predicate is false"), EXCEP_TXT("AE_CTRL_TRANSFER", "Transfer control to called method"), EXCEP_TXT("AE_CTRL_BREAK", "A Break has been executed"), EXCEP_TXT("AE_CTRL_CONTINUE", "A Continue has been executed"), EXCEP_TXT("AE_CTRL_PARSE_CONTINUE", "Used to skip over bad opcodes"), EXCEP_TXT("AE_CTRL_PARSE_PENDING", "Used to implement AML While loops") }; #endif /* EXCEPTION_TABLE */ #endif /* __ACEXCEP_H__ */ PKk]Yk:r:r acpi_bus.hnu[/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * acpi_bus.h - ACPI Bus Driver ($Revision: 22 $) * * Copyright (C) 2001, 2002 Andy Grover * Copyright (C) 2001, 2002 Paul Diefenbaugh */ #ifndef __ACPI_BUS_H__ #define __ACPI_BUS_H__ #include #include struct acpi_handle_list { u32 count; acpi_handle *handles; }; /* acpi_utils.h */ acpi_status acpi_extract_package(union acpi_object *package, struct acpi_buffer *format, struct acpi_buffer *buffer); acpi_status acpi_evaluate_integer(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, unsigned long long *data); bool acpi_evaluate_reference(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, struct acpi_handle_list *list); bool acpi_handle_list_equal(struct acpi_handle_list *list1, struct acpi_handle_list *list2); void acpi_handle_list_replace(struct acpi_handle_list *dst, struct acpi_handle_list *src); void acpi_handle_list_free(struct acpi_handle_list *list); bool acpi_device_dep(acpi_handle target, acpi_handle match); acpi_status acpi_evaluate_ost(acpi_handle handle, u32 source_event, u32 status_code, struct acpi_buffer *status_buf); acpi_status acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); bool acpi_has_method(acpi_handle handle, char *name); acpi_status acpi_execute_simple_method(acpi_handle handle, char *method, u64 arg); acpi_status acpi_evaluate_ej0(acpi_handle handle); acpi_status acpi_evaluate_lck(acpi_handle handle, int lock); acpi_status acpi_evaluate_reg(acpi_handle handle, u8 space_id, u32 function); bool acpi_ata_match(acpi_handle handle); bool acpi_bay_match(acpi_handle handle); bool acpi_dock_match(acpi_handle handle); bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 funcs); union acpi_object *acpi_evaluate_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 func, union acpi_object *argv4); #ifdef CONFIG_ACPI static inline union acpi_object * acpi_evaluate_dsm_typed(acpi_handle handle, const guid_t *guid, u64 rev, u64 func, union acpi_object *argv4, acpi_object_type type) { union acpi_object *obj; obj = acpi_evaluate_dsm(handle, guid, rev, func, argv4); if (obj && obj->type != type) { ACPI_FREE(obj); obj = NULL; } return obj; } #endif #define ACPI_INIT_DSM_ARGV4(cnt, eles) \ { \ .package.type = ACPI_TYPE_PACKAGE, \ .package.count = (cnt), \ .package.elements = (eles) \ } bool acpi_dev_found(const char *hid); bool acpi_dev_present(const char *hid, const char *uid, s64 hrv); bool acpi_reduced_hardware(void); #ifdef CONFIG_ACPI struct proc_dir_entry; #define ACPI_BUS_FILE_ROOT "acpi" extern struct proc_dir_entry *acpi_root_dir; enum acpi_bus_device_type { ACPI_BUS_TYPE_DEVICE = 0, ACPI_BUS_TYPE_POWER, ACPI_BUS_TYPE_PROCESSOR, ACPI_BUS_TYPE_THERMAL, ACPI_BUS_TYPE_POWER_BUTTON, ACPI_BUS_TYPE_SLEEP_BUTTON, ACPI_BUS_TYPE_ECDT_EC, ACPI_BUS_DEVICE_TYPE_COUNT }; struct acpi_driver; struct acpi_device; /* * ACPI Scan Handler * ----------------- */ struct acpi_hotplug_profile { struct kobject kobj; int (*scan_dependent)(struct acpi_device *adev); void (*notify_online)(struct acpi_device *adev); bool enabled:1; bool demand_offline:1; }; static inline struct acpi_hotplug_profile *to_acpi_hotplug_profile( struct kobject *kobj) { return container_of(kobj, struct acpi_hotplug_profile, kobj); } struct acpi_scan_handler { const struct acpi_device_id *ids; struct list_head list_node; bool (*match)(const char *idstr, const struct acpi_device_id **matchid); int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id); void (*detach)(struct acpi_device *dev); void (*bind)(struct device *phys_dev); void (*unbind)(struct device *phys_dev); struct acpi_hotplug_profile hotplug; }; /* * ACPI Hotplug Context * -------------------- */ struct acpi_hotplug_context { struct acpi_device *self; int (*notify)(struct acpi_device *, u32); void (*uevent)(struct acpi_device *, u32); void (*fixup)(struct acpi_device *); }; /* * ACPI Driver * ----------- */ typedef int (*acpi_op_add) (struct acpi_device * device); typedef void (*acpi_op_remove) (struct acpi_device *device); typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event); struct acpi_device_ops { acpi_op_add add; acpi_op_remove remove; acpi_op_notify notify; }; #define ACPI_DRIVER_ALL_NOTIFY_EVENTS 0x1 /* system AND device events */ struct acpi_driver { char name[80]; char class[80]; const struct acpi_device_id *ids; /* Supported Hardware IDs */ unsigned int flags; struct acpi_device_ops ops; struct device_driver drv; struct module *owner; }; /* * ACPI Device * ----------- */ /* Status (_STA) */ struct acpi_device_status { u32 present:1; u32 enabled:1; u32 show_in_ui:1; u32 functional:1; u32 battery_present:1; u32 reserved:27; }; /* Flags */ struct acpi_device_flags { u32 dynamic_status:1; u32 removable:1; u32 ejectable:1; u32 power_manageable:1; u32 match_driver:1; u32 initialized:1; u32 visited:1; u32 hotplug_notify:1; u32 is_dock_station:1; u32 of_compatible_ok:1; u32 coherent_dma:1; u32 cca_seen:1; u32 enumeration_by_parent:1; u32 honor_deps:1; u32 reserved:18; }; /* File System */ struct acpi_device_dir { struct proc_dir_entry *entry; }; #define acpi_device_dir(d) ((d)->dir.entry) /* Plug and Play */ typedef char acpi_bus_id[8]; typedef u64 acpi_bus_address; typedef char acpi_device_name[40]; typedef char acpi_device_class[20]; struct acpi_hardware_id { struct list_head list; const char *id; }; struct acpi_pnp_type { u32 hardware_id:1; u32 bus_address:1; u32 platform_id:1; u32 backlight:1; u32 reserved:28; }; struct acpi_device_pnp { acpi_bus_id bus_id; /* Object name */ int instance_no; /* Instance number of this object */ struct acpi_pnp_type type; /* ID type */ acpi_bus_address bus_address; /* _ADR */ char *unique_id; /* _UID */ struct list_head ids; /* _HID and _CIDs */ acpi_device_name device_name; /* Driver-determined */ acpi_device_class device_class; /* " */ union acpi_object *str_obj; /* unicode string for _STR method */ }; #define acpi_device_bid(d) ((d)->pnp.bus_id) #define acpi_device_adr(d) ((d)->pnp.bus_address) const char *acpi_device_hid(struct acpi_device *device); #define acpi_device_uid(d) ((d)->pnp.unique_id) #define acpi_device_name(d) ((d)->pnp.device_name) #define acpi_device_class(d) ((d)->pnp.device_class) /* Power Management */ struct acpi_device_power_flags { u32 explicit_get:1; /* _PSC present? */ u32 power_resources:1; /* Power resources */ u32 inrush_current:1; /* Serialize Dx->D0 */ u32 power_removed:1; /* Optimize Dx->D0 */ u32 ignore_parent:1; /* Power is independent of parent power state */ u32 dsw_present:1; /* _DSW present? */ u32 reserved:26; }; struct acpi_device_power_state { struct { u8 valid:1; u8 explicit_set:1; /* _PSx present? */ u8 reserved:6; } flags; int power; /* % Power (compared to D0) */ int latency; /* Dx->D0 time (microseconds) */ struct list_head resources; /* Power resources referenced */ }; struct acpi_device_power { int state; /* Current state */ struct acpi_device_power_flags flags; struct acpi_device_power_state states[ACPI_D_STATE_COUNT]; /* Power states (D0-D3Cold) */ u8 state_for_enumeration; /* Deepest power state for enumeration */ }; struct acpi_dep_data { struct list_head node; acpi_handle supplier; acpi_handle consumer; bool honor_dep; bool met; bool free_when_met; }; /* Performance Management */ struct acpi_device_perf_flags { u8 reserved:8; }; struct acpi_device_perf_state { struct { u8 valid:1; u8 reserved:7; } flags; u8 power; /* % Power (compared to P0) */ u8 performance; /* % Performance ( " ) */ int latency; /* Px->P0 time (microseconds) */ }; struct acpi_device_perf { int state; struct acpi_device_perf_flags flags; int state_count; struct acpi_device_perf_state *states; }; /* Wakeup Management */ struct acpi_device_wakeup_flags { u8 valid:1; /* Can successfully enable wakeup? */ u8 notifier_present:1; /* Wake-up notify handler has been installed */ }; struct acpi_device_wakeup_context { void (*func)(struct acpi_device_wakeup_context *context); struct device *dev; }; struct acpi_device_wakeup { acpi_handle gpe_device; u64 gpe_number; u64 sleep_state; struct list_head resources; struct acpi_device_wakeup_flags flags; struct acpi_device_wakeup_context context; struct wakeup_source *ws; int prepare_count; int enable_count; }; struct acpi_device_physical_node { unsigned int node_id; struct list_head node; struct device *dev; bool put_online:1; }; struct acpi_device_properties { const guid_t *guid; union acpi_object *properties; struct list_head list; void **bufs; }; /* ACPI Device Specific Data (_DSD) */ struct acpi_device_data { const union acpi_object *pointer; struct list_head properties; const union acpi_object *of_compatible; struct list_head subnodes; }; struct acpi_gpio_mapping; #define ACPI_DEVICE_SWNODE_ROOT 0 /* * The maximum expected number of CSI-2 data lanes. * * This number is not expected to ever have to be equal to or greater than the * number of bits in an unsigned long variable, but if it needs to be increased * above that limit, code will need to be adjusted accordingly. */ #define ACPI_DEVICE_CSI2_DATA_LANES 8 #define ACPI_DEVICE_SWNODE_PORT_NAME_LENGTH 8 enum acpi_device_swnode_dev_props { ACPI_DEVICE_SWNODE_DEV_ROTATION, ACPI_DEVICE_SWNODE_DEV_CLOCK_FREQUENCY, ACPI_DEVICE_SWNODE_DEV_LED_MAX_MICROAMP, ACPI_DEVICE_SWNODE_DEV_FLASH_MAX_MICROAMP, ACPI_DEVICE_SWNODE_DEV_FLASH_MAX_TIMEOUT_US, ACPI_DEVICE_SWNODE_DEV_NUM_OF, ACPI_DEVICE_SWNODE_DEV_NUM_ENTRIES }; enum acpi_device_swnode_port_props { ACPI_DEVICE_SWNODE_PORT_REG, ACPI_DEVICE_SWNODE_PORT_NUM_OF, ACPI_DEVICE_SWNODE_PORT_NUM_ENTRIES }; enum acpi_device_swnode_ep_props { ACPI_DEVICE_SWNODE_EP_REMOTE_EP, ACPI_DEVICE_SWNODE_EP_BUS_TYPE, ACPI_DEVICE_SWNODE_EP_REG, ACPI_DEVICE_SWNODE_EP_CLOCK_LANES, ACPI_DEVICE_SWNODE_EP_DATA_LANES, ACPI_DEVICE_SWNODE_EP_LANE_POLARITIES, /* TX only */ ACPI_DEVICE_SWNODE_EP_LINK_FREQUENCIES, ACPI_DEVICE_SWNODE_EP_NUM_OF, ACPI_DEVICE_SWNODE_EP_NUM_ENTRIES }; /* * Each device has a root software node plus two times as many nodes as the * number of CSI-2 ports. */ #define ACPI_DEVICE_SWNODE_PORT(port) (2 * (port) + 1) #define ACPI_DEVICE_SWNODE_EP(endpoint) \ (ACPI_DEVICE_SWNODE_PORT(endpoint) + 1) /** * struct acpi_device_software_node_port - MIPI DisCo for Imaging CSI-2 port * @port_name: Port name. * @data_lanes: "data-lanes" property values. * @lane_polarities: "lane-polarities" property values. * @link_frequencies: "link_frequencies" property values. * @port_nr: Port number. * @crs_crs2_local: _CRS CSI2 record present (i.e. this is a transmitter one). * @port_props: Port properties. * @ep_props: Endpoint properties. * @remote_ep: Reference to the remote endpoint. */ struct acpi_device_software_node_port { char port_name[ACPI_DEVICE_SWNODE_PORT_NAME_LENGTH + 1]; u32 data_lanes[ACPI_DEVICE_CSI2_DATA_LANES]; u32 lane_polarities[ACPI_DEVICE_CSI2_DATA_LANES + 1 /* clock lane */]; u64 link_frequencies[ACPI_DEVICE_CSI2_DATA_LANES]; unsigned int port_nr; bool crs_csi2_local; struct property_entry port_props[ACPI_DEVICE_SWNODE_PORT_NUM_ENTRIES]; struct property_entry ep_props[ACPI_DEVICE_SWNODE_EP_NUM_ENTRIES]; struct software_node_ref_args remote_ep[1]; }; /** * struct acpi_device_software_nodes - Software nodes for an ACPI device * @dev_props: Device properties. * @nodes: Software nodes for root as well as ports and endpoints. * @nodeprts: Array of software node pointers, for (un)registering them. * @ports: Information related to each port and endpoint within a port. * @num_ports: The number of ports. */ struct acpi_device_software_nodes { struct property_entry dev_props[ACPI_DEVICE_SWNODE_DEV_NUM_ENTRIES]; struct software_node *nodes; const struct software_node **nodeptrs; struct acpi_device_software_node_port *ports; unsigned int num_ports; }; /* Device */ struct acpi_device { u32 pld_crc; int device_type; acpi_handle handle; /* no handle for fixed hardware */ struct fwnode_handle fwnode; struct list_head wakeup_list; struct list_head del_list; struct acpi_device_status status; struct acpi_device_flags flags; struct acpi_device_pnp pnp; struct acpi_device_power power; struct acpi_device_wakeup wakeup; struct acpi_device_perf performance; struct acpi_device_dir dir; struct acpi_device_data data; struct acpi_scan_handler *handler; struct acpi_hotplug_context *hp; struct acpi_device_software_nodes *swnodes; const struct acpi_gpio_mapping *driver_gpios; void *driver_data; struct device dev; unsigned int physical_node_count; unsigned int dep_unmet; struct list_head physical_node_list; struct mutex physical_node_lock; void (*remove)(struct acpi_device *); }; /* Non-device subnode */ struct acpi_data_node { const char *name; acpi_handle handle; struct fwnode_handle fwnode; struct fwnode_handle *parent; struct acpi_device_data data; struct list_head sibling; struct kobject kobj; struct completion kobj_done; }; extern const struct fwnode_operations acpi_device_fwnode_ops; extern const struct fwnode_operations acpi_data_fwnode_ops; extern const struct fwnode_operations acpi_static_fwnode_ops; bool is_acpi_device_node(const struct fwnode_handle *fwnode); bool is_acpi_data_node(const struct fwnode_handle *fwnode); static inline bool is_acpi_node(const struct fwnode_handle *fwnode) { return (is_acpi_device_node(fwnode) || is_acpi_data_node(fwnode)); } #define to_acpi_device_node(__fwnode) \ ({ \ typeof(__fwnode) __to_acpi_device_node_fwnode = __fwnode; \ \ is_acpi_device_node(__to_acpi_device_node_fwnode) ? \ container_of(__to_acpi_device_node_fwnode, \ struct acpi_device, fwnode) : \ NULL; \ }) #define to_acpi_data_node(__fwnode) \ ({ \ typeof(__fwnode) __to_acpi_data_node_fwnode = __fwnode; \ \ is_acpi_data_node(__to_acpi_data_node_fwnode) ? \ container_of(__to_acpi_data_node_fwnode, \ struct acpi_data_node, fwnode) : \ NULL; \ }) static inline bool is_acpi_static_node(const struct fwnode_handle *fwnode) { return !IS_ERR_OR_NULL(fwnode) && fwnode->ops == &acpi_static_fwnode_ops; } static inline bool acpi_data_node_match(const struct fwnode_handle *fwnode, const char *name) { return is_acpi_data_node(fwnode) ? (!strcmp(to_acpi_data_node(fwnode)->name, name)) : false; } static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev) { return &adev->fwnode; } static inline void *acpi_driver_data(struct acpi_device *d) { return d->driver_data; } #define to_acpi_device(d) container_of(d, struct acpi_device, dev) #define to_acpi_driver(d) container_of(d, struct acpi_driver, drv) static inline struct acpi_device *acpi_dev_parent(struct acpi_device *adev) { if (adev->dev.parent) return to_acpi_device(adev->dev.parent); return NULL; } static inline void acpi_set_device_status(struct acpi_device *adev, u32 sta) { *((u32 *)&adev->status) = sta; } static inline void acpi_set_hp_context(struct acpi_device *adev, struct acpi_hotplug_context *hp) { hp->self = adev; adev->hp = hp; } void acpi_initialize_hp_context(struct acpi_device *adev, struct acpi_hotplug_context *hp, int (*notify)(struct acpi_device *, u32), void (*uevent)(struct acpi_device *, u32)); /* acpi_device.dev.bus == &acpi_bus_type */ extern struct bus_type acpi_bus_type; int acpi_bus_for_each_dev(int (*fn)(struct device *, void *), void *data); int acpi_dev_for_each_child(struct acpi_device *adev, int (*fn)(struct acpi_device *, void *), void *data); int acpi_dev_for_each_child_reverse(struct acpi_device *adev, int (*fn)(struct acpi_device *, void *), void *data); /* * Events * ------ */ struct acpi_bus_event { struct list_head node; acpi_device_class device_class; acpi_bus_id bus_id; u32 type; u32 data; }; extern struct kobject *acpi_kobj; extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int); void acpi_bus_private_data_handler(acpi_handle, void *); int acpi_bus_get_private_data(acpi_handle, void **); int acpi_bus_attach_private_data(acpi_handle, void *); void acpi_bus_detach_private_data(acpi_handle); int acpi_dev_install_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler, void *context); void acpi_dev_remove_notify_handler(struct acpi_device *adev, u32 handler_type, acpi_notify_handler handler); extern int acpi_notifier_call_chain(struct acpi_device *, u32, u32); extern int register_acpi_notifier(struct notifier_block *); extern int unregister_acpi_notifier(struct notifier_block *); /* * External Functions */ acpi_status acpi_bus_get_status_handle(acpi_handle handle, unsigned long long *sta); int acpi_bus_get_status(struct acpi_device *device); int acpi_bus_set_power(acpi_handle handle, int state); const char *acpi_power_state_string(int state); int acpi_device_set_power(struct acpi_device *device, int state); int acpi_bus_init_power(struct acpi_device *device); int acpi_device_fix_up_power(struct acpi_device *device); void acpi_device_fix_up_power_extended(struct acpi_device *adev); void acpi_device_fix_up_power_children(struct acpi_device *adev); int acpi_bus_update_power(acpi_handle handle, int *state_p); int acpi_device_update_power(struct acpi_device *device, int *state_p); bool acpi_bus_power_manageable(acpi_handle handle); void acpi_dev_power_up_children_with_adr(struct acpi_device *adev); u8 acpi_dev_power_state_for_wake(struct acpi_device *adev); int acpi_device_power_add_dependent(struct acpi_device *adev, struct device *dev); void acpi_device_power_remove_dependent(struct acpi_device *adev, struct device *dev); #ifdef CONFIG_PM bool acpi_bus_can_wakeup(acpi_handle handle); #else static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; } #endif void acpi_scan_lock_acquire(void); void acpi_scan_lock_release(void); void acpi_lock_hp_context(void); void acpi_unlock_hp_context(void); int acpi_scan_add_handler(struct acpi_scan_handler *handler); int acpi_bus_register_driver(struct acpi_driver *driver); void acpi_bus_unregister_driver(struct acpi_driver *driver); int acpi_bus_scan(acpi_handle handle); void acpi_bus_trim(struct acpi_device *start); acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd); int acpi_match_device_ids(struct acpi_device *device, const struct acpi_device_id *ids); void acpi_set_modalias(struct acpi_device *adev, const char *default_id, char *modalias, size_t len); static inline bool acpi_device_enumerated(struct acpi_device *adev) { return adev && adev->flags.initialized && adev->flags.visited; } /** * module_acpi_driver(acpi_driver) - Helper macro for registering an ACPI driver * @__acpi_driver: acpi_driver struct * * Helper macro for ACPI drivers which do not do anything special in module * init/exit. This eliminates a lot of boilerplate. Each module may only * use this macro once, and calling it replaces module_init() and module_exit() */ #define module_acpi_driver(__acpi_driver) \ module_driver(__acpi_driver, acpi_bus_register_driver, \ acpi_bus_unregister_driver) /* * Bind physical devices with ACPI devices */ struct acpi_bus_type { struct list_head list; const char *name; bool (*match)(struct device *dev); struct acpi_device * (*find_companion)(struct device *); void (*setup)(struct device *); }; int register_acpi_bus_type(struct acpi_bus_type *); int unregister_acpi_bus_type(struct acpi_bus_type *); int acpi_bind_one(struct device *dev, struct acpi_device *adev); int acpi_unbind_one(struct device *dev); enum acpi_bridge_type { ACPI_BRIDGE_TYPE_PCIE = 1, ACPI_BRIDGE_TYPE_CXL, }; struct acpi_pci_root { struct acpi_device * device; struct pci_bus *bus; u16 segment; int bridge_type; struct resource secondary; /* downstream bus range */ u32 osc_support_set; /* _OSC state of support bits */ u32 osc_control_set; /* _OSC state of control bits */ u32 osc_ext_support_set; /* _OSC state of extended support bits */ u32 osc_ext_control_set; /* _OSC state of extended control bits */ phys_addr_t mcfg_addr; }; /* helper */ struct iommu_ops; bool acpi_dma_supported(const struct acpi_device *adev); enum dev_dma_attr acpi_get_dma_attr(struct acpi_device *adev); int acpi_iommu_fwspec_init(struct device *dev, u32 id, struct fwnode_handle *fwnode, const struct iommu_ops *ops); int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map); int acpi_dma_configure_id(struct device *dev, enum dev_dma_attr attr, const u32 *input_id); static inline int acpi_dma_configure(struct device *dev, enum dev_dma_attr attr) { return acpi_dma_configure_id(dev, attr, NULL); } struct acpi_device *acpi_find_child_device(struct acpi_device *parent, u64 address, bool check_children); struct acpi_device *acpi_find_child_by_adr(struct acpi_device *adev, acpi_bus_address adr); int acpi_is_root_bridge(acpi_handle); struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); int acpi_disable_wakeup_device_power(struct acpi_device *dev); #ifdef CONFIG_X86 bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *status); bool acpi_quirk_skip_acpi_ac_and_battery(void); int acpi_install_cmos_rtc_space_handler(acpi_handle handle); void acpi_remove_cmos_rtc_space_handler(acpi_handle handle); int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip); #else static inline bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *status) { return false; } static inline bool acpi_quirk_skip_acpi_ac_and_battery(void) { return false; } static inline int acpi_install_cmos_rtc_space_handler(acpi_handle handle) { return 1; } static inline void acpi_remove_cmos_rtc_space_handler(acpi_handle handle) { } static inline int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) { *skip = false; return 0; } #endif #if IS_ENABLED(CONFIG_X86_ANDROID_TABLETS) bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev); bool acpi_quirk_skip_gpio_event_handlers(void); #else static inline bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev) { return false; } static inline bool acpi_quirk_skip_gpio_event_handlers(void) { return false; } #endif #ifdef CONFIG_PM void acpi_pm_wakeup_event(struct device *dev); acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev, void (*func)(struct acpi_device_wakeup_context *context)); acpi_status acpi_remove_pm_notifier(struct acpi_device *adev); bool acpi_pm_device_can_wakeup(struct device *dev); int acpi_pm_device_sleep_state(struct device *, int *, int); int acpi_pm_set_device_wakeup(struct device *dev, bool enable); #else static inline void acpi_pm_wakeup_event(struct device *dev) { } static inline acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev, void (*func)(struct acpi_device_wakeup_context *context)) { return AE_SUPPORT; } static inline acpi_status acpi_remove_pm_notifier(struct acpi_device *adev) { return AE_SUPPORT; } static inline bool acpi_pm_device_can_wakeup(struct device *dev) { return false; } static inline int acpi_pm_device_sleep_state(struct device *d, int *p, int m) { if (p) *p = ACPI_STATE_D0; return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3_COLD) ? m : ACPI_STATE_D0; } static inline int acpi_pm_set_device_wakeup(struct device *dev, bool enable) { return -ENODEV; } #endif #ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT bool acpi_sleep_state_supported(u8 sleep_state); #else static inline bool acpi_sleep_state_supported(u8 sleep_state) { return false; } #endif #ifdef CONFIG_ACPI_SLEEP u32 acpi_target_system_state(void); #else static inline u32 acpi_target_system_state(void) { return ACPI_STATE_S0; } #endif static inline bool acpi_device_power_manageable(struct acpi_device *adev) { return adev->flags.power_manageable; } static inline bool acpi_device_can_wakeup(struct acpi_device *adev) { return adev->wakeup.flags.valid; } static inline bool acpi_device_can_poweroff(struct acpi_device *adev) { return adev->power.states[ACPI_STATE_D3_COLD].flags.valid || ((acpi_gbl_FADT.header.revision < 6) && adev->power.states[ACPI_STATE_D3_HOT].flags.explicit_set); } int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer); static inline bool acpi_dev_hid_match(struct acpi_device *adev, const char *hid2) { const char *hid1 = acpi_device_hid(adev); return hid1 && hid2 && !strcmp(hid1, hid2); } static inline bool acpi_str_uid_match(struct acpi_device *adev, const char *uid2) { const char *uid1 = acpi_device_uid(adev); return uid1 && uid2 && !strcmp(uid1, uid2); } static inline bool acpi_int_uid_match(struct acpi_device *adev, u64 uid2) { u64 uid1; return !acpi_dev_uid_to_integer(adev, &uid1) && uid1 == uid2; } #define TYPE_ENTRY(type, x) \ const type: x, \ type: x #define ACPI_STR_TYPES(match) \ TYPE_ENTRY(unsigned char *, match), \ TYPE_ENTRY(signed char *, match), \ TYPE_ENTRY(char *, match), \ TYPE_ENTRY(void *, match) /** * acpi_dev_uid_match - Match device by supplied UID * @adev: ACPI device to match. * @uid2: Unique ID of the device. * * Matches UID in @adev with given @uid2. * * Returns: %true if matches, %false otherwise. */ #define acpi_dev_uid_match(adev, uid2) \ _Generic(uid2, \ /* Treat @uid2 as a string for acpi string types */ \ ACPI_STR_TYPES(acpi_str_uid_match), \ /* Treat as an integer otherwise */ \ default: acpi_int_uid_match)(adev, uid2) /** * acpi_dev_hid_uid_match - Match device by supplied HID and UID * @adev: ACPI device to match. * @hid2: Hardware ID of the device. * @uid2: Unique ID of the device, pass NULL to not check _UID. * * Matches HID and UID in @adev with given @hid2 and @uid2. Absence of @uid2 * will be treated as a match. If user wants to validate @uid2, it should be * done before calling this function. * * Returns: %true if matches or @uid2 is NULL, %false otherwise. */ #define acpi_dev_hid_uid_match(adev, hid2, uid2) \ (acpi_dev_hid_match(adev, hid2) && \ /* Distinguish integer 0 from NULL @uid2 */ \ (_Generic(uid2, ACPI_STR_TYPES(!(uid2)), default: 0) || \ acpi_dev_uid_match(adev, uid2))) void acpi_dev_clear_dependencies(struct acpi_device *supplier); bool acpi_dev_ready_for_enumeration(const struct acpi_device *device); struct acpi_device *acpi_dev_get_next_consumer_dev(struct acpi_device *supplier, struct acpi_device *start); /** * for_each_acpi_consumer_dev - iterate over the consumer ACPI devices for a * given supplier * @supplier: Pointer to the supplier's ACPI device * @consumer: Pointer to &struct acpi_device to hold the consumer, initially NULL */ #define for_each_acpi_consumer_dev(supplier, consumer) \ for (consumer = acpi_dev_get_next_consumer_dev(supplier, NULL); \ consumer; \ consumer = acpi_dev_get_next_consumer_dev(supplier, consumer)) struct acpi_device * acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv); struct acpi_device * acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv); /** * for_each_acpi_dev_match - iterate over ACPI devices that matching the criteria * @adev: pointer to the matching ACPI device, NULL at the end of the loop * @hid: Hardware ID of the device. * @uid: Unique ID of the device, pass NULL to not check _UID * @hrv: Hardware Revision of the device, pass -1 to not check _HRV * * The caller is responsible for invoking acpi_dev_put() on the returned device. */ #define for_each_acpi_dev_match(adev, hid, uid, hrv) \ for (adev = acpi_dev_get_first_match_dev(hid, uid, hrv); \ adev; \ adev = acpi_dev_get_next_match_dev(adev, hid, uid, hrv)) static inline struct acpi_device *acpi_dev_get(struct acpi_device *adev) { return adev ? to_acpi_device(get_device(&adev->dev)) : NULL; } static inline void acpi_dev_put(struct acpi_device *adev) { if (adev) put_device(&adev->dev); } struct acpi_device *acpi_fetch_acpi_dev(acpi_handle handle); struct acpi_device *acpi_get_acpi_dev(acpi_handle handle); static inline void acpi_put_acpi_dev(struct acpi_device *adev) { acpi_dev_put(adev); } int acpi_wait_for_acpi_ipmi(void); #else /* CONFIG_ACPI */ static inline int register_acpi_bus_type(void *bus) { return 0; } static inline int unregister_acpi_bus_type(void *bus) { return 0; } static inline int acpi_wait_for_acpi_ipmi(void) { return 0; } #endif /* CONFIG_ACPI */ #endif /*__ACPI_BUS_H__*/ PKk]p// processor.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ACPI_PROCESSOR_H #define __ACPI_PROCESSOR_H #include #include #include #include #include #include #include #include #include #include #define ACPI_PROCESSOR_CLASS "processor" #define ACPI_PROCESSOR_DEVICE_NAME "Processor" #define ACPI_PROCESSOR_DEVICE_HID "ACPI0007" #define ACPI_PROCESSOR_CONTAINER_HID "ACPI0010" #define ACPI_PROCESSOR_BUSY_METRIC 10 #define ACPI_PROCESSOR_MAX_POWER 8 #define ACPI_PROCESSOR_MAX_C2_LATENCY 100 #define ACPI_PROCESSOR_MAX_C3_LATENCY 1000 #define ACPI_PROCESSOR_MAX_THROTTLING 16 #define ACPI_PROCESSOR_MAX_THROTTLE 250 /* 25% */ #define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4 #define ACPI_PDC_REVISION_ID 0x1 #define ACPI_PSD_REV0_REVISION 0 /* Support for _PSD as in ACPI 3.0 */ #define ACPI_PSD_REV0_ENTRIES 5 #define ACPI_TSD_REV0_REVISION 0 /* Support for _PSD as in ACPI 3.0 */ #define ACPI_TSD_REV0_ENTRIES 5 /* * Types of coordination defined in ACPI 3.0. Same macros can be used across * P, C and T states */ #define DOMAIN_COORD_TYPE_SW_ALL 0xfc #define DOMAIN_COORD_TYPE_SW_ANY 0xfd #define DOMAIN_COORD_TYPE_HW_ALL 0xfe #define ACPI_CSTATE_SYSTEMIO 0 #define ACPI_CSTATE_FFH 1 #define ACPI_CSTATE_HALT 2 #define ACPI_CSTATE_INTEGER 3 #define ACPI_CX_DESC_LEN 32 /* Power Management */ struct acpi_processor_cx; struct acpi_power_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 access_size; u64 address; } __packed; struct acpi_processor_cx { u8 valid; u8 type; u32 address; u8 entry_method; u8 index; u32 latency; u8 bm_sts_skip; char desc[ACPI_CX_DESC_LEN]; }; struct acpi_lpi_state { u32 min_residency; u32 wake_latency; /* worst case */ u32 flags; u32 arch_flags; u32 res_cnt_freq; u32 enable_parent_state; u64 address; u8 index; u8 entry_method; char desc[ACPI_CX_DESC_LEN]; }; struct acpi_processor_power { int count; union { struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER]; struct acpi_lpi_state lpi_states[ACPI_PROCESSOR_MAX_POWER]; }; int timer_broadcast_on_state; }; /* Performance Management */ struct acpi_psd_package { u64 num_entries; u64 revision; u64 domain; u64 coord_type; u64 num_processors; } __packed; struct acpi_pct_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 reserved; u64 address; } __packed; struct acpi_processor_px { u64 core_frequency; /* megahertz */ u64 power; /* milliWatts */ u64 transition_latency; /* microseconds */ u64 bus_master_latency; /* microseconds */ u64 control; /* control value */ u64 status; /* success indicator */ }; struct acpi_processor_performance { unsigned int state; unsigned int platform_limit; struct acpi_pct_register control_register; struct acpi_pct_register status_register; unsigned int state_count; struct acpi_processor_px *states; struct acpi_psd_package domain_info; cpumask_var_t shared_cpu_map; unsigned int shared_type; }; /* Throttling Control */ struct acpi_tsd_package { u64 num_entries; u64 revision; u64 domain; u64 coord_type; u64 num_processors; } __packed; struct acpi_ptc_register { u8 descriptor; u16 length; u8 space_id; u8 bit_width; u8 bit_offset; u8 reserved; u64 address; } __packed; struct acpi_processor_tx_tss { u64 freqpercentage; /* */ u64 power; /* milliWatts */ u64 transition_latency; /* microseconds */ u64 control; /* control value */ u64 status; /* success indicator */ }; struct acpi_processor_tx { u16 power; u16 performance; }; struct acpi_processor; struct acpi_processor_throttling { unsigned int state; unsigned int platform_limit; struct acpi_pct_register control_register; struct acpi_pct_register status_register; unsigned int state_count; struct acpi_processor_tx_tss *states_tss; struct acpi_tsd_package domain_info; cpumask_var_t shared_cpu_map; int (*acpi_processor_get_throttling) (struct acpi_processor * pr); int (*acpi_processor_set_throttling) (struct acpi_processor * pr, int state, bool force); u32 address; u8 duty_offset; u8 duty_width; u8 tsd_valid_flag; unsigned int shared_type; struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING]; }; /* Limit Interface */ struct acpi_processor_lx { int px; /* performance state */ int tx; /* throttle level */ }; struct acpi_processor_limit { struct acpi_processor_lx state; /* current limit */ struct acpi_processor_lx thermal; /* thermal limit */ struct acpi_processor_lx user; /* user limit */ }; struct acpi_processor_flags { u8 power:1; u8 performance:1; u8 throttling:1; u8 limit:1; u8 bm_control:1; u8 bm_check:1; u8 has_cst:1; u8 has_lpi:1; u8 power_setup_done:1; u8 bm_rld_set:1; u8 need_hotplug_init:1; }; struct acpi_processor { acpi_handle handle; u32 acpi_id; phys_cpuid_t phys_id; /* CPU hardware ID such as APIC ID for x86 */ u32 id; /* CPU logical ID allocated by OS */ u32 pblk; int performance_platform_limit; int throttling_platform_limit; /* 0 - states 0..n-th state available */ struct acpi_processor_flags flags; struct acpi_processor_power power; struct acpi_processor_performance *performance; struct acpi_processor_throttling throttling; struct acpi_processor_limit limit; struct thermal_cooling_device *cdev; struct device *dev; /* Processor device. */ struct freq_qos_request perflib_req; struct freq_qos_request thermal_req; }; struct acpi_processor_errata { u8 smp; struct { u8 throttle:1; u8 fdma:1; u8 reserved:6; u32 bmisx; } piix4; }; extern int acpi_processor_preregister_performance(struct acpi_processor_performance __percpu *performance); extern int acpi_processor_register_performance(struct acpi_processor_performance *performance, unsigned int cpu); extern void acpi_processor_unregister_performance(unsigned int cpu); int acpi_processor_pstate_control(void); /* note: this locks both the calling module and the processor module if a _PPC object exists, rmmod is disallowed then */ int acpi_processor_notify_smm(struct module *calling_module); int acpi_processor_get_psd(acpi_handle handle, struct acpi_psd_package *pdomain); /* parsing the _P* objects. */ extern int acpi_processor_get_performance_info(struct acpi_processor *pr); /* for communication between multiple parts of the processor kernel module */ DECLARE_PER_CPU(struct acpi_processor *, processors); extern struct acpi_processor_errata errata; #if defined(ARCH_HAS_POWER_INIT) && defined(CONFIG_ACPI_PROCESSOR_CSTATE) void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, unsigned int cpu); int acpi_processor_ffh_cstate_probe(unsigned int cpu, struct acpi_processor_cx *cx, struct acpi_power_register *reg); void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate); #else static inline void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, unsigned int cpu) { flags->bm_check = 1; return; } static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu, struct acpi_processor_cx *cx, struct acpi_power_register *reg) { return -1; } static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate) { return; } #endif static inline int call_on_cpu(int cpu, long (*fn)(void *), void *arg, bool direct) { if (direct || (is_percpu_thread() && cpu == smp_processor_id())) return fn(arg); return work_on_cpu(cpu, fn, arg); } /* in processor_perflib.c */ #ifdef CONFIG_CPU_FREQ extern bool acpi_processor_cpufreq_init; void acpi_processor_ignore_ppc_init(void); void acpi_processor_ppc_init(struct cpufreq_policy *policy); void acpi_processor_ppc_exit(struct cpufreq_policy *policy); void acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag); extern int acpi_processor_get_bios_limit(int cpu, unsigned int *limit); #else static inline void acpi_processor_ignore_ppc_init(void) { return; } static inline void acpi_processor_ppc_init(struct cpufreq_policy *policy) { return; } static inline void acpi_processor_ppc_exit(struct cpufreq_policy *policy) { return; } static inline void acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag) { static unsigned int printout = 1; if (printout) { printk(KERN_WARNING "Warning: Processor Platform Limit event detected, but not handled.\n"); printk(KERN_WARNING "Consider compiling CPUfreq support into your kernel.\n"); printout = 0; } } static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit) { return -ENODEV; } #endif /* CONFIG_CPU_FREQ */ /* in processor_core.c */ phys_cpuid_t acpi_get_phys_id(acpi_handle, int type, u32 acpi_id); phys_cpuid_t acpi_map_madt_entry(u32 acpi_id); int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id); int acpi_get_cpuid(acpi_handle, int type, u32 acpi_id); #ifdef CONFIG_ACPI_CPPC_LIB extern int acpi_cppc_processor_probe(struct acpi_processor *pr); extern void acpi_cppc_processor_exit(struct acpi_processor *pr); #else static inline int acpi_cppc_processor_probe(struct acpi_processor *pr) { return 0; } static inline void acpi_cppc_processor_exit(struct acpi_processor *pr) { return; } #endif /* CONFIG_ACPI_CPPC_LIB */ /* in processor_pdc.c */ void acpi_processor_set_pdc(acpi_handle handle); /* in processor_throttling.c */ #ifdef CONFIG_ACPI_CPU_FREQ_PSS int acpi_processor_tstate_has_changed(struct acpi_processor *pr); int acpi_processor_get_throttling_info(struct acpi_processor *pr); extern int acpi_processor_set_throttling(struct acpi_processor *pr, int state, bool force); /* * Reevaluate whether the T-state is invalid after one cpu is * onlined/offlined. In such case the flags.throttling will be updated. */ extern void acpi_processor_reevaluate_tstate(struct acpi_processor *pr, bool is_dead); extern const struct file_operations acpi_processor_throttling_fops; extern void acpi_processor_throttling_init(void); #else static inline int acpi_processor_tstate_has_changed(struct acpi_processor *pr) { return 0; } static inline int acpi_processor_get_throttling_info(struct acpi_processor *pr) { return -ENODEV; } static inline int acpi_processor_set_throttling(struct acpi_processor *pr, int state, bool force) { return -ENODEV; } static inline void acpi_processor_reevaluate_tstate(struct acpi_processor *pr, bool is_dead) {} static inline void acpi_processor_throttling_init(void) {} #endif /* CONFIG_ACPI_CPU_FREQ_PSS */ /* in processor_idle.c */ extern struct cpuidle_driver acpi_idle_driver; #ifdef CONFIG_ACPI_PROCESSOR_IDLE int acpi_processor_power_init(struct acpi_processor *pr); int acpi_processor_power_exit(struct acpi_processor *pr); int acpi_processor_power_state_has_changed(struct acpi_processor *pr); int acpi_processor_hotplug(struct acpi_processor *pr); #else static inline int acpi_processor_power_init(struct acpi_processor *pr) { return -ENODEV; } static inline int acpi_processor_power_exit(struct acpi_processor *pr) { return -ENODEV; } static inline int acpi_processor_power_state_has_changed(struct acpi_processor *pr) { return -ENODEV; } static inline int acpi_processor_hotplug(struct acpi_processor *pr) { return -ENODEV; } #endif /* CONFIG_ACPI_PROCESSOR_IDLE */ /* in processor_thermal.c */ int acpi_processor_thermal_init(struct acpi_processor *pr, struct acpi_device *device); void acpi_processor_thermal_exit(struct acpi_processor *pr, struct acpi_device *device); extern const struct thermal_cooling_device_ops processor_cooling_ops; #ifdef CONFIG_CPU_FREQ void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy); void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy); #else static inline void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy) { return; } static inline void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy) { return; } #endif /* CONFIG_CPU_FREQ */ #ifdef CONFIG_ACPI_PROCESSOR_IDLE extern int acpi_processor_ffh_lpi_probe(unsigned int cpu); extern int acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi); #endif #endif PKk]˔5}}acpixf.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acpixf.h - External interfaces to the ACPI subsystem * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACXFACE_H__ #define __ACXFACE_H__ /* Current ACPICA subsystem version in YYYYMMDD format */ #define ACPI_CA_VERSION 0x20230628 #include #include #include #include /***************************************************************************** * * Macros used for ACPICA globals and configuration * ****************************************************************************/ /* * Ensure that global variables are defined and initialized only once. * * The use of these macros allows for a single list of globals (here) * in order to simplify maintenance of the code. */ #ifdef DEFINE_ACPI_GLOBALS #define ACPI_GLOBAL(type,name) \ extern type name; \ type name #define ACPI_INIT_GLOBAL(type,name,value) \ type name=value #else #ifndef ACPI_GLOBAL #define ACPI_GLOBAL(type,name) \ extern type name #endif #ifndef ACPI_INIT_GLOBAL #define ACPI_INIT_GLOBAL(type,name,value) \ extern type name #endif #endif /* * These macros configure the various ACPICA interfaces. They are * useful for generating stub inline functions for features that are * configured out of the current kernel or ACPICA application. */ #ifndef ACPI_EXTERNAL_RETURN_STATUS #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \ prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_OK #define ACPI_EXTERNAL_RETURN_OK(prototype) \ prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_VOID #define ACPI_EXTERNAL_RETURN_VOID(prototype) \ prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_UINT32 #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \ prototype; #endif #ifndef ACPI_EXTERNAL_RETURN_PTR #define ACPI_EXTERNAL_RETURN_PTR(prototype) \ prototype; #endif /***************************************************************************** * * Public globals and runtime configuration options * ****************************************************************************/ /* * Enable "slack mode" of the AML interpreter? Default is FALSE, and the * interpreter strictly follows the ACPI specification. Setting to TRUE * allows the interpreter to ignore certain errors and/or bad AML constructs. * * Currently, these features are enabled by this flag: * * 1) Allow "implicit return" of last value in a control method * 2) Allow access beyond the end of an operation region * 3) Allow access to uninitialized locals/args (auto-init to integer 0) * 4) Allow ANY object type to be a source operand for the Store() operator * 5) Allow unresolved references (invalid target name) in package objects * 6) Enable warning messages for behavior that is not ACPI spec compliant */ ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_interpreter_slack, FALSE); /* * Automatically serialize all methods that create named objects? Default * is TRUE, meaning that all non_serialized methods are scanned once at * table load time to determine those that create named objects. Methods * that create named objects are marked Serialized in order to prevent * possible run-time problems if they are entered by more than one thread. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_auto_serialize_methods, TRUE); /* * Create the predefined _OSI method in the namespace? Default is TRUE * because ACPICA is fully compatible with other ACPI implementations. * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_create_osi_method, TRUE); /* * Optionally use default values for the ACPI register widths. Set this to * TRUE to use the defaults, if an FADT contains incorrect widths/lengths. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_use_default_register_widths, TRUE); /* * Whether or not to validate (map) an entire table to verify * checksum/duplication in early stage before install. Set this to TRUE to * allow early table validation before install it to the table manager. * Note that enabling this option causes errors to happen in some OSPMs * during early initialization stages. Default behavior is to allow such * validation. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_table_validation, TRUE); /* * Optionally enable output from the AML Debug Object. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_aml_debug_object, FALSE); /* * Optionally copy the entire DSDT to local memory (instead of simply * mapping it.) There are some BIOSs that corrupt or replace the original * DSDT, creating the need for this option. Default is FALSE, do not copy * the DSDT. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_copy_dsdt_locally, FALSE); /* * Optionally ignore an XSDT if present and use the RSDT instead. * Although the ACPI specification requires that an XSDT be used instead * of the RSDT, the XSDT has been found to be corrupt or ill-formed on * some machines. Default behavior is to use the XSDT if present. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE); /* * Optionally use 32-bit FADT addresses if and when there is a conflict * (address mismatch) between the 32-bit and 64-bit versions of the * address. Although ACPICA adheres to the ACPI specification which * requires the use of the corresponding 64-bit address if it is non-zero, * some machines have been found to have a corrupted non-zero 64-bit * address. Default is FALSE, do not favor the 32-bit addresses. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, FALSE); /* * Optionally use 32-bit FACS table addresses. * It is reported that some platforms fail to resume from system suspending * if 64-bit FACS table address is selected: * https://bugzilla.kernel.org/show_bug.cgi?id=74021 * Default is TRUE, favor the 32-bit addresses. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_facs_addresses, TRUE); /* * Optionally truncate I/O addresses to 16 bits. Provides compatibility * with other ACPI implementations. NOTE: During ACPICA initialization, * this value is set to TRUE if any Windows OSI strings have been * requested by the BIOS. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_truncate_io_addresses, FALSE); /* * Disable runtime checking and repair of values returned by control methods. * Use only if the repair is causing a problem on a particular machine. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_auto_repair, FALSE); /* * Optionally do not install any SSDTs from the RSDT/XSDT during initialization. * This can be useful for debugging ACPI problems on some machines. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE); /* * Optionally enable runtime namespace override. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_runtime_namespace_override, TRUE); /* * We keep track of the latest version of Windows that has been requested by * the BIOS. ACPI 5.0. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_osi_data, 0); /* * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning * that the ACPI hardware is no longer required. A flag in the FADT indicates * a reduced HW machine, and that flag is duplicated here for convenience. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE); /* * ACPI Global Lock is mainly used for systems with SMM, so no-SMM systems * (such as loong_arch) may not have and not use Global Lock. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_use_global_lock, TRUE); /* * Maximum timeout for While() loop iterations before forced method abort. * This mechanism is intended to prevent infinite loops during interpreter * execution within a host kernel. */ ACPI_INIT_GLOBAL(u32, acpi_gbl_max_loop_iterations, ACPI_MAX_LOOP_TIMEOUT); /* * Optionally ignore AE_NOT_FOUND errors from named reference package elements * during DSDT/SSDT table loading. This reduces error "noise" in platforms * whose firmware is carrying around a bunch of unused package objects that * refer to non-existent named objects. However, If the AML actually tries to * use such a package, the unresolved element(s) will be replaced with NULL * elements. */ ACPI_INIT_GLOBAL(u8, acpi_gbl_ignore_package_resolution_errors, FALSE); /* * This mechanism is used to trace a specified AML method. The method is * traced each time it is executed. */ ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_flags, 0); ACPI_INIT_GLOBAL(const char *, acpi_gbl_trace_method_name, NULL); ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_dbg_level, ACPI_TRACE_LEVEL_DEFAULT); ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_dbg_layer, ACPI_TRACE_LAYER_DEFAULT); /* * Runtime configuration of debug output control masks. We want the debug * switches statically initialized so they are already set when the debugger * is entered. */ ACPI_INIT_GLOBAL(u32, acpi_dbg_level, ACPI_DEBUG_DEFAULT); ACPI_INIT_GLOBAL(u32, acpi_dbg_layer, 0); /* Optionally enable timer output with Debug Object output */ ACPI_INIT_GLOBAL(u8, acpi_gbl_display_debug_timer, FALSE); /* * Debugger command handshake globals. Host OSes need to access these * variables to implement their own command handshake mechanism. */ #ifdef ACPI_DEBUGGER ACPI_INIT_GLOBAL(u8, acpi_gbl_method_executing, FALSE); ACPI_GLOBAL(char, acpi_gbl_db_line_buf[ACPI_DB_LINE_BUFFER_SIZE]); #endif /* * Other miscellaneous globals */ ACPI_GLOBAL(struct acpi_table_fadt, acpi_gbl_FADT); ACPI_GLOBAL(u32, acpi_current_gpe_count); ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running); /***************************************************************************** * * ACPICA public interface configuration. * * Interfaces that are configured out of the ACPICA build are replaced * by inlined stubs by default. * ****************************************************************************/ /* * Hardware-reduced prototypes (default: Not hardware reduced). * * All ACPICA hardware-related interfaces that use these macros will be * configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag * is set to TRUE. * * Note: This static build option for reduced hardware is intended to * reduce ACPICA code size if desired or necessary. However, even if this * option is not specified, the runtime behavior of ACPICA is dependent * on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set, * the flag will enable similar behavior -- ACPICA will not attempt * to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.) */ #if (!ACPI_REDUCED_HARDWARE) #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ ACPI_EXTERNAL_RETURN_STATUS(prototype) #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ ACPI_EXTERNAL_RETURN_OK(prototype) #define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ ACPI_EXTERNAL_RETURN_UINT32(prototype) #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ ACPI_EXTERNAL_RETURN_VOID(prototype) #else #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ static ACPI_INLINE prototype {return(AE_OK);} #define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ static ACPI_INLINE prototype {return(0);} #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #endif /* !ACPI_REDUCED_HARDWARE */ /* * Error message prototypes (default: error messages enabled). * * All interfaces related to error and warning messages * will be configured out of the ACPICA build if the * ACPI_NO_ERROR_MESSAGE flag is defined. */ #ifndef ACPI_NO_ERROR_MESSAGES #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \ prototype; #else #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #endif /* ACPI_NO_ERROR_MESSAGES */ /* * Debugging output prototypes (default: no debug output). * * All interfaces related to debug output messages * will be configured out of the ACPICA build unless the * ACPI_DEBUG_OUTPUT flag is defined. */ #ifdef ACPI_DEBUG_OUTPUT #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \ prototype; #else #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #endif /* ACPI_DEBUG_OUTPUT */ /* * Application prototypes * * All interfaces used by application will be configured * out of the ACPICA build unless the ACPI_APPLICATION * flag is defined. */ #ifdef ACPI_APPLICATION #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \ prototype; #else #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #endif /* ACPI_APPLICATION */ /* * Debugger prototypes * * All interfaces used by debugger will be configured * out of the ACPICA build unless the ACPI_DEBUGGER * flag is defined. */ #ifdef ACPI_DEBUGGER #define ACPI_DBR_DEPENDENT_RETURN_OK(prototype) \ ACPI_EXTERNAL_RETURN_OK(prototype) #define ACPI_DBR_DEPENDENT_RETURN_VOID(prototype) \ ACPI_EXTERNAL_RETURN_VOID(prototype) #else #define ACPI_DBR_DEPENDENT_RETURN_OK(prototype) \ static ACPI_INLINE prototype {return(AE_OK);} #define ACPI_DBR_DEPENDENT_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #endif /* ACPI_DEBUGGER */ /***************************************************************************** * * ACPICA public interface prototypes * ****************************************************************************/ /* * Initialization */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_initialize_tables(struct acpi_table_desc *initial_storage, u32 initial_table_count, u8 allow_resize)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_initialize_objects(u32 flags)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_terminate(void)) /* * Miscellaneous global interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_subsystem_status(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_system_info(struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_statistics(struct acpi_statistics *stats)) ACPI_EXTERNAL_RETURN_PTR(const char *acpi_format_exception(acpi_status exception)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_purge_cached_objects(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_interface(acpi_string interface_name)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_remove_interface(acpi_string interface_name)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_update_interfaces(u8 action)) ACPI_EXTERNAL_RETURN_UINT32(u32 acpi_check_address_range(acpi_adr_space_type space_id, acpi_physical_address address, acpi_size length, u8 warn)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_decode_pld_buffer(u8 *in_buffer, acpi_size length, struct acpi_pld_info **return_buffer)) /* * ACPI table load/unload interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_install_table(struct acpi_table_header *table)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_install_physical_table(acpi_physical_address address)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_load_table(struct acpi_table_header *table, u32 *table_idx)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_unload_table(u32 table_index)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_unload_parent_table(acpi_handle object)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_load_tables(void)) /* * ACPI table manipulation interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_reallocate_root_table(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status ACPI_INIT_FUNCTION acpi_find_root_pointer(acpi_physical_address *rsdp_address)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_table_header(acpi_string signature, u32 instance, struct acpi_table_header *out_table_header)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_table(acpi_string signature, u32 instance, struct acpi_table_header **out_table)) ACPI_EXTERNAL_RETURN_VOID(void acpi_put_table(struct acpi_table_header *table)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_table_by_index(u32 table_index, struct acpi_table_header **out_table)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_table_handler(acpi_table_handler handler, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_remove_table_handler(acpi_table_handler handler)) /* * Namespace and name interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_walk_namespace(acpi_object_type type, acpi_handle start_object, u32 max_depth, acpi_walk_callback descending_callback, acpi_walk_callback ascending_callback, void *context, void **return_value)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_devices(const char *HID, acpi_walk_callback user_function, void *context, void **return_value)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_name(acpi_handle object, u32 name_type, struct acpi_buffer *ret_path_ptr)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_handle(acpi_handle parent, const char *pathname, acpi_handle *ret_handle)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_attach_data(acpi_handle object, acpi_object_handler handler, void *data)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_detach_data(acpi_handle object, acpi_object_handler handler)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_data(acpi_handle object, acpi_object_handler handler, void **data)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_debug_trace(const char *name, u32 debug_level, u32 debug_layer, u32 flags)) /* * Object manipulation and enumeration */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_evaluate_object(acpi_handle object, acpi_string pathname, struct acpi_object_list *parameter_objects, struct acpi_buffer *return_object_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_evaluate_object_typed(acpi_handle object, acpi_string pathname, struct acpi_object_list *external_params, struct acpi_buffer *return_buffer, acpi_object_type return_type)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_object_info(acpi_handle object, struct acpi_device_info **return_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_method(u8 *buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_next_object(acpi_object_type type, acpi_handle parent, acpi_handle child, acpi_handle *out_handle)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_type(acpi_handle object, acpi_object_type *out_type)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_parent(acpi_handle object, acpi_handle *out_handle)) /* * Handler interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_initialization_handler (acpi_init_handler handler, u32 function)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_sci_handler(acpi_sci_handler address, void *context)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_remove_sci_handler(acpi_sci_handler address)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_global_event_handler (acpi_gbl_event_handler handler, void *context)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_fixed_event_handler(u32 acpi_event, acpi_event_handler handler, void *context)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_remove_fixed_event_handler(u32 acpi_event, acpi_event_handler handler)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_gpe_handler(acpi_handle gpe_device, u32 gpe_number, u32 type, acpi_gpe_handler address, void *context)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_gpe_raw_handler(acpi_handle gpe_device, u32 gpe_number, u32 type, acpi_gpe_handler address, void *context)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_remove_gpe_handler(acpi_handle gpe_device, u32 gpe_number, acpi_gpe_handler address)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_notify_handler(acpi_handle device, u32 handler_type, acpi_notify_handler handler, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_remove_notify_handler(acpi_handle device, u32 handler_type, acpi_notify_handler handler)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_address_space_handler(acpi_handle device, acpi_adr_space_type space_id, acpi_adr_space_handler handler, acpi_adr_space_setup setup, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_address_space_handler_no_reg (acpi_handle device, acpi_adr_space_type space_id, acpi_adr_space_handler handler, acpi_adr_space_setup setup, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_execute_reg_methods(acpi_handle device, u32 nax_depth, acpi_adr_space_type space_id)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_remove_address_space_handler(acpi_handle device, acpi_adr_space_type space_id, acpi_adr_space_handler handler)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_exception_handler (acpi_exception_handler handler)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_interface_handler (acpi_interface_handler handler)) /* * Global Lock interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_acquire_global_lock(u16 timeout, u32 *handle)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_release_global_lock(u32 handle)) /* * Interfaces to AML mutex objects */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname)) /* * Fixed Event interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_event(u32 event, u32 flags)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_event(u32 event, u32 flags)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_clear_event(u32 event)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_event_status(u32 event, acpi_event_status *event_status)) /* * General Purpose Event (GPE) Interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_update_all_gpes(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_set_gpe(acpi_handle gpe_device, u32 gpe_number, u8 action)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_finish_gpe(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_mask_gpe(acpi_handle gpe_device, u32 gpe_number, u8 is_masked)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_mark_gpe_for_wake(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_setup_gpe_for_wake(acpi_handle parent_device, acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_set_gpe_wake_mask(acpi_handle gpe_device, u32 gpe_number, u8 action)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_gpe_status(acpi_handle gpe_device, u32 gpe_number, acpi_event_status *event_status)) ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_dispatch_gpe(acpi_handle gpe_device, u32 gpe_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_hw_disable_all_gpes(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_hw_enable_all_wakeup_gpes(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void)) ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_any_gpe_status_set(u32 gpe_skip_number)) ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_any_fixed_event_status_set(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_gpe_device(u32 gpe_index, acpi_handle *gpe_device)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_install_gpe_block(acpi_handle gpe_device, struct acpi_generic_address *gpe_block_address, u32 register_count, u32 interrupt_number)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_remove_gpe_block(acpi_handle gpe_device)) /* * Resource interfaces */ typedef acpi_status (*acpi_walk_resource_callback) (struct acpi_resource * resource, void *context); ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_vendor_resource(acpi_handle device, char *name, struct acpi_vendor_uuid *uuid, struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_current_resources(acpi_handle device, struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_possible_resources(acpi_handle device, struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_event_resources(acpi_handle device_handle, struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_walk_resource_buffer(struct acpi_buffer *buffer, acpi_walk_resource_callback user_function, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_walk_resources(acpi_handle device, char *name, acpi_walk_resource_callback user_function, void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_set_current_resources(acpi_handle device, struct acpi_buffer *in_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_irq_routing_table(acpi_handle device, struct acpi_buffer *ret_buffer)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_resource_to_address64(struct acpi_resource *resource, struct acpi_resource_address64 *out)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_buffer_to_resource(u8 *aml_buffer, u16 aml_buffer_length, struct acpi_resource **resource_ptr)) /* * Hardware (ACPI device) interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_reset(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_read(u64 *value, struct acpi_generic_address *reg)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_write(u64 value, struct acpi_generic_address *reg)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_read_bit_register(u32 register_id, u32 *return_value)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_write_bit_register(u32 register_id, u32 value)) /* * Sleep/Wake interfaces */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_sleep_type_data(u8 sleep_state, u8 *slp_typ_a, u8 *slp_typ_b)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_enter_sleep_state(u8 sleep_state)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enter_sleep_state_s4bios(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state_prep(u8 sleep_state)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state(u8 sleep_state)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_set_firmware_waking_vector (acpi_physical_address physical_address, acpi_physical_address physical_address64)) /* * ACPI Timer interfaces */ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer_resolution(u32 *resolution)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer(u32 *ticks)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 *time_elapsed)) /* * Error/Warning output */ ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE acpi_error(const char *module_name, u32 line_number, const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(4) void ACPI_INTERNAL_VAR_XFACE acpi_exception(const char *module_name, u32 line_number, acpi_status status, const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE acpi_warning(const char *module_name, u32 line_number, const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(1) void ACPI_INTERNAL_VAR_XFACE acpi_info(const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE acpi_bios_error(const char *module_name, u32 line_number, const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(4) void ACPI_INTERNAL_VAR_XFACE acpi_bios_exception(const char *module_name, u32 line_number, acpi_status status, const char *format, ...)) ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) void ACPI_INTERNAL_VAR_XFACE acpi_bios_warning(const char *module_name, u32 line_number, const char *format, ...)) /* * Debug output */ ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) void ACPI_INTERNAL_VAR_XFACE acpi_debug_print(u32 requested_debug_level, u32 line_number, const char *function_name, const char *module_name, u32 component_id, const char *format, ...)) ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) void ACPI_INTERNAL_VAR_XFACE acpi_debug_print_raw(u32 requested_debug_level, u32 line_number, const char *function_name, const char *module_name, u32 component_id, const char *format, ...)) ACPI_DBG_DEPENDENT_RETURN_VOID(void acpi_trace_point(acpi_trace_event_type type, u8 begin, u8 *aml, char *pathname)) acpi_status acpi_initialize_debugger(void); void acpi_terminate_debugger(void); /* * Divergences */ ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_data_full(acpi_handle object, acpi_object_handler handler, void **data, void (*callback)(void *))) void acpi_set_debugger_thread_id(acpi_thread_id thread_id); #endif /* __ACXFACE_H__ */ PKk]w actypes.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: actypes.h - Common data types for the entire ACPI subsystem * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACTYPES_H__ #define __ACTYPES_H__ /* acpisrc:struct_defs -- for acpisrc conversion */ /* * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent * header and must be either 32 or 64. 16-bit ACPICA is no longer * supported, as of 12/2006. */ #ifndef ACPI_MACHINE_WIDTH #error ACPI_MACHINE_WIDTH not defined #endif /* * Data type ranges * Note: These macros are designed to be compiler independent as well as * working around problems that some 32-bit compilers have with 64-bit * constants. */ #define ACPI_UINT8_MAX (u8) (~((u8) 0)) /* 0xFF */ #define ACPI_UINT16_MAX (u16)(~((u16) 0)) /* 0xFFFF */ #define ACPI_UINT32_MAX (u32)(~((u32) 0)) /* 0xFFFFFFFF */ #define ACPI_UINT64_MAX (u64)(~((u64) 0)) /* 0xFFFFFFFFFFFFFFFF */ #define ACPI_ASCII_MAX 0x7F /* * Architecture-specific ACPICA Subsystem Data Types * * The goal of these types is to provide source code portability across * 16-bit, 32-bit, and 64-bit targets. * * 1) The following types are of fixed size for all targets (16/32/64): * * u8 Logical boolean * * u8 8-bit (1 byte) unsigned value * u16 16-bit (2 byte) unsigned value * u32 32-bit (4 byte) unsigned value * u64 64-bit (8 byte) unsigned value * * s16 16-bit (2 byte) signed value * s32 32-bit (4 byte) signed value * s64 64-bit (8 byte) signed value * * COMPILER_DEPENDENT_UINT64/s64 - These types are defined in the * compiler-dependent header(s) and were introduced because there is no * common 64-bit integer type across the various compilation models, as * shown in the table below. * * Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit * char 8 8 8 8 8 8 * short 16 16 16 16 16 16 * _int32 32 * int 32 64 32 32 16 16 * long 64 64 32 32 32 32 * long long 64 64 * pointer 64 64 64 32 32 32 * * Note: ILP64 and LP32 are currently not supported. * * * 2) These types represent the native word size of the target mode of the * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are * usually used for memory allocation, efficient loop counters, and array * indexes. The types are similar to the size_t type in the C library and * are required because there is no C type that consistently represents the * native data width. acpi_size is needed because there is no guarantee * that a kernel-level C library is present. * * acpi_size 16/32/64-bit unsigned value * acpi_native_int 16/32/64-bit signed value */ /******************************************************************************* * * Common types for all compilers, all targets * ******************************************************************************/ #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned char u8; typedef unsigned short u16; typedef short s16; typedef COMPILER_DEPENDENT_UINT64 u64; typedef COMPILER_DEPENDENT_INT64 s64; #endif /* ACPI_USE_SYSTEM_INTTYPES */ /* * Value returned by acpi_os_get_thread_id. There is no standard "thread_id" * across operating systems or even the various UNIX systems. Since ACPICA * only needs the thread ID as a unique thread identifier, we use a u64 * as the only common data type - it will accommodate any type of pointer or * any type of integer. It is up to the host-dependent OSL to cast the * native thread ID type to a u64 (in acpi_os_get_thread_id). */ #define acpi_thread_id u64 /******************************************************************************* * * Types specific to 64-bit targets * ******************************************************************************/ #if ACPI_MACHINE_WIDTH == 64 #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned int u32; typedef int s32; #endif /* ACPI_USE_SYSTEM_INTTYPES */ typedef s64 acpi_native_int; typedef u64 acpi_size; typedef u64 acpi_io_address; typedef u64 acpi_physical_address; #define ACPI_MAX_PTR ACPI_UINT64_MAX #define ACPI_SIZE_MAX ACPI_UINT64_MAX #define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */ #define ACPI_USE_NATIVE_MATH64 /* Has native 64-bit integer support */ /* * In the case of the Itanium Processor Family (IPF), the hardware does not * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED * flag to indicate that special precautions must be taken to avoid alignment * faults. (IA64 or ia64 is currently used by existing compilers to indicate * IPF.) * * Note: EM64T and other X86-64 processors support misaligned transfers, * so there is no need to define this flag. */ #if defined (__IA64__) || defined (__ia64__) #define ACPI_MISALIGNMENT_NOT_SUPPORTED #endif /******************************************************************************* * * Types specific to 32-bit targets * ******************************************************************************/ #elif ACPI_MACHINE_WIDTH == 32 #ifndef ACPI_USE_SYSTEM_INTTYPES typedef unsigned int u32; typedef int s32; #endif /* ACPI_USE_SYSTEM_INTTYPES */ typedef s32 acpi_native_int; typedef u32 acpi_size; #ifdef ACPI_32BIT_PHYSICAL_ADDRESS /* * OSPMs can define this to shrink the size of the structures for 32-bit * none PAE environment. ASL compiler may always define this to generate * 32-bit OSPM compliant tables. */ typedef u32 acpi_io_address; typedef u32 acpi_physical_address; #else /* ACPI_32BIT_PHYSICAL_ADDRESS */ /* * It is reported that, after some calculations, the physical addresses can * wrap over the 32-bit boundary on 32-bit PAE environment. * https://bugzilla.kernel.org/show_bug.cgi?id=87971 */ typedef u64 acpi_io_address; typedef u64 acpi_physical_address; #endif /* ACPI_32BIT_PHYSICAL_ADDRESS */ #define ACPI_MAX_PTR ACPI_UINT32_MAX #define ACPI_SIZE_MAX ACPI_UINT32_MAX #else /* ACPI_MACHINE_WIDTH must be either 64 or 32 */ #error unknown ACPI_MACHINE_WIDTH #endif /******************************************************************************* * * OS-dependent types * * If the defaults below are not appropriate for the host system, they can * be defined in the OS-specific header, and this will take precedence. * ******************************************************************************/ /* Flags for acpi_os_acquire_lock/acpi_os_release_lock */ #ifndef acpi_cpu_flags #define acpi_cpu_flags acpi_size #endif /* Object returned from acpi_os_create_cache */ #ifndef acpi_cache_t #ifdef ACPI_USE_LOCAL_CACHE #define acpi_cache_t struct acpi_memory_list #else #define acpi_cache_t void * #endif #endif /* * Synchronization objects - Mutexes, Semaphores, and spin_locks */ #if (ACPI_MUTEX_TYPE == ACPI_BINARY_SEMAPHORE) /* * These macros are used if the host OS does not support a mutex object. * Map the OSL Mutex interfaces to binary semaphores. */ #define acpi_mutex acpi_semaphore #define acpi_os_create_mutex(out_handle) acpi_os_create_semaphore (1, 1, out_handle) #define acpi_os_delete_mutex(handle) (void) acpi_os_delete_semaphore (handle) #define acpi_os_acquire_mutex(handle,time) acpi_os_wait_semaphore (handle, 1, time) #define acpi_os_release_mutex(handle) (void) acpi_os_signal_semaphore (handle, 1) #endif /* Configurable types for synchronization objects */ #ifndef acpi_spinlock #define acpi_spinlock void * #endif #ifndef acpi_raw_spinlock #define acpi_raw_spinlock acpi_spinlock #endif #ifndef acpi_semaphore #define acpi_semaphore void * #endif #ifndef acpi_mutex #define acpi_mutex void * #endif /******************************************************************************* * * Compiler-dependent types * * If the defaults below are not appropriate for the host compiler, they can * be defined in the compiler-specific header, and this will take precedence. * ******************************************************************************/ /* Use C99 uintptr_t for pointer casting if available, "void *" otherwise */ #ifndef acpi_uintptr_t #define acpi_uintptr_t void * #endif /* * ACPI_PRINTF_LIKE is used to tag functions as "printf-like" because * some compilers can catch printf format string problems */ #ifndef ACPI_PRINTF_LIKE #define ACPI_PRINTF_LIKE(c) #endif /* * Some compilers complain about unused variables. Sometimes we don't want * to use all the variables (for example, _acpi_module_name). This allows us * to tell the compiler in a per-variable manner that a variable * is unused */ #ifndef ACPI_UNUSED_VAR #define ACPI_UNUSED_VAR #endif /* * All ACPICA external functions that are available to the rest of the * kernel are tagged with these macros which can be defined as appropriate * for the host. * * Notes: * ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination * interfaces that may need special processing. * ACPI_EXPORT_SYMBOL is used for all other public external functions. */ #ifndef ACPI_EXPORT_SYMBOL_INIT #define ACPI_EXPORT_SYMBOL_INIT(symbol) #endif #ifndef ACPI_EXPORT_SYMBOL #define ACPI_EXPORT_SYMBOL(symbol) #endif /* * Compiler/Clibrary-dependent debug initialization. Used for ACPICA * utilities only. */ #ifndef ACPI_DEBUG_INITIALIZE #define ACPI_DEBUG_INITIALIZE() #endif /******************************************************************************* * * Configuration * ******************************************************************************/ #ifdef ACPI_NO_MEM_ALLOCATIONS #define ACPI_ALLOCATE(a) NULL #define ACPI_ALLOCATE_ZEROED(a) NULL #define ACPI_FREE(a) #define ACPI_MEM_TRACKING(a) #else /* ACPI_NO_MEM_ALLOCATIONS */ #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* * Memory allocation tracking (used by acpi_exec to detect memory leaks) */ #define ACPI_MEM_PARAMETERS _COMPONENT, _acpi_module_name, __LINE__ #define ACPI_ALLOCATE(a) acpi_ut_allocate_and_track ((acpi_size) (a), ACPI_MEM_PARAMETERS) #define ACPI_ALLOCATE_ZEROED(a) acpi_ut_allocate_zeroed_and_track ((acpi_size) (a), ACPI_MEM_PARAMETERS) #define ACPI_FREE(a) acpi_ut_free_and_track (a, ACPI_MEM_PARAMETERS) #define ACPI_MEM_TRACKING(a) a #else /* * Normal memory allocation directly via the OS services layer */ #define ACPI_ALLOCATE(a) acpi_os_allocate ((acpi_size) (a)) #define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed ((acpi_size) (a)) #define ACPI_FREE(a) acpi_os_free (a) #define ACPI_MEM_TRACKING(a) #endif /* ACPI_DBG_TRACK_ALLOCATIONS */ #endif /* ACPI_NO_MEM_ALLOCATIONS */ /****************************************************************************** * * ACPI Specification constants (Do not change unless the specification * changes) * *****************************************************************************/ /* Number of distinct FADT-based GPE register blocks (GPE0 and GPE1) */ #define ACPI_MAX_GPE_BLOCKS 2 /* Default ACPI register widths */ #define ACPI_GPE_REGISTER_WIDTH 8 #define ACPI_PM1_REGISTER_WIDTH 16 #define ACPI_PM2_REGISTER_WIDTH 8 #define ACPI_PM_TIMER_WIDTH 32 #define ACPI_RESET_REGISTER_WIDTH 8 /* Names within the namespace are 4 bytes long */ #define ACPI_NAMESEG_SIZE 4 /* Fixed by ACPI spec */ #define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */ #define ACPI_PATH_SEPARATOR '.' /* Sizes for ACPI table headers */ #define ACPI_OEM_ID_SIZE 6 #define ACPI_OEM_TABLE_ID_SIZE 8 /* ACPI/PNP hardware IDs */ #define PCI_ROOT_HID_STRING "PNP0A03" #define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08" /* PM Timer ticks per second (HZ) */ #define ACPI_PM_TIMER_FREQUENCY 3579545 /******************************************************************************* * * Independent types * ******************************************************************************/ /* Logical defines and NULL */ #ifdef FALSE #undef FALSE #endif #define FALSE (1 == 0) #ifdef TRUE #undef TRUE #endif #define TRUE (1 == 1) #ifndef NULL #define NULL (void *) 0 #endif /* * Miscellaneous types */ typedef u32 acpi_status; /* All ACPI Exceptions */ typedef u32 acpi_name; /* 4-byte ACPI name */ typedef char *acpi_string; /* Null terminated ASCII string */ typedef void *acpi_handle; /* Actually a ptr to a NS Node */ /* Time constants for timer calculations */ #define ACPI_MSEC_PER_SEC 1000L #define ACPI_USEC_PER_MSEC 1000L #define ACPI_USEC_PER_SEC 1000000L #define ACPI_100NSEC_PER_USEC 10L #define ACPI_100NSEC_PER_MSEC 10000L #define ACPI_100NSEC_PER_SEC 10000000L #define ACPI_NSEC_PER_USEC 1000L #define ACPI_NSEC_PER_MSEC 1000000L #define ACPI_NSEC_PER_SEC 1000000000L #define ACPI_TIME_AFTER(a, b) ((s64)((b) - (a)) < 0) /* Owner IDs are used to track namespace nodes for selective deletion */ typedef u16 acpi_owner_id; #define ACPI_OWNER_ID_MAX 0xFFF /* 4095 possible owner IDs */ #define ACPI_INTEGER_BIT_SIZE 64 #define ACPI_MAX_DECIMAL_DIGITS 20 /* 2^64 = 18,446,744,073,709,551,616 */ #define ACPI_MAX64_DECIMAL_DIGITS 20 #define ACPI_MAX32_DECIMAL_DIGITS 10 #define ACPI_MAX16_DECIMAL_DIGITS 5 #define ACPI_MAX8_DECIMAL_DIGITS 3 /* * Constants with special meanings */ #define ACPI_ROOT_OBJECT ((acpi_handle) ACPI_TO_POINTER (ACPI_MAX_PTR)) #define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */ #define ACPI_DO_NOT_WAIT 0 /* * Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are * 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits. * Note that this pertains to the ACPI integer type only, not to other * integers used in the implementation of the ACPICA subsystem. * * 01/2010: This type is obsolete and has been removed from the entire ACPICA * code base. It remains here for compatibility with device drivers that use * the type. However, it will be removed in the future. */ typedef u64 acpi_integer; #define ACPI_INTEGER_MAX ACPI_UINT64_MAX /******************************************************************************* * * Commonly used macros * ******************************************************************************/ /* Data manipulation */ #define ACPI_LOBYTE(integer) ((u8) (u16)(integer)) #define ACPI_HIBYTE(integer) ((u8) (((u16)(integer)) >> 8)) #define ACPI_LOWORD(integer) ((u16) (u32)(integer)) #define ACPI_HIWORD(integer) ((u16)(((u32)(integer)) >> 16)) #define ACPI_LODWORD(integer64) ((u32) (u64)(integer64)) #define ACPI_HIDWORD(integer64) ((u32)(((u64)(integer64)) >> 32)) #define ACPI_SET_BIT(target,bit) ((target) |= (bit)) #define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) #define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) #define ACPI_MAX(a,b) (((a)>(b))?(a):(b)) /* Size calculation */ #define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) /* Pointer manipulation */ #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p)) #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b))) #define ACPI_SUB_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) - (acpi_size)(b))) #define ACPI_PTR_DIFF(a, b) ((acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b)))) /* Pointer/Integer type conversions */ #define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (acpi_size) (i)) #ifndef ACPI_TO_INTEGER #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) #endif #ifndef ACPI_OFFSET #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) #endif #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) /* Optimizations for 4-character (32-bit) acpi_name manipulation */ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED #define ACPI_COMPARE_NAMESEG(a,b) (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b))) #define ACPI_COPY_NAMESEG(dest,src) (*ACPI_CAST_PTR (u32, (dest)) = *ACPI_CAST_PTR (u32, (src))) #else #define ACPI_COMPARE_NAMESEG(a,b) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAMESEG_SIZE)) #define ACPI_COPY_NAMESEG(dest,src) (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE)) #endif /* Support for the special RSDP signature (8 characters) */ #define ACPI_VALIDATE_RSDP_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, (sizeof(a) < 8) ? ACPI_NAMESEG_SIZE : 8)) #define ACPI_MAKE_RSDP_SIG(dest) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8)) /* Support for OEMx signature (x can be any character) */ #define ACPI_IS_OEM_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_OEM_NAME, 3) &&\ strnlen (a, ACPI_NAMESEG_SIZE) == ACPI_NAMESEG_SIZE) /* * Algorithm to obtain access bit or byte width. * Can be used with access_width of struct acpi_generic_address and access_size of * struct acpi_resource_generic_register. */ #define ACPI_ACCESS_BIT_SHIFT 2 #define ACPI_ACCESS_BYTE_SHIFT -1 #define ACPI_ACCESS_BIT_MAX (31 - ACPI_ACCESS_BIT_SHIFT) #define ACPI_ACCESS_BYTE_MAX (31 - ACPI_ACCESS_BYTE_SHIFT) #define ACPI_ACCESS_BIT_DEFAULT (8 - ACPI_ACCESS_BIT_SHIFT) #define ACPI_ACCESS_BYTE_DEFAULT (8 - ACPI_ACCESS_BYTE_SHIFT) #define ACPI_ACCESS_BIT_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BIT_SHIFT)) #define ACPI_ACCESS_BYTE_WIDTH(size) (1 << ((size) + ACPI_ACCESS_BYTE_SHIFT)) /******************************************************************************* * * Miscellaneous constants * ******************************************************************************/ /* * Initialization sequence options */ #define ACPI_FULL_INITIALIZATION 0x0000 #define ACPI_NO_FACS_INIT 0x0001 #define ACPI_NO_ACPI_ENABLE 0x0002 #define ACPI_NO_HARDWARE_INIT 0x0004 #define ACPI_NO_EVENT_INIT 0x0008 #define ACPI_NO_HANDLER_INIT 0x0010 #define ACPI_NO_OBJECT_INIT 0x0020 #define ACPI_NO_DEVICE_INIT 0x0040 #define ACPI_NO_ADDRESS_SPACE_INIT 0x0080 /* * Initialization state */ #define ACPI_SUBSYSTEM_INITIALIZE 0x01 #define ACPI_INITIALIZED_OK 0x02 /* * Power state values */ #define ACPI_STATE_UNKNOWN (u8) 0xFF #define ACPI_STATE_S0 (u8) 0 #define ACPI_STATE_S1 (u8) 1 #define ACPI_STATE_S2 (u8) 2 #define ACPI_STATE_S3 (u8) 3 #define ACPI_STATE_S4 (u8) 4 #define ACPI_STATE_S5 (u8) 5 #define ACPI_S_STATES_MAX ACPI_STATE_S5 #define ACPI_S_STATE_COUNT 6 #define ACPI_STATE_D0 (u8) 0 #define ACPI_STATE_D1 (u8) 1 #define ACPI_STATE_D2 (u8) 2 #define ACPI_STATE_D3_HOT (u8) 3 #define ACPI_STATE_D3 (u8) 4 #define ACPI_STATE_D3_COLD ACPI_STATE_D3 #define ACPI_D_STATES_MAX ACPI_STATE_D3 #define ACPI_D_STATE_COUNT 5 #define ACPI_STATE_C0 (u8) 0 #define ACPI_STATE_C1 (u8) 1 #define ACPI_STATE_C2 (u8) 2 #define ACPI_STATE_C3 (u8) 3 #define ACPI_C_STATES_MAX ACPI_STATE_C3 #define ACPI_C_STATE_COUNT 4 /* * Sleep type invalid value */ #define ACPI_SLEEP_TYPE_MAX 0x7 #define ACPI_SLEEP_TYPE_INVALID 0xFF /* * Standard notify values */ #define ACPI_NOTIFY_BUS_CHECK (u8) 0x00 #define ACPI_NOTIFY_DEVICE_CHECK (u8) 0x01 #define ACPI_NOTIFY_DEVICE_WAKE (u8) 0x02 #define ACPI_NOTIFY_EJECT_REQUEST (u8) 0x03 #define ACPI_NOTIFY_DEVICE_CHECK_LIGHT (u8) 0x04 #define ACPI_NOTIFY_FREQUENCY_MISMATCH (u8) 0x05 #define ACPI_NOTIFY_BUS_MODE_MISMATCH (u8) 0x06 #define ACPI_NOTIFY_POWER_FAULT (u8) 0x07 #define ACPI_NOTIFY_CAPABILITIES_CHECK (u8) 0x08 #define ACPI_NOTIFY_DEVICE_PLD_CHECK (u8) 0x09 #define ACPI_NOTIFY_RESERVED (u8) 0x0A #define ACPI_NOTIFY_LOCALITY_UPDATE (u8) 0x0B #define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C #define ACPI_NOTIFY_AFFINITY_UPDATE (u8) 0x0D #define ACPI_NOTIFY_MEMORY_UPDATE (u8) 0x0E #define ACPI_NOTIFY_DISCONNECT_RECOVER (u8) 0x0F #define ACPI_GENERIC_NOTIFY_MAX 0x0F #define ACPI_SPECIFIC_NOTIFY_MAX 0x84 /* * Types associated with ACPI names and objects. The first group of * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition * of the ACPI object_type() operator (See the ACPI Spec). Therefore, * only add to the first group if the spec changes. * * NOTE: Types must be kept in sync with the global acpi_ns_properties * and acpi_ns_type_names arrays. */ typedef u32 acpi_object_type; #define ACPI_TYPE_ANY 0x00 #define ACPI_TYPE_INTEGER 0x01 /* Byte/Word/Dword/Zero/One/Ones */ #define ACPI_TYPE_STRING 0x02 #define ACPI_TYPE_BUFFER 0x03 #define ACPI_TYPE_PACKAGE 0x04 /* byte_const, multiple data_term/Constant/super_name */ #define ACPI_TYPE_FIELD_UNIT 0x05 #define ACPI_TYPE_DEVICE 0x06 /* Name, multiple Node */ #define ACPI_TYPE_EVENT 0x07 #define ACPI_TYPE_METHOD 0x08 /* Name, byte_const, multiple Code */ #define ACPI_TYPE_MUTEX 0x09 #define ACPI_TYPE_REGION 0x0A #define ACPI_TYPE_POWER 0x0B /* Name,byte_const,word_const,multi Node */ #define ACPI_TYPE_PROCESSOR 0x0C /* Name,byte_const,Dword_const,byte_const,multi nm_o */ #define ACPI_TYPE_THERMAL 0x0D /* Name, multiple Node */ #define ACPI_TYPE_BUFFER_FIELD 0x0E #define ACPI_TYPE_DDB_HANDLE 0x0F #define ACPI_TYPE_DEBUG_OBJECT 0x10 #define ACPI_TYPE_EXTERNAL_MAX 0x10 #define ACPI_NUM_TYPES (ACPI_TYPE_EXTERNAL_MAX + 1) /* * These are object types that do not map directly to the ACPI * object_type() operator. They are used for various internal purposes * only. If new predefined ACPI_TYPEs are added (via the ACPI * specification), these internal types must move upwards. (There * is code that depends on these values being contiguous with the * external types above.) */ #define ACPI_TYPE_LOCAL_REGION_FIELD 0x11 #define ACPI_TYPE_LOCAL_BANK_FIELD 0x12 #define ACPI_TYPE_LOCAL_INDEX_FIELD 0x13 #define ACPI_TYPE_LOCAL_REFERENCE 0x14 /* Arg#, Local#, Name, Debug, ref_of, Index */ #define ACPI_TYPE_LOCAL_ALIAS 0x15 #define ACPI_TYPE_LOCAL_METHOD_ALIAS 0x16 #define ACPI_TYPE_LOCAL_NOTIFY 0x17 #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18 #define ACPI_TYPE_LOCAL_RESOURCE 0x19 #define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x1A #define ACPI_TYPE_LOCAL_SCOPE 0x1B /* 1 Name, multiple object_list Nodes */ #define ACPI_TYPE_NS_NODE_MAX 0x1B /* Last typecode used within a NS Node */ #define ACPI_TOTAL_TYPES (ACPI_TYPE_NS_NODE_MAX + 1) /* * These are special object types that never appear in * a Namespace node, only in an object of union acpi_operand_object */ #define ACPI_TYPE_LOCAL_EXTRA 0x1C #define ACPI_TYPE_LOCAL_DATA 0x1D #define ACPI_TYPE_LOCAL_MAX 0x1D /* All types above here are invalid */ #define ACPI_TYPE_INVALID 0x1E #define ACPI_TYPE_NOT_FOUND 0xFF #define ACPI_NUM_NS_TYPES (ACPI_TYPE_INVALID + 1) /* * All I/O */ #define ACPI_READ 0 #define ACPI_WRITE 1 #define ACPI_IO_MASK 1 /* * Event Types: Fixed & General Purpose */ typedef u32 acpi_event_type; /* * Fixed events */ #define ACPI_EVENT_PMTIMER 0 #define ACPI_EVENT_GLOBAL 1 #define ACPI_EVENT_POWER_BUTTON 2 #define ACPI_EVENT_SLEEP_BUTTON 3 #define ACPI_EVENT_RTC 4 #define ACPI_EVENT_MAX 4 #define ACPI_NUM_FIXED_EVENTS ACPI_EVENT_MAX + 1 /* * Event status - Per event * ------------- * The encoding of acpi_event_status is illustrated below. * Note that a set bit (1) indicates the property is TRUE * (e.g. if bit 0 is set then the event is enabled). * +-------------+-+-+-+-+-+-+ * | Bits 31:6 |5|4|3|2|1|0| * +-------------+-+-+-+-+-+-+ * | | | | | | | * | | | | | | +- Enabled? * | | | | | +--- Enabled for wake? * | | | | +----- Status bit set? * | | | +------- Enable bit set? * | | +--------- Has a handler? * | +----------- Masked? * +----------------- */ typedef u32 acpi_event_status; #define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00 #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 #define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 #define ACPI_EVENT_FLAG_STATUS_SET (acpi_event_status) 0x04 #define ACPI_EVENT_FLAG_ENABLE_SET (acpi_event_status) 0x08 #define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x10 #define ACPI_EVENT_FLAG_MASKED (acpi_event_status) 0x20 #define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */ #define ACPI_GPE_ENABLE 0 #define ACPI_GPE_DISABLE 1 #define ACPI_GPE_CONDITIONAL_ENABLE 2 /* * GPE info flags - Per GPE * +---+-+-+-+---+ * |7:6|5|4|3|2:0| * +---+-+-+-+---+ * | | | | | * | | | | +-- Type of dispatch:to method, handler, notify, or none * | | | +----- Interrupt type: edge or level triggered * | | +------- Is a Wake GPE * | +--------- Has been enabled automatically at init time * +------------ */ #define ACPI_GPE_DISPATCH_NONE (u8) 0x00 #define ACPI_GPE_DISPATCH_METHOD (u8) 0x01 #define ACPI_GPE_DISPATCH_HANDLER (u8) 0x02 #define ACPI_GPE_DISPATCH_NOTIFY (u8) 0x03 #define ACPI_GPE_DISPATCH_RAW_HANDLER (u8) 0x04 #define ACPI_GPE_DISPATCH_MASK (u8) 0x07 #define ACPI_GPE_DISPATCH_TYPE(flags) ((u8) ((flags) & ACPI_GPE_DISPATCH_MASK)) #define ACPI_GPE_LEVEL_TRIGGERED (u8) 0x08 #define ACPI_GPE_EDGE_TRIGGERED (u8) 0x00 #define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x08 #define ACPI_GPE_CAN_WAKE (u8) 0x10 #define ACPI_GPE_AUTO_ENABLED (u8) 0x20 #define ACPI_GPE_INITIALIZED (u8) 0x40 /* * Flags for GPE and Lock interfaces */ #define ACPI_NOT_ISR 0x1 #define ACPI_ISR 0x0 /* Notify types */ #define ACPI_SYSTEM_NOTIFY 0x1 #define ACPI_DEVICE_NOTIFY 0x2 #define ACPI_ALL_NOTIFY (ACPI_SYSTEM_NOTIFY | ACPI_DEVICE_NOTIFY) #define ACPI_MAX_NOTIFY_HANDLER_TYPE 0x3 #define ACPI_NUM_NOTIFY_TYPES 2 #define ACPI_MAX_SYS_NOTIFY 0x7F #define ACPI_MAX_DEVICE_SPECIFIC_NOTIFY 0xBF #define ACPI_SYSTEM_HANDLER_LIST 0 /* Used as index, must be SYSTEM_NOTIFY -1 */ #define ACPI_DEVICE_HANDLER_LIST 1 /* Used as index, must be DEVICE_NOTIFY -1 */ /* Address Space (Operation Region) Types */ typedef u8 acpi_adr_space_type; #define ACPI_ADR_SPACE_SYSTEM_MEMORY (acpi_adr_space_type) 0 #define ACPI_ADR_SPACE_SYSTEM_IO (acpi_adr_space_type) 1 #define ACPI_ADR_SPACE_PCI_CONFIG (acpi_adr_space_type) 2 #define ACPI_ADR_SPACE_EC (acpi_adr_space_type) 3 #define ACPI_ADR_SPACE_SMBUS (acpi_adr_space_type) 4 #define ACPI_ADR_SPACE_CMOS (acpi_adr_space_type) 5 #define ACPI_ADR_SPACE_PCI_BAR_TARGET (acpi_adr_space_type) 6 #define ACPI_ADR_SPACE_IPMI (acpi_adr_space_type) 7 #define ACPI_ADR_SPACE_GPIO (acpi_adr_space_type) 8 #define ACPI_ADR_SPACE_GSBUS (acpi_adr_space_type) 9 #define ACPI_ADR_SPACE_PLATFORM_COMM (acpi_adr_space_type) 10 #define ACPI_ADR_SPACE_PLATFORM_RT (acpi_adr_space_type) 11 #define ACPI_NUM_PREDEFINED_REGIONS 12 /* * Special Address Spaces * * Note: A Data Table region is a special type of operation region * that has its own AML opcode. However, internally, the AML * interpreter simply creates an operation region with an address * space type of ACPI_ADR_SPACE_DATA_TABLE. */ #define ACPI_ADR_SPACE_DATA_TABLE (acpi_adr_space_type) 0x7E /* Internal to ACPICA only */ #define ACPI_ADR_SPACE_FIXED_HARDWARE (acpi_adr_space_type) 0x7F /* Values for _REG connection code */ #define ACPI_REG_DISCONNECT 0 #define ACPI_REG_CONNECT 1 /* * bit_register IDs * * These values are intended to be used by the hardware interfaces * and are mapped to individual bitfields defined within the ACPI * registers. See the acpi_gbl_bit_register_info global table in utglobal.c * for this mapping. */ /* PM1 Status register */ #define ACPI_BITREG_TIMER_STATUS 0x00 #define ACPI_BITREG_BUS_MASTER_STATUS 0x01 #define ACPI_BITREG_GLOBAL_LOCK_STATUS 0x02 #define ACPI_BITREG_POWER_BUTTON_STATUS 0x03 #define ACPI_BITREG_SLEEP_BUTTON_STATUS 0x04 #define ACPI_BITREG_RT_CLOCK_STATUS 0x05 #define ACPI_BITREG_WAKE_STATUS 0x06 #define ACPI_BITREG_PCIEXP_WAKE_STATUS 0x07 /* PM1 Enable register */ #define ACPI_BITREG_TIMER_ENABLE 0x08 #define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x09 #define ACPI_BITREG_POWER_BUTTON_ENABLE 0x0A #define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0B #define ACPI_BITREG_RT_CLOCK_ENABLE 0x0C #define ACPI_BITREG_PCIEXP_WAKE_DISABLE 0x0D /* PM1 Control register */ #define ACPI_BITREG_SCI_ENABLE 0x0E #define ACPI_BITREG_BUS_MASTER_RLD 0x0F #define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x10 #define ACPI_BITREG_SLEEP_TYPE 0x11 #define ACPI_BITREG_SLEEP_ENABLE 0x12 /* PM2 Control register */ #define ACPI_BITREG_ARB_DISABLE 0x13 #define ACPI_BITREG_MAX 0x13 #define ACPI_NUM_BITREG ACPI_BITREG_MAX + 1 /* Status register values. A 1 clears a status bit. 0 = no effect */ #define ACPI_CLEAR_STATUS 1 /* Enable and Control register values */ #define ACPI_ENABLE_EVENT 1 #define ACPI_DISABLE_EVENT 0 /* * External ACPI object definition */ /* * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package * element or an unresolved named reference. */ union acpi_object { acpi_object_type type; /* See definition of acpi_ns_type for values */ struct { acpi_object_type type; /* ACPI_TYPE_INTEGER */ u64 value; /* The actual number */ } integer; struct { acpi_object_type type; /* ACPI_TYPE_STRING */ u32 length; /* # of bytes in string, excluding trailing null */ char *pointer; /* points to the string value */ } string; struct { acpi_object_type type; /* ACPI_TYPE_BUFFER */ u32 length; /* # of bytes in buffer */ u8 *pointer; /* points to the buffer */ } buffer; struct { acpi_object_type type; /* ACPI_TYPE_PACKAGE */ u32 count; /* # of elements in package */ union acpi_object *elements; /* Pointer to an array of ACPI_OBJECTs */ } package; struct { acpi_object_type type; /* ACPI_TYPE_LOCAL_REFERENCE */ acpi_object_type actual_type; /* Type associated with the Handle */ acpi_handle handle; /* object reference */ } reference; struct { acpi_object_type type; /* ACPI_TYPE_PROCESSOR */ u32 proc_id; acpi_io_address pblk_address; u32 pblk_length; } processor; struct { acpi_object_type type; /* ACPI_TYPE_POWER */ u32 system_level; u32 resource_order; } power_resource; }; /* * List of objects, used as a parameter list for control method evaluation */ struct acpi_object_list { u32 count; union acpi_object *pointer; }; /* * Miscellaneous common Data Structures used by the interfaces */ #define ACPI_NO_BUFFER 0 #ifdef ACPI_NO_MEM_ALLOCATIONS #define ACPI_ALLOCATE_BUFFER (acpi_size) (0) #define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (0) #else /* ACPI_NO_MEM_ALLOCATIONS */ #define ACPI_ALLOCATE_BUFFER (acpi_size) (-1) /* Let ACPICA allocate buffer */ #define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (-2) /* For internal use only (enables tracking) */ #endif /* ACPI_NO_MEM_ALLOCATIONS */ struct acpi_buffer { acpi_size length; /* Length in bytes of the buffer */ void *pointer; /* pointer to buffer */ }; /* * name_type for acpi_get_name */ #define ACPI_FULL_PATHNAME 0 #define ACPI_SINGLE_NAME 1 #define ACPI_FULL_PATHNAME_NO_TRAILING 2 #define ACPI_NAME_TYPE_MAX 2 /* * Predefined Namespace items */ struct acpi_predefined_names { const char *name; u8 type; char *val; }; /* * Structure and flags for acpi_get_system_info */ #define ACPI_SYS_MODE_UNKNOWN 0x0000 #define ACPI_SYS_MODE_ACPI 0x0001 #define ACPI_SYS_MODE_LEGACY 0x0002 #define ACPI_SYS_MODES_MASK 0x0003 /* * System info returned by acpi_get_system_info() */ struct acpi_system_info { u32 acpi_ca_version; u32 flags; u32 timer_resolution; u32 reserved1; u32 reserved2; u32 debug_level; u32 debug_layer; }; /* * System statistics returned by acpi_get_statistics() */ struct acpi_statistics { u32 sci_count; u32 gpe_count; u32 fixed_event_count[ACPI_NUM_FIXED_EVENTS]; u32 method_count; }; /* * Types specific to the OS service interfaces */ typedef u32 (ACPI_SYSTEM_XFACE * acpi_osd_handler) (void *context); typedef void (ACPI_SYSTEM_XFACE * acpi_osd_exec_callback) (void *context); /* * Various handlers and callback procedures */ typedef u32 (*acpi_sci_handler) (void *context); typedef void (*acpi_gbl_event_handler) (u32 event_type, acpi_handle device, u32 event_number, void *context); #define ACPI_EVENT_TYPE_GPE 0 #define ACPI_EVENT_TYPE_FIXED 1 typedef u32(*acpi_event_handler) (void *context); typedef u32 (*acpi_gpe_handler) (acpi_handle gpe_device, u32 gpe_number, void *context); typedef void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context); typedef void (*acpi_object_handler) (acpi_handle object, void *data); typedef acpi_status (*acpi_init_handler) (acpi_handle object, u32 function); #define ACPI_INIT_DEVICE_INI 1 typedef acpi_status (*acpi_exception_handler) (acpi_status aml_status, acpi_name name, u16 opcode, u32 aml_offset, void *context); /* Table Event handler (Load, load_table, etc.) and types */ typedef acpi_status (*acpi_table_handler) (u32 event, void *table, void *context); /* Table Event Types */ #define ACPI_TABLE_EVENT_LOAD 0x0 #define ACPI_TABLE_EVENT_UNLOAD 0x1 #define ACPI_TABLE_EVENT_INSTALL 0x2 #define ACPI_TABLE_EVENT_UNINSTALL 0x3 #define ACPI_NUM_TABLE_EVENTS 4 /* Address Spaces (For Operation Regions) */ typedef acpi_status (*acpi_adr_space_handler) (u32 function, acpi_physical_address address, u32 bit_width, u64 *value, void *handler_context, void *region_context); #define ACPI_DEFAULT_HANDLER NULL /* Special Context data for generic_serial_bus/general_purpose_io (ACPI 5.0) */ struct acpi_connection_info { u8 *connection; u16 length; u8 access_length; }; /* Special Context data for PCC Opregion (ACPI 6.3) */ struct acpi_pcc_info { u8 subspace_id; u16 length; u8 *internal_buffer; }; /* Special Context data for FFH Opregion (ACPI 6.5) */ struct acpi_ffh_info { u64 offset; u64 length; }; typedef acpi_status (*acpi_adr_space_setup) (acpi_handle region_handle, u32 function, void *handler_context, void **region_context); #define ACPI_REGION_ACTIVATE 0 #define ACPI_REGION_DEACTIVATE 1 typedef acpi_status (*acpi_walk_callback) (acpi_handle object, u32 nesting_level, void *context, void **return_value); typedef u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported); /* Interrupt handler return values */ #define ACPI_INTERRUPT_NOT_HANDLED 0x00 #define ACPI_INTERRUPT_HANDLED 0x01 /* GPE handler return values */ #define ACPI_REENABLE_GPE 0x80 /* Length of 32-bit EISAID values when converted back to a string */ #define ACPI_EISAID_STRING_SIZE 8 /* Includes null terminator */ /* Length of UUID (string) values */ #define ACPI_UUID_LENGTH 16 /* Length of 3-byte PCI class code values when converted back to a string */ #define ACPI_PCICLS_STRING_SIZE 7 /* Includes null terminator */ /* Structures used for device/processor HID, UID, CID */ struct acpi_pnp_device_id { u32 length; /* Length of string + null */ char *string; }; struct acpi_pnp_device_id_list { u32 count; /* Number of IDs in Ids array */ u32 list_size; /* Size of list, including ID strings */ struct acpi_pnp_device_id ids[]; /* ID array */ }; /* * Structure returned from acpi_get_object_info. * Optimized for both 32-bit and 64-bit builds. */ struct acpi_device_info { u32 info_size; /* Size of info, including ID strings */ u32 name; /* ACPI object Name */ acpi_object_type type; /* ACPI object Type */ u8 param_count; /* If a method, required parameter count */ u16 valid; /* Indicates which optional fields are valid */ u8 flags; /* Miscellaneous info */ u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */ u8 lowest_dstates[5]; /* _sx_w values: 0xFF indicates not valid */ u64 address; /* _ADR value */ struct acpi_pnp_device_id hardware_id; /* _HID value */ struct acpi_pnp_device_id unique_id; /* _UID value */ struct acpi_pnp_device_id class_code; /* _CLS value */ struct acpi_pnp_device_id_list compatible_id_list; /* _CID list */ }; /* Values for Flags field above (acpi_get_object_info) */ #define ACPI_PCI_ROOT_BRIDGE 0x01 /* Flags for Valid field above (acpi_get_object_info) */ #define ACPI_VALID_ADR 0x0002 #define ACPI_VALID_HID 0x0004 #define ACPI_VALID_UID 0x0008 #define ACPI_VALID_CID 0x0020 #define ACPI_VALID_CLS 0x0040 #define ACPI_VALID_SXDS 0x0100 #define ACPI_VALID_SXWS 0x0200 /* Flags for _STA method */ #define ACPI_STA_DEVICE_PRESENT 0x01 #define ACPI_STA_DEVICE_ENABLED 0x02 #define ACPI_STA_DEVICE_UI 0x04 #define ACPI_STA_DEVICE_FUNCTIONING 0x08 #define ACPI_STA_DEVICE_OK 0x08 /* Synonym */ #define ACPI_STA_BATTERY_PRESENT 0x10 /* Context structs for address space handlers */ struct acpi_pci_id { u16 segment; u16 bus; u16 device; u16 function; }; struct acpi_mem_mapping { acpi_physical_address physical_address; u8 *logical_address; acpi_size length; struct acpi_mem_mapping *next_mm; }; struct acpi_mem_space_context { u32 length; acpi_physical_address address; struct acpi_mem_mapping *cur_mm; struct acpi_mem_mapping *first_mm; }; struct acpi_data_table_mapping { void *pointer; }; /* * struct acpi_memory_list is used only if the ACPICA local cache is enabled */ struct acpi_memory_list { const char *list_name; void *list_head; u16 object_size; u16 max_depth; u16 current_depth; #ifdef ACPI_DBG_TRACK_ALLOCATIONS /* Statistics for debug memory tracking only */ u32 total_allocated; u32 total_freed; u32 max_occupied; u32 total_size; u32 current_total_size; u32 requests; u32 hits; #endif }; /* Definitions of trace event types */ typedef enum { ACPI_TRACE_AML_METHOD, ACPI_TRACE_AML_OPCODE, ACPI_TRACE_AML_REGION } acpi_trace_event_type; /* Definitions of _OSI support */ #define ACPI_VENDOR_STRINGS 0x01 #define ACPI_FEATURE_STRINGS 0x02 #define ACPI_ENABLE_INTERFACES 0x00 #define ACPI_DISABLE_INTERFACES 0x04 #define ACPI_DISABLE_ALL_VENDOR_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS) #define ACPI_DISABLE_ALL_FEATURE_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_FEATURE_STRINGS) #define ACPI_DISABLE_ALL_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) #define ACPI_ENABLE_ALL_VENDOR_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS) #define ACPI_ENABLE_ALL_FEATURE_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_FEATURE_STRINGS) #define ACPI_ENABLE_ALL_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS) #define ACPI_OSI_WIN_2000 0x01 #define ACPI_OSI_WIN_XP 0x02 #define ACPI_OSI_WIN_XP_SP1 0x03 #define ACPI_OSI_WINSRV_2003 0x04 #define ACPI_OSI_WIN_XP_SP2 0x05 #define ACPI_OSI_WINSRV_2003_SP1 0x06 #define ACPI_OSI_WIN_VISTA 0x07 #define ACPI_OSI_WINSRV_2008 0x08 #define ACPI_OSI_WIN_VISTA_SP1 0x09 #define ACPI_OSI_WIN_VISTA_SP2 0x0A #define ACPI_OSI_WIN_7 0x0B #define ACPI_OSI_WIN_8 0x0C #define ACPI_OSI_WIN_8_1 0x0D #define ACPI_OSI_WIN_10 0x0E #define ACPI_OSI_WIN_10_RS1 0x0F #define ACPI_OSI_WIN_10_RS2 0x10 #define ACPI_OSI_WIN_10_RS3 0x11 #define ACPI_OSI_WIN_10_RS4 0x12 #define ACPI_OSI_WIN_10_RS5 0x13 #define ACPI_OSI_WIN_10_19H1 0x14 #define ACPI_OSI_WIN_10_20H1 0x15 #define ACPI_OSI_WIN_11 0x16 /* Definitions of getopt */ #define ACPI_OPT_END -1 /* Definitions for explicit fallthrough */ #ifndef ACPI_FALLTHROUGH #define ACPI_FALLTHROUGH do {} while(0) #endif #ifndef ACPI_FLEX_ARRAY #define ACPI_FLEX_ARRAY(TYPE, NAME) TYPE NAME[0] #endif #endif /* __ACTYPES_H__ */ PKk]FwI acnames.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acnames.h - Global names and strings * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACNAMES_H__ #define __ACNAMES_H__ /* Method names - these methods can appear anywhere in the namespace */ #define METHOD_NAME__ADR "_ADR" #define METHOD_NAME__AEI "_AEI" #define METHOD_NAME__BBN "_BBN" #define METHOD_NAME__CBA "_CBA" #define METHOD_NAME__CID "_CID" #define METHOD_NAME__CLS "_CLS" #define METHOD_NAME__CRS "_CRS" #define METHOD_NAME__DDN "_DDN" #define METHOD_NAME__DIS "_DIS" #define METHOD_NAME__DMA "_DMA" #define METHOD_NAME__EVT "_EVT" #define METHOD_NAME__HID "_HID" #define METHOD_NAME__INI "_INI" #define METHOD_NAME__PLD "_PLD" #define METHOD_NAME__DSD "_DSD" #define METHOD_NAME__PRS "_PRS" #define METHOD_NAME__PRT "_PRT" #define METHOD_NAME__PRW "_PRW" #define METHOD_NAME__PS0 "_PS0" #define METHOD_NAME__PS1 "_PS1" #define METHOD_NAME__PS2 "_PS2" #define METHOD_NAME__PS3 "_PS3" #define METHOD_NAME__REG "_REG" #define METHOD_NAME__SB_ "_SB_" #define METHOD_NAME__SEG "_SEG" #define METHOD_NAME__SRS "_SRS" #define METHOD_NAME__STA "_STA" #define METHOD_NAME__SUB "_SUB" #define METHOD_NAME__UID "_UID" /* Method names - these methods must appear at the namespace root */ #define METHOD_PATHNAME__PTS "\\_PTS" #define METHOD_PATHNAME__SST "\\_SI._SST" #define METHOD_PATHNAME__WAK "\\_WAK" /* Definitions of the predefined namespace names */ #define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */ #define ACPI_PREFIX_MIXED (u32) 0x69706341 /* "Acpi" */ #define ACPI_PREFIX_LOWER (u32) 0x69706361 /* "acpi" */ /* Root name stuff */ #define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */ #define ACPI_ROOT_PATHNAME "\\___" #define ACPI_NAMESPACE_ROOT "Namespace Root" #define ACPI_NS_ROOT_PATH "\\" #endif /* __ACNAMES_H__ */ PKk]5ewIwIactbl.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: actbl.h - Basic ACPI Table Definitions * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACTBL_H__ #define __ACTBL_H__ /******************************************************************************* * * Fundamental ACPI tables * * This file contains definitions for the ACPI tables that are directly consumed * by ACPICA. All other tables are consumed by the OS-dependent ACPI-related * device drivers and other OS support code. * * The RSDP and FACS do not use the common ACPI table header. All other ACPI * tables use the header. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_DSDT "DSDT" /* Differentiated System Description Table */ #define ACPI_SIG_FADT "FACP" /* Fixed ACPI Description Table */ #define ACPI_SIG_FACS "FACS" /* Firmware ACPI Control Structure */ #define ACPI_SIG_OSDT "OSDT" /* Override System Description Table */ #define ACPI_SIG_PSDT "PSDT" /* Persistent System Description Table */ #define ACPI_SIG_RSDP "RSD PTR " /* Root System Description Pointer */ #define ACPI_SIG_RSDT "RSDT" /* Root System Description Table */ #define ACPI_SIG_XSDT "XSDT" /* Extended System Description Table */ #define ACPI_SIG_SSDT "SSDT" /* Secondary System Description Table */ #define ACPI_RSDP_NAME "RSDP" /* Short name for RSDP, not signature */ #define ACPI_OEM_NAME "OEM" /* Short name for OEM, not signature */ /* * All tables and structures must be byte-packed to match the ACPI * specification, since the tables are provided by the system BIOS */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * Master ACPI Table Header. This common header is used by all ACPI tables * except the RSDP and FACS. * ******************************************************************************/ struct acpi_table_header { char signature[ACPI_NAMESEG_SIZE]; /* ASCII table signature */ u32 length; /* Length of table in bytes, including this header */ u8 revision; /* ACPI Specification minor version number */ u8 checksum; /* To make sum of entire table == 0 */ char oem_id[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */ char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */ u32 oem_revision; /* OEM revision number */ char asl_compiler_id[ACPI_NAMESEG_SIZE]; /* ASCII ASL compiler vendor ID */ u32 asl_compiler_revision; /* ASL compiler version */ }; /******************************************************************************* * * GAS - Generic Address Structure (ACPI 2.0+) * * Note: Since this structure is used in the ACPI tables, it is byte aligned. * If misaligned access is not supported by the hardware, accesses to the * 64-bit Address field must be performed with care. * ******************************************************************************/ struct acpi_generic_address { u8 space_id; /* Address space where struct or register exists */ u8 bit_width; /* Size in bits of given register */ u8 bit_offset; /* Bit offset within the register */ u8 access_width; /* Minimum Access size (ACPI 3.0) */ u64 address; /* 64-bit address of struct or register */ }; /******************************************************************************* * * RSDP - Root System Description Pointer (Signature is "RSD PTR ") * Version 2 * ******************************************************************************/ struct acpi_table_rsdp { char signature[8]; /* ACPI signature, contains "RSD PTR " */ u8 checksum; /* ACPI 1.0 checksum */ char oem_id[ACPI_OEM_ID_SIZE]; /* OEM identification */ u8 revision; /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ u32 rsdt_physical_address; /* 32-bit physical address of the RSDT */ u32 length; /* Table length in bytes, including header (ACPI 2.0+) */ u64 xsdt_physical_address; /* 64-bit physical address of the XSDT (ACPI 2.0+) */ u8 extended_checksum; /* Checksum of entire table (ACPI 2.0+) */ u8 reserved[3]; /* Reserved, must be zero */ }; /* Standalone struct for the ACPI 1.0 RSDP */ struct acpi_rsdp_common { char signature[8]; u8 checksum; char oem_id[ACPI_OEM_ID_SIZE]; u8 revision; u32 rsdt_physical_address; }; /* Standalone struct for the extended part of the RSDP (ACPI 2.0+) */ struct acpi_rsdp_extension { u32 length; u64 xsdt_physical_address; u8 extended_checksum; u8 reserved[3]; }; /******************************************************************************* * * RSDT/XSDT - Root System Description Tables * Version 1 (both) * ******************************************************************************/ struct acpi_table_rsdt { struct acpi_table_header header; /* Common ACPI table header */ u32 table_offset_entry[1]; /* Array of pointers to ACPI tables */ }; struct acpi_table_xsdt { struct acpi_table_header header; /* Common ACPI table header */ u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ }; #define ACPI_RSDT_ENTRY_SIZE (sizeof (u32)) #define ACPI_XSDT_ENTRY_SIZE (sizeof (u64)) /******************************************************************************* * * FACS - Firmware ACPI Control Structure (FACS) * ******************************************************************************/ struct acpi_table_facs { char signature[4]; /* ASCII table signature */ u32 length; /* Length of structure, in bytes */ u32 hardware_signature; /* Hardware configuration signature */ u32 firmware_waking_vector; /* 32-bit physical address of the Firmware Waking Vector */ u32 global_lock; /* Global Lock for shared hardware resources */ u32 flags; u64 xfirmware_waking_vector; /* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ u8 version; /* Version of this table (ACPI 2.0+) */ u8 reserved[3]; /* Reserved, must be zero */ u32 ospm_flags; /* Flags to be set by OSPM (ACPI 4.0) */ u8 reserved1[24]; /* Reserved, must be zero */ }; /* Masks for global_lock flag field above */ #define ACPI_GLOCK_PENDING (1) /* 00: Pending global lock ownership */ #define ACPI_GLOCK_OWNED (1<<1) /* 01: Global lock is owned */ /* Masks for Flags field above */ #define ACPI_FACS_S4_BIOS_PRESENT (1) /* 00: S4BIOS support is present */ #define ACPI_FACS_64BIT_WAKE (1<<1) /* 01: 64-bit wake vector supported (ACPI 4.0) */ /* Masks for ospm_flags field above */ #define ACPI_FACS_64BIT_ENVIRONMENT (1) /* 00: 64-bit wake environment is required (ACPI 4.0) */ /******************************************************************************* * * FADT - Fixed ACPI Description Table (Signature "FACP") * Version 6 * ******************************************************************************/ /* Fields common to all versions of the FADT */ struct acpi_table_fadt { struct acpi_table_header header; /* Common ACPI table header */ u32 facs; /* 32-bit physical address of FACS */ u32 dsdt; /* 32-bit physical address of DSDT */ u8 model; /* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */ u8 preferred_profile; /* Conveys preferred power management profile to OSPM. */ u16 sci_interrupt; /* System vector of SCI interrupt */ u32 smi_command; /* 32-bit Port address of SMI command port */ u8 acpi_enable; /* Value to write to SMI_CMD to enable ACPI */ u8 acpi_disable; /* Value to write to SMI_CMD to disable ACPI */ u8 s4_bios_request; /* Value to write to SMI_CMD to enter S4BIOS state */ u8 pstate_control; /* Processor performance state control */ u32 pm1a_event_block; /* 32-bit port address of Power Mgt 1a Event Reg Blk */ u32 pm1b_event_block; /* 32-bit port address of Power Mgt 1b Event Reg Blk */ u32 pm1a_control_block; /* 32-bit port address of Power Mgt 1a Control Reg Blk */ u32 pm1b_control_block; /* 32-bit port address of Power Mgt 1b Control Reg Blk */ u32 pm2_control_block; /* 32-bit port address of Power Mgt 2 Control Reg Blk */ u32 pm_timer_block; /* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */ u32 gpe0_block; /* 32-bit port address of General Purpose Event 0 Reg Blk */ u32 gpe1_block; /* 32-bit port address of General Purpose Event 1 Reg Blk */ u8 pm1_event_length; /* Byte Length of ports at pm1x_event_block */ u8 pm1_control_length; /* Byte Length of ports at pm1x_control_block */ u8 pm2_control_length; /* Byte Length of ports at pm2_control_block */ u8 pm_timer_length; /* Byte Length of ports at pm_timer_block */ u8 gpe0_block_length; /* Byte Length of ports at gpe0_block */ u8 gpe1_block_length; /* Byte Length of ports at gpe1_block */ u8 gpe1_base; /* Offset in GPE number space where GPE1 events start */ u8 cst_control; /* Support for the _CST object and C-States change notification */ u16 c2_latency; /* Worst case HW latency to enter/exit C2 state */ u16 c3_latency; /* Worst case HW latency to enter/exit C3 state */ u16 flush_size; /* Processor memory cache line width, in bytes */ u16 flush_stride; /* Number of flush strides that need to be read */ u8 duty_offset; /* Processor duty cycle index in processor P_CNT reg */ u8 duty_width; /* Processor duty cycle value bit width in P_CNT register */ u8 day_alarm; /* Index to day-of-month alarm in RTC CMOS RAM */ u8 month_alarm; /* Index to month-of-year alarm in RTC CMOS RAM */ u8 century; /* Index to century in RTC CMOS RAM */ u16 boot_flags; /* IA-PC Boot Architecture Flags (see below for individual flags) */ u8 reserved; /* Reserved, must be zero */ u32 flags; /* Miscellaneous flag bits (see below for individual flags) */ struct acpi_generic_address reset_register; /* 64-bit address of the Reset register */ u8 reset_value; /* Value to write to the reset_register port to reset the system */ u16 arm_boot_flags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ u8 minor_revision; /* FADT Minor Revision (ACPI 5.1) */ u64 Xfacs; /* 64-bit physical address of FACS */ u64 Xdsdt; /* 64-bit physical address of DSDT */ struct acpi_generic_address xpm1a_event_block; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ struct acpi_generic_address xpm1b_event_block; /* 64-bit Extended Power Mgt 1b Event Reg Blk address */ struct acpi_generic_address xpm1a_control_block; /* 64-bit Extended Power Mgt 1a Control Reg Blk address */ struct acpi_generic_address xpm1b_control_block; /* 64-bit Extended Power Mgt 1b Control Reg Blk address */ struct acpi_generic_address xpm2_control_block; /* 64-bit Extended Power Mgt 2 Control Reg Blk address */ struct acpi_generic_address xpm_timer_block; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ struct acpi_generic_address xgpe0_block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */ struct acpi_generic_address xgpe1_block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */ struct acpi_generic_address sleep_control; /* 64-bit Sleep Control register (ACPI 5.0) */ struct acpi_generic_address sleep_status; /* 64-bit Sleep Status register (ACPI 5.0) */ u64 hypervisor_id; /* Hypervisor Vendor ID (ACPI 6.0) */ }; /* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ #define ACPI_FADT_NO_VGA (1<<2) /* 02: [V4] It is not safe to probe for VGA hardware */ #define ACPI_FADT_NO_MSI (1<<3) /* 03: [V4] Message Signaled Interrupts (MSI) must not be enabled */ #define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */ #define ACPI_FADT_NO_CMOS_RTC (1<<5) /* 05: [V5] No CMOS real-time clock present */ #define FADT2_REVISION_ID 3 /* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ #define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */ #define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ /* Masks for FADT flags */ #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ #define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: [V1] WBINVD flushes but does not invalidate caches */ #define ACPI_FADT_C1_SUPPORTED (1<<2) /* 02: [V1] All processors support C1 state */ #define ACPI_FADT_C2_MP_SUPPORTED (1<<3) /* 03: [V1] C2 state works on MP system */ #define ACPI_FADT_POWER_BUTTON (1<<4) /* 04: [V1] Power button is handled as a control method device */ #define ACPI_FADT_SLEEP_BUTTON (1<<5) /* 05: [V1] Sleep button is handled as a control method device */ #define ACPI_FADT_FIXED_RTC (1<<6) /* 06: [V1] RTC wakeup status is not in fixed register space */ #define ACPI_FADT_S4_RTC_WAKE (1<<7) /* 07: [V1] RTC alarm can wake system from S4 */ #define ACPI_FADT_32BIT_TIMER (1<<8) /* 08: [V1] ACPI timer width is 32-bit (0=24-bit) */ #define ACPI_FADT_DOCKING_SUPPORTED (1<<9) /* 09: [V1] Docking supported */ #define ACPI_FADT_RESET_REGISTER (1<<10) /* 10: [V2] System reset via the FADT RESET_REG supported */ #define ACPI_FADT_SEALED_CASE (1<<11) /* 11: [V3] No internal expansion capabilities and case is sealed */ #define ACPI_FADT_HEADLESS (1<<12) /* 12: [V3] No local video capabilities or local input devices */ #define ACPI_FADT_SLEEP_TYPE (1<<13) /* 13: [V3] Must execute native instruction after writing SLP_TYPx register */ #define ACPI_FADT_PCI_EXPRESS_WAKE (1<<14) /* 14: [V4] System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ #define ACPI_FADT_PLATFORM_CLOCK (1<<15) /* 15: [V4] OSPM should use platform-provided timer (ACPI 3.0) */ #define ACPI_FADT_S4_RTC_VALID (1<<16) /* 16: [V4] Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ #define ACPI_FADT_REMOTE_POWER_ON (1<<17) /* 17: [V4] System is compatible with remote power on (ACPI 3.0) */ #define ACPI_FADT_APIC_CLUSTER (1<<18) /* 18: [V4] All local APICs must use cluster model (ACPI 3.0) */ #define ACPI_FADT_APIC_PHYSICAL (1<<19) /* 19: [V4] All local xAPICs must use physical dest mode (ACPI 3.0) */ #define ACPI_FADT_HW_REDUCED (1<<20) /* 20: [V5] ACPI hardware is not implemented (ACPI 5.0) */ #define ACPI_FADT_LOW_POWER_S0 (1<<21) /* 21: [V5] S0 power savings are equal or better than S3 (ACPI 5.0) */ /* Values for preferred_profile (Preferred Power Management Profiles) */ enum acpi_preferred_pm_profiles { PM_UNSPECIFIED = 0, PM_DESKTOP = 1, PM_MOBILE = 2, PM_WORKSTATION = 3, PM_ENTERPRISE_SERVER = 4, PM_SOHO_SERVER = 5, PM_APPLIANCE_PC = 6, PM_PERFORMANCE_SERVER = 7, PM_TABLET = 8, NR_PM_PROFILES = 9 }; /* Values for sleep_status and sleep_control registers (V5+ FADT) */ #define ACPI_X_WAKE_STATUS 0x80 #define ACPI_X_SLEEP_TYPE_MASK 0x1C #define ACPI_X_SLEEP_TYPE_POSITION 0x02 #define ACPI_X_SLEEP_ENABLE 0x20 /* Reset to default packing */ #pragma pack() /* * Internal table-related structures */ union acpi_name_union { u32 integer; char ascii[4]; }; /* Internal ACPI Table Descriptor. One per ACPI table. */ struct acpi_table_desc { acpi_physical_address address; struct acpi_table_header *pointer; u32 length; /* Length fixed at 32 bits (fixed in table header) */ union acpi_name_union signature; acpi_owner_id owner_id; u8 flags; u16 validation_count; }; /* * Maximum value of the validation_count field in struct acpi_table_desc. * When reached, validation_count cannot be changed any more and the table will * be permanently regarded as validated. * * This is to prevent situations in which unbalanced table get/put operations * may cause premature table unmapping in the OS to happen. * * The maximum validation count can be defined to any value, but should be * greater than the maximum number of OS early stage mapping slots to avoid * leaking early stage table mappings to the late stage. */ #define ACPI_MAX_TABLE_VALIDATIONS ACPI_UINT16_MAX /* Masks for Flags field above */ #define ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL (0) /* Virtual address, external maintained */ #define ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL (1) /* Physical address, internally mapped */ #define ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL (2) /* Virtual address, internallly allocated */ #define ACPI_TABLE_ORIGIN_MASK (3) #define ACPI_TABLE_IS_VERIFIED (4) #define ACPI_TABLE_IS_LOADED (8) /* * Get the remaining ACPI tables */ #include #include #include /* Macros used to generate offsets to specific table fields */ #define ACPI_FADT_OFFSET(f) (u16) ACPI_OFFSET (struct acpi_table_fadt, f) /* * Sizes of the various flavors of FADT. We need to look closely * at the FADT length because the version number essentially tells * us nothing because of many BIOS bugs where the version does not * match the expected length. In other words, the length of the * FADT is the bottom line as to what the version really is. * * For reference, the values below are as follows: * FADT V1 size: 0x074 * FADT V2 size: 0x084 * FADT V3 size: 0x0F4 * FADT V4 size: 0x0F4 * FADT V5 size: 0x10C * FADT V6 size: 0x114 */ #define ACPI_FADT_V1_SIZE (u32) (ACPI_FADT_OFFSET (flags) + 4) #define ACPI_FADT_V2_SIZE (u32) (ACPI_FADT_OFFSET (minor_revision) + 1) #define ACPI_FADT_V3_SIZE (u32) (ACPI_FADT_OFFSET (sleep_control)) #define ACPI_FADT_V5_SIZE (u32) (ACPI_FADT_OFFSET (hypervisor_id)) #define ACPI_FADT_V6_SIZE (u32) (sizeof (struct acpi_table_fadt)) #define ACPI_FADT_CONFORMANCE "ACPI 6.1 (FADT version 6)" #endif /* __ACTBL_H__ */ PKk]platform/aczephyr.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Module Name: aczephyr.h - OS specific defines, etc. * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACZEPHYR_H__ #define __ACZEPHYR_H__ #define ACPI_MACHINE_WIDTH 64 #define ACPI_NO_ERROR_MESSAGES #undef ACPI_DEBUG_OUTPUT #define ACPI_USE_SYSTEM_CLIBRARY #undef ACPI_DBG_TRACK_ALLOCATIONS #define ACPI_SINGLE_THREADED #define ACPI_USE_NATIVE_RSDP_POINTER #include #include #include #include #include #include #include #include #include /****************************************************************************** * * FUNCTION: acpi_enable_dbg_print * * PARAMETERS: Enable, - Enable/Disable debug print * * RETURN: None * * DESCRIPTION: Enable/disable debug print * *****************************************************************************/ void acpi_enable_dbg_print(bool enable); #endif PKk] |  platform/aclinuxex.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACLINUXEX_H__ #define __ACLINUXEX_H__ #ifdef __KERNEL__ #ifndef ACPI_USE_NATIVE_DIVIDE #ifndef ACPI_DIV_64_BY_32 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ do { \ u64 (__n) = ((u64) n_hi) << 32 | (n_lo); \ (r32) = do_div ((__n), (d32)); \ (q32) = (u32) (__n); \ } while (0) #endif #ifndef ACPI_SHIFT_RIGHT_64 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ do { \ (n_lo) >>= 1; \ (n_lo) |= (((n_hi) & 1) << 31); \ (n_hi) >>= 1; \ } while (0) #endif #endif /* * Overrides for in-kernel ACPICA */ acpi_status ACPI_INIT_FUNCTION acpi_os_initialize(void); acpi_status acpi_os_terminate(void); /* * The irqs_disabled() check is for resume from RAM. * Interrupts are off during resume, just like they are for boot. * However, boot has (system_state != SYSTEM_RUNNING) * to quiet __might_sleep() in kmalloc() and resume does not. */ static inline void *acpi_os_allocate(acpi_size size) { return kmalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); } static inline void *acpi_os_allocate_zeroed(acpi_size size) { return kzalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); } static inline void acpi_os_free(void *memory) { kfree(memory); } static inline void *acpi_os_acquire_object(acpi_cache_t * cache) { return kmem_cache_zalloc(cache, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); } static inline acpi_thread_id acpi_os_get_thread_id(void) { return (acpi_thread_id) (unsigned long)current; } /* * When lockdep is enabled, the spin_lock_init() macro stringifies it's * argument and uses that as a name for the lock in debugging. * By executing spin_lock_init() in a macro the key changes from "lock" for * all locks to the name of the argument of acpi_os_create_lock(), which * prevents lockdep from reporting false positives for ACPICA locks. */ #define acpi_os_create_lock(__handle) \ ({ \ spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ if (lock) { \ *(__handle) = lock; \ spin_lock_init(*(__handle)); \ } \ lock ? AE_OK : AE_NO_MEMORY; \ }) #define acpi_os_create_raw_lock(__handle) \ ({ \ raw_spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ if (lock) { \ *(__handle) = lock; \ raw_spin_lock_init(*(__handle)); \ } \ lock ? AE_OK : AE_NO_MEMORY; \ }) static inline acpi_cpu_flags acpi_os_acquire_raw_lock(acpi_raw_spinlock lockp) { acpi_cpu_flags flags; raw_spin_lock_irqsave(lockp, flags); return flags; } static inline void acpi_os_release_raw_lock(acpi_raw_spinlock lockp, acpi_cpu_flags flags) { raw_spin_unlock_irqrestore(lockp, flags); } static inline void acpi_os_delete_raw_lock(acpi_raw_spinlock handle) { ACPI_FREE(handle); } static inline u8 acpi_os_readable(void *pointer, acpi_size length) { return TRUE; } static inline acpi_status acpi_os_initialize_debugger(void) { return AE_OK; } static inline void acpi_os_terminate_debugger(void) { return; } /* * OSL interfaces added by Linux */ #endif /* __KERNEL__ */ #endif /* __ACLINUXEX_H__ */ PKk]platform/acgcc.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acgcc.h - GCC specific defines, etc. * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACGCC_H__ #define __ACGCC_H__ #ifndef va_arg #ifdef __KERNEL__ #include #else #include #endif /* __KERNEL__ */ #endif /* ! va_arg */ #define ACPI_INLINE __inline__ /* Function name is used for debug output. Non-ANSI, compiler-dependent */ #define ACPI_GET_FUNCTION_NAME __func__ /* * This macro is used to tag functions as "printf-like" because * some compilers (like GCC) can catch printf format string problems. */ #define ACPI_PRINTF_LIKE(c) __attribute__ ((__format__ (__printf__, c, c+1))) /* * Some compilers complain about unused variables. Sometimes we don't want to * use all the variables (for example, _acpi_module_name). This allows us * to tell the compiler warning in a per-variable manner that a variable * is unused. */ #define ACPI_UNUSED_VAR __attribute__ ((unused)) /* GCC supports __VA_ARGS__ in macros */ #define COMPILER_VA_MACRO 1 /* GCC supports native multiply/shift on 32-bit platforms */ #define ACPI_USE_NATIVE_MATH64 /* GCC did not support __has_attribute until 5.1. */ #ifndef __has_attribute #define __has_attribute(x) 0 #endif /* * Explicitly mark intentional explicit fallthrough to silence * -Wimplicit-fallthrough in GCC 7.1+. */ #if __has_attribute(__fallthrough__) #define ACPI_FALLTHROUGH __attribute__((__fallthrough__)) #endif /* * Flexible array members are not allowed to be part of a union under * C99, but this is not for any technical reason. Work around the * limitation. */ #define ACPI_FLEX_ARRAY(TYPE, NAME) \ struct { \ struct { } __Empty_ ## NAME; \ TYPE NAME[]; \ } #endif /* __ACGCC_H__ */ PKk]?fplatform/aclinux.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: aclinux.h - OS specific defines, etc. for Linux * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACLINUX_H__ #define __ACLINUX_H__ #ifdef __KERNEL__ /* ACPICA external files should not include ACPICA headers directly. */ #if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) #error "Please don't include directly, include instead." #endif #endif /* Common (in-kernel/user-space) ACPICA configuration */ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 #define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS #ifdef __KERNEL__ #define ACPI_USE_SYSTEM_INTTYPES #define ACPI_USE_GPE_POLLING /* Kernel specific ACPICA configuration */ #ifdef CONFIG_PCI #define ACPI_PCI_CONFIGURED #endif #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY #define ACPI_REDUCED_HARDWARE 1 #endif #ifdef CONFIG_ACPI_DEBUGGER #define ACPI_DEBUGGER #endif #ifdef CONFIG_ACPI_DEBUG #define ACPI_MUTEX_DEBUG #endif #include #include #include #include #include #include #include #include #ifdef EXPORT_ACPI_INTERFACES #include #endif #ifdef CONFIG_ACPI #include #endif #define ACPI_INIT_FUNCTION __init /* Use a specific bugging default separate from ACPICA */ #undef ACPI_DEBUG_DEFAULT #define ACPI_DEBUG_DEFAULT (ACPI_LV_INFO | ACPI_LV_REPAIR) #ifndef CONFIG_ACPI /* External globals for __KERNEL__, stubs is needed */ #define ACPI_GLOBAL(t,a) #define ACPI_INIT_GLOBAL(t,a,b) /* Generating stubs for configurable ACPICA macros */ #define ACPI_NO_MEM_ALLOCATIONS /* Generating stubs for configurable ACPICA functions */ #define ACPI_NO_ERROR_MESSAGES #undef ACPI_DEBUG_OUTPUT /* External interface for __KERNEL__, stub is needed */ #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \ static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} #define ACPI_EXTERNAL_RETURN_OK(prototype) \ static ACPI_INLINE prototype {return(AE_OK);} #define ACPI_EXTERNAL_RETURN_VOID(prototype) \ static ACPI_INLINE prototype {return;} #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \ static ACPI_INLINE prototype {return(0);} #define ACPI_EXTERNAL_RETURN_PTR(prototype) \ static ACPI_INLINE prototype {return(NULL);} #endif /* CONFIG_ACPI */ /* Host-dependent types and defines for in-kernel ACPICA */ #define ACPI_MACHINE_WIDTH BITS_PER_LONG #define ACPI_USE_NATIVE_MATH64 #define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); #define strtoul simple_strtoul #define acpi_cache_t struct kmem_cache #define acpi_spinlock spinlock_t * #define acpi_raw_spinlock raw_spinlock_t * #define acpi_cpu_flags unsigned long #define acpi_uintptr_t uintptr_t #define ACPI_TO_INTEGER(p) ((uintptr_t)(p)) #define ACPI_OFFSET(d, f) offsetof(d, f) /* Use native linux version of acpi_os_allocate_zeroed */ #define USE_NATIVE_ALLOCATE_ZEROED /* Use logical addresses for accessing GPE registers in system memory */ #define ACPI_GPE_USE_LOGICAL_ADDRESSES /* * Overrides for in-kernel ACPICA */ #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock /* * OSL interfaces used by debugger/disassembler */ #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger /* * OSL interfaces used by utilities */ #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory #define ACPI_MSG_ERROR KERN_ERR "ACPI Error: " #define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: " #define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: " #define ACPI_MSG_INFO KERN_INFO "ACPI: " #define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): " #define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): " /* * Linux wants to use designated initializers for function pointer structs. */ #define ACPI_STRUCT_INIT(field, value) .field = value #else /* !__KERNEL__ */ #define ACPI_USE_STANDARD_HEADERS #ifdef ACPI_USE_STANDARD_HEADERS #include #include #include #define ACPI_OFFSET(d, f) offsetof(d, f) #endif /* Define/disable kernel-specific declarators */ #ifndef __init #define __init #endif #ifndef __iomem #define __iomem #endif /* Host-dependent types and defines for user-space ACPICA */ #define ACPI_FLUSH_CPU_CACHE() #define ACPI_CAST_PTHREAD_T(pthread) ((acpi_thread_id) (pthread)) #if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ defined(__aarch64__) || defined(__PPC64__) ||\ defined(__s390x__) || defined(__loongarch__) ||\ (defined(__riscv) && (defined(__LP64__) || defined(_LP64))) #define ACPI_MACHINE_WIDTH 64 #define COMPILER_DEPENDENT_INT64 long #define COMPILER_DEPENDENT_UINT64 unsigned long #else #define ACPI_MACHINE_WIDTH 32 #define COMPILER_DEPENDENT_INT64 long long #define COMPILER_DEPENDENT_UINT64 unsigned long long #define ACPI_USE_NATIVE_DIVIDE #define ACPI_USE_NATIVE_MATH64 #endif #ifndef __cdecl #define __cdecl #endif #endif /* __KERNEL__ */ #endif /* __ACLINUX_H__ */ PKk]3t$t$platform/acenv.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acenv.h - Host and compiler configuration * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACENV_H__ #define __ACENV_H__ /* * Environment configuration. The purpose of this file is to interface ACPICA * to the local environment. This includes compiler-specific, OS-specific, * and machine-specific configuration. */ /* Types for ACPI_MUTEX_TYPE */ #define ACPI_BINARY_SEMAPHORE 0 #define ACPI_OSL_MUTEX 1 /* Types for DEBUGGER_THREADING */ #define DEBUGGER_SINGLE_THREADED 0 #define DEBUGGER_MULTI_THREADED 1 /****************************************************************************** * * Configuration for ACPI tools and utilities * *****************************************************************************/ /* Common application configuration. All single threaded except for acpi_exec. */ #if (defined ACPI_ASL_COMPILER) || \ (defined ACPI_BIN_APP) || \ (defined ACPI_DUMP_APP) || \ (defined ACPI_HELP_APP) || \ (defined ACPI_NAMES_APP) || \ (defined ACPI_SRC_APP) || \ (defined ACPI_XTRACT_APP) || \ (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_EFI_HELLO) #define ACPI_APPLICATION #define ACPI_SINGLE_THREADED #define USE_NATIVE_ALLOCATE_ZEROED #endif /* iASL configuration */ #ifdef ACPI_ASL_COMPILER #define ACPI_DEBUG_OUTPUT #define ACPI_CONSTANT_EVAL_ONLY #define ACPI_LARGE_NAMESPACE_NODE #define ACPI_DATA_TABLE_DISASSEMBLY #define ACPI_32BIT_PHYSICAL_ADDRESS #define ACPI_DISASSEMBLER 1 #endif /* acpi_exec configuration. Multithreaded with full AML debugger */ #ifdef ACPI_EXEC_APP #define ACPI_APPLICATION #define ACPI_FULL_DEBUG #define ACPI_MUTEX_DEBUG #define ACPI_DBG_TRACK_ALLOCATIONS #endif /* acpi_help configuration. Error messages disabled. */ #ifdef ACPI_HELP_APP #define ACPI_NO_ERROR_MESSAGES #endif /* acpi_names configuration. Debug output enabled. */ #ifdef ACPI_NAMES_APP #define ACPI_DEBUG_OUTPUT #endif /* acpi_exec/acpi_names/Example configuration. Native RSDP used. */ #if (defined ACPI_EXEC_APP) || \ (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_NAMES_APP) #define ACPI_USE_NATIVE_RSDP_POINTER #endif /* acpi_dump configuration. Native mapping used if provided by the host */ #ifdef ACPI_DUMP_APP #define ACPI_USE_NATIVE_MEMORY_MAPPING #endif /* acpi_names/Example configuration. Hardware disabled */ #if (defined ACPI_EXAMPLE_APP) || \ (defined ACPI_NAMES_APP) #define ACPI_REDUCED_HARDWARE 1 #endif /* Linkable ACPICA library. Two versions, one with full debug. */ #ifdef ACPI_LIBRARY #define ACPI_USE_LOCAL_CACHE #define ACPI_DEBUGGER 1 #define ACPI_DISASSEMBLER 1 #ifdef _DEBUG #define ACPI_DEBUG_OUTPUT #endif #endif /* Common for all ACPICA applications */ #ifdef ACPI_APPLICATION #define ACPI_USE_LOCAL_CACHE #endif /* Common debug/disassembler support */ #ifdef ACPI_FULL_DEBUG #define ACPI_DEBUG_OUTPUT #define ACPI_DEBUGGER 1 #define ACPI_DISASSEMBLER 1 #endif /* * acpisrc CR\LF support * Unix file line endings do not include the carriage return. * If the acpisrc utility is being built using a microsoft compiler, it means * that it will be running on a windows machine which means that the output is * expected to have CR/LF newlines. If the acpisrc utility is built with * anything else, it will likely run on a system with LF newlines. This flag * tells the acpisrc utility that newlines will be in the LF format. */ #define ACPI_SRC_OS_LF_ONLY 0 /*! [Begin] no source code translation */ /****************************************************************************** * * Host configuration files. The compiler configuration files are included * first. * *****************************************************************************/ #if defined(__GNUC__) #include #elif defined(_MSC_VER) #include "acmsvc.h" #endif #if defined(_LINUX) || defined(__linux__) #include #elif defined(_APPLE) || defined(__APPLE__) #include "acmacosx.h" #elif defined(__DragonFly__) #include "acdragonfly.h" #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include "acfreebsd.h" #elif defined(__NetBSD__) #include "acnetbsd.h" #elif defined(__sun) #include "acsolaris.h" #elif defined(MODESTO) #include "acmodesto.h" #elif defined(NETWARE) #include "acnetware.h" #elif defined(_CYGWIN) #include "accygwin.h" #elif defined(WIN32) #include "acwin.h" #elif defined(WIN64) #include "acwin64.h" #elif defined(_WRS_LIB_BUILD) #include "acvxworks.h" #elif defined(__OS2__) #include "acos2.h" #elif defined(__HAIKU__) #include "achaiku.h" #elif defined(__QNX__) #include "acqnx.h" /* * EFI applications can be built with -nostdlib, in this case, it must be * included after including all other host environmental definitions, in * order to override the definitions. */ #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) #include "acefi.h" #elif defined(__ZEPHYR__) #include "aczephyr.h" #else /* Unknown environment */ #error Unknown target environment #endif /*! [End] no source code translation !*/ /****************************************************************************** * * Setup defaults for the required symbols that were not defined in one of * the host/compiler files above. * *****************************************************************************/ /* 64-bit data types */ #ifndef COMPILER_DEPENDENT_INT64 #define COMPILER_DEPENDENT_INT64 long long #endif #ifndef COMPILER_DEPENDENT_UINT64 #define COMPILER_DEPENDENT_UINT64 unsigned long long #endif /* Type of mutex supported by host. Default is binary semaphores. */ #ifndef ACPI_MUTEX_TYPE #define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE #endif /* Global Lock acquire/release */ #ifndef ACPI_ACQUIRE_GLOBAL_LOCK #define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acquired) acquired = 1 #endif #ifndef ACPI_RELEASE_GLOBAL_LOCK #define ACPI_RELEASE_GLOBAL_LOCK(Glptr, pending) pending = 0 #endif /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */ #ifndef ACPI_FLUSH_CPU_CACHE #define ACPI_FLUSH_CPU_CACHE() #endif /* "inline" keywords - configurable since inline is not standardized */ #ifndef ACPI_INLINE #define ACPI_INLINE #endif /* Use ordered initialization if compiler doesn't support designated. */ #ifndef ACPI_STRUCT_INIT #define ACPI_STRUCT_INIT(field, value) value #endif /* * Configurable calling conventions: * * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads) * ACPI_EXTERNAL_XFACE - External ACPI interfaces * ACPI_INTERNAL_XFACE - Internal ACPI interfaces * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces */ #ifndef ACPI_SYSTEM_XFACE #define ACPI_SYSTEM_XFACE #endif #ifndef ACPI_EXTERNAL_XFACE #define ACPI_EXTERNAL_XFACE #endif #ifndef ACPI_INTERNAL_XFACE #define ACPI_INTERNAL_XFACE #endif #ifndef ACPI_INTERNAL_VAR_XFACE #define ACPI_INTERNAL_VAR_XFACE #endif /* * Debugger threading model * Use single threaded if the entire subsystem is contained in an application * Use multiple threaded when the subsystem is running in the kernel. * * By default the model is single threaded if ACPI_APPLICATION is set, * multi-threaded if ACPI_APPLICATION is not set. */ #ifndef DEBUGGER_THREADING #if !defined (ACPI_APPLICATION) || defined (ACPI_EXEC_APP) #define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED #else #define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED #endif #endif /* !DEBUGGER_THREADING */ /****************************************************************************** * * C library configuration * *****************************************************************************/ /* * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library. * Otherwise, local versions of string/memory functions will be used. * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and * the standard header files may be used. Defining this implies that * ACPI_USE_SYSTEM_CLIBRARY has been defined. * * The ACPICA subsystem only uses low level C library functions that do not * call operating system services and may therefore be inlined in the code. * * It may be necessary to tailor these include files to the target * generation environment. */ /* Use the standard C library headers. We want to keep these to a minimum. */ #ifdef ACPI_USE_STANDARD_HEADERS /* Use the standard headers from the standard locations */ #include #include #include #if defined (ACPI_APPLICATION) || defined(ACPI_LIBRARY) #include #include #include #include #include #endif #endif /* ACPI_USE_STANDARD_HEADERS */ #ifdef ACPI_APPLICATION #define ACPI_FILE FILE * #define ACPI_FILE_OUT stdout #define ACPI_FILE_ERR stderr #else #define ACPI_FILE void * #define ACPI_FILE_OUT NULL #define ACPI_FILE_ERR NULL #endif /* ACPI_APPLICATION */ #ifndef ACPI_INIT_FUNCTION #define ACPI_INIT_FUNCTION #endif #endif /* __ACENV_H__ */ PKk]P<oplatform/acenvex.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acenvex.h - Extra host and compiler configuration * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACENVEX_H__ #define __ACENVEX_H__ /*! [Begin] no source code translation */ /****************************************************************************** * * Extra host configuration files. All ACPICA headers are included before * including these files. * *****************************************************************************/ #if defined(_LINUX) || defined(__linux__) #include #elif defined(__DragonFly__) #include "acdragonflyex.h" /* * EFI applications can be built with -nostdlib, in this case, it must be * included after including all other host environmental definitions, in * order to override the definitions. */ #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) #include "acefiex.h" #endif #if defined(__GNUC__) #include "acgccex.h" #elif defined(_MSC_VER) #include "acmsvcex.h" #endif /*! [End] no source code translation !*/ #endif /* __ACENVEX_H__ */ PKk]hplatform/acgccex.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acgccex.h - Extra GCC specific defines, etc. * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACGCCEX_H__ #define __ACGCCEX_H__ /* * Some versions of gcc implement strchr() with a buggy macro. So, * undef it here. Prevents error messages of this form (usually from the * file getopt.c): * * error: logical '&&' with non-zero constant will always evaluate as true */ #ifdef strchr #undef strchr #endif #endif /* __ACGCCEX_H__ */ PKk] battery.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ACPI_BATTERY_H #define __ACPI_BATTERY_H #include #define ACPI_BATTERY_CLASS "battery" #define ACPI_BATTERY_NOTIFY_STATUS 0x80 #define ACPI_BATTERY_NOTIFY_INFO 0x81 #define ACPI_BATTERY_NOTIFY_THRESHOLD 0x82 struct acpi_battery_hook { const char *name; int (*add_battery)(struct power_supply *battery, struct acpi_battery_hook *hook); int (*remove_battery)(struct power_supply *battery, struct acpi_battery_hook *hook); struct list_head list; }; void battery_hook_register(struct acpi_battery_hook *hook); void battery_hook_unregister(struct acpi_battery_hook *hook); #endif PKk]lactbl1.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: actbl1.h - Additional ACPI table definitions * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACTBL1_H__ #define __ACTBL1_H__ /******************************************************************************* * * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_AEST "AEST" /* Arm Error Source Table */ #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #define ACPI_SIG_ASPT "ASPT" /* AMD Secure Processor Table */ #define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ #define ACPI_SIG_BGRT "BGRT" /* Boot Graphics Resource Table */ #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CEDT "CEDT" /* CXL Early Discovery Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ #define ACPI_SIG_DRTM "DRTM" /* Dynamic Root of Trust for Measurement table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ #define ACPI_SIG_FPDT "FPDT" /* Firmware Performance Data Table */ #define ACPI_SIG_GTDT "GTDT" /* Generic Timer Description Table */ #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ #define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */ #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ #define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ #define ACPI_SIG_S3PT "S3PT" /* S3 Performance (sub)Table */ #define ACPI_SIG_PCCS "PCC" /* PCC Shared Memory Region */ #define ACPI_SIG_NBFT "NBFT" /* NVMe Boot Firmware Table */ /* Reserved table signatures */ #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ /* * These tables have been seen in the field, but no definition has been found */ #ifdef ACPI_UNDEFINED_TABLES #define ACPI_SIG_ATKG "ATKG" #define ACPI_SIG_GSCI "GSCI" /* GMCH SCI table */ #define ACPI_SIG_IEIT "IEIT" #endif /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * Common subtable headers * ******************************************************************************/ /* Generic subtable header (used in MADT, SRAT, etc.) */ struct acpi_subtable_header { u8 type; u8 length; }; /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */ struct acpi_whea_header { u8 action; u8 instruction; u8 flags; u8 reserved; struct acpi_generic_address register_region; u64 value; /* Value used with Read/Write register */ u64 mask; /* Bitmask required for this register instruction */ }; /* https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/acpitabl/ns-acpitabl-aspt_table */ #define ASPT_REVISION_ID 0x01 struct acpi_table_aspt { struct acpi_table_header header; u32 num_entries; }; struct acpi_aspt_header { u16 type; u16 length; }; enum acpi_aspt_type { ACPI_ASPT_TYPE_GLOBAL_REGS = 0, ACPI_ASPT_TYPE_SEV_MBOX_REGS = 1, ACPI_ASPT_TYPE_ACPI_MBOX_REGS = 2, }; /* 0: ASPT Global Registers */ struct acpi_aspt_global_regs { struct acpi_aspt_header header; u32 reserved; u64 feature_reg_addr; u64 irq_en_reg_addr; u64 irq_st_reg_addr; }; /* 1: ASPT SEV Mailbox Registers */ struct acpi_aspt_sev_mbox_regs { struct acpi_aspt_header header; u8 mbox_irq_id; u8 reserved[3]; u64 cmd_resp_reg_addr; u64 cmd_buf_lo_reg_addr; u64 cmd_buf_hi_reg_addr; }; /* 2: ASPT ACPI Mailbox Registers */ struct acpi_aspt_acpi_mbox_regs { struct acpi_aspt_header header; u32 reserved1; u64 cmd_resp_reg_addr; u64 reserved2[2]; }; /******************************************************************************* * * ASF - Alert Standard Format table (Signature "ASF!") * Revision 0x10 * * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 * ******************************************************************************/ struct acpi_table_asf { struct acpi_table_header header; /* Common ACPI table header */ }; /* ASF subtable header */ struct acpi_asf_header { u8 type; u8 reserved; u16 length; }; /* Values for Type field above */ enum acpi_asf_type { ACPI_ASF_TYPE_INFO = 0, ACPI_ASF_TYPE_ALERT = 1, ACPI_ASF_TYPE_CONTROL = 2, ACPI_ASF_TYPE_BOOT = 3, ACPI_ASF_TYPE_ADDRESS = 4, ACPI_ASF_TYPE_RESERVED = 5 }; /* * ASF subtables */ /* 0: ASF Information */ struct acpi_asf_info { struct acpi_asf_header header; u8 min_reset_value; u8 min_poll_interval; u16 system_id; u32 mfg_id; u8 flags; u8 reserved2[3]; }; /* Masks for Flags field above */ #define ACPI_ASF_SMBUS_PROTOCOLS (1) /* 1: ASF Alerts */ struct acpi_asf_alert { struct acpi_asf_header header; u8 assert_mask; u8 deassert_mask; u8 alerts; u8 data_length; }; struct acpi_asf_alert_data { u8 address; u8 command; u8 mask; u8 value; u8 sensor_type; u8 type; u8 offset; u8 source_type; u8 severity; u8 sensor_number; u8 entity; u8 instance; }; /* 2: ASF Remote Control */ struct acpi_asf_remote { struct acpi_asf_header header; u8 controls; u8 data_length; u16 reserved2; }; struct acpi_asf_control_data { u8 function; u8 address; u8 command; u8 value; }; /* 3: ASF RMCP Boot Options */ struct acpi_asf_rmcp { struct acpi_asf_header header; u8 capabilities[7]; u8 completion_code; u32 enterprise_id; u8 command; u16 parameter; u16 boot_options; u16 oem_parameters; }; /* 4: ASF Address */ struct acpi_asf_address { struct acpi_asf_header header; u8 eprom_address; u8 devices; }; /******************************************************************************* * * BERT - Boot Error Record Table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_bert { struct acpi_table_header header; /* Common ACPI table header */ u32 region_length; /* Length of the boot error region */ u64 address; /* Physical address of the error region */ }; /* Boot Error Region (not a subtable, pointed to by Address field above) */ struct acpi_bert_region { u32 block_status; /* Type of error information */ u32 raw_data_offset; /* Offset to raw error data */ u32 raw_data_length; /* Length of raw error data */ u32 data_length; /* Length of generic error data */ u32 error_severity; /* Severity code */ }; /* Values for block_status flags above */ #define ACPI_BERT_UNCORRECTABLE (1) #define ACPI_BERT_CORRECTABLE (1<<1) #define ACPI_BERT_MULTIPLE_UNCORRECTABLE (1<<2) #define ACPI_BERT_MULTIPLE_CORRECTABLE (1<<3) #define ACPI_BERT_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ /* Values for error_severity above */ enum acpi_bert_error_severity { ACPI_BERT_ERROR_CORRECTABLE = 0, ACPI_BERT_ERROR_FATAL = 1, ACPI_BERT_ERROR_CORRECTED = 2, ACPI_BERT_ERROR_NONE = 3, ACPI_BERT_ERROR_RESERVED = 4 /* 4 and greater are reserved */ }; /* * Note: The generic error data that follows the error_severity field above * uses the struct acpi_hest_generic_data defined under the HEST table below */ /******************************************************************************* * * BGRT - Boot Graphics Resource Table (ACPI 5.0) * Version 1 * ******************************************************************************/ struct acpi_table_bgrt { struct acpi_table_header header; /* Common ACPI table header */ u16 version; u8 status; u8 image_type; u64 image_address; u32 image_offset_x; u32 image_offset_y; }; /* Flags for Status field above */ #define ACPI_BGRT_DISPLAYED (1) #define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) /******************************************************************************* * * BOOT - Simple Boot Flag Table * Version 1 * * Conforms to the "Simple Boot Flag Specification", Version 2.1 * ******************************************************************************/ struct acpi_table_boot { struct acpi_table_header header; /* Common ACPI table header */ u8 cmos_index; /* Index in CMOS RAM for the boot register */ u8 reserved[3]; }; /******************************************************************************* * * CDAT - Coherent Device Attribute Table * Version 1 * * Conforms to the "Coherent Device Attribute Table (CDAT) Specification " (Revision 1.01, October 2020.) * ******************************************************************************/ struct acpi_table_cdat { u32 length; /* Length of table in bytes, including this header */ u8 revision; /* ACPI Specification minor version number */ u8 checksum; /* To make sum of entire table == 0 */ u8 reserved[6]; u32 sequence; /* Used to detect runtime CDAT table changes */ }; /* CDAT common subtable header */ struct acpi_cdat_header { u8 type; u8 reserved; u16 length; }; /* Values for Type field above */ enum acpi_cdat_type { ACPI_CDAT_TYPE_DSMAS = 0, ACPI_CDAT_TYPE_DSLBIS = 1, ACPI_CDAT_TYPE_DSMSCIS = 2, ACPI_CDAT_TYPE_DSIS = 3, ACPI_CDAT_TYPE_DSEMTS = 4, ACPI_CDAT_TYPE_SSLBIS = 5, ACPI_CDAT_TYPE_RESERVED = 6 /* 6 through 0xFF are reserved */ }; /* Subtable 0: Device Scoped Memory Affinity Structure (DSMAS) */ struct acpi_cdat_dsmas { u8 dsmad_handle; u8 flags; u16 reserved; u64 dpa_base_address; u64 dpa_length; }; /* Flags for subtable above */ #define ACPI_CDAT_DSMAS_NON_VOLATILE (1 << 2) /* Subtable 1: Device scoped Latency and Bandwidth Information Structure (DSLBIS) */ struct acpi_cdat_dslbis { u8 handle; u8 flags; /* If Handle matches a DSMAS handle, the definition of this field matches * Flags field in HMAT System Locality Latency */ u8 data_type; u8 reserved; u64 entry_base_unit; u16 entry[3]; u16 reserved2; }; /* Subtable 2: Device Scoped Memory Side Cache Information Structure (DSMSCIS) */ struct acpi_cdat_dsmscis { u8 dsmas_handle; u8 reserved[3]; u64 side_cache_size; u32 cache_attributes; }; /* Subtable 3: Device Scoped Initiator Structure (DSIS) */ struct acpi_cdat_dsis { u8 flags; u8 handle; u16 reserved; }; /* Flags for above subtable */ #define ACPI_CDAT_DSIS_MEM_ATTACHED (1 << 0) /* Subtable 4: Device Scoped EFI Memory Type Structure (DSEMTS) */ struct acpi_cdat_dsemts { u8 dsmas_handle; u8 memory_type; u16 reserved; u64 dpa_offset; u64 range_length; }; /* Subtable 5: Switch Scoped Latency and Bandwidth Information Structure (SSLBIS) */ struct acpi_cdat_sslbis { u8 data_type; u8 reserved[3]; u64 entry_base_unit; }; /* Sub-subtable for above, sslbe_entries field */ struct acpi_cdat_sslbe { u16 portx_id; u16 porty_id; u16 latency_or_bandwidth; u16 reserved; }; #define ACPI_CDAT_SSLBIS_US_PORT 0x0100 #define ACPI_CDAT_SSLBIS_ANY_PORT 0xffff /******************************************************************************* * * CEDT - CXL Early Discovery Table * Version 1 * * Conforms to the "CXL Early Discovery Table" (CXL 2.0, October 2020) * ******************************************************************************/ struct acpi_table_cedt { struct acpi_table_header header; /* Common ACPI table header */ }; /* CEDT subtable header (Performance Record Structure) */ struct acpi_cedt_header { u8 type; u8 reserved; u16 length; }; /* Values for Type field above */ enum acpi_cedt_type { ACPI_CEDT_TYPE_CHBS = 0, ACPI_CEDT_TYPE_CFMWS = 1, ACPI_CEDT_TYPE_CXIMS = 2, ACPI_CEDT_TYPE_RDPAS = 3, ACPI_CEDT_TYPE_RESERVED = 4, }; /* Values for version field above */ #define ACPI_CEDT_CHBS_VERSION_CXL11 (0) #define ACPI_CEDT_CHBS_VERSION_CXL20 (1) /* Values for length field above */ #define ACPI_CEDT_CHBS_LENGTH_CXL11 (0x2000) #define ACPI_CEDT_CHBS_LENGTH_CXL20 (0x10000) /* * CEDT subtables */ /* 0: CXL Host Bridge Structure */ struct acpi_cedt_chbs { struct acpi_cedt_header header; u32 uid; u32 cxl_version; u32 reserved; u64 base; u64 length; }; /* 1: CXL Fixed Memory Window Structure */ struct acpi_cedt_cfmws { struct acpi_cedt_header header; u32 reserved1; u64 base_hpa; u64 window_size; u8 interleave_ways; u8 interleave_arithmetic; u16 reserved2; u32 granularity; u16 restrictions; u16 qtg_id; u32 interleave_targets[]; }; struct acpi_cedt_cfmws_target_element { u32 interleave_target; }; /* Values for Interleave Arithmetic field above */ #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) #define ACPI_CEDT_CFMWS_ARITHMETIC_XOR (1) /* Values for Restrictions field above */ #define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1) #define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1) #define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2) #define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3) #define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4) /* 2: CXL XOR Interleave Math Structure */ struct acpi_cedt_cxims { struct acpi_cedt_header header; u16 reserved1; u8 hbig; u8 nr_xormaps; u64 xormap_list[]; }; /* 3: CXL RCEC Downstream Port Association Structure */ struct acpi_cedt_rdpas { struct acpi_cedt_header header; u8 reserved1; u16 length; u16 segment; u16 bdf; u8 protocol; u64 address; }; /* Masks for bdf field above */ #define ACPI_CEDT_RDPAS_BUS_MASK 0xff00 #define ACPI_CEDT_RDPAS_DEVICE_MASK 0x00f8 #define ACPI_CEDT_RDPAS_FUNCTION_MASK 0x0007 #define ACPI_CEDT_RDPAS_PROTOCOL_IO (0) #define ACPI_CEDT_RDPAS_PROTOCOL_CACHEMEM (1) /******************************************************************************* * * CPEP - Corrected Platform Error Polling table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_cpep { struct acpi_table_header header; /* Common ACPI table header */ u64 reserved; }; /* Subtable */ struct acpi_cpep_polling { struct acpi_subtable_header header; u8 id; /* Processor ID */ u8 eid; /* Processor EID */ u32 interval; /* Polling interval (msec) */ }; /******************************************************************************* * * CSRT - Core System Resource Table * Version 0 * * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 * ******************************************************************************/ struct acpi_table_csrt { struct acpi_table_header header; /* Common ACPI table header */ }; /* Resource Group subtable */ struct acpi_csrt_group { u32 length; u32 vendor_id; u32 subvendor_id; u16 device_id; u16 subdevice_id; u16 revision; u16 reserved; u32 shared_info_length; /* Shared data immediately follows (Length = shared_info_length) */ }; /* Shared Info subtable */ struct acpi_csrt_shared_info { u16 major_version; u16 minor_version; u32 mmio_base_low; u32 mmio_base_high; u32 gsi_interrupt; u8 interrupt_polarity; u8 interrupt_mode; u8 num_channels; u8 dma_address_width; u16 base_request_line; u16 num_handshake_signals; u32 max_block_size; /* Resource descriptors immediately follow (Length = Group length - shared_info_length) */ }; /* Resource Descriptor subtable */ struct acpi_csrt_descriptor { u32 length; u16 type; u16 subtype; u32 uid; /* Resource-specific information immediately follows */ }; /* Resource Types */ #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 #define ACPI_CSRT_TYPE_TIMER 0x0002 #define ACPI_CSRT_TYPE_DMA 0x0003 /* Resource Subtypes */ #define ACPI_CSRT_XRUPT_LINE 0x0000 #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 #define ACPI_CSRT_TIMER 0x0000 #define ACPI_CSRT_DMA_CHANNEL 0x0000 #define ACPI_CSRT_DMA_CONTROLLER 0x0001 /******************************************************************************* * * DBG2 - Debug Port Table 2 * Version 0 (Both main table and subtables) * * Conforms to "Microsoft Debug Port Table 2 (DBG2)", September 21, 2020 * ******************************************************************************/ struct acpi_table_dbg2 { struct acpi_table_header header; /* Common ACPI table header */ u32 info_offset; u32 info_count; }; struct acpi_dbg2_header { u32 info_offset; u32 info_count; }; /* Debug Device Information Subtable */ struct acpi_dbg2_device { u8 revision; u16 length; u8 register_count; /* Number of base_address registers */ u16 namepath_length; u16 namepath_offset; u16 oem_data_length; u16 oem_data_offset; u16 port_type; u16 port_subtype; u16 reserved; u16 base_address_offset; u16 address_size_offset; /* * Data that follows: * base_address (required) - Each in 12-byte Generic Address Structure format. * address_size (required) - Array of u32 sizes corresponding to each base_address register. * Namepath (required) - Null terminated string. Single dot if not supported. * oem_data (optional) - Length is oem_data_length. */ }; /* Types for port_type field above */ #define ACPI_DBG2_SERIAL_PORT 0x8000 #define ACPI_DBG2_1394_PORT 0x8001 #define ACPI_DBG2_USB_PORT 0x8002 #define ACPI_DBG2_NET_PORT 0x8003 /* Subtypes for port_subtype field above */ #define ACPI_DBG2_16550_COMPATIBLE 0x0000 #define ACPI_DBG2_16550_SUBSET 0x0001 #define ACPI_DBG2_MAX311XE_SPI 0x0002 #define ACPI_DBG2_ARM_PL011 0x0003 #define ACPI_DBG2_MSM8X60 0x0004 #define ACPI_DBG2_16550_NVIDIA 0x0005 #define ACPI_DBG2_TI_OMAP 0x0006 #define ACPI_DBG2_APM88XXXX 0x0008 #define ACPI_DBG2_MSM8974 0x0009 #define ACPI_DBG2_SAM5250 0x000A #define ACPI_DBG2_INTEL_USIF 0x000B #define ACPI_DBG2_IMX6 0x000C #define ACPI_DBG2_ARM_SBSA_32BIT 0x000D #define ACPI_DBG2_ARM_SBSA_GENERIC 0x000E #define ACPI_DBG2_ARM_DCC 0x000F #define ACPI_DBG2_BCM2835 0x0010 #define ACPI_DBG2_SDM845_1_8432MHZ 0x0011 #define ACPI_DBG2_16550_WITH_GAS 0x0012 #define ACPI_DBG2_SDM845_7_372MHZ 0x0013 #define ACPI_DBG2_INTEL_LPSS 0x0014 #define ACPI_DBG2_1394_STANDARD 0x0000 #define ACPI_DBG2_USB_XHCI 0x0000 #define ACPI_DBG2_USB_EHCI 0x0001 /******************************************************************************* * * DBGP - Debug Port table * Version 1 * * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000 * ******************************************************************************/ struct acpi_table_dbgp { struct acpi_table_header header; /* Common ACPI table header */ u8 type; /* 0=full 16550, 1=subset of 16550 */ u8 reserved[3]; struct acpi_generic_address debug_port; }; /******************************************************************************* * * DMAR - DMA Remapping table * Version 1 * * Conforms to "Intel Virtualization Technology for Directed I/O", * Version 2.3, October 2014 * ******************************************************************************/ struct acpi_table_dmar { struct acpi_table_header header; /* Common ACPI table header */ u8 width; /* Host Address Width */ u8 flags; u8 reserved[10]; }; /* Masks for Flags field above */ #define ACPI_DMAR_INTR_REMAP (1) #define ACPI_DMAR_X2APIC_OPT_OUT (1<<1) #define ACPI_DMAR_X2APIC_MODE (1<<2) /* DMAR subtable header */ struct acpi_dmar_header { u16 type; u16 length; }; /* Values for subtable type in struct acpi_dmar_header */ enum acpi_dmar_type { ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, ACPI_DMAR_TYPE_ROOT_ATS = 2, ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, ACPI_DMAR_TYPE_NAMESPACE = 4, ACPI_DMAR_TYPE_SATC = 5, ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* DMAR Device Scope structure */ struct acpi_dmar_device_scope { u8 entry_type; u8 length; u16 reserved; u8 enumeration_id; u8 bus; }; /* Values for entry_type in struct acpi_dmar_device_scope - device types */ enum acpi_dmar_scope_type { ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, ACPI_DMAR_SCOPE_TYPE_HPET = 4, ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; struct acpi_dmar_pci_path { u8 device; u8 function; }; /* * DMAR Subtables, correspond to Type in struct acpi_dmar_header */ /* 0: Hardware Unit Definition */ struct acpi_dmar_hardware_unit { struct acpi_dmar_header header; u8 flags; u8 size; /* Size of the register set */ u16 segment; u64 address; /* Register Base Address */ }; /* Masks for Flags field above */ #define ACPI_DMAR_INCLUDE_ALL (1) /* 1: Reserved Memory Definition */ struct acpi_dmar_reserved_memory { struct acpi_dmar_header header; u16 reserved; u16 segment; u64 base_address; /* 4K aligned base address */ u64 end_address; /* 4K aligned limit address */ }; /* Masks for Flags field above */ #define ACPI_DMAR_ALLOW_ALL (1) /* 2: Root Port ATS Capability Reporting Structure */ struct acpi_dmar_atsr { struct acpi_dmar_header header; u8 flags; u8 reserved; u16 segment; }; /* Masks for Flags field above */ #define ACPI_DMAR_ALL_PORTS (1) /* 3: Remapping Hardware Static Affinity Structure */ struct acpi_dmar_rhsa { struct acpi_dmar_header header; u32 reserved; u64 base_address; u32 proximity_domain; }; /* 4: ACPI Namespace Device Declaration Structure */ struct acpi_dmar_andd { struct acpi_dmar_header header; u8 reserved[3]; u8 device_number; union { char __pad; ACPI_FLEX_ARRAY(char, device_name); }; }; /* 5: SOC Integrated Address Translation Cache Reporting Structure */ struct acpi_dmar_satc { struct acpi_dmar_header header; u8 flags; u8 reserved; u16 segment; }; /******************************************************************************* * * DRTM - Dynamic Root of Trust for Measurement table * Conforms to "TCG D-RTM Architecture" June 17 2013, Version 1.0.0 * Table version 1 * ******************************************************************************/ struct acpi_table_drtm { struct acpi_table_header header; /* Common ACPI table header */ u64 entry_base_address; u64 entry_length; u32 entry_address32; u64 entry_address64; u64 exit_address; u64 log_area_address; u32 log_area_length; u64 arch_dependent_address; u32 flags; }; /* Flag Definitions for above */ #define ACPI_DRTM_ACCESS_ALLOWED (1) #define ACPI_DRTM_ENABLE_GAP_CODE (1<<1) #define ACPI_DRTM_INCOMPLETE_MEASUREMENTS (1<<2) #define ACPI_DRTM_AUTHORITY_ORDER (1<<3) /* 1) Validated Tables List (64-bit addresses) */ struct acpi_drtm_vtable_list { u32 validated_table_count; u64 validated_tables[]; }; /* 2) Resources List (of Resource Descriptors) */ /* Resource Descriptor */ struct acpi_drtm_resource { u8 size[7]; u8 type; u64 address; }; struct acpi_drtm_resource_list { u32 resource_count; struct acpi_drtm_resource resources[]; }; /* 3) Platform-specific Identifiers List */ struct acpi_drtm_dps_id { u32 dps_id_length; u8 dps_id[16]; }; /******************************************************************************* * * ECDT - Embedded Controller Boot Resources Table * Version 1 * ******************************************************************************/ struct acpi_table_ecdt { struct acpi_table_header header; /* Common ACPI table header */ struct acpi_generic_address control; /* Address of EC command/status register */ struct acpi_generic_address data; /* Address of EC data register */ u32 uid; /* Unique ID - must be same as the EC _UID method */ u8 gpe; /* The GPE for the EC */ u8 id[]; /* Full namepath of the EC in the ACPI namespace */ }; /******************************************************************************* * * EINJ - Error Injection Table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_einj { struct acpi_table_header header; /* Common ACPI table header */ u32 header_length; u8 flags; u8 reserved[3]; u32 entries; }; /* EINJ Injection Instruction Entries (actions) */ struct acpi_einj_entry { struct acpi_whea_header whea_header; /* Common header for WHEA tables */ }; /* Masks for Flags field above */ #define ACPI_EINJ_PRESERVE (1) /* Values for Action field above */ enum acpi_einj_actions { ACPI_EINJ_BEGIN_OPERATION = 0, ACPI_EINJ_GET_TRIGGER_TABLE = 1, ACPI_EINJ_SET_ERROR_TYPE = 2, ACPI_EINJ_GET_ERROR_TYPE = 3, ACPI_EINJ_END_OPERATION = 4, ACPI_EINJ_EXECUTE_OPERATION = 5, ACPI_EINJ_CHECK_BUSY_STATUS = 6, ACPI_EINJ_GET_COMMAND_STATUS = 7, ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, ACPI_EINJ_GET_EXECUTE_TIMINGS = 9, ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */ ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ }; /* Values for Instruction field above */ enum acpi_einj_instructions { ACPI_EINJ_READ_REGISTER = 0, ACPI_EINJ_READ_REGISTER_VALUE = 1, ACPI_EINJ_WRITE_REGISTER = 2, ACPI_EINJ_WRITE_REGISTER_VALUE = 3, ACPI_EINJ_NOOP = 4, ACPI_EINJ_FLUSH_CACHELINE = 5, ACPI_EINJ_INSTRUCTION_RESERVED = 6 /* 6 and greater are reserved */ }; struct acpi_einj_error_type_with_addr { u32 error_type; u32 vendor_struct_offset; u32 flags; u32 apic_id; u64 address; u64 range; u32 pcie_id; }; struct acpi_einj_vendor { u32 length; u32 pcie_id; u16 vendor_id; u16 device_id; u8 revision_id; u8 reserved[3]; }; /* EINJ Trigger Error Action Table */ struct acpi_einj_trigger { u32 header_size; u32 revision; u32 table_size; u32 entry_count; }; /* Command status return values */ enum acpi_einj_command_status { ACPI_EINJ_SUCCESS = 0, ACPI_EINJ_FAILURE = 1, ACPI_EINJ_INVALID_ACCESS = 2, ACPI_EINJ_STATUS_RESERVED = 3 /* 3 and greater are reserved */ }; /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */ #define ACPI_EINJ_PROCESSOR_CORRECTABLE (1) #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE (1<<1) #define ACPI_EINJ_PROCESSOR_FATAL (1<<2) #define ACPI_EINJ_MEMORY_CORRECTABLE (1<<3) #define ACPI_EINJ_MEMORY_UNCORRECTABLE (1<<4) #define ACPI_EINJ_MEMORY_FATAL (1<<5) #define ACPI_EINJ_PCIX_CORRECTABLE (1<<6) #define ACPI_EINJ_PCIX_UNCORRECTABLE (1<<7) #define ACPI_EINJ_PCIX_FATAL (1<<8) #define ACPI_EINJ_PLATFORM_CORRECTABLE (1<<9) #define ACPI_EINJ_PLATFORM_UNCORRECTABLE (1<<10) #define ACPI_EINJ_PLATFORM_FATAL (1<<11) #define ACPI_EINJ_VENDOR_DEFINED (1<<31) /******************************************************************************* * * ERST - Error Record Serialization Table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_erst { struct acpi_table_header header; /* Common ACPI table header */ u32 header_length; u32 reserved; u32 entries; }; /* ERST Serialization Entries (actions) */ struct acpi_erst_entry { struct acpi_whea_header whea_header; /* Common header for WHEA tables */ }; /* Masks for Flags field above */ #define ACPI_ERST_PRESERVE (1) /* Values for Action field above */ enum acpi_erst_actions { ACPI_ERST_BEGIN_WRITE = 0, ACPI_ERST_BEGIN_READ = 1, ACPI_ERST_BEGIN_CLEAR = 2, ACPI_ERST_END = 3, ACPI_ERST_SET_RECORD_OFFSET = 4, ACPI_ERST_EXECUTE_OPERATION = 5, ACPI_ERST_CHECK_BUSY_STATUS = 6, ACPI_ERST_GET_COMMAND_STATUS = 7, ACPI_ERST_GET_RECORD_ID = 8, ACPI_ERST_SET_RECORD_ID = 9, ACPI_ERST_GET_RECORD_COUNT = 10, ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, ACPI_ERST_NOT_USED = 12, ACPI_ERST_GET_ERROR_RANGE = 13, ACPI_ERST_GET_ERROR_LENGTH = 14, ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, ACPI_ERST_EXECUTE_TIMINGS = 16, ACPI_ERST_ACTION_RESERVED = 17 /* 17 and greater are reserved */ }; /* Values for Instruction field above */ enum acpi_erst_instructions { ACPI_ERST_READ_REGISTER = 0, ACPI_ERST_READ_REGISTER_VALUE = 1, ACPI_ERST_WRITE_REGISTER = 2, ACPI_ERST_WRITE_REGISTER_VALUE = 3, ACPI_ERST_NOOP = 4, ACPI_ERST_LOAD_VAR1 = 5, ACPI_ERST_LOAD_VAR2 = 6, ACPI_ERST_STORE_VAR1 = 7, ACPI_ERST_ADD = 8, ACPI_ERST_SUBTRACT = 9, ACPI_ERST_ADD_VALUE = 10, ACPI_ERST_SUBTRACT_VALUE = 11, ACPI_ERST_STALL = 12, ACPI_ERST_STALL_WHILE_TRUE = 13, ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, ACPI_ERST_GOTO = 15, ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, ACPI_ERST_SET_DST_ADDRESS_BASE = 17, ACPI_ERST_MOVE_DATA = 18, ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ }; /* Command status return values */ enum acpi_erst_command_status { ACPI_ERST_SUCCESS = 0, ACPI_ERST_NO_SPACE = 1, ACPI_ERST_NOT_AVAILABLE = 2, ACPI_ERST_FAILURE = 3, ACPI_ERST_RECORD_EMPTY = 4, ACPI_ERST_NOT_FOUND = 5, ACPI_ERST_STATUS_RESERVED = 6 /* 6 and greater are reserved */ }; /* Error Record Serialization Information */ struct acpi_erst_info { u16 signature; /* Should be "ER" */ u8 data[48]; }; /******************************************************************************* * * FPDT - Firmware Performance Data Table (ACPI 5.0) * Version 1 * ******************************************************************************/ struct acpi_table_fpdt { struct acpi_table_header header; /* Common ACPI table header */ }; /* FPDT subtable header (Performance Record Structure) */ struct acpi_fpdt_header { u16 type; u8 length; u8 revision; }; /* Values for Type field above */ enum acpi_fpdt_type { ACPI_FPDT_TYPE_BOOT = 0, ACPI_FPDT_TYPE_S3PERF = 1 }; /* * FPDT subtables */ /* 0: Firmware Basic Boot Performance Record */ struct acpi_fpdt_boot_pointer { struct acpi_fpdt_header header; u8 reserved[4]; u64 address; }; /* 1: S3 Performance Table Pointer Record */ struct acpi_fpdt_s3pt_pointer { struct acpi_fpdt_header header; u8 reserved[4]; u64 address; }; /* * S3PT - S3 Performance Table. This table is pointed to by the * S3 Pointer Record above. */ struct acpi_table_s3pt { u8 signature[4]; /* "S3PT" */ u32 length; }; /* * S3PT Subtables (Not part of the actual FPDT) */ /* Values for Type field in S3PT header */ enum acpi_s3pt_type { ACPI_S3PT_TYPE_RESUME = 0, ACPI_S3PT_TYPE_SUSPEND = 1, ACPI_FPDT_BOOT_PERFORMANCE = 2 }; struct acpi_s3pt_resume { struct acpi_fpdt_header header; u32 resume_count; u64 full_resume; u64 average_resume; }; struct acpi_s3pt_suspend { struct acpi_fpdt_header header; u64 suspend_start; u64 suspend_end; }; /* * FPDT Boot Performance Record (Not part of the actual FPDT) */ struct acpi_fpdt_boot { struct acpi_fpdt_header header; u8 reserved[4]; u64 reset_end; u64 load_start; u64 startup_start; u64 exit_services_entry; u64 exit_services_exit; }; /******************************************************************************* * * GTDT - Generic Timer Description Table (ACPI 5.1) * Version 2 * ******************************************************************************/ struct acpi_table_gtdt { struct acpi_table_header header; /* Common ACPI table header */ u64 counter_block_addresss; u32 reserved; u32 secure_el1_interrupt; u32 secure_el1_flags; u32 non_secure_el1_interrupt; u32 non_secure_el1_flags; u32 virtual_timer_interrupt; u32 virtual_timer_flags; u32 non_secure_el2_interrupt; u32 non_secure_el2_flags; u64 counter_read_block_address; u32 platform_timer_count; u32 platform_timer_offset; }; /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ #define ACPI_GTDT_INTERRUPT_MODE (1) #define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) #define ACPI_GTDT_ALWAYS_ON (1<<2) struct acpi_gtdt_el2 { u32 virtual_el2_timer_gsiv; u32 virtual_el2_timer_flags; }; /* Common GTDT subtable header */ struct acpi_gtdt_header { u8 type; u16 length; }; /* Values for GTDT subtable type above */ enum acpi_gtdt_type { ACPI_GTDT_TYPE_TIMER_BLOCK = 0, ACPI_GTDT_TYPE_WATCHDOG = 1, ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */ /* 0: Generic Timer Block */ struct acpi_gtdt_timer_block { struct acpi_gtdt_header header; u8 reserved; u64 block_address; u32 timer_count; u32 timer_offset; }; /* Timer Sub-Structure, one per timer */ struct acpi_gtdt_timer_entry { u8 frame_number; u8 reserved[3]; u64 base_address; u64 el0_base_address; u32 timer_interrupt; u32 timer_flags; u32 virtual_timer_interrupt; u32 virtual_timer_flags; u32 common_flags; }; /* Flag Definitions: timer_flags and virtual_timer_flags above */ #define ACPI_GTDT_GT_IRQ_MODE (1) #define ACPI_GTDT_GT_IRQ_POLARITY (1<<1) /* Flag Definitions: common_flags above */ #define ACPI_GTDT_GT_IS_SECURE_TIMER (1) #define ACPI_GTDT_GT_ALWAYS_ON (1<<1) /* 1: SBSA Generic Watchdog Structure */ struct acpi_gtdt_watchdog { struct acpi_gtdt_header header; u8 reserved; u64 refresh_frame_address; u64 control_frame_address; u32 timer_interrupt; u32 timer_flags; }; /* Flag Definitions: timer_flags above */ #define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) #define ACPI_GTDT_WATCHDOG_SECURE (1<<2) /******************************************************************************* * * HEST - Hardware Error Source Table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_hest { struct acpi_table_header header; /* Common ACPI table header */ u32 error_source_count; }; /* HEST subtable header */ struct acpi_hest_header { u16 type; u16 source_id; }; /* Values for Type field above for subtables */ enum acpi_hest_types { ACPI_HEST_TYPE_IA32_CHECK = 0, ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1, ACPI_HEST_TYPE_IA32_NMI = 2, ACPI_HEST_TYPE_NOT_USED3 = 3, ACPI_HEST_TYPE_NOT_USED4 = 4, ACPI_HEST_TYPE_NOT_USED5 = 5, ACPI_HEST_TYPE_AER_ROOT_PORT = 6, ACPI_HEST_TYPE_AER_ENDPOINT = 7, ACPI_HEST_TYPE_AER_BRIDGE = 8, ACPI_HEST_TYPE_GENERIC_ERROR = 9, ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10, ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11, ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ }; /* * HEST substructures contained in subtables */ /* * IA32 Error Bank(s) - Follows the struct acpi_hest_ia_machine_check and * struct acpi_hest_ia_corrected structures. */ struct acpi_hest_ia_error_bank { u8 bank_number; u8 clear_status_on_init; u8 status_format; u8 reserved; u32 control_register; u64 control_data; u32 status_register; u32 address_register; u32 misc_register; }; /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */ struct acpi_hest_aer_common { u16 reserved1; u8 flags; u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; u32 bus; /* Bus and Segment numbers */ u16 device; u16 function; u16 device_control; u16 reserved2; u32 uncorrectable_mask; u32 uncorrectable_severity; u32 correctable_mask; u32 advanced_capabilities; }; /* Masks for HEST Flags fields */ #define ACPI_HEST_FIRMWARE_FIRST (1) #define ACPI_HEST_GLOBAL (1<<1) #define ACPI_HEST_GHES_ASSIST (1<<2) /* * Macros to access the bus/segment numbers in Bus field above: * Bus number is encoded in bits 7:0 * Segment number is encoded in bits 23:8 */ #define ACPI_HEST_BUS(bus) ((bus) & 0xFF) #define ACPI_HEST_SEGMENT(bus) (((bus) >> 8) & 0xFFFF) /* Hardware Error Notification */ struct acpi_hest_notify { u8 type; u8 length; u16 config_write_enable; u32 poll_interval; u32 vector; u32 polling_threshold_value; u32 polling_threshold_window; u32 error_threshold_value; u32 error_threshold_window; }; /* Values for Notify Type field above */ enum acpi_hest_notify_types { ACPI_HEST_NOTIFY_POLLED = 0, ACPI_HEST_NOTIFY_EXTERNAL = 1, ACPI_HEST_NOTIFY_LOCAL = 2, ACPI_HEST_NOTIFY_SCI = 3, ACPI_HEST_NOTIFY_NMI = 4, ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */ ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */ ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */ ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ }; /* Values for config_write_enable bitfield above */ #define ACPI_HEST_TYPE (1) #define ACPI_HEST_POLL_INTERVAL (1<<1) #define ACPI_HEST_POLL_THRESHOLD_VALUE (1<<2) #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3) #define ACPI_HEST_ERR_THRESHOLD_VALUE (1<<4) #define ACPI_HEST_ERR_THRESHOLD_WINDOW (1<<5) /* * HEST subtables */ /* 0: IA32 Machine Check Exception */ struct acpi_hest_ia_machine_check { struct acpi_hest_header header; u16 reserved1; u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; u64 global_capability_data; u64 global_control_data; u8 num_hardware_banks; u8 reserved3[7]; }; /* 1: IA32 Corrected Machine Check */ struct acpi_hest_ia_corrected { struct acpi_hest_header header; u16 reserved1; u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; struct acpi_hest_notify notify; u8 num_hardware_banks; u8 reserved2[3]; }; /* 2: IA32 Non-Maskable Interrupt */ struct acpi_hest_ia_nmi { struct acpi_hest_header header; u32 reserved; u32 records_to_preallocate; u32 max_sections_per_record; u32 max_raw_data_length; }; /* 3,4,5: Not used */ /* 6: PCI Express Root Port AER */ struct acpi_hest_aer_root { struct acpi_hest_header header; struct acpi_hest_aer_common aer; u32 root_error_command; }; /* 7: PCI Express AER (AER Endpoint) */ struct acpi_hest_aer { struct acpi_hest_header header; struct acpi_hest_aer_common aer; }; /* 8: PCI Express/PCI-X Bridge AER */ struct acpi_hest_aer_bridge { struct acpi_hest_header header; struct acpi_hest_aer_common aer; u32 uncorrectable_mask2; u32 uncorrectable_severity2; u32 advanced_capabilities2; }; /* 9: Generic Hardware Error Source */ struct acpi_hest_generic { struct acpi_hest_header header; u16 related_source_id; u8 reserved; u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; u32 max_raw_data_length; struct acpi_generic_address error_status_address; struct acpi_hest_notify notify; u32 error_block_length; }; /* 10: Generic Hardware Error Source, version 2 */ struct acpi_hest_generic_v2 { struct acpi_hest_header header; u16 related_source_id; u8 reserved; u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; u32 max_raw_data_length; struct acpi_generic_address error_status_address; struct acpi_hest_notify notify; u32 error_block_length; struct acpi_generic_address read_ack_register; u64 read_ack_preserve; u64 read_ack_write; }; /* Generic Error Status block */ struct acpi_hest_generic_status { u32 block_status; u32 raw_data_offset; u32 raw_data_length; u32 data_length; u32 error_severity; }; /* Values for block_status flags above */ #define ACPI_HEST_UNCORRECTABLE (1) #define ACPI_HEST_CORRECTABLE (1<<1) #define ACPI_HEST_MULTIPLE_UNCORRECTABLE (1<<2) #define ACPI_HEST_MULTIPLE_CORRECTABLE (1<<3) #define ACPI_HEST_ERROR_ENTRY_COUNT (0xFF<<4) /* 8 bits, error count */ /* Generic Error Data entry */ struct acpi_hest_generic_data { u8 section_type[16]; u32 error_severity; u16 revision; u8 validation_bits; u8 flags; u32 error_data_length; u8 fru_id[16]; u8 fru_text[20]; }; /* Extension for revision 0x0300 */ struct acpi_hest_generic_data_v300 { u8 section_type[16]; u32 error_severity; u16 revision; u8 validation_bits; u8 flags; u32 error_data_length; u8 fru_id[16]; u8 fru_text[20]; u64 time_stamp; }; /* Values for error_severity above */ #define ACPI_HEST_GEN_ERROR_RECOVERABLE 0 #define ACPI_HEST_GEN_ERROR_FATAL 1 #define ACPI_HEST_GEN_ERROR_CORRECTED 2 #define ACPI_HEST_GEN_ERROR_NONE 3 /* Flags for validation_bits above */ #define ACPI_HEST_GEN_VALID_FRU_ID (1) #define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1) #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) /* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ struct acpi_hest_ia_deferred_check { struct acpi_hest_header header; u16 reserved1; u8 flags; /* See flags ACPI_HEST_GLOBAL, etc. above */ u8 enabled; u32 records_to_preallocate; u32 max_sections_per_record; struct acpi_hest_notify notify; u8 num_hardware_banks; u8 reserved2[3]; }; /******************************************************************************* * * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) * Version 1 * ******************************************************************************/ struct acpi_table_hmat { struct acpi_table_header header; /* Common ACPI table header */ u32 reserved; }; /* Values for HMAT structure types */ enum acpi_hmat_type { ACPI_HMAT_TYPE_PROXIMITY = 0, /* Memory proximity domain attributes */ ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */ ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */ ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ }; struct acpi_hmat_structure { u16 type; u16 reserved; u32 length; }; /* * HMAT Structures, correspond to Type in struct acpi_hmat_structure */ /* 0: Memory proximity domain attributes */ struct acpi_hmat_proximity_domain { struct acpi_hmat_structure header; u16 flags; u16 reserved1; u32 processor_PD; /* Processor proximity domain */ u32 memory_PD; /* Memory proximity domain */ u32 reserved2; u64 reserved3; u64 reserved4; }; /* Masks for Flags field above */ #define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: processor_PD field is valid */ #define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: memory_PD field is valid */ #define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */ /* 1: System locality latency and bandwidth information */ struct acpi_hmat_locality { struct acpi_hmat_structure header; u8 flags; u8 data_type; u8 min_transfer_size; u8 reserved1; u32 number_of_initiator_Pds; u32 number_of_target_Pds; u32 reserved2; u64 entry_base_unit; }; /* Masks for Flags field above */ #define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) /* Bits 0-3 */ /* Values for Memory Hierarchy flags */ #define ACPI_HMAT_MEMORY 0 #define ACPI_HMAT_LAST_LEVEL_CACHE 1 #define ACPI_HMAT_1ST_LEVEL_CACHE 2 #define ACPI_HMAT_2ND_LEVEL_CACHE 3 #define ACPI_HMAT_3RD_LEVEL_CACHE 4 #define ACPI_HMAT_MINIMUM_XFER_SIZE 0x10 /* Bit 4: ACPI 6.4 */ #define ACPI_HMAT_NON_SEQUENTIAL_XFERS 0x20 /* Bit 5: ACPI 6.4 */ /* Values for data_type field above */ #define ACPI_HMAT_ACCESS_LATENCY 0 #define ACPI_HMAT_READ_LATENCY 1 #define ACPI_HMAT_WRITE_LATENCY 2 #define ACPI_HMAT_ACCESS_BANDWIDTH 3 #define ACPI_HMAT_READ_BANDWIDTH 4 #define ACPI_HMAT_WRITE_BANDWIDTH 5 /* 2: Memory side cache information */ struct acpi_hmat_cache { struct acpi_hmat_structure header; u32 memory_PD; u32 reserved1; u64 cache_size; u32 cache_attributes; u16 reserved2; u16 number_of_SMBIOShandles; }; /* Masks for cache_attributes field above */ #define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) #define ACPI_HMAT_CACHE_LEVEL (0x000000F0) #define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) #define ACPI_HMAT_WRITE_POLICY (0x0000F000) #define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) /* Values for cache associativity flag */ #define ACPI_HMAT_CA_NONE (0) #define ACPI_HMAT_CA_DIRECT_MAPPED (1) #define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) /* Values for write policy flag */ #define ACPI_HMAT_CP_NONE (0) #define ACPI_HMAT_CP_WB (1) #define ACPI_HMAT_CP_WT (2) /******************************************************************************* * * HPET - High Precision Event Timer table * Version 1 * * Conforms to "IA-PC HPET (High Precision Event Timers) Specification", * Version 1.0a, October 2004 * ******************************************************************************/ struct acpi_table_hpet { struct acpi_table_header header; /* Common ACPI table header */ u32 id; /* Hardware ID of event timer block */ struct acpi_generic_address address; /* Address of event timer block */ u8 sequence; /* HPET sequence number */ u16 minimum_tick; /* Main counter min tick, periodic mode */ u8 flags; }; /* Masks for Flags field above */ #define ACPI_HPET_PAGE_PROTECT_MASK (3) /* Values for Page Protect flags */ enum acpi_hpet_page_protect { ACPI_HPET_NO_PAGE_PROTECT = 0, ACPI_HPET_PAGE_PROTECT4 = 1, ACPI_HPET_PAGE_PROTECT64 = 2 }; /******************************************************************************* * * IBFT - Boot Firmware Table * Version 1 * * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b * Specification", Version 1.01, March 1, 2007 * * Note: It appears that this table is not intended to appear in the RSDT/XSDT. * Therefore, it is not currently supported by the disassembler. * ******************************************************************************/ struct acpi_table_ibft { struct acpi_table_header header; /* Common ACPI table header */ u8 reserved[12]; }; /* IBFT common subtable header */ struct acpi_ibft_header { u8 type; u8 version; u16 length; u8 index; u8 flags; }; /* Values for Type field above */ enum acpi_ibft_type { ACPI_IBFT_TYPE_NOT_USED = 0, ACPI_IBFT_TYPE_CONTROL = 1, ACPI_IBFT_TYPE_INITIATOR = 2, ACPI_IBFT_TYPE_NIC = 3, ACPI_IBFT_TYPE_TARGET = 4, ACPI_IBFT_TYPE_EXTENSIONS = 5, ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* IBFT subtables */ struct acpi_ibft_control { struct acpi_ibft_header header; u16 extensions; u16 initiator_offset; u16 nic0_offset; u16 target0_offset; u16 nic1_offset; u16 target1_offset; }; struct acpi_ibft_initiator { struct acpi_ibft_header header; u8 sns_server[16]; u8 slp_server[16]; u8 primary_server[16]; u8 secondary_server[16]; u16 name_length; u16 name_offset; }; struct acpi_ibft_nic { struct acpi_ibft_header header; u8 ip_address[16]; u8 subnet_mask_prefix; u8 origin; u8 gateway[16]; u8 primary_dns[16]; u8 secondary_dns[16]; u8 dhcp[16]; u16 vlan; u8 mac_address[6]; u16 pci_address; u16 name_length; u16 name_offset; }; struct acpi_ibft_target { struct acpi_ibft_header header; u8 target_ip_address[16]; u16 target_ip_socket; u8 target_boot_lun[8]; u8 chap_type; u8 nic_association; u16 target_name_length; u16 target_name_offset; u16 chap_name_length; u16 chap_name_offset; u16 chap_secret_length; u16 chap_secret_offset; u16 reverse_chap_name_length; u16 reverse_chap_name_offset; u16 reverse_chap_secret_length; u16 reverse_chap_secret_offset; }; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL1_H__ */ PKk]7Wrrhed.hnu[/* SPDX-License-Identifier: GPL-2.0-only */ /* * hed.h - ACPI Hardware Error Device * * Copyright (C) 2009, Intel Corp. * Author: Huang Ying */ #ifndef ACPI_HED_H #define ACPI_HED_H #include int register_acpi_hed_notifier(struct notifier_block *nb); void unregister_acpi_hed_notifier(struct notifier_block *nb); #endif PKk]ggproc_cap_intel.hnu[/* SPDX-License-Identifier: GPL-2.0 */ /* Vendor specific processor capabilities bit definition * for Intel processors. Those bits are used to convey OSPM * power management capabilities to the platform. */ #ifndef __PROC_CAP_INTEL_H__ #define __PROC_CAP_INTEL_H__ #define ACPI_PROC_CAP_P_FFH (0x0001) #define ACPI_PROC_CAP_C_C1_HALT (0x0002) #define ACPI_PROC_CAP_T_FFH (0x0004) #define ACPI_PROC_CAP_SMP_C1PT (0x0008) #define ACPI_PROC_CAP_SMP_C2C3 (0x0010) #define ACPI_PROC_CAP_SMP_P_SWCOORD (0x0020) #define ACPI_PROC_CAP_SMP_C_SWCOORD (0x0040) #define ACPI_PROC_CAP_SMP_T_SWCOORD (0x0080) #define ACPI_PROC_CAP_C_C1_FFH (0x0100) #define ACPI_PROC_CAP_C_C2C3_FFH (0x0200) #define ACPI_PROC_CAP_SMP_P_HWCOORD (0x0800) #define ACPI_PROC_CAP_COLLAB_PROC_PERF (0x1000) #define ACPI_PROC_CAP_EST_CAPABILITY_SMP (ACPI_PROC_CAP_SMP_C1PT | \ ACPI_PROC_CAP_C_C1_HALT | \ ACPI_PROC_CAP_P_FFH) #define ACPI_PROC_CAP_EST_CAPABILITY_SWSMP (ACPI_PROC_CAP_SMP_C1PT | \ ACPI_PROC_CAP_C_C1_HALT | \ ACPI_PROC_CAP_SMP_P_SWCOORD | \ ACPI_PROC_CAP_SMP_P_HWCOORD | \ ACPI_PROC_CAP_P_FFH) #define ACPI_PROC_CAP_C_CAPABILITY_SMP (ACPI_PROC_CAP_SMP_C2C3 | \ ACPI_PROC_CAP_SMP_C1PT | \ ACPI_PROC_CAP_C_C1_HALT | \ ACPI_PROC_CAP_C_C1_FFH | \ ACPI_PROC_CAP_C_C2C3_FFH) #endif /* __PROC_CAP_INTEL_H__ */ PKk]Eq::actbl2.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACTBL2_H__ #define __ACTBL2_H__ /******************************************************************************* * * Additional ACPI Tables (2) * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ #define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */ #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ #define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */ #define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */ #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ #define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ #define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ #define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ #define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ #define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ #define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ #define ACPI_SIG_RASF "RASF" /* RAS Feature table */ #define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ #define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ #define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * AEST - Arm Error Source Table * * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document * September 2020. * ******************************************************************************/ struct acpi_table_aest { struct acpi_table_header header; }; /* Common Subtable header - one per Node Structure (Subtable) */ struct acpi_aest_hdr { u8 type; u16 length; u8 reserved; u32 node_specific_offset; u32 node_interface_offset; u32 node_interrupt_offset; u32 node_interrupt_count; u64 timestamp_rate; u64 reserved1; u64 error_injection_rate; }; /* Values for Type above */ #define ACPI_AEST_PROCESSOR_ERROR_NODE 0 #define ACPI_AEST_MEMORY_ERROR_NODE 1 #define ACPI_AEST_SMMU_ERROR_NODE 2 #define ACPI_AEST_VENDOR_ERROR_NODE 3 #define ACPI_AEST_GIC_ERROR_NODE 4 #define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ /* * AEST subtables (Error nodes) */ /* 0: Processor Error */ typedef struct acpi_aest_processor { u32 processor_id; u8 resource_type; u8 reserved; u8 flags; u8 revision; u64 processor_affinity; } acpi_aest_processor; /* Values for resource_type above, related structs below */ #define ACPI_AEST_CACHE_RESOURCE 0 #define ACPI_AEST_TLB_RESOURCE 1 #define ACPI_AEST_GENERIC_RESOURCE 2 #define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ /* 0R: Processor Cache Resource Substructure */ typedef struct acpi_aest_processor_cache { u32 cache_reference; u32 reserved; } acpi_aest_processor_cache; /* Values for cache_type above */ #define ACPI_AEST_CACHE_DATA 0 #define ACPI_AEST_CACHE_INSTRUCTION 1 #define ACPI_AEST_CACHE_UNIFIED 2 #define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ /* 1R: Processor TLB Resource Substructure */ typedef struct acpi_aest_processor_tlb { u32 tlb_level; u32 reserved; } acpi_aest_processor_tlb; /* 2R: Processor Generic Resource Substructure */ typedef struct acpi_aest_processor_generic { u32 resource; } acpi_aest_processor_generic; /* 1: Memory Error */ typedef struct acpi_aest_memory { u32 srat_proximity_domain; } acpi_aest_memory; /* 2: Smmu Error */ typedef struct acpi_aest_smmu { u32 iort_node_reference; u32 subcomponent_reference; } acpi_aest_smmu; /* 3: Vendor Defined */ typedef struct acpi_aest_vendor { u32 acpi_hid; u32 acpi_uid; u8 vendor_specific_data[16]; } acpi_aest_vendor; /* 4: Gic Error */ typedef struct acpi_aest_gic { u32 interface_type; u32 instance_id; } acpi_aest_gic; /* Values for interface_type above */ #define ACPI_AEST_GIC_CPU 0 #define ACPI_AEST_GIC_DISTRIBUTOR 1 #define ACPI_AEST_GIC_REDISTRIBUTOR 2 #define ACPI_AEST_GIC_ITS 3 #define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ /* Node Interface Structure */ typedef struct acpi_aest_node_interface { u8 type; u8 reserved[3]; u32 flags; u64 address; u32 error_record_index; u32 error_record_count; u64 error_record_implemented; u64 error_status_reporting; u64 addressing_mode; } acpi_aest_node_interface; /* Values for Type field above */ #define ACPI_AEST_NODE_SYSTEM_REGISTER 0 #define ACPI_AEST_NODE_MEMORY_MAPPED 1 #define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ /* Node Interrupt Structure */ typedef struct acpi_aest_node_interrupt { u8 type; u8 reserved[2]; u8 flags; u32 gsiv; u8 iort_id; u8 reserved1[3]; } acpi_aest_node_interrupt; /* Values for Type field above */ #define ACPI_AEST_NODE_FAULT_HANDLING 0 #define ACPI_AEST_NODE_ERROR_RECOVERY 1 #define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ /******************************************************************************* * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface * * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" * ARM DEN0093 v1.1 * ******************************************************************************/ struct acpi_table_agdi { struct acpi_table_header header; /* Common ACPI table header */ u8 flags; u8 reserved[3]; u32 sdei_event; u32 gsiv; }; /* Mask for Flags field above */ #define ACPI_AGDI_SIGNALING_MODE (1) /******************************************************************************* * * APMT - ARM Performance Monitoring Unit Table * * Conforms to: * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document * ARM DEN0117 v1.0 November 25, 2021 * ******************************************************************************/ struct acpi_table_apmt { struct acpi_table_header header; /* Common ACPI table header */ }; #define ACPI_APMT_NODE_ID_LENGTH 4 /* * APMT subtables */ struct acpi_apmt_node { u16 length; u8 flags; u8 type; u32 id; u64 inst_primary; u32 inst_secondary; u64 base_address0; u64 base_address1; u32 ovflw_irq; u32 reserved; u32 ovflw_irq_flags; u32 proc_affinity; u32 impl_id; }; /* Masks for Flags field above */ #define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0) #define ACPI_APMT_FLAGS_AFFINITY (1<<1) #define ACPI_APMT_FLAGS_ATOMIC (1<<2) /* Values for Flags dual page field above */ #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0) #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0) /* Values for Flags processor affinity field above */ #define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1) #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1) /* Values for Flags 64-bit atomic field above */ #define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2) #define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2) /* Values for Type field above */ enum acpi_apmt_node_type { ACPI_APMT_NODE_TYPE_MC = 0x00, ACPI_APMT_NODE_TYPE_SMMU = 0x01, ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02, ACPI_APMT_NODE_TYPE_ACPI = 0x03, ACPI_APMT_NODE_TYPE_CACHE = 0x04, ACPI_APMT_NODE_TYPE_COUNT }; /* Masks for ovflw_irq_flags field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0) #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1) /* Values for ovflw_irq_flags mode field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0) #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0) /* Values for ovflw_irq_flags type field above */ #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1) /******************************************************************************* * * BDAT - BIOS Data ACPI Table * * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 * Nov 2020 * ******************************************************************************/ struct acpi_table_bdat { struct acpi_table_header header; struct acpi_generic_address gas; }; /******************************************************************************* * * CCEL - CC-Event Log * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". Feb 2022 * ******************************************************************************/ struct acpi_table_ccel { struct acpi_table_header header; /* Common ACPI table header */ u8 CCtype; u8 Ccsub_type; u16 reserved; u64 log_area_minimum_length; u64 log_area_start_address; }; /******************************************************************************* * * IORT - IO Remapping Table * * Conforms to "IO Remapping Table System Software on ARM Platforms", * Document number: ARM DEN 0049E.e, Sep 2022 * ******************************************************************************/ struct acpi_table_iort { struct acpi_table_header header; u32 node_count; u32 node_offset; u32 reserved; }; /* * IORT subtables */ struct acpi_iort_node { u8 type; u16 length; u8 revision; u32 identifier; u32 mapping_count; u32 mapping_offset; char node_data[]; }; /* Values for subtable Type above */ enum acpi_iort_node_type { ACPI_IORT_NODE_ITS_GROUP = 0x00, ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, ACPI_IORT_NODE_SMMU = 0x03, ACPI_IORT_NODE_SMMU_V3 = 0x04, ACPI_IORT_NODE_PMCG = 0x05, ACPI_IORT_NODE_RMR = 0x06, }; struct acpi_iort_id_mapping { u32 input_base; /* Lowest value in input range */ u32 id_count; /* Number of IDs */ u32 output_base; /* Lowest value in output range */ u32 output_reference; /* A reference to the output node */ u32 flags; }; /* Masks for Flags field above for IORT subtable */ #define ACPI_IORT_ID_SINGLE_MAPPING (1) struct acpi_iort_memory_access { u32 cache_coherency; u8 hints; u16 reserved; u8 memory_flags; }; /* Values for cache_coherency field above */ #define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ /* Masks for Hints field above */ #define ACPI_IORT_HT_TRANSIENT (1) #define ACPI_IORT_HT_WRITE (1<<1) #define ACPI_IORT_HT_READ (1<<2) #define ACPI_IORT_HT_OVERRIDE (1<<3) /* Masks for memory_flags field above */ #define ACPI_IORT_MF_COHERENCY (1) #define ACPI_IORT_MF_ATTRIBUTES (1<<1) /* * IORT node specific subtables */ struct acpi_iort_its_group { u32 its_count; u32 identifiers[]; /* GIC ITS identifier array */ }; struct acpi_iort_named_component { u32 node_flags; u64 memory_properties; /* Memory access properties */ u8 memory_address_limit; /* Memory address size limit */ char device_name[]; /* Path of namespace object */ }; /* Masks for Flags field above */ #define ACPI_IORT_NC_STALL_SUPPORTED (1) #define ACPI_IORT_NC_PASID_BITS (31<<1) struct acpi_iort_root_complex { u64 memory_properties; /* Memory access properties */ u32 ats_attribute; u32 pci_segment_number; u8 memory_address_limit; /* Memory address size limit */ u16 pasid_capabilities; /* PASID Capabilities */ u8 reserved[]; /* Reserved, must be zero */ }; /* Masks for ats_attribute field above */ #define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ #define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ /* Masks for pasid_capabilities field above */ #define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */ struct acpi_iort_smmu { u64 base_address; /* SMMU base address */ u64 span; /* Length of memory range */ u32 model; u32 flags; u32 global_interrupt_offset; u32 context_interrupt_count; u32 context_interrupt_offset; u32 pmu_interrupt_count; u32 pmu_interrupt_offset; u64 interrupts[]; /* Interrupt array */ }; /* Values for Model field above */ #define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ #define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */ /* Masks for Flags field above */ #define ACPI_IORT_SMMU_DVM_SUPPORTED (1) #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) /* Global interrupt format */ struct acpi_iort_smmu_gsi { u32 nsg_irpt; u32 nsg_irpt_flags; u32 nsg_cfg_irpt; u32 nsg_cfg_irpt_flags; }; struct acpi_iort_smmu_v3 { u64 base_address; /* SMMUv3 base address */ u32 flags; u32 reserved; u64 vatos_address; u32 model; u32 event_gsiv; u32 pri_gsiv; u32 gerr_gsiv; u32 sync_gsiv; u32 pxm; u32 id_mapping_index; }; /* Values for Model field above */ #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */ #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ /* Masks for Flags field above */ #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) #define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4) struct acpi_iort_pmcg { u64 page0_base_address; u32 overflow_gsiv; u32 node_reference; u64 page1_base_address; }; struct acpi_iort_rmr { u32 flags; u32 rmr_count; u32 rmr_offset; }; /* Masks for Flags field above */ #define ACPI_IORT_RMR_REMAP_PERMITTED (1) #define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1) /* * Macro to access the Access Attributes in flags field above: * Access Attributes is encoded in bits 9:2 */ #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF) /* Values for above Access Attributes */ #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00 #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01 #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02 #define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03 #define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04 #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05 struct acpi_iort_rmr_desc { u64 base_address; u64 length; u32 reserved; }; /******************************************************************************* * * IVRS - I/O Virtualization Reporting Structure * Version 1 * * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", * Revision 1.26, February 2009. * ******************************************************************************/ struct acpi_table_ivrs { struct acpi_table_header header; /* Common ACPI table header */ u32 info; /* Common virtualization info */ u64 reserved; }; /* Values for Info field above */ #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ #define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ /* IVRS subtable header */ struct acpi_ivrs_header { u8 type; /* Subtable type */ u8 flags; u16 length; /* Subtable length */ u16 device_id; /* ID of IOMMU */ }; /* Values for subtable Type above */ enum acpi_ivrs_type { ACPI_IVRS_TYPE_HARDWARE1 = 0x10, ACPI_IVRS_TYPE_HARDWARE2 = 0x11, ACPI_IVRS_TYPE_HARDWARE3 = 0x40, ACPI_IVRS_TYPE_MEMORY1 = 0x20, ACPI_IVRS_TYPE_MEMORY2 = 0x21, ACPI_IVRS_TYPE_MEMORY3 = 0x22 }; /* Masks for Flags field above for IVHD subtable */ #define ACPI_IVHD_TT_ENABLE (1) #define ACPI_IVHD_PASS_PW (1<<1) #define ACPI_IVHD_RES_PASS_PW (1<<2) #define ACPI_IVHD_ISOC (1<<3) #define ACPI_IVHD_IOTLB (1<<4) /* Masks for Flags field above for IVMD subtable */ #define ACPI_IVMD_UNITY (1) #define ACPI_IVMD_READ (1<<1) #define ACPI_IVMD_WRITE (1<<2) #define ACPI_IVMD_EXCLUSION_RANGE (1<<3) /* * IVRS subtables, correspond to Type in struct acpi_ivrs_header */ /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ struct acpi_ivrs_hardware_10 { struct acpi_ivrs_header header; u16 capability_offset; /* Offset for IOMMU control fields */ u64 base_address; /* IOMMU control registers */ u16 pci_segment_group; u16 info; /* MSI number and unit ID */ u32 feature_reporting; }; /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ struct acpi_ivrs_hardware_11 { struct acpi_ivrs_header header; u16 capability_offset; /* Offset for IOMMU control fields */ u64 base_address; /* IOMMU control registers */ u16 pci_segment_group; u16 info; /* MSI number and unit ID */ u32 attributes; u64 efr_register_image; u64 reserved; }; /* Masks for Info field above */ #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ #define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */ /* * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure. * Upper two bits of the Type field are the (encoded) length of the structure. * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries * are reserved for future use but not defined. */ struct acpi_ivrs_de_header { u8 type; u16 id; u8 data_setting; }; /* Length of device entry is in the top two bits of Type field above */ #define ACPI_IVHD_ENTRY_LENGTH 0xC0 /* Values for device entry Type field above */ enum acpi_ivrs_device_entry_type { /* 4-byte device entries, all use struct acpi_ivrs_device4 */ ACPI_IVRS_TYPE_PAD4 = 0, ACPI_IVRS_TYPE_ALL = 1, ACPI_IVRS_TYPE_SELECT = 2, ACPI_IVRS_TYPE_START = 3, ACPI_IVRS_TYPE_END = 4, /* 8-byte device entries */ ACPI_IVRS_TYPE_PAD8 = 64, ACPI_IVRS_TYPE_NOT_USED = 65, ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */ ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */ ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */ ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */ ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */ /* Variable-length device entries */ ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ }; /* Values for Data field above */ #define ACPI_IVHD_INIT_PASS (1) #define ACPI_IVHD_EINT_PASS (1<<1) #define ACPI_IVHD_NMI_PASS (1<<2) #define ACPI_IVHD_SYSTEM_MGMT (3<<4) #define ACPI_IVHD_LINT0_PASS (1<<6) #define ACPI_IVHD_LINT1_PASS (1<<7) /* Types 0-4: 4-byte device entry */ struct acpi_ivrs_device4 { struct acpi_ivrs_de_header header; }; /* Types 66-67: 8-byte device entry */ struct acpi_ivrs_device8a { struct acpi_ivrs_de_header header; u8 reserved1; u16 used_id; u8 reserved2; }; /* Types 70-71: 8-byte device entry */ struct acpi_ivrs_device8b { struct acpi_ivrs_de_header header; u32 extended_data; }; /* Values for extended_data above */ #define ACPI_IVHD_ATS_DISABLED (1<<31) /* Type 72: 8-byte device entry */ struct acpi_ivrs_device8c { struct acpi_ivrs_de_header header; u8 handle; u16 used_id; u8 variety; }; /* Values for Variety field above */ #define ACPI_IVHD_IOAPIC 1 #define ACPI_IVHD_HPET 2 /* Type 240: variable-length device entry */ struct acpi_ivrs_device_hid { struct acpi_ivrs_de_header header; u64 acpi_hid; u64 acpi_cid; u8 uid_type; u8 uid_length; }; /* Values for uid_type above */ #define ACPI_IVRS_UID_NOT_PRESENT 0 #define ACPI_IVRS_UID_IS_INTEGER 1 #define ACPI_IVRS_UID_IS_STRING 2 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ struct acpi_ivrs_memory { struct acpi_ivrs_header header; u16 aux_data; u64 reserved; u64 start_address; u64 memory_length; }; /******************************************************************************* * * LPIT - Low Power Idle Table * * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. * ******************************************************************************/ struct acpi_table_lpit { struct acpi_table_header header; /* Common ACPI table header */ }; /* LPIT subtable header */ struct acpi_lpit_header { u32 type; /* Subtable type */ u32 length; /* Subtable length */ u16 unique_id; u16 reserved; u32 flags; }; /* Values for subtable Type above */ enum acpi_lpit_type { ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ }; /* Masks for Flags field above */ #define ACPI_LPIT_STATE_DISABLED (1) #define ACPI_LPIT_NO_COUNTER (1<<1) /* * LPIT subtables, correspond to Type in struct acpi_lpit_header */ /* 0x00: Native C-state instruction based LPI structure */ struct acpi_lpit_native { struct acpi_lpit_header header; struct acpi_generic_address entry_trigger; u32 residency; u32 latency; struct acpi_generic_address residency_counter; u64 counter_frequency; }; /******************************************************************************* * * MADT - Multiple APIC Description Table * Version 3 * ******************************************************************************/ struct acpi_table_madt { struct acpi_table_header header; /* Common ACPI table header */ u32 address; /* Physical address of local APIC */ u32 flags; }; /* Masks for Flags field above */ #define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ /* Values for PCATCompat flag */ #define ACPI_MADT_DUAL_PIC 1 #define ACPI_MADT_MULTIPLE_APIC 0 /* Values for MADT subtable type in struct acpi_subtable_header */ enum acpi_madt_type { ACPI_MADT_TYPE_LOCAL_APIC = 0, ACPI_MADT_TYPE_IO_APIC = 1, ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, ACPI_MADT_TYPE_NMI_SOURCE = 3, ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, ACPI_MADT_TYPE_IO_SAPIC = 6, ACPI_MADT_TYPE_LOCAL_SAPIC = 7, ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, ACPI_MADT_TYPE_LOCAL_X2APIC = 9, ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, ACPI_MADT_TYPE_CORE_PIC = 17, ACPI_MADT_TYPE_LIO_PIC = 18, ACPI_MADT_TYPE_HT_PIC = 19, ACPI_MADT_TYPE_EIO_PIC = 20, ACPI_MADT_TYPE_MSI_PIC = 21, ACPI_MADT_TYPE_BIO_PIC = 22, ACPI_MADT_TYPE_LPC_PIC = 23, ACPI_MADT_TYPE_RINTC = 24, ACPI_MADT_TYPE_IMSIC = 25, ACPI_MADT_TYPE_APLIC = 26, ACPI_MADT_TYPE_PLIC = 27, ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */ ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */ }; /* * MADT Subtables, correspond to Type in struct acpi_subtable_header */ /* 0: Processor Local APIC */ struct acpi_madt_local_apic { struct acpi_subtable_header header; u8 processor_id; /* ACPI processor id */ u8 id; /* Processor's local APIC id */ u32 lapic_flags; }; /* 1: IO APIC */ struct acpi_madt_io_apic { struct acpi_subtable_header header; u8 id; /* I/O APIC ID */ u8 reserved; /* reserved - must be zero */ u32 address; /* APIC physical address */ u32 global_irq_base; /* Global system interrupt where INTI lines start */ }; /* 2: Interrupt Override */ struct acpi_madt_interrupt_override { struct acpi_subtable_header header; u8 bus; /* 0 - ISA */ u8 source_irq; /* Interrupt source (IRQ) */ u32 global_irq; /* Global system interrupt */ u16 inti_flags; }; /* 3: NMI Source */ struct acpi_madt_nmi_source { struct acpi_subtable_header header; u16 inti_flags; u32 global_irq; /* Global system interrupt */ }; /* 4: Local APIC NMI */ struct acpi_madt_local_apic_nmi { struct acpi_subtable_header header; u8 processor_id; /* ACPI processor id */ u16 inti_flags; u8 lint; /* LINTn to which NMI is connected */ }; /* 5: Address Override */ struct acpi_madt_local_apic_override { struct acpi_subtable_header header; u16 reserved; /* Reserved, must be zero */ u64 address; /* APIC physical address */ }; /* 6: I/O Sapic */ struct acpi_madt_io_sapic { struct acpi_subtable_header header; u8 id; /* I/O SAPIC ID */ u8 reserved; /* Reserved, must be zero */ u32 global_irq_base; /* Global interrupt for SAPIC start */ u64 address; /* SAPIC physical address */ }; /* 7: Local Sapic */ struct acpi_madt_local_sapic { struct acpi_subtable_header header; u8 processor_id; /* ACPI processor id */ u8 id; /* SAPIC ID */ u8 eid; /* SAPIC EID */ u8 reserved[3]; /* Reserved, must be zero */ u32 lapic_flags; u32 uid; /* Numeric UID - ACPI 3.0 */ char uid_string[]; /* String UID - ACPI 3.0 */ }; /* 8: Platform Interrupt Source */ struct acpi_madt_interrupt_source { struct acpi_subtable_header header; u16 inti_flags; u8 type; /* 1=PMI, 2=INIT, 3=corrected */ u8 id; /* Processor ID */ u8 eid; /* Processor EID */ u8 io_sapic_vector; /* Vector value for PMI interrupts */ u32 global_irq; /* Global system interrupt */ u32 flags; /* Interrupt Source Flags */ }; /* Masks for Flags field above */ #define ACPI_MADT_CPEI_OVERRIDE (1) /* 9: Processor Local X2APIC (ACPI 4.0) */ struct acpi_madt_local_x2apic { struct acpi_subtable_header header; u16 reserved; /* reserved - must be zero */ u32 local_apic_id; /* Processor x2APIC ID */ u32 lapic_flags; u32 uid; /* ACPI processor UID */ }; /* 10: Local X2APIC NMI (ACPI 4.0) */ struct acpi_madt_local_x2apic_nmi { struct acpi_subtable_header header; u16 inti_flags; u32 uid; /* ACPI processor UID */ u8 lint; /* LINTn to which NMI is connected */ u8 reserved[3]; /* reserved - must be zero */ }; /* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */ struct acpi_madt_generic_interrupt { struct acpi_subtable_header header; u16 reserved; /* reserved - must be zero */ u32 cpu_interface_number; u32 uid; u32 flags; u32 parking_version; u32 performance_interrupt; u64 parked_address; u64 base_address; u64 gicv_base_address; u64 gich_base_address; u32 vgic_interrupt; u64 gicr_base_address; u64 arm_mpidr; u8 efficiency_class; u8 reserved2[1]; u16 spe_interrupt; /* ACPI 6.3 */ u16 trbe_interrupt; /* ACPI 6.5 */ }; /* Masks for Flags field above */ /* ACPI_MADT_ENABLED (1) Processor is usable if set */ #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ #define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ #define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */ #define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */ /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ struct acpi_madt_generic_distributor { struct acpi_subtable_header header; u16 reserved; /* reserved - must be zero */ u32 gic_id; u64 base_address; u32 global_irq_base; u8 version; u8 reserved2[3]; /* reserved - must be zero */ }; /* Values for Version field above */ enum acpi_madt_gic_version { ACPI_MADT_GIC_VERSION_NONE = 0, ACPI_MADT_GIC_VERSION_V1 = 1, ACPI_MADT_GIC_VERSION_V2 = 2, ACPI_MADT_GIC_VERSION_V3 = 3, ACPI_MADT_GIC_VERSION_V4 = 4, ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ }; /* 13: Generic MSI Frame (ACPI 5.1) */ struct acpi_madt_generic_msi_frame { struct acpi_subtable_header header; u16 reserved; /* reserved - must be zero */ u32 msi_frame_id; u64 base_address; u32 flags; u16 spi_count; u16 spi_base; }; /* Masks for Flags field above */ #define ACPI_MADT_OVERRIDE_SPI_VALUES (1) /* 14: Generic Redistributor (ACPI 5.1) */ struct acpi_madt_generic_redistributor { struct acpi_subtable_header header; u8 flags; u8 reserved; /* reserved - must be zero */ u64 base_address; u32 length; }; #define ACPI_MADT_GICR_NON_COHERENT (1) /* 15: Generic Translator (ACPI 6.0) */ struct acpi_madt_generic_translator { struct acpi_subtable_header header; u8 flags; u8 reserved; /* reserved - must be zero */ u32 translation_id; u64 base_address; u32 reserved2; }; #define ACPI_MADT_ITS_NON_COHERENT (1) /* 16: Multiprocessor wakeup (ACPI 6.4) */ struct acpi_madt_multiproc_wakeup { struct acpi_subtable_header header; u16 mailbox_version; u32 reserved; /* reserved - must be zero */ u64 base_address; }; #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 struct acpi_madt_multiproc_wakeup_mailbox { u16 command; u16 reserved; /* reserved - must be zero */ u32 apic_id; u64 wakeup_vector; u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ }; #define ACPI_MP_WAKE_COMMAND_WAKEUP 1 /* 17: CPU Core Interrupt Controller (ACPI 6.5) */ struct acpi_madt_core_pic { struct acpi_subtable_header header; u8 version; u32 processor_id; u32 core_id; u32 flags; }; /* Values for Version field above */ enum acpi_madt_core_pic_version { ACPI_MADT_CORE_PIC_VERSION_NONE = 0, ACPI_MADT_CORE_PIC_VERSION_V1 = 1, ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */ struct acpi_madt_lio_pic { struct acpi_subtable_header header; u8 version; u64 address; u16 size; u8 cascade[2]; u32 cascade_map[2]; }; /* Values for Version field above */ enum acpi_madt_lio_pic_version { ACPI_MADT_LIO_PIC_VERSION_NONE = 0, ACPI_MADT_LIO_PIC_VERSION_V1 = 1, ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 19: HT Interrupt Controller (ACPI 6.5) */ struct acpi_madt_ht_pic { struct acpi_subtable_header header; u8 version; u64 address; u16 size; u8 cascade[8]; }; /* Values for Version field above */ enum acpi_madt_ht_pic_version { ACPI_MADT_HT_PIC_VERSION_NONE = 0, ACPI_MADT_HT_PIC_VERSION_V1 = 1, ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 20: Extend I/O Interrupt Controller (ACPI 6.5) */ struct acpi_madt_eio_pic { struct acpi_subtable_header header; u8 version; u8 cascade; u8 node; u64 node_map; }; /* Values for Version field above */ enum acpi_madt_eio_pic_version { ACPI_MADT_EIO_PIC_VERSION_NONE = 0, ACPI_MADT_EIO_PIC_VERSION_V1 = 1, ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 21: MSI Interrupt Controller (ACPI 6.5) */ struct acpi_madt_msi_pic { struct acpi_subtable_header header; u8 version; u64 msg_address; u32 start; u32 count; }; /* Values for Version field above */ enum acpi_madt_msi_pic_version { ACPI_MADT_MSI_PIC_VERSION_NONE = 0, ACPI_MADT_MSI_PIC_VERSION_V1 = 1, ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */ struct acpi_madt_bio_pic { struct acpi_subtable_header header; u8 version; u64 address; u16 size; u16 id; u16 gsi_base; }; /* Values for Version field above */ enum acpi_madt_bio_pic_version { ACPI_MADT_BIO_PIC_VERSION_NONE = 0, ACPI_MADT_BIO_PIC_VERSION_V1 = 1, ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 23: LPC Interrupt Controller (ACPI 6.5) */ struct acpi_madt_lpc_pic { struct acpi_subtable_header header; u8 version; u64 address; u16 size; u8 cascade; }; /* Values for Version field above */ enum acpi_madt_lpc_pic_version { ACPI_MADT_LPC_PIC_VERSION_NONE = 0, ACPI_MADT_LPC_PIC_VERSION_V1 = 1, ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 24: RISC-V INTC */ struct acpi_madt_rintc { struct acpi_subtable_header header; u8 version; u8 reserved; u32 flags; u64 hart_id; u32 uid; /* ACPI processor UID */ u32 ext_intc_id; /* External INTC Id */ u64 imsic_addr; /* IMSIC base address */ u32 imsic_size; /* IMSIC size */ }; /* Values for RISC-V INTC Version field above */ enum acpi_madt_rintc_version { ACPI_MADT_RINTC_VERSION_NONE = 0, ACPI_MADT_RINTC_VERSION_V1 = 1, ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ }; /* 25: RISC-V IMSIC */ struct acpi_madt_imsic { struct acpi_subtable_header header; u8 version; u8 reserved; u32 flags; u16 num_ids; u16 num_guest_ids; u8 guest_index_bits; u8 hart_index_bits; u8 group_index_bits; u8 group_index_shift; }; /* 26: RISC-V APLIC */ struct acpi_madt_aplic { struct acpi_subtable_header header; u8 version; u8 id; u32 flags; u8 hw_id[8]; u16 num_idcs; u16 num_sources; u32 gsi_base; u64 base_addr; u32 size; }; /* 27: RISC-V PLIC */ struct acpi_madt_plic { struct acpi_subtable_header header; u8 version; u8 id; u8 hw_id[8]; u16 num_irqs; u16 max_prio; u32 flags; u32 size; u64 base_addr; u32 gsi_base; }; /* 80: OEM data */ struct acpi_madt_oem_data { ACPI_FLEX_ARRAY(u8, oem_data); }; /* * Common flags fields for MADT subtables */ /* MADT Local APIC flags */ #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ #define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ /* MADT MPS INTI flags (inti_flags) */ #define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ #define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ /* Values for MPS INTI flags */ #define ACPI_MADT_POLARITY_CONFORMS 0 #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 #define ACPI_MADT_POLARITY_RESERVED 2 #define ACPI_MADT_POLARITY_ACTIVE_LOW 3 #define ACPI_MADT_TRIGGER_CONFORMS (0) #define ACPI_MADT_TRIGGER_EDGE (1<<2) #define ACPI_MADT_TRIGGER_RESERVED (2<<2) #define ACPI_MADT_TRIGGER_LEVEL (3<<2) /******************************************************************************* * * MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 * ******************************************************************************/ struct acpi_table_mcfg { struct acpi_table_header header; /* Common ACPI table header */ u8 reserved[8]; }; /* Subtable */ struct acpi_mcfg_allocation { u64 address; /* Base address, processor-relative */ u16 pci_segment; /* PCI segment group number */ u8 start_bus_number; /* Starting PCI Bus number */ u8 end_bus_number; /* Final PCI Bus number */ u32 reserved; }; /******************************************************************************* * * MCHI - Management Controller Host Interface Table * Version 1 * * Conforms to "Management Component Transport Protocol (MCTP) Host * Interface Specification", Revision 1.0.0a, October 13, 2009 * ******************************************************************************/ struct acpi_table_mchi { struct acpi_table_header header; /* Common ACPI table header */ u8 interface_type; u8 protocol; u64 protocol_data; u8 interrupt_type; u8 gpe; u8 pci_device_flag; u32 global_interrupt; struct acpi_generic_address control_register; u8 pci_segment; u8 pci_bus; u8 pci_device; u8 pci_function; }; /******************************************************************************* * * MPAM - Memory System Resource Partitioning and Monitoring * * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0" * Document number: ARM DEN 0065, December, 2022. * ******************************************************************************/ /* MPAM RIS locator types. Table 11, Location types */ enum acpi_mpam_locator_type { ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0, ACPI_MPAM_LOCATION_TYPE_MEMORY = 1, ACPI_MPAM_LOCATION_TYPE_SMMU = 2, ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3, ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4, ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5, ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF }; /* MPAM Functional dependency descriptor. Table 10 */ struct acpi_mpam_func_deps { u32 producer; u32 reserved; }; /* MPAM Processor cache locator descriptor. Table 13 */ struct acpi_mpam_resource_cache_locator { u64 cache_reference; u32 reserved; }; /* MPAM Memory locator descriptor. Table 14 */ struct acpi_mpam_resource_memory_locator { u64 proximity_domain; u32 reserved; }; /* MPAM SMMU locator descriptor. Table 15 */ struct acpi_mpam_resource_smmu_locator { u64 smmu_interface; u32 reserved; }; /* MPAM Memory-side cache locator descriptor. Table 16 */ struct acpi_mpam_resource_memcache_locator { u8 reserved[7]; u8 level; u32 reference; }; /* MPAM ACPI device locator descriptor. Table 17 */ struct acpi_mpam_resource_acpi_locator { u64 acpi_hw_id; u32 acpi_unique_id; }; /* MPAM Interconnect locator descriptor. Table 18 */ struct acpi_mpam_resource_interconnect_locator { u64 inter_connect_desc_tbl_off; u32 reserved; }; /* MPAM Locator structure. Table 12 */ struct acpi_mpam_resource_generic_locator { u64 descriptor1; u32 descriptor2; }; union acpi_mpam_resource_locator { struct acpi_mpam_resource_cache_locator cache_locator; struct acpi_mpam_resource_memory_locator memory_locator; struct acpi_mpam_resource_smmu_locator smmu_locator; struct acpi_mpam_resource_memcache_locator mem_cache_locator; struct acpi_mpam_resource_acpi_locator acpi_locator; struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator; struct acpi_mpam_resource_generic_locator generic_locator; }; /* Memory System Component Resource Node Structure Table 9 */ struct acpi_mpam_resource_node { u32 identifier; u8 ris_index; u16 reserved1; u8 locator_type; union acpi_mpam_resource_locator locator; u32 num_functional_deps; }; /* Memory System Component (MSC) Node Structure. Table 4 */ struct acpi_mpam_msc_node { u16 length; u8 interface_type; u8 reserved; u32 identifier; u64 base_address; u32 mmio_size; u32 overflow_interrupt; u32 overflow_interrupt_flags; u32 reserved1; u32 overflow_interrupt_affinity; u32 error_interrupt; u32 error_interrupt_flags; u32 reserved2; u32 error_interrupt_affinity; u32 max_nrdy_usec; u64 hardware_id_linked_device; u32 instance_id_linked_device; u32 num_resouce_nodes; }; struct acpi_table_mpam { struct acpi_table_header header; /* Common ACPI table header */ }; /******************************************************************************* * * MPST - Memory Power State Table (ACPI 5.0) * Version 1 * ******************************************************************************/ #define ACPI_MPST_CHANNEL_INFO \ u8 channel_id; \ u8 reserved1[3]; \ u16 power_node_count; \ u16 reserved2; /* Main table */ struct acpi_table_mpst { struct acpi_table_header header; /* Common ACPI table header */ ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ }; /* Memory Platform Communication Channel Info */ struct acpi_mpst_channel { ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ }; /* Memory Power Node Structure */ struct acpi_mpst_power_node { u8 flags; u8 reserved1; u16 node_id; u32 length; u64 range_address; u64 range_length; u32 num_power_states; u32 num_physical_components; }; /* Values for Flags field above */ #define ACPI_MPST_ENABLED 1 #define ACPI_MPST_POWER_MANAGED 2 #define ACPI_MPST_HOT_PLUG_CAPABLE 4 /* Memory Power State Structure (follows POWER_NODE above) */ struct acpi_mpst_power_state { u8 power_state; u8 info_index; }; /* Physical Component ID Structure (follows POWER_STATE above) */ struct acpi_mpst_component { u16 component_id; }; /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ struct acpi_mpst_data_hdr { u16 characteristics_count; u16 reserved; }; struct acpi_mpst_power_data { u8 structure_id; u8 flags; u16 reserved1; u32 average_power; u32 power_saving; u64 exit_latency; u64 reserved2; }; /* Values for Flags field above */ #define ACPI_MPST_PRESERVE 1 #define ACPI_MPST_AUTOENTRY 2 #define ACPI_MPST_AUTOEXIT 4 /* Shared Memory Region (not part of an ACPI table) */ struct acpi_mpst_shared { u32 signature; u16 pcc_command; u16 pcc_status; u32 command_register; u32 status_register; u32 power_state_id; u32 power_node_id; u64 energy_consumed; u64 average_power; }; /******************************************************************************* * * MSCT - Maximum System Characteristics Table (ACPI 4.0) * Version 1 * ******************************************************************************/ struct acpi_table_msct { struct acpi_table_header header; /* Common ACPI table header */ u32 proximity_offset; /* Location of proximity info struct(s) */ u32 max_proximity_domains; /* Max number of proximity domains */ u32 max_clock_domains; /* Max number of clock domains */ u64 max_address; /* Max physical address in system */ }; /* subtable - Maximum Proximity Domain Information. Version 1 */ struct acpi_msct_proximity { u8 revision; u8 length; u32 range_start; /* Start of domain range */ u32 range_end; /* End of domain range */ u32 processor_capacity; u64 memory_capacity; /* In bytes */ }; /******************************************************************************* * * MSDM - Microsoft Data Management table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ /* Basic MSDM table is only the common ACPI header */ struct acpi_table_msdm { struct acpi_table_header header; /* Common ACPI table header */ }; /******************************************************************************* * * NFIT - NVDIMM Interface Table (ACPI 6.0+) * Version 1 * ******************************************************************************/ struct acpi_table_nfit { struct acpi_table_header header; /* Common ACPI table header */ u32 reserved; /* Reserved, must be zero */ }; /* Subtable header for NFIT */ struct acpi_nfit_header { u16 type; u16 length; }; /* Values for subtable type in struct acpi_nfit_header */ enum acpi_nfit_type { ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, ACPI_NFIT_TYPE_MEMORY_MAP = 1, ACPI_NFIT_TYPE_INTERLEAVE = 2, ACPI_NFIT_TYPE_SMBIOS = 3, ACPI_NFIT_TYPE_CONTROL_REGION = 4, ACPI_NFIT_TYPE_DATA_REGION = 5, ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, ACPI_NFIT_TYPE_CAPABILITIES = 7, ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ }; /* * NFIT Subtables */ /* 0: System Physical Address Range Structure */ struct acpi_nfit_system_address { struct acpi_nfit_header header; u16 range_index; u16 flags; u32 reserved; /* Reserved, must be zero */ u32 proximity_domain; u8 range_guid[16]; u64 address; u64 length; u64 memory_mapping; u64 location_cookie; /* ACPI 6.4 */ }; /* Flags */ #define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ #define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ /* Range Type GUIDs appear in the include/acuuid.h file */ /* 1: Memory Device to System Address Range Map Structure */ struct acpi_nfit_memory_map { struct acpi_nfit_header header; u32 device_handle; u16 physical_id; u16 region_id; u16 range_index; u16 region_index; u64 region_size; u64 region_offset; u64 address; u16 interleave_index; u16 interleave_ways; u16 flags; u16 reserved; /* Reserved, must be zero */ }; /* Flags */ #define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ #define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ #define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ /* 2: Interleave Structure */ struct acpi_nfit_interleave { struct acpi_nfit_header header; u16 interleave_index; u16 reserved; /* Reserved, must be zero */ u32 line_count; u32 line_size; u32 line_offset[]; /* Variable length */ }; /* 3: SMBIOS Management Information Structure */ struct acpi_nfit_smbios { struct acpi_nfit_header header; u32 reserved; /* Reserved, must be zero */ u8 data[]; /* Variable length */ }; /* 4: NVDIMM Control Region Structure */ struct acpi_nfit_control_region { struct acpi_nfit_header header; u16 region_index; u16 vendor_id; u16 device_id; u16 revision_id; u16 subsystem_vendor_id; u16 subsystem_device_id; u16 subsystem_revision_id; u8 valid_fields; u8 manufacturing_location; u16 manufacturing_date; u8 reserved[2]; /* Reserved, must be zero */ u32 serial_number; u16 code; u16 windows; u64 window_size; u64 command_offset; u64 command_size; u64 status_offset; u64 status_size; u16 flags; u8 reserved1[6]; /* Reserved, must be zero */ }; /* Flags */ #define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ /* valid_fields bits */ #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ /* 5: NVDIMM Block Data Window Region Structure */ struct acpi_nfit_data_region { struct acpi_nfit_header header; u16 region_index; u16 windows; u64 offset; u64 size; u64 capacity; u64 start_address; }; /* 6: Flush Hint Address Structure */ struct acpi_nfit_flush_address { struct acpi_nfit_header header; u32 device_handle; u16 hint_count; u8 reserved[6]; /* Reserved, must be zero */ u64 hint_address[]; /* Variable length */ }; /* 7: Platform Capabilities Structure */ struct acpi_nfit_capabilities { struct acpi_nfit_header header; u8 highest_capability; u8 reserved[3]; /* Reserved, must be zero */ u32 capabilities; u32 reserved2; }; /* Capabilities Flags */ #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ /* * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM */ struct nfit_device_handle { u32 handle; }; /* Device handle construction and extraction macros */ #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 #define ACPI_NFIT_MEMORY_ID_OFFSET 8 #define ACPI_NFIT_SOCKET_ID_OFFSET 12 #define ACPI_NFIT_NODE_ID_OFFSET 16 /* Macro to construct a NFIT/NVDIMM device handle */ #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ ((dimm) | \ ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ ((node) << ACPI_NFIT_NODE_ID_OFFSET)) /* Macros to extract individual fields from a NFIT/NVDIMM device handle */ #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) #define ACPI_NFIT_GET_MEMORY_ID(handle) \ (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) #define ACPI_NFIT_GET_SOCKET_ID(handle) \ (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) #define ACPI_NFIT_GET_NODE_ID(handle) \ (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) /******************************************************************************* * * NHLT - Non HD Audio Link Table * * Conforms to: Intel Smart Sound Technology NHLT Specification * Version 0.8.1, January 2020. * ******************************************************************************/ /* Main table */ struct acpi_table_nhlt { struct acpi_table_header header; /* Common ACPI table header */ u8 endpoint_count; }; struct acpi_nhlt_endpoint { u32 descriptor_length; u8 link_type; u8 instance_id; u16 vendor_id; u16 device_id; u16 revision_id; u32 subsystem_id; u8 device_type; u8 direction; u8 virtual_bus_id; }; /* Types for link_type field above */ #define ACPI_NHLT_RESERVED_HD_AUDIO 0 #define ACPI_NHLT_RESERVED_DSP 1 #define ACPI_NHLT_PDM 2 #define ACPI_NHLT_SSP 3 #define ACPI_NHLT_RESERVED_SLIMBUS 4 #define ACPI_NHLT_RESERVED_SOUNDWIRE 5 #define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ /* All other values above are reserved */ /* Values for device_id field above */ #define ACPI_NHLT_PDM_DMIC 0xAE20 #define ACPI_NHLT_BT_SIDEBAND 0xAE30 #define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 /* Values for device_type field above */ /* SSP Link */ #define ACPI_NHLT_LINK_BT_SIDEBAND 0 #define ACPI_NHLT_LINK_FM 1 #define ACPI_NHLT_LINK_MODEM 2 /* 3 is reserved */ #define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 /* PDM Link */ #define ACPI_NHLT_PDM_ON_CAVS_1P8 0 #define ACPI_NHLT_PDM_ON_CAVS_1P5 1 /* Values for Direction field above */ #define ACPI_NHLT_DIR_RENDER 0 #define ACPI_NHLT_DIR_CAPTURE 1 #define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 #define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 #define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ struct acpi_nhlt_device_specific_config { u32 capabilities_size; u8 virtual_slot; u8 config_type; }; struct acpi_nhlt_device_specific_config_a { u32 capabilities_size; u8 virtual_slot; u8 config_type; u8 array_type; }; /* Values for Config Type above */ #define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 #define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 #define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 #define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ struct acpi_nhlt_device_specific_config_b { u32 capabilities_size; }; struct acpi_nhlt_device_specific_config_c { u32 capabilities_size; u8 virtual_slot; }; struct acpi_nhlt_render_device_specific_config { u32 capabilities_size; u8 virtual_slot; }; struct acpi_nhlt_wave_extensible { u16 format_tag; u16 channel_count; u32 samples_per_sec; u32 avg_bytes_per_sec; u16 block_align; u16 bits_per_sample; u16 extra_format_size; u16 valid_bits_per_sample; u32 channel_mask; u8 sub_format_guid[16]; }; /* Values for channel_mask above */ #define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 #define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 #define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 #define ACPI_NHLT_SPKR_LOW_FREQ 0x8 #define ACPI_NHLT_SPKR_BACK_LEFT 0x10 #define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 #define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 #define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 #define ACPI_NHLT_SPKR_BACK_CENTER 0x100 #define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 #define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 #define ACPI_NHLT_SPKR_TOP_CENTER 0x800 #define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 #define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 #define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 #define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 #define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 #define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 struct acpi_nhlt_format_config { struct acpi_nhlt_wave_extensible format; u32 capability_size; u8 capabilities[]; }; struct acpi_nhlt_formats_config { u8 formats_count; }; struct acpi_nhlt_device_specific_hdr { u8 virtual_slot; u8 config_type; }; /* Types for config_type above */ #define ACPI_NHLT_GENERIC 0 #define ACPI_NHLT_MIC 1 #define ACPI_NHLT_RENDER 3 struct acpi_nhlt_mic_device_specific_config { struct acpi_nhlt_device_specific_hdr device_config; u8 array_type_ext; }; /* Values for array_type_ext above */ #define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 /* 9 and below are reserved */ #define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A #define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B #define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C #define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D #define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E #define ACPI_NHLT_VENDOR_DEFINED 0x0F #define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F #define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 #define ACPI_NHLT_NO_EXTENSION 0x0 #define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) struct acpi_nhlt_vendor_mic_count { u8 microphone_count; }; struct acpi_nhlt_vendor_mic_config { u8 type; u8 panel; u16 speaker_position_distance; /* mm */ u16 horizontal_offset; /* mm */ u16 vertical_offset; /* mm */ u8 frequency_low_band; /* 5*Hz */ u8 frequency_high_band; /* 500*Hz */ u16 direction_angle; /* -180 - + 180 */ u16 elevation_angle; /* -180 - + 180 */ u16 work_vertical_angle_begin; /* -180 - + 180 with 2 deg step */ u16 work_vertical_angle_end; /* -180 - + 180 with 2 deg step */ u16 work_horizontal_angle_begin; /* -180 - + 180 with 2 deg step */ u16 work_horizontal_angle_end; /* -180 - + 180 with 2 deg step */ }; /* Values for Type field above */ #define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0 #define ACPI_NHLT_MIC_SUBCARDIOID 1 #define ACPI_NHLT_MIC_CARDIOID 2 #define ACPI_NHLT_MIC_SUPER_CARDIOID 3 #define ACPI_NHLT_MIC_HYPER_CARDIOID 4 #define ACPI_NHLT_MIC_8_SHAPED 5 #define ACPI_NHLT_MIC_RESERVED6 6 /* 6 is reserved */ #define ACPI_NHLT_MIC_VENDOR_DEFINED 7 #define ACPI_NHLT_MIC_RESERVED 8 /* 8 and above are reserved */ /* Values for Panel field above */ #define ACPI_NHLT_MIC_POSITION_TOP 0 #define ACPI_NHLT_MIC_POSITION_BOTTOM 1 #define ACPI_NHLT_MIC_POSITION_LEFT 2 #define ACPI_NHLT_MIC_POSITION_RIGHT 3 #define ACPI_NHLT_MIC_POSITION_FRONT 4 #define ACPI_NHLT_MIC_POSITION_BACK 5 #define ACPI_NHLT_MIC_POSITION_RESERVED 6 /* 6 and above are reserved */ struct acpi_nhlt_vendor_mic_device_specific_config { struct acpi_nhlt_mic_device_specific_config mic_array_device_config; u8 number_of_microphones; struct acpi_nhlt_vendor_mic_config mic_config[]; /* Indexed by number_of_microphones */ }; /* Microphone SNR and Sensitivity extension */ struct acpi_nhlt_mic_snr_sensitivity_extension { u32 SNR; u32 sensitivity; }; /* Render device with feedback */ struct acpi_nhlt_render_feedback_device_specific_config { u8 feedback_virtual_slot; /* Render slot in case of capture */ u16 feedback_channels; /* Informative only */ u16 feedback_valid_bits_per_sample; }; /* Non documented structures */ struct acpi_nhlt_device_info_count { u8 structure_count; }; struct acpi_nhlt_device_info { u8 device_id[16]; u8 device_instance_id; u8 device_port_id; }; /******************************************************************************* * * PCCT - Platform Communications Channel Table (ACPI 5.0) * Version 2 (ACPI 6.2) * ******************************************************************************/ struct acpi_table_pcct { struct acpi_table_header header; /* Common ACPI table header */ u32 flags; u64 reserved; }; /* Values for Flags field above */ #define ACPI_PCCT_DOORBELL 1 /* Values for subtable type in struct acpi_subtable_header */ enum acpi_pcct_type { ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; /* * PCCT Subtables, correspond to Type in struct acpi_subtable_header */ /* 0: Generic Communications Subspace */ struct acpi_pcct_subspace { struct acpi_subtable_header header; u8 reserved[6]; u64 base_address; u64 length; struct acpi_generic_address doorbell_register; u64 preserve_mask; u64 write_mask; u32 latency; u32 max_access_rate; u16 min_turnaround_time; }; /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ struct acpi_pcct_hw_reduced { struct acpi_subtable_header header; u32 platform_interrupt; u8 flags; u8 reserved; u64 base_address; u64 length; struct acpi_generic_address doorbell_register; u64 preserve_mask; u64 write_mask; u32 latency; u32 max_access_rate; u16 min_turnaround_time; }; /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ struct acpi_pcct_hw_reduced_type2 { struct acpi_subtable_header header; u32 platform_interrupt; u8 flags; u8 reserved; u64 base_address; u64 length; struct acpi_generic_address doorbell_register; u64 preserve_mask; u64 write_mask; u32 latency; u32 max_access_rate; u16 min_turnaround_time; struct acpi_generic_address platform_ack_register; u64 ack_preserve_mask; u64 ack_write_mask; }; /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ struct acpi_pcct_ext_pcc_master { struct acpi_subtable_header header; u32 platform_interrupt; u8 flags; u8 reserved1; u64 base_address; u32 length; struct acpi_generic_address doorbell_register; u64 preserve_mask; u64 write_mask; u32 latency; u32 max_access_rate; u32 min_turnaround_time; struct acpi_generic_address platform_ack_register; u64 ack_preserve_mask; u64 ack_set_mask; u64 reserved2; struct acpi_generic_address cmd_complete_register; u64 cmd_complete_mask; struct acpi_generic_address cmd_update_register; u64 cmd_update_preserve_mask; u64 cmd_update_set_mask; struct acpi_generic_address error_status_register; u64 error_status_mask; }; /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ struct acpi_pcct_ext_pcc_slave { struct acpi_subtable_header header; u32 platform_interrupt; u8 flags; u8 reserved1; u64 base_address; u32 length; struct acpi_generic_address doorbell_register; u64 preserve_mask; u64 write_mask; u32 latency; u32 max_access_rate; u32 min_turnaround_time; struct acpi_generic_address platform_ack_register; u64 ack_preserve_mask; u64 ack_set_mask; u64 reserved2; struct acpi_generic_address cmd_complete_register; u64 cmd_complete_mask; struct acpi_generic_address cmd_update_register; u64 cmd_update_preserve_mask; u64 cmd_update_set_mask; struct acpi_generic_address error_status_register; u64 error_status_mask; }; /* 5: HW Registers based Communications Subspace */ struct acpi_pcct_hw_reg { struct acpi_subtable_header header; u16 version; u64 base_address; u64 length; struct acpi_generic_address doorbell_register; u64 doorbell_preserve; u64 doorbell_write; struct acpi_generic_address cmd_complete_register; u64 cmd_complete_mask; struct acpi_generic_address error_status_register; u64 error_status_mask; u32 nominal_latency; u32 min_turnaround_time; }; /* Values for doorbell flags above */ #define ACPI_PCCT_INTERRUPT_POLARITY (1) #define ACPI_PCCT_INTERRUPT_MODE (1<<1) /* * PCC memory structures (not part of the ACPI table) */ /* Shared Memory Region */ struct acpi_pcct_shared_memory { u32 signature; u16 command; u16 status; }; /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ struct acpi_pcct_ext_pcc_shared_memory { u32 signature; u32 flags; u32 length; u32 command; }; /******************************************************************************* * * PDTT - Platform Debug Trigger Table (ACPI 6.2) * Version 0 * ******************************************************************************/ struct acpi_table_pdtt { struct acpi_table_header header; /* Common ACPI table header */ u8 trigger_count; u8 reserved[3]; u32 array_offset; }; /* * PDTT Communication Channel Identifier Structure. * The number of these structures is defined by trigger_count above, * starting at array_offset. */ struct acpi_pdtt_channel { u8 subchannel_id; u8 flags; }; /* Flags for above */ #define ACPI_PDTT_RUNTIME_TRIGGER (1) #define ACPI_PDTT_WAIT_COMPLETION (1<<1) #define ACPI_PDTT_TRIGGER_ORDER (1<<2) /******************************************************************************* * * PHAT - Platform Health Assessment Table (ACPI 6.4) * Version 1 * ******************************************************************************/ struct acpi_table_phat { struct acpi_table_header header; /* Common ACPI table header */ }; /* Common header for PHAT subtables that follow main table */ struct acpi_phat_header { u16 type; u16 length; u8 revision; }; /* Values for Type field above */ #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 #define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ /* * PHAT subtables, correspond to Type in struct acpi_phat_header */ /* 0: Firmware Version Data Record */ struct acpi_phat_version_data { struct acpi_phat_header header; u8 reserved[3]; u32 element_count; }; struct acpi_phat_version_element { u8 guid[16]; u64 version_value; u32 producer_id; }; /* 1: Firmware Health Data Record */ struct acpi_phat_health_data { struct acpi_phat_header header; u8 reserved[2]; u8 health; u8 device_guid[16]; u32 device_specific_offset; /* Zero if no Device-specific data */ }; /* Values for Health field above */ #define ACPI_PHAT_ERRORS_FOUND 0 #define ACPI_PHAT_NO_ERRORS 1 #define ACPI_PHAT_UNKNOWN_ERRORS 2 #define ACPI_PHAT_ADVISORY 3 /******************************************************************************* * * PMTT - Platform Memory Topology Table (ACPI 5.0) * Version 1 * ******************************************************************************/ struct acpi_table_pmtt { struct acpi_table_header header; /* Common ACPI table header */ u32 memory_device_count; /* * Immediately followed by: * MEMORY_DEVICE memory_device_struct[memory_device_count]; */ }; /* Common header for PMTT subtables that follow main table */ struct acpi_pmtt_header { u8 type; u8 reserved1; u16 length; u16 flags; u16 reserved2; u32 memory_device_count; /* Zero means no memory device structs follow */ /* * Immediately followed by: * u8 type_specific_data[] * MEMORY_DEVICE memory_device_struct[memory_device_count]; */ }; /* Values for Type field above */ #define ACPI_PMTT_TYPE_SOCKET 0 #define ACPI_PMTT_TYPE_CONTROLLER 1 #define ACPI_PMTT_TYPE_DIMM 2 #define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ #define ACPI_PMTT_TYPE_VENDOR 0xFF /* Values for Flags field above */ #define ACPI_PMTT_TOP_LEVEL 0x0001 #define ACPI_PMTT_PHYSICAL 0x0002 #define ACPI_PMTT_MEMORY_TYPE 0x000C /* * PMTT subtables, correspond to Type in struct acpi_pmtt_header */ /* 0: Socket Structure */ struct acpi_pmtt_socket { struct acpi_pmtt_header header; u16 socket_id; u16 reserved; }; /* * Immediately followed by: * MEMORY_DEVICE memory_device_struct[memory_device_count]; */ /* 1: Memory Controller subtable */ struct acpi_pmtt_controller { struct acpi_pmtt_header header; u16 controller_id; u16 reserved; }; /* * Immediately followed by: * MEMORY_DEVICE memory_device_struct[memory_device_count]; */ /* 2: Physical Component Identifier (DIMM) */ struct acpi_pmtt_physical_component { struct acpi_pmtt_header header; u32 bios_handle; }; /* 0xFF: Vendor Specific Data */ struct acpi_pmtt_vendor_specific { struct acpi_pmtt_header header; u8 type_uuid[16]; u8 specific[]; /* * Immediately followed by: * u8 vendor_specific_data[]; * MEMORY_DEVICE memory_device_struct[memory_device_count]; */ }; /******************************************************************************* * * PPTT - Processor Properties Topology Table (ACPI 6.2) * Version 1 * ******************************************************************************/ struct acpi_table_pptt { struct acpi_table_header header; /* Common ACPI table header */ }; /* Values for Type field above */ enum acpi_pptt_type { ACPI_PPTT_TYPE_PROCESSOR = 0, ACPI_PPTT_TYPE_CACHE = 1, ACPI_PPTT_TYPE_ID = 2, ACPI_PPTT_TYPE_RESERVED = 3 }; /* 0: Processor Hierarchy Node Structure */ struct acpi_pptt_processor { struct acpi_subtable_header header; u16 reserved; u32 flags; u32 parent; u32 acpi_processor_id; u32 number_of_priv_resources; }; /* Flags */ #define ACPI_PPTT_PHYSICAL_PACKAGE (1) #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ #define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ /* 1: Cache Type Structure */ struct acpi_pptt_cache { struct acpi_subtable_header header; u16 reserved; u32 flags; u32 next_level_of_cache; u32 size; u32 number_of_sets; u8 associativity; u8 attributes; u16 line_size; }; /* 1: Cache Type Structure for PPTT version 3 */ struct acpi_pptt_cache_v1 { u32 cache_id; }; /* Flags */ #define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ #define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ #define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ /* Masks for Attributes */ #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ #define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ /* Attributes describing cache */ #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ #define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ #define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ #define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ /* 2: ID Structure */ struct acpi_pptt_id { struct acpi_subtable_header header; u16 reserved; u32 vendor_id; u64 level1_id; u64 level2_id; u16 major_rev; u16 minor_rev; u16 spin_rev; }; /******************************************************************************* * * PRMT - Platform Runtime Mechanism Table * Version 1 * ******************************************************************************/ struct acpi_table_prmt { struct acpi_table_header header; /* Common ACPI table header */ }; struct acpi_table_prmt_header { u8 platform_guid[16]; u32 module_info_offset; u32 module_info_count; }; struct acpi_prmt_module_header { u16 revision; u16 length; }; struct acpi_prmt_module_info { u16 revision; u16 length; u8 module_guid[16]; u16 major_rev; u16 minor_rev; u16 handler_info_count; u32 handler_info_offset; u64 mmio_list_pointer; }; struct acpi_prmt_handler_info { u16 revision; u16 length; u8 handler_guid[16]; u64 handler_address; u64 static_data_buffer_address; u64 acpi_param_buffer_address; }; /******************************************************************************* * * RASF - RAS Feature Table (ACPI 5.0) * Version 1 * ******************************************************************************/ struct acpi_table_rasf { struct acpi_table_header header; /* Common ACPI table header */ u8 channel_id[12]; }; /* RASF Platform Communication Channel Shared Memory Region */ struct acpi_rasf_shared_memory { u32 signature; u16 command; u16 status; u16 version; u8 capabilities[16]; u8 set_capabilities[16]; u16 num_parameter_blocks; u32 set_capabilities_status; }; /* RASF Parameter Block Structure Header */ struct acpi_rasf_parameter_block { u16 type; u16 version; u16 length; }; /* RASF Parameter Block Structure for PATROL_SCRUB */ struct acpi_rasf_patrol_scrub_parameter { struct acpi_rasf_parameter_block header; u16 patrol_scrub_command; u64 requested_address_range[2]; u64 actual_address_range[2]; u16 flags; u8 requested_speed; }; /* Masks for Flags and Speed fields above */ #define ACPI_RASF_SCRUBBER_RUNNING 1 #define ACPI_RASF_SPEED (7<<1) #define ACPI_RASF_SPEED_SLOW (0<<1) #define ACPI_RASF_SPEED_MEDIUM (4<<1) #define ACPI_RASF_SPEED_FAST (7<<1) /* Channel Commands */ enum acpi_rasf_commands { ACPI_RASF_EXECUTE_RASF_COMMAND = 1 }; /* Platform RAS Capabilities */ enum acpi_rasf_capabiliities { ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, ACPI_SW_PATROL_SCRUB_EXPOSED = 1 }; /* Patrol Scrub Commands */ enum acpi_rasf_patrol_scrub_commands { ACPI_RASF_GET_PATROL_PARAMETERS = 1, ACPI_RASF_START_PATROL_SCRUBBER = 2, ACPI_RASF_STOP_PATROL_SCRUBBER = 3 }; /* Channel Command flags */ #define ACPI_RASF_GENERATE_SCI (1<<15) /* Status values */ enum acpi_rasf_status { ACPI_RASF_SUCCESS = 0, ACPI_RASF_NOT_VALID = 1, ACPI_RASF_NOT_SUPPORTED = 2, ACPI_RASF_BUSY = 3, ACPI_RASF_FAILED = 4, ACPI_RASF_ABORTED = 5, ACPI_RASF_INVALID_DATA = 6 }; /* Status flags */ #define ACPI_RASF_COMMAND_COMPLETE (1) #define ACPI_RASF_SCI_DOORBELL (1<<1) #define ACPI_RASF_ERROR (1<<2) #define ACPI_RASF_STATUS (0x1F<<3) /******************************************************************************* * * RGRT - Regulatory Graphics Resource Table * Version 1 * * Conforms to "ACPI RGRT" available at: * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/ * ******************************************************************************/ struct acpi_table_rgrt { struct acpi_table_header header; /* Common ACPI table header */ u16 version; u8 image_type; u8 reserved; u8 image[]; }; /* image_type values */ enum acpi_rgrt_image_type { ACPI_RGRT_TYPE_RESERVED0 = 0, ACPI_RGRT_IMAGE_TYPE_PNG = 1, ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /******************************************************************************* * * RHCT - RISC-V Hart Capabilities Table * Version 1 * ******************************************************************************/ struct acpi_table_rhct { struct acpi_table_header header; /* Common ACPI table header */ u32 flags; /* RHCT flags */ u64 time_base_freq; u32 node_count; u32 node_offset; }; /* RHCT Flags */ #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1) /* * RHCT subtables */ struct acpi_rhct_node_header { u16 type; u16 length; u16 revision; }; /* Values for RHCT subtable Type above */ enum acpi_rhct_node_type { ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000, ACPI_RHCT_NODE_TYPE_CMO = 0x0001, ACPI_RHCT_NODE_TYPE_MMU = 0x0002, ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003, ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF, }; /* * RHCT node specific subtables */ /* ISA string node structure */ struct acpi_rhct_isa_string { u16 isa_length; char isa[]; }; struct acpi_rhct_cmo_node { u8 reserved; /* Must be zero */ u8 cbom_size; /* CBOM size in powerof 2 */ u8 cbop_size; /* CBOP size in powerof 2 */ u8 cboz_size; /* CBOZ size in powerof 2 */ }; struct acpi_rhct_mmu_node { u8 reserved; /* Must be zero */ u8 mmu_type; /* Virtual Address Scheme */ }; enum acpi_rhct_mmu_type { ACPI_RHCT_MMU_TYPE_SV39 = 0, ACPI_RHCT_MMU_TYPE_SV48 = 1, ACPI_RHCT_MMU_TYPE_SV57 = 2 }; /* Hart Info node structure */ struct acpi_rhct_hart_info { u16 num_offsets; u32 uid; /* ACPI processor UID */ }; /******************************************************************************* * * SBST - Smart Battery Specification Table * Version 1 * ******************************************************************************/ struct acpi_table_sbst { struct acpi_table_header header; /* Common ACPI table header */ u32 warning_level; u32 low_level; u32 critical_level; }; /******************************************************************************* * * SDEI - Software Delegated Exception Interface Descriptor Table * * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, * May 8th, 2017. Copyright 2017 ARM Ltd. * ******************************************************************************/ struct acpi_table_sdei { struct acpi_table_header header; /* Common ACPI table header */ }; /******************************************************************************* * * SDEV - Secure Devices Table (ACPI 6.2) * Version 1 * ******************************************************************************/ struct acpi_table_sdev { struct acpi_table_header header; /* Common ACPI table header */ }; struct acpi_sdev_header { u8 type; u8 flags; u16 length; }; /* Values for subtable type above */ enum acpi_sdev_type { ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /* Values for flags above */ #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) /* * SDEV subtables */ /* 0: Namespace Device Based Secure Device Structure */ struct acpi_sdev_namespace { struct acpi_sdev_header header; u16 device_id_offset; u16 device_id_length; u16 vendor_data_offset; u16 vendor_data_length; }; struct acpi_sdev_secure_component { u16 secure_component_offset; u16 secure_component_length; }; /* * SDEV sub-subtables ("Components") for above */ struct acpi_sdev_component { struct acpi_sdev_header header; }; /* Values for sub-subtable type above */ enum acpi_sac_type { ACPI_SDEV_TYPE_ID_COMPONENT = 0, ACPI_SDEV_TYPE_MEM_COMPONENT = 1 }; struct acpi_sdev_id_component { struct acpi_sdev_header header; u16 hardware_id_offset; u16 hardware_id_length; u16 subsystem_id_offset; u16 subsystem_id_length; u16 hardware_revision; u8 hardware_rev_present; u8 class_code_present; u8 pci_base_class; u8 pci_sub_class; u8 pci_programming_xface; }; struct acpi_sdev_mem_component { struct acpi_sdev_header header; u32 reserved; u64 memory_base_address; u64 memory_length; }; /* 1: PCIe Endpoint Device Based Device Structure */ struct acpi_sdev_pcie { struct acpi_sdev_header header; u16 segment; u16 start_bus; u16 path_offset; u16 path_length; u16 vendor_data_offset; u16 vendor_data_length; }; /* 1a: PCIe Endpoint path entry */ struct acpi_sdev_pcie_path { u8 device; u8 function; }; /******************************************************************************* * * SVKL - Storage Volume Key Location Table (ACPI 6.4) * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". * Version 1 * ******************************************************************************/ struct acpi_table_svkl { struct acpi_table_header header; /* Common ACPI table header */ u32 count; }; struct acpi_svkl_key { u16 type; u16 format; u32 size; u64 address; }; enum acpi_svkl_type { ACPI_SVKL_TYPE_MAIN_STORAGE = 0, ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ }; enum acpi_svkl_format { ACPI_SVKL_FORMAT_RAW_BINARY = 0, ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ }; /******************************************************************************* * * TDEL - TD-Event Log * From: "Guest-Host-Communication Interface (GHCI) for Intel * Trust Domain Extensions (Intel TDX)". * September 2020 * ******************************************************************************/ struct acpi_table_tdel { struct acpi_table_header header; /* Common ACPI table header */ u32 reserved; u64 log_area_minimum_length; u64 log_area_start_address; }; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL2_H__ */ PKk] video.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ACPI_VIDEO_H #define __ACPI_VIDEO_H #include /* for ENODEV */ #include /* for bool */ struct acpi_video_brightness_flags { u8 _BCL_no_ac_battery_levels:1; /* no AC/Battery levels in _BCL */ u8 _BCL_reversed:1; /* _BCL package is in a reversed order */ u8 _BQC_use_index:1; /* _BQC returns an index value */ }; struct acpi_video_device_brightness { int curr; int count; int *levels; struct acpi_video_brightness_flags flags; }; struct acpi_device; #define ACPI_VIDEO_CLASS "video" #define ACPI_VIDEO_DISPLAY_CRT 1 #define ACPI_VIDEO_DISPLAY_TV 2 #define ACPI_VIDEO_DISPLAY_DVI 3 #define ACPI_VIDEO_DISPLAY_LCD 4 #define ACPI_VIDEO_DISPLAY_LEGACY_MONITOR 0x0100 #define ACPI_VIDEO_DISPLAY_LEGACY_PANEL 0x0110 #define ACPI_VIDEO_DISPLAY_LEGACY_TV 0x0200 #define ACPI_VIDEO_NOTIFY_SWITCH 0x80 #define ACPI_VIDEO_NOTIFY_PROBE 0x81 #define ACPI_VIDEO_NOTIFY_CYCLE 0x82 #define ACPI_VIDEO_NOTIFY_NEXT_OUTPUT 0x83 #define ACPI_VIDEO_NOTIFY_PREV_OUTPUT 0x84 #define ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS 0x85 #define ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS 0x86 #define ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS 0x87 #define ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS 0x88 #define ACPI_VIDEO_NOTIFY_DISPLAY_OFF 0x89 enum acpi_backlight_type { acpi_backlight_undef = -1, acpi_backlight_none = 0, acpi_backlight_video, acpi_backlight_vendor, acpi_backlight_native, acpi_backlight_nvidia_wmi_ec, acpi_backlight_apple_gmux, acpi_backlight_dell_uart, }; #if IS_ENABLED(CONFIG_ACPI_VIDEO) extern int acpi_video_register(void); extern void acpi_video_unregister(void); extern void acpi_video_register_backlight(void); extern int acpi_video_get_edid(struct acpi_device *device, int type, int device_id, void **edid); /* * Note: The value returned by acpi_video_handles_brightness_key_presses() * may change over time and should not be cached. */ extern bool acpi_video_handles_brightness_key_presses(void); extern int acpi_video_get_levels(struct acpi_device *device, struct acpi_video_device_brightness **dev_br, int *pmax_level); extern enum acpi_backlight_type __acpi_video_get_backlight_type(bool native, bool *auto_detect); static inline enum acpi_backlight_type acpi_video_get_backlight_type(void) { return __acpi_video_get_backlight_type(false, NULL); } /* * This function MUST only be called by GPU drivers to check if the driver * should register a backlight class device. This function not only checks * if a GPU native backlight device should be registered it *also* tells * the ACPI video-detect code that native GPU backlight control is available. * Therefor calling this from any place other then the GPU driver is wrong! * To check if GPU native backlight control is used in other places instead use: * if (acpi_video_get_backlight_type() == acpi_backlight_native) { ... } */ static inline bool acpi_video_backlight_use_native(void) { return __acpi_video_get_backlight_type(true, NULL) == acpi_backlight_native; } #else static inline int acpi_video_register(void) { return -ENODEV; } static inline void acpi_video_unregister(void) { return; } static inline void acpi_video_register_backlight(void) { return; } static inline int acpi_video_get_edid(struct acpi_device *device, int type, int device_id, void **edid) { return -ENODEV; } static inline enum acpi_backlight_type acpi_video_get_backlight_type(void) { return acpi_backlight_vendor; } static inline bool acpi_video_backlight_use_native(void) { return true; } static inline bool acpi_video_handles_brightness_key_presses(void) { return false; } static inline int acpi_video_get_levels(struct acpi_device *device, struct acpi_video_device_brightness **dev_br, int *pmax_level) { return -ENODEV; } #endif #endif PKk]Yܜ acpi_drivers.hnu[/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * acpi_drivers.h ($Revision: 31 $) * * Copyright (C) 2001, 2002 Andy Grover * Copyright (C) 2001, 2002 Paul Diefenbaugh */ #ifndef __ACPI_DRIVERS_H__ #define __ACPI_DRIVERS_H__ #define ACPI_MAX_STRING 80 /* * _HID definitions * HIDs must conform to ACPI spec(6.1.4) * Linux specific HIDs do not apply to this and begin with LNX: */ #define ACPI_POWER_HID "LNXPOWER" #define ACPI_PROCESSOR_OBJECT_HID "LNXCPU" #define ACPI_SYSTEM_HID "LNXSYSTM" #define ACPI_THERMAL_HID "LNXTHERM" #define ACPI_BUTTON_HID_POWERF "LNXPWRBN" #define ACPI_BUTTON_HID_SLEEPF "LNXSLPBN" #define ACPI_VIDEO_HID "LNXVIDEO" #define ACPI_BAY_HID "LNXIOBAY" #define ACPI_DOCK_HID "LNXDOCK" #define ACPI_ECDT_HID "LNXEC" /* SMBUS HID definition as supported by Microsoft Windows */ #define ACPI_SMBUS_MS_HID "SMB0001" /* Quirk for broken IBM BIOSes */ #define ACPI_SMBUS_IBM_HID "SMBUSIBM" /* * For fixed hardware buttons, we fabricate acpi_devices with HID * ACPI_BUTTON_HID_POWERF or ACPI_BUTTON_HID_SLEEPF. Fixed hardware * signals only an event; it doesn't supply a notification value. * To allow drivers to treat notifications from fixed hardware the * same as those from real devices, we turn the events into this * notification value. */ #define ACPI_FIXED_HARDWARE_EVENT 0x100 /* -------------------------------------------------------------------------- PCI -------------------------------------------------------------------------- */ /* ACPI PCI Interrupt Link */ int acpi_irq_penalty_init(void); int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *triggering, int *polarity, char **name); int acpi_pci_link_free_irq(acpi_handle handle); /* ACPI PCI Device Binding */ struct pci_bus; #ifdef CONFIG_PCI struct pci_dev *acpi_get_pci_dev(acpi_handle); #else static inline struct pci_dev *acpi_get_pci_dev(acpi_handle handle) { return NULL; } #endif /* Arch-defined function to add a bus to the system */ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root); #ifdef CONFIG_X86 void pci_acpi_crs_quirks(void); #else static inline void pci_acpi_crs_quirks(void) { } #endif /*-------------------------------------------------------------------------- Dock Station -------------------------------------------------------------------------- */ #ifdef CONFIG_ACPI_DOCK extern int is_dock_device(struct acpi_device *adev); #else static inline int is_dock_device(struct acpi_device *adev) { return 0; } #endif /* CONFIG_ACPI_DOCK */ #endif /*__ACPI_DRIVERS_H__*/ PKk]M acconfig.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acconfig.h - Global configuration constants * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef _ACCONFIG_H #define _ACCONFIG_H /****************************************************************************** * * Configuration options * *****************************************************************************/ /* * ACPI_DEBUG_OUTPUT - This switch enables all the debug facilities of the * ACPI subsystem. This includes the DEBUG_PRINT output * statements. When disabled, all DEBUG_PRINT * statements are compiled out. * * ACPI_APPLICATION - Use this switch if the subsystem is going to be run * at the application level. * */ /* * OS name, used for the _OS object. The _OS object is essentially obsolete, * but there is a large base of ASL/AML code in existing machines that check * for the string below. The use of this string usually guarantees that * the ASL will execute down the most tested code path. Also, there is some * code that will not execute the _OSI method unless _OS matches the string * below. Therefore, change this string at your own risk. */ #define ACPI_OS_NAME "Microsoft Windows NT" /* Maximum objects in the various object caches */ #define ACPI_MAX_STATE_CACHE_DEPTH 96 /* State objects */ #define ACPI_MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96 /* Parse tree objects */ #define ACPI_MAX_OBJECT_CACHE_DEPTH 96 /* Interpreter operand objects */ #define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96 /* Namespace objects */ #define ACPI_MAX_COMMENT_CACHE_DEPTH 96 /* Comments for the -ca option */ /* * Should the subsystem abort the loading of an ACPI table if the * table checksum is incorrect? */ #ifndef ACPI_CHECKSUM_ABORT #define ACPI_CHECKSUM_ABORT FALSE #endif /* * Generate a version of ACPICA that only supports "reduced hardware" * platforms (as defined in ACPI 5.0). Set to TRUE to generate a specialized * version of ACPICA that ONLY supports the ACPI 5.0 "reduced hardware" * model. In other words, no ACPI hardware is supported. * * If TRUE, this means no support for the following: * PM Event and Control registers * SCI interrupt (and handler) * Fixed Events * General Purpose Events (GPEs) * Global Lock * ACPI PM timer * FACS table (Waking vectors and Global Lock) */ #ifndef ACPI_REDUCED_HARDWARE #define ACPI_REDUCED_HARDWARE FALSE #endif /****************************************************************************** * * Subsystem Constants * *****************************************************************************/ /* Version of ACPI supported */ #define ACPI_CA_SUPPORT_LEVEL 5 /* Maximum count for a semaphore object */ #define ACPI_MAX_SEMAPHORE_COUNT 256 /* Maximum object reference count (detects object deletion issues) */ #define ACPI_MAX_REFERENCE_COUNT 0x4000 /* Default page size for use in mapping memory for operation regions */ #define ACPI_DEFAULT_PAGE_SIZE 4096 /* Must be power of 2 */ /* owner_id tracking. 128 entries allows for 4095 owner_ids */ #define ACPI_NUM_OWNERID_MASKS 128 /* Size of the root table array is increased by this increment */ #define ACPI_ROOT_TABLE_SIZE_INCREMENT 4 /* Maximum sleep allowed via Sleep() operator */ #define ACPI_MAX_SLEEP 2000 /* 2000 millisec == two seconds */ /* Address Range lists are per-space_id (Memory and I/O only) */ #define ACPI_ADDRESS_RANGE_MAX 2 /* Maximum time (default 30s) of While() loops before abort */ #define ACPI_MAX_LOOP_TIMEOUT 30 /****************************************************************************** * * ACPI Specification constants (Do not change unless the specification changes) * *****************************************************************************/ /* Method info (in WALK_STATE), containing local variables and arguments */ #define ACPI_METHOD_NUM_LOCALS 8 #define ACPI_METHOD_MAX_LOCAL 7 #define ACPI_METHOD_NUM_ARGS 7 #define ACPI_METHOD_MAX_ARG 6 /* * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG */ #define ACPI_OBJ_NUM_OPERANDS 8 #define ACPI_OBJ_MAX_OPERAND 7 /* Number of elements in the Result Stack frame, can be an arbitrary value */ #define ACPI_RESULTS_FRAME_OBJ_NUM 8 /* * Maximal number of elements the Result Stack can contain, * it may be an arbitrary value not exceeding the types of * result_size and result_count (now u8). */ #define ACPI_RESULTS_OBJ_NUM_MAX 255 /* Constants used in searching for the RSDP in low memory */ #define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */ #define ACPI_EBDA_PTR_LENGTH 2 #define ACPI_EBDA_WINDOW_SIZE 1024 #define ACPI_HI_RSDP_WINDOW_BASE 0x000E0000 /* Physical Address */ #define ACPI_HI_RSDP_WINDOW_SIZE 0x00020000 #define ACPI_RSDP_SCAN_STEP 16 /* Operation regions */ #define ACPI_USER_REGION_BEGIN 0x80 /* Maximum space_ids for Operation Regions */ #define ACPI_MAX_ADDRESS_SPACE 255 #define ACPI_NUM_DEFAULT_SPACES 4 /* Array sizes. Used for range checking also */ #define ACPI_MAX_MATCH_OPCODE 5 /* RSDP checksums */ #define ACPI_RSDP_CHECKSUM_LENGTH 20 #define ACPI_RSDP_XCHECKSUM_LENGTH 36 /* * SMBus, GSBus and IPMI buffer sizes. All have a 2-byte header, * containing both Status and Length. */ #define ACPI_SERIAL_HEADER_SIZE 2 /* Common for below. Status and Length fields */ #define ACPI_SMBUS_DATA_SIZE 32 #define ACPI_SMBUS_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_SMBUS_DATA_SIZE #define ACPI_IPMI_DATA_SIZE 64 #define ACPI_IPMI_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_IPMI_DATA_SIZE #define ACPI_MAX_GSBUS_DATA_SIZE 255 #define ACPI_MAX_GSBUS_BUFFER_SIZE ACPI_SERIAL_HEADER_SIZE + ACPI_MAX_GSBUS_DATA_SIZE #define ACPI_PRM_INPUT_BUFFER_SIZE 26 #define ACPI_FFH_INPUT_BUFFER_SIZE 256 /* _sx_d and _sx_w control methods */ #define ACPI_NUM_sx_d_METHODS 4 #define ACPI_NUM_sx_w_METHODS 5 /****************************************************************************** * * Miscellaneous constants * *****************************************************************************/ /* UUID constants */ #define UUID_BUFFER_LENGTH 16 /* Length of UUID in memory */ #define UUID_STRING_LENGTH 36 /* Total length of a UUID string */ /* Positions for required hyphens (dashes) in UUID strings */ #define UUID_HYPHEN1_OFFSET 8 #define UUID_HYPHEN2_OFFSET 13 #define UUID_HYPHEN3_OFFSET 18 #define UUID_HYPHEN4_OFFSET 23 /****************************************************************************** * * ACPI AML Debugger * *****************************************************************************/ #define ACPI_DEBUGGER_MAX_ARGS ACPI_METHOD_NUM_ARGS + 4 /* Max command line arguments */ #define ACPI_DB_LINE_BUFFER_SIZE 512 #define ACPI_DEBUGGER_COMMAND_PROMPT '-' #define ACPI_DEBUGGER_EXECUTE_PROMPT '%' #endif /* _ACCONFIG_H */ PKk]F߳NN acrestyp.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acrestyp.h - Defines, types, and structures for resource descriptors * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACRESTYP_H__ #define __ACRESTYP_H__ /* * Definitions for Resource Attributes */ typedef u16 acpi_rs_length; /* Resource Length field is fixed at 16 bits */ typedef u32 acpi_rsdesc_size; /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */ /* * Memory Attributes */ #define ACPI_READ_ONLY_MEMORY (u8) 0x00 #define ACPI_READ_WRITE_MEMORY (u8) 0x01 #define ACPI_NON_CACHEABLE_MEMORY (u8) 0x00 #define ACPI_CACHABLE_MEMORY (u8) 0x01 #define ACPI_WRITE_COMBINING_MEMORY (u8) 0x02 #define ACPI_PREFETCHABLE_MEMORY (u8) 0x03 /*! [Begin] no source code translation */ /* * IO Attributes * The ISA IO ranges are: n000-n0FFh, n400-n4FFh, n800-n8FFh, nC00-nCFFh. * The non-ISA IO ranges are: n100-n3FFh, n500-n7FFh, n900-nBFFh, nCD0-nFFFh. */ /*! [End] no source code translation !*/ #define ACPI_NON_ISA_ONLY_RANGES (u8) 0x01 #define ACPI_ISA_ONLY_RANGES (u8) 0x02 #define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES) /* Type of translation - 1=Sparse, 0=Dense */ #define ACPI_SPARSE_TRANSLATION (u8) 0x01 /* * IO Port Descriptor Decode */ #define ACPI_DECODE_10 (u8) 0x00 /* 10-bit IO address decode */ #define ACPI_DECODE_16 (u8) 0x01 /* 16-bit IO address decode */ /* * Interrupt attributes - used in multiple descriptors */ /* Triggering */ #define ACPI_LEVEL_SENSITIVE (u8) 0x00 #define ACPI_EDGE_SENSITIVE (u8) 0x01 /* Polarity */ #define ACPI_ACTIVE_HIGH (u8) 0x00 #define ACPI_ACTIVE_LOW (u8) 0x01 #define ACPI_ACTIVE_BOTH (u8) 0x02 /* Sharing */ #define ACPI_EXCLUSIVE (u8) 0x00 #define ACPI_SHARED (u8) 0x01 /* Wake */ #define ACPI_NOT_WAKE_CAPABLE (u8) 0x00 #define ACPI_WAKE_CAPABLE (u8) 0x01 /* * DMA Attributes */ #define ACPI_COMPATIBILITY (u8) 0x00 #define ACPI_TYPE_A (u8) 0x01 #define ACPI_TYPE_B (u8) 0x02 #define ACPI_TYPE_F (u8) 0x03 #define ACPI_NOT_BUS_MASTER (u8) 0x00 #define ACPI_BUS_MASTER (u8) 0x01 #define ACPI_TRANSFER_8 (u8) 0x00 #define ACPI_TRANSFER_8_16 (u8) 0x01 #define ACPI_TRANSFER_16 (u8) 0x02 /* * Start Dependent Functions Priority definitions */ #define ACPI_GOOD_CONFIGURATION (u8) 0x00 #define ACPI_ACCEPTABLE_CONFIGURATION (u8) 0x01 #define ACPI_SUB_OPTIMAL_CONFIGURATION (u8) 0x02 /* * 16, 32 and 64-bit Address Descriptor resource types */ #define ACPI_MEMORY_RANGE (u8) 0x00 #define ACPI_IO_RANGE (u8) 0x01 #define ACPI_BUS_NUMBER_RANGE (u8) 0x02 #define ACPI_ADDRESS_NOT_FIXED (u8) 0x00 #define ACPI_ADDRESS_FIXED (u8) 0x01 #define ACPI_POS_DECODE (u8) 0x00 #define ACPI_SUB_DECODE (u8) 0x01 /* Producer/Consumer */ #define ACPI_PRODUCER (u8) 0x00 #define ACPI_CONSUMER (u8) 0x01 /* * If possible, pack the following structures to byte alignment */ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED #pragma pack(1) #endif /* UUID data structures for use in vendor-defined resource descriptors */ struct acpi_uuid { u8 data[ACPI_UUID_LENGTH]; }; struct acpi_vendor_uuid { u8 subtype; u8 data[ACPI_UUID_LENGTH]; }; /* * Structures used to describe device resources */ struct acpi_resource_irq { u8 descriptor_length; u8 triggering; u8 polarity; u8 shareable; u8 wake_capable; u8 interrupt_count; union { u8 interrupt; ACPI_FLEX_ARRAY(u8, interrupts); }; }; struct acpi_resource_dma { u8 type; u8 bus_master; u8 transfer; u8 channel_count; union { u8 channel; ACPI_FLEX_ARRAY(u8, channels); }; }; struct acpi_resource_start_dependent { u8 descriptor_length; u8 compatibility_priority; u8 performance_robustness; }; /* * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not * needed because it has no fields */ struct acpi_resource_io { u8 io_decode; u8 alignment; u8 address_length; u16 minimum; u16 maximum; }; struct acpi_resource_fixed_io { u16 address; u8 address_length; }; struct acpi_resource_fixed_dma { u16 request_lines; u16 channels; u8 width; }; /* Values for Width field above */ #define ACPI_DMA_WIDTH8 0 #define ACPI_DMA_WIDTH16 1 #define ACPI_DMA_WIDTH32 2 #define ACPI_DMA_WIDTH64 3 #define ACPI_DMA_WIDTH128 4 #define ACPI_DMA_WIDTH256 5 struct acpi_resource_vendor { u16 byte_length; u8 byte_data[]; }; /* Vendor resource with UUID info (introduced in ACPI 3.0) */ struct acpi_resource_vendor_typed { u16 byte_length; u8 uuid_subtype; u8 uuid[ACPI_UUID_LENGTH]; u8 byte_data[]; }; struct acpi_resource_end_tag { u8 checksum; }; struct acpi_resource_memory24 { u8 write_protect; u16 minimum; u16 maximum; u16 alignment; u16 address_length; }; struct acpi_resource_memory32 { u8 write_protect; u32 minimum; u32 maximum; u32 alignment; u32 address_length; }; struct acpi_resource_fixed_memory32 { u8 write_protect; u32 address; u32 address_length; }; struct acpi_memory_attribute { u8 write_protect; u8 caching; u8 range_type; u8 translation; }; struct acpi_io_attribute { u8 range_type; u8 translation; u8 translation_type; u8 reserved1; }; union acpi_resource_attribute { struct acpi_memory_attribute mem; struct acpi_io_attribute io; /* Used for the *word_space macros */ u8 type_specific; }; struct acpi_resource_label { u16 string_length; char *string_ptr; }; struct acpi_resource_source { u8 index; u16 string_length; char *string_ptr; }; /* Fields common to all address descriptors, 16/32/64 bit */ #define ACPI_RESOURCE_ADDRESS_COMMON \ u8 resource_type; \ u8 producer_consumer; \ u8 decode; \ u8 min_address_fixed; \ u8 max_address_fixed; \ union acpi_resource_attribute info; struct acpi_address16_attribute { u16 granularity; u16 minimum; u16 maximum; u16 translation_offset; u16 address_length; }; struct acpi_address32_attribute { u32 granularity; u32 minimum; u32 maximum; u32 translation_offset; u32 address_length; }; struct acpi_address64_attribute { u64 granularity; u64 minimum; u64 maximum; u64 translation_offset; u64 address_length; }; struct acpi_resource_address { ACPI_RESOURCE_ADDRESS_COMMON}; struct acpi_resource_address16 { ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address16_attribute address; struct acpi_resource_source resource_source; }; struct acpi_resource_address32 { ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address32_attribute address; struct acpi_resource_source resource_source; }; struct acpi_resource_address64 { ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address64_attribute address; struct acpi_resource_source resource_source; }; struct acpi_resource_extended_address64 { ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID; struct acpi_address64_attribute address; u64 type_specific; }; struct acpi_resource_extended_irq { u8 producer_consumer; u8 triggering; u8 polarity; u8 shareable; u8 wake_capable; u8 interrupt_count; struct acpi_resource_source resource_source; union { u32 interrupt; ACPI_FLEX_ARRAY(u32, interrupts); }; }; struct acpi_resource_generic_register { u8 space_id; u8 bit_width; u8 bit_offset; u8 access_size; u64 address; }; struct acpi_resource_gpio { u8 revision_id; u8 connection_type; u8 producer_consumer; /* For values, see Producer/Consumer above */ u8 pin_config; u8 shareable; /* For values, see Interrupt Attributes above */ u8 wake_capable; /* For values, see Interrupt Attributes above */ u8 io_restriction; u8 triggering; /* For values, see Interrupt Attributes above */ u8 polarity; /* For values, see Interrupt Attributes above */ u16 drive_strength; u16 debounce_timeout; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; }; /* Values for GPIO connection_type field above */ #define ACPI_RESOURCE_GPIO_TYPE_INT 0 #define ACPI_RESOURCE_GPIO_TYPE_IO 1 /* Values for pin_config field above */ #define ACPI_PIN_CONFIG_DEFAULT 0 #define ACPI_PIN_CONFIG_PULLUP 1 #define ACPI_PIN_CONFIG_PULLDOWN 2 #define ACPI_PIN_CONFIG_NOPULL 3 /* Values for io_restriction field above */ #define ACPI_IO_RESTRICT_NONE 0 #define ACPI_IO_RESTRICT_INPUT 1 #define ACPI_IO_RESTRICT_OUTPUT 2 #define ACPI_IO_RESTRICT_NONE_PRESERVE 3 /* Common structure for I2C, SPI, UART, CSI2 serial descriptors */ #define ACPI_RESOURCE_SERIAL_COMMON \ u8 revision_id; \ u8 type; \ u8 producer_consumer; /* For values, see Producer/Consumer above */\ u8 slave_mode; \ u8 connection_sharing; \ u8 type_revision_id; \ u16 type_data_length; \ u16 vendor_length; \ struct acpi_resource_source resource_source; \ u8 *vendor_data; struct acpi_resource_common_serialbus { ACPI_RESOURCE_SERIAL_COMMON}; /* Values for the Type field above */ #define ACPI_RESOURCE_SERIAL_TYPE_I2C 1 #define ACPI_RESOURCE_SERIAL_TYPE_SPI 2 #define ACPI_RESOURCE_SERIAL_TYPE_UART 3 #define ACPI_RESOURCE_SERIAL_TYPE_CSI2 4 /* Values for slave_mode field above */ #define ACPI_CONTROLLER_INITIATED 0 #define ACPI_DEVICE_INITIATED 1 struct acpi_resource_i2c_serialbus { ACPI_RESOURCE_SERIAL_COMMON u8 access_mode; u16 slave_address; u32 connection_speed; }; /* Values for access_mode field above */ #define ACPI_I2C_7BIT_MODE 0 #define ACPI_I2C_10BIT_MODE 1 struct acpi_resource_spi_serialbus { ACPI_RESOURCE_SERIAL_COMMON u8 wire_mode; u8 device_polarity; u8 data_bit_length; u8 clock_phase; u8 clock_polarity; u16 device_selection; u32 connection_speed; }; /* Values for wire_mode field above */ #define ACPI_SPI_4WIRE_MODE 0 #define ACPI_SPI_3WIRE_MODE 1 /* Values for device_polarity field above */ #define ACPI_SPI_ACTIVE_LOW 0 #define ACPI_SPI_ACTIVE_HIGH 1 /* Values for clock_phase field above */ #define ACPI_SPI_FIRST_PHASE 0 #define ACPI_SPI_SECOND_PHASE 1 /* Values for clock_polarity field above */ #define ACPI_SPI_START_LOW 0 #define ACPI_SPI_START_HIGH 1 struct acpi_resource_uart_serialbus { ACPI_RESOURCE_SERIAL_COMMON u8 endian; u8 data_bits; u8 stop_bits; u8 flow_control; u8 parity; u8 lines_enabled; u16 rx_fifo_size; u16 tx_fifo_size; u32 default_baud_rate; }; /* Values for Endian field above */ #define ACPI_UART_LITTLE_ENDIAN 0 #define ACPI_UART_BIG_ENDIAN 1 /* Values for data_bits field above */ #define ACPI_UART_5_DATA_BITS 0 #define ACPI_UART_6_DATA_BITS 1 #define ACPI_UART_7_DATA_BITS 2 #define ACPI_UART_8_DATA_BITS 3 #define ACPI_UART_9_DATA_BITS 4 /* Values for stop_bits field above */ #define ACPI_UART_NO_STOP_BITS 0 #define ACPI_UART_1_STOP_BIT 1 #define ACPI_UART_1P5_STOP_BITS 2 #define ACPI_UART_2_STOP_BITS 3 /* Values for flow_control field above */ #define ACPI_UART_FLOW_CONTROL_NONE 0 #define ACPI_UART_FLOW_CONTROL_HW 1 #define ACPI_UART_FLOW_CONTROL_XON_XOFF 2 /* Values for Parity field above */ #define ACPI_UART_PARITY_NONE 0 #define ACPI_UART_PARITY_EVEN 1 #define ACPI_UART_PARITY_ODD 2 #define ACPI_UART_PARITY_MARK 3 #define ACPI_UART_PARITY_SPACE 4 /* Values for lines_enabled bitfield above */ #define ACPI_UART_CARRIER_DETECT (1<<2) #define ACPI_UART_RING_INDICATOR (1<<3) #define ACPI_UART_DATA_SET_READY (1<<4) #define ACPI_UART_DATA_TERMINAL_READY (1<<5) #define ACPI_UART_CLEAR_TO_SEND (1<<6) #define ACPI_UART_REQUEST_TO_SEND (1<<7) struct acpi_resource_csi2_serialbus { ACPI_RESOURCE_SERIAL_COMMON u8 local_port_instance; u8 phy_type; }; struct acpi_resource_pin_function { u8 revision_id; u8 pin_config; u8 shareable; /* For values, see Interrupt Attributes above */ u16 function_number; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; }; struct acpi_resource_pin_config { u8 revision_id; u8 producer_consumer; /* For values, see Producer/Consumer above */ u8 shareable; /* For values, see Interrupt Attributes above */ u8 pin_config_type; u32 pin_config_value; u16 pin_table_length; u16 vendor_length; struct acpi_resource_source resource_source; u16 *pin_table; u8 *vendor_data; }; struct acpi_resource_clock_input { u8 revision_id; u8 mode; u8 scale; u16 frequency_divisor; u32 frequency_numerator; struct acpi_resource_source resource_source; }; /* Values for pin_config_type field above */ #define ACPI_PIN_CONFIG_DEFAULT 0 #define ACPI_PIN_CONFIG_BIAS_PULL_UP 1 #define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2 #define ACPI_PIN_CONFIG_BIAS_DEFAULT 3 #define ACPI_PIN_CONFIG_BIAS_DISABLE 4 #define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5 #define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6 #define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7 #define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8 #define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9 #define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10 #define ACPI_PIN_CONFIG_SLEW_RATE 11 #define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12 #define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13 struct acpi_resource_pin_group { u8 revision_id; u8 producer_consumer; /* For values, see Producer/Consumer above */ u16 pin_table_length; u16 vendor_length; u16 *pin_table; struct acpi_resource_label resource_label; u8 *vendor_data; }; struct acpi_resource_pin_group_function { u8 revision_id; u8 producer_consumer; /* For values, see Producer/Consumer above */ u8 shareable; /* For values, see Interrupt Attributes above */ u16 function_number; u16 vendor_length; struct acpi_resource_source resource_source; struct acpi_resource_label resource_source_label; u8 *vendor_data; }; struct acpi_resource_pin_group_config { u8 revision_id; u8 producer_consumer; /* For values, see Producer/Consumer above */ u8 shareable; /* For values, see Interrupt Attributes above */ u8 pin_config_type; /* For values, see pin_config_type above */ u32 pin_config_value; u16 vendor_length; struct acpi_resource_source resource_source; struct acpi_resource_label resource_source_label; u8 *vendor_data; }; /* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0 #define ACPI_RESOURCE_TYPE_DMA 1 #define ACPI_RESOURCE_TYPE_START_DEPENDENT 2 #define ACPI_RESOURCE_TYPE_END_DEPENDENT 3 #define ACPI_RESOURCE_TYPE_IO 4 #define ACPI_RESOURCE_TYPE_FIXED_IO 5 #define ACPI_RESOURCE_TYPE_VENDOR 6 #define ACPI_RESOURCE_TYPE_END_TAG 7 #define ACPI_RESOURCE_TYPE_MEMORY24 8 #define ACPI_RESOURCE_TYPE_MEMORY32 9 #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32 10 #define ACPI_RESOURCE_TYPE_ADDRESS16 11 #define ACPI_RESOURCE_TYPE_ADDRESS32 12 #define ACPI_RESOURCE_TYPE_ADDRESS64 13 #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 14 /* ACPI 3.0 */ #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ 15 #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER 16 #define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_CONFIG 21 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP 22 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24 /* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_CLOCK_INPUT 25 /* ACPI 6.5 */ #define ACPI_RESOURCE_TYPE_MAX 25 /* Master union for resource descriptors */ union acpi_resource_data { struct acpi_resource_irq irq; struct acpi_resource_dma dma; struct acpi_resource_start_dependent start_dpf; struct acpi_resource_io io; struct acpi_resource_fixed_io fixed_io; struct acpi_resource_fixed_dma fixed_dma; struct acpi_resource_vendor vendor; struct acpi_resource_vendor_typed vendor_typed; struct acpi_resource_end_tag end_tag; struct acpi_resource_memory24 memory24; struct acpi_resource_memory32 memory32; struct acpi_resource_fixed_memory32 fixed_memory32; struct acpi_resource_address16 address16; struct acpi_resource_address32 address32; struct acpi_resource_address64 address64; struct acpi_resource_extended_address64 ext_address64; struct acpi_resource_extended_irq extended_irq; struct acpi_resource_generic_register generic_reg; struct acpi_resource_gpio gpio; struct acpi_resource_i2c_serialbus i2c_serial_bus; struct acpi_resource_spi_serialbus spi_serial_bus; struct acpi_resource_uart_serialbus uart_serial_bus; struct acpi_resource_csi2_serialbus csi2_serial_bus; struct acpi_resource_common_serialbus common_serial_bus; struct acpi_resource_pin_function pin_function; struct acpi_resource_pin_config pin_config; struct acpi_resource_pin_group pin_group; struct acpi_resource_pin_group_function pin_group_function; struct acpi_resource_pin_group_config pin_group_config; struct acpi_resource_clock_input clock_input; /* Common fields */ struct acpi_resource_address address; /* Common 16/32/64 address fields */ }; /* Common resource header */ struct acpi_resource { u32 type; u32 length; union acpi_resource_data data; }; /* restore default alignment */ #pragma pack() #define ACPI_RS_SIZE_NO_DATA 8 /* Id + Length fields */ #define ACPI_RS_SIZE_MIN (u32) ACPI_ROUND_UP_TO_NATIVE_WORD (12) #define ACPI_RS_SIZE(type) (u32) (ACPI_RS_SIZE_NO_DATA + sizeof (type)) /* Macro for walking resource templates with multiple descriptors */ #define ACPI_NEXT_RESOURCE(res) \ ACPI_ADD_PTR (struct acpi_resource, (res), (res)->length) struct acpi_pci_routing_table { u32 length; u32 pin; u64 address; /* here for 64-bit alignment */ u32 source_index; union { char pad[4]; /* pad to 64 bits so sizeof() works in all cases */ ACPI_FLEX_ARRAY(char, source); }; }; #endif /* __ACRESTYP_H__ */ PKk]['yXyXactbl3.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: actbl3.h - ACPI Table Definitions * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACTBL3_H__ #define __ACTBL3_H__ /******************************************************************************* * * Additional ACPI Tables * * These tables are not consumed directly by the ACPICA subsystem, but are * included here to support device drivers and the AML disassembler. * ******************************************************************************/ /* * Values for description table header signatures for tables defined in this * file. Useful because they make it more difficult to inadvertently type in * the wrong signature. */ #define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_STAO "STAO" /* Status Override table */ #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ #define ACPI_SIG_TPM2 "TPM2" /* Trusted Platform Module 2.0 H/W interface table */ #define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ #define ACPI_SIG_VIOT "VIOT" /* Virtual I/O Translation Table */ #define ACPI_SIG_WAET "WAET" /* Windows ACPI Emulated devices Table */ #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ #define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */ #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ /* * All tables must be byte-packed to match the ACPI specification, since * the tables are provided by the system BIOS. */ #pragma pack(1) /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /******************************************************************************* * * SLIC - Software Licensing Description Table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", * November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/ /* Basic SLIC table is only the common ACPI header */ struct acpi_table_slic { struct acpi_table_header header; /* Common ACPI table header */ }; /******************************************************************************* * * SLIT - System Locality Distance Information Table * Version 1 * ******************************************************************************/ struct acpi_table_slit { struct acpi_table_header header; /* Common ACPI table header */ u64 locality_count; u8 entry[]; /* Real size = localities^2 */ }; /******************************************************************************* * * SPCR - Serial Port Console Redirection table * Version 2 * * Conforms to "Serial Port Console Redirection Table", * Version 1.03, August 10, 2015 * ******************************************************************************/ struct acpi_table_spcr { struct acpi_table_header header; /* Common ACPI table header */ u8 interface_type; /* 0=full 16550, 1=subset of 16550 */ u8 reserved[3]; struct acpi_generic_address serial_port; u8 interrupt_type; u8 pc_interrupt; u32 interrupt; u8 baud_rate; u8 parity; u8 stop_bits; u8 flow_control; u8 terminal_type; u8 reserved1; u16 pci_device_id; u16 pci_vendor_id; u8 pci_bus; u8 pci_device; u8 pci_function; u32 pci_flags; u8 pci_segment; u32 reserved2; }; /* Masks for pci_flags field above */ #define ACPI_SPCR_DO_NOT_DISABLE (1) /* Values for Interface Type: See the definition of the DBG2 table */ /******************************************************************************* * * SPMI - Server Platform Management Interface table * Version 5 * * Conforms to "Intelligent Platform Management Interface Specification * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with * June 12, 2009 markup. * ******************************************************************************/ struct acpi_table_spmi { struct acpi_table_header header; /* Common ACPI table header */ u8 interface_type; u8 reserved; /* Must be 1 */ u16 spec_revision; /* Version of IPMI */ u8 interrupt_type; u8 gpe_number; /* GPE assigned */ u8 reserved1; u8 pci_device_flag; u32 interrupt; struct acpi_generic_address ipmi_register; u8 pci_segment; u8 pci_bus; u8 pci_device; u8 pci_function; u8 reserved2; }; /* Values for interface_type above */ enum acpi_spmi_interface_types { ACPI_SPMI_NOT_USED = 0, ACPI_SPMI_KEYBOARD = 1, ACPI_SPMI_SMI = 2, ACPI_SPMI_BLOCK_TRANSFER = 3, ACPI_SPMI_SMBUS = 4, ACPI_SPMI_RESERVED = 5 /* 5 and above are reserved */ }; /******************************************************************************* * * SRAT - System Resource Affinity Table * Version 3 * ******************************************************************************/ struct acpi_table_srat { struct acpi_table_header header; /* Common ACPI table header */ u32 table_revision; /* Must be value '1' */ u64 reserved; /* Reserved, must be zero */ }; /* Values for subtable type in struct acpi_subtable_header */ enum acpi_srat_type { ACPI_SRAT_TYPE_CPU_AFFINITY = 0, ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, ACPI_SRAT_TYPE_GICC_AFFINITY = 3, ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */ ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */ ACPI_SRAT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ }; /* * SRAT Subtables, correspond to Type in struct acpi_subtable_header */ /* 0: Processor Local APIC/SAPIC Affinity */ struct acpi_srat_cpu_affinity { struct acpi_subtable_header header; u8 proximity_domain_lo; u8 apic_id; u32 flags; u8 local_sapic_eid; u8 proximity_domain_hi[3]; u32 clock_domain; }; /* Flags */ #define ACPI_SRAT_CPU_USE_AFFINITY (1) /* 00: Use affinity structure */ /* 1: Memory Affinity */ struct acpi_srat_mem_affinity { struct acpi_subtable_header header; u32 proximity_domain; u16 reserved; /* Reserved, must be zero */ u64 base_address; u64 length; u32 reserved1; u32 flags; u64 reserved2; /* Reserved, must be zero */ }; /* Flags */ #define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ #define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */ struct acpi_srat_x2apic_cpu_affinity { struct acpi_subtable_header header; u16 reserved; /* Reserved, must be zero */ u32 proximity_domain; u32 apic_id; u32 flags; u32 clock_domain; u32 reserved2; }; /* Flags for struct acpi_srat_cpu_affinity and struct acpi_srat_x2apic_cpu_affinity */ #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ /* 3: GICC Affinity (ACPI 5.1) */ struct acpi_srat_gicc_affinity { struct acpi_subtable_header header; u32 proximity_domain; u32 acpi_processor_uid; u32 flags; u32 clock_domain; }; /* Flags for struct acpi_srat_gicc_affinity */ #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */ /* 4: GCC ITS Affinity (ACPI 6.2) */ struct acpi_srat_gic_its_affinity { struct acpi_subtable_header header; u32 proximity_domain; u16 reserved; u32 its_id; }; /* * Common structure for SRAT subtable types: * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY */ #define ACPI_SRAT_DEVICE_HANDLE_SIZE 16 struct acpi_srat_generic_affinity { struct acpi_subtable_header header; u8 reserved; u8 device_handle_type; u32 proximity_domain; u8 device_handle[ACPI_SRAT_DEVICE_HANDLE_SIZE]; u32 flags; u32 reserved1; }; /* Flags for struct acpi_srat_generic_affinity */ #define ACPI_SRAT_GENERIC_AFFINITY_ENABLED (1) /* 00: Use affinity structure */ #define ACPI_SRAT_ARCHITECTURAL_TRANSACTIONS (1<<1) /* ACPI 6.4 */ /******************************************************************************* * * STAO - Status Override Table (_STA override) - ACPI 6.0 * Version 1 * * Conforms to "ACPI Specification for Status Override Table" * 6 January 2015 * ******************************************************************************/ struct acpi_table_stao { struct acpi_table_header header; /* Common ACPI table header */ u8 ignore_uart; }; /******************************************************************************* * * TCPA - Trusted Computing Platform Alliance table * Version 2 * * TCG Hardware Interface Table for TPM 1.2 Clients and Servers * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", * Version 1.2, Revision 8 * February 27, 2017 * * NOTE: There are two versions of the table with the same signature -- * the client version and the server version. The common platform_class * field is used to differentiate the two types of tables. * ******************************************************************************/ struct acpi_table_tcpa_hdr { struct acpi_table_header header; /* Common ACPI table header */ u16 platform_class; }; /* * Values for platform_class above. * This is how the client and server subtables are differentiated */ #define ACPI_TCPA_CLIENT_TABLE 0 #define ACPI_TCPA_SERVER_TABLE 1 struct acpi_table_tcpa_client { u32 minimum_log_length; /* Minimum length for the event log area */ u64 log_address; /* Address of the event log area */ }; struct acpi_table_tcpa_server { u16 reserved; u64 minimum_log_length; /* Minimum length for the event log area */ u64 log_address; /* Address of the event log area */ u16 spec_revision; u8 device_flags; u8 interrupt_flags; u8 gpe_number; u8 reserved2[3]; u32 global_interrupt; struct acpi_generic_address address; u32 reserved3; struct acpi_generic_address config_address; u8 group; u8 bus; /* PCI Bus/Segment/Function numbers */ u8 device; u8 function; }; /* Values for device_flags above */ #define ACPI_TCPA_PCI_DEVICE (1) #define ACPI_TCPA_BUS_PNP (1<<1) #define ACPI_TCPA_ADDRESS_VALID (1<<2) /* Values for interrupt_flags above */ #define ACPI_TCPA_INTERRUPT_MODE (1) #define ACPI_TCPA_INTERRUPT_POLARITY (1<<1) #define ACPI_TCPA_SCI_VIA_GPE (1<<2) #define ACPI_TCPA_GLOBAL_INTERRUPT (1<<3) /******************************************************************************* * * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table * Version 4 * * TCG Hardware Interface Table for TPM 2.0 Clients and Servers * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", * Version 1.2, Revision 8 * February 27, 2017 * ******************************************************************************/ /* Revision 3 */ struct acpi_table_tpm23 { struct acpi_table_header header; /* Common ACPI table header */ u32 reserved; u64 control_address; u32 start_method; }; /* Value for start_method above */ #define ACPI_TPM23_ACPI_START_METHOD 2 /* * Optional trailer for revision 3. If start method is 2, there is a 4 byte * reserved area of all zeros. */ struct acpi_tmp23_trailer { u32 reserved; }; /* Revision 4 */ struct acpi_table_tpm2 { struct acpi_table_header header; /* Common ACPI table header */ u16 platform_class; u16 reserved; u64 control_address; u32 start_method; /* Platform-specific data follows */ }; /* Optional trailer for revision 4 holding platform-specific data */ struct acpi_tpm2_phy { u8 start_method_specific[12]; u32 log_area_minimum_length; u64 log_area_start_address; }; /* Values for start_method above */ #define ACPI_TPM2_NOT_ALLOWED 0 #define ACPI_TPM2_RESERVED1 1 #define ACPI_TPM2_START_METHOD 2 #define ACPI_TPM2_RESERVED3 3 #define ACPI_TPM2_RESERVED4 4 #define ACPI_TPM2_RESERVED5 5 #define ACPI_TPM2_MEMORY_MAPPED 6 #define ACPI_TPM2_COMMAND_BUFFER 7 #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 #define ACPI_TPM2_RESERVED9 9 #define ACPI_TPM2_RESERVED10 10 #define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */ #define ACPI_TPM2_RESERVED 12 #define ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON 13 /* Optional trailer appears after any start_method subtables */ struct acpi_tpm2_trailer { u8 method_parameters[12]; u32 minimum_log_length; /* Minimum length for the event log area */ u64 log_address; /* Address of the event log area */ }; /* * Subtables (start_method-specific) */ /* 11: Start Method for ARM SMC (V1.2 Rev 8) */ struct acpi_tpm2_arm_smc { u32 global_interrupt; u8 interrupt_flags; u8 operation_flags; u16 reserved; u32 function_id; }; /* Values for interrupt_flags above */ #define ACPI_TPM2_INTERRUPT_SUPPORT (1) /* Values for operation_flags above */ #define ACPI_TPM2_IDLE_SUPPORT (1) /******************************************************************************* * * UEFI - UEFI Boot optimization Table * Version 1 * * Conforms to "Unified Extensible Firmware Interface Specification", * Version 2.3, May 8, 2009 * ******************************************************************************/ struct acpi_table_uefi { struct acpi_table_header header; /* Common ACPI table header */ u8 identifier[16]; /* UUID identifier */ u16 data_offset; /* Offset of remaining data in table */ }; /******************************************************************************* * * VIOT - Virtual I/O Translation Table * Version 1 * ******************************************************************************/ struct acpi_table_viot { struct acpi_table_header header; /* Common ACPI table header */ u16 node_count; u16 node_offset; u8 reserved[8]; }; /* VIOT subtable header */ struct acpi_viot_header { u8 type; u8 reserved; u16 length; }; /* Values for Type field above */ enum acpi_viot_node_type { ACPI_VIOT_NODE_PCI_RANGE = 0x01, ACPI_VIOT_NODE_MMIO = 0x02, ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03, ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04, ACPI_VIOT_RESERVED = 0x05 }; /* VIOT subtables */ struct acpi_viot_pci_range { struct acpi_viot_header header; u32 endpoint_start; u16 segment_start; u16 segment_end; u16 bdf_start; u16 bdf_end; u16 output_node; u8 reserved[6]; }; struct acpi_viot_mmio { struct acpi_viot_header header; u32 endpoint; u64 base_address; u16 output_node; u8 reserved[6]; }; struct acpi_viot_virtio_iommu_pci { struct acpi_viot_header header; u16 segment; u16 bdf; u8 reserved[8]; }; struct acpi_viot_virtio_iommu_mmio { struct acpi_viot_header header; u8 reserved[4]; u64 base_address; }; /******************************************************************************* * * WAET - Windows ACPI Emulated devices Table * Version 1 * * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009 * ******************************************************************************/ struct acpi_table_waet { struct acpi_table_header header; /* Common ACPI table header */ u32 flags; }; /* Masks for Flags field above */ #define ACPI_WAET_RTC_NO_ACK (1) /* RTC requires no int acknowledge */ #define ACPI_WAET_TIMER_ONE_READ (1<<1) /* PM timer requires only one read */ /******************************************************************************* * * WDAT - Watchdog Action Table * Version 1 * * Conforms to "Hardware Watchdog Timers Design Specification", * Copyright 2006 Microsoft Corporation. * ******************************************************************************/ struct acpi_table_wdat { struct acpi_table_header header; /* Common ACPI table header */ u32 header_length; /* Watchdog Header Length */ u16 pci_segment; /* PCI Segment number */ u8 pci_bus; /* PCI Bus number */ u8 pci_device; /* PCI Device number */ u8 pci_function; /* PCI Function number */ u8 reserved[3]; u32 timer_period; /* Period of one timer count (msec) */ u32 max_count; /* Maximum counter value supported */ u32 min_count; /* Minimum counter value */ u8 flags; u8 reserved2[3]; u32 entries; /* Number of watchdog entries that follow */ }; /* Masks for Flags field above */ #define ACPI_WDAT_ENABLED (1) #define ACPI_WDAT_STOPPED 0x80 /* WDAT Instruction Entries (actions) */ struct acpi_wdat_entry { u8 action; u8 instruction; u16 reserved; struct acpi_generic_address register_region; u32 value; /* Value used with Read/Write register */ u32 mask; /* Bitmask required for this register instruction */ }; /* Values for Action field above */ enum acpi_wdat_actions { ACPI_WDAT_RESET = 1, ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, ACPI_WDAT_GET_COUNTDOWN = 5, ACPI_WDAT_SET_COUNTDOWN = 6, ACPI_WDAT_GET_RUNNING_STATE = 8, ACPI_WDAT_SET_RUNNING_STATE = 9, ACPI_WDAT_GET_STOPPED_STATE = 10, ACPI_WDAT_SET_STOPPED_STATE = 11, ACPI_WDAT_GET_REBOOT = 16, ACPI_WDAT_SET_REBOOT = 17, ACPI_WDAT_GET_SHUTDOWN = 18, ACPI_WDAT_SET_SHUTDOWN = 19, ACPI_WDAT_GET_STATUS = 32, ACPI_WDAT_SET_STATUS = 33, ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ }; /* Values for Instruction field above */ enum acpi_wdat_instructions { ACPI_WDAT_READ_VALUE = 0, ACPI_WDAT_READ_COUNTDOWN = 1, ACPI_WDAT_WRITE_VALUE = 2, ACPI_WDAT_WRITE_COUNTDOWN = 3, ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ }; /******************************************************************************* * * WDDT - Watchdog Descriptor Table * Version 1 * * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)", * Version 001, September 2002 * ******************************************************************************/ struct acpi_table_wddt { struct acpi_table_header header; /* Common ACPI table header */ u16 spec_version; u16 table_version; u16 pci_vendor_id; struct acpi_generic_address address; u16 max_count; /* Maximum counter value supported */ u16 min_count; /* Minimum counter value supported */ u16 period; u16 status; u16 capability; }; /* Flags for Status field above */ #define ACPI_WDDT_AVAILABLE (1) #define ACPI_WDDT_ACTIVE (1<<1) #define ACPI_WDDT_TCO_OS_OWNED (1<<2) #define ACPI_WDDT_USER_RESET (1<<11) #define ACPI_WDDT_WDT_RESET (1<<12) #define ACPI_WDDT_POWER_FAIL (1<<13) #define ACPI_WDDT_UNKNOWN_RESET (1<<14) /* Flags for Capability field above */ #define ACPI_WDDT_AUTO_RESET (1) #define ACPI_WDDT_ALERT_SUPPORT (1<<1) /******************************************************************************* * * WDRT - Watchdog Resource Table * Version 1 * * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003", * Version 1.01, August 28, 2006 * ******************************************************************************/ struct acpi_table_wdrt { struct acpi_table_header header; /* Common ACPI table header */ struct acpi_generic_address control_register; struct acpi_generic_address count_register; u16 pci_device_id; u16 pci_vendor_id; u8 pci_bus; /* PCI Bus number */ u8 pci_device; /* PCI Device number */ u8 pci_function; /* PCI Function number */ u8 pci_segment; /* PCI Segment number */ u16 max_count; /* Maximum counter value supported */ u8 units; }; /******************************************************************************* * * WPBT - Windows Platform Environment Table (ACPI 6.0) * Version 1 * * Conforms to "Windows Platform Binary Table (WPBT)" 29 November 2011 * ******************************************************************************/ struct acpi_table_wpbt { struct acpi_table_header header; /* Common ACPI table header */ u32 handoff_size; u64 handoff_address; u8 layout; u8 type; u16 arguments_length; }; struct acpi_wpbt_unicode { u16 *unicode_string; }; /******************************************************************************* * * WSMT - Windows SMM Security Mitigations Table * Version 1 * * Conforms to "Windows SMM Security Mitigations Table", * Version 1.0, April 18, 2016 * ******************************************************************************/ struct acpi_table_wsmt { struct acpi_table_header header; /* Common ACPI table header */ u32 protection_flags; }; /* Flags for protection_flags field above */ #define ACPI_WSMT_FIXED_COMM_BUFFERS (1) #define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) #define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) /******************************************************************************* * * XENV - Xen Environment Table (ACPI 6.0) * Version 1 * * Conforms to "ACPI Specification for Xen Environment Table" 4 January 2015 * ******************************************************************************/ struct acpi_table_xenv { struct acpi_table_header header; /* Common ACPI table header */ u64 grant_table_address; u64 grant_table_size; u32 event_interrupt; u8 event_flags; }; /* Reset to default packing */ #pragma pack() #endif /* __ACTBL3_H__ */ PKk]@YYghes.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef GHES_H #define GHES_H #include #include /* * One struct ghes is created for each generic hardware error source. * It provides the context for APEI hardware error timer/IRQ/SCI/NMI * handler. * * estatus: memory buffer for error status block, allocated during * HEST parsing. */ #define GHES_EXITING 0x0002 struct ghes { union { struct acpi_hest_generic *generic; struct acpi_hest_generic_v2 *generic_v2; }; struct acpi_hest_generic_status *estatus; unsigned int estatus_length; unsigned long flags; union { struct list_head list; struct timer_list timer; unsigned int irq; }; struct device *dev; struct list_head elist; }; struct ghes_estatus_node { struct llist_node llnode; struct acpi_hest_generic *generic; struct ghes *ghes; int task_work_cpu; struct callback_head task_work; }; struct ghes_estatus_cache { u32 estatus_len; atomic_t count; struct acpi_hest_generic *generic; unsigned long long time_in; struct rcu_head rcu; }; enum { GHES_SEV_NO = 0x0, GHES_SEV_CORRECTED = 0x1, GHES_SEV_RECOVERABLE = 0x2, GHES_SEV_PANIC = 0x3, }; #ifdef CONFIG_ACPI_APEI_GHES /** * ghes_register_vendor_record_notifier - register a notifier for vendor * records that the kernel would otherwise ignore. * @nb: pointer to the notifier_block structure of the event handler. * * return 0 : SUCCESS, non-zero : FAIL */ int ghes_register_vendor_record_notifier(struct notifier_block *nb); /** * ghes_unregister_vendor_record_notifier - unregister the previously * registered vendor record notifier. * @nb: pointer to the notifier_block structure of the vendor record handler. */ void ghes_unregister_vendor_record_notifier(struct notifier_block *nb); struct list_head *ghes_get_devices(void); void ghes_estatus_pool_region_free(unsigned long addr, u32 size); #else static inline struct list_head *ghes_get_devices(void) { return NULL; } static inline void ghes_estatus_pool_region_free(unsigned long addr, u32 size) { return; } #endif int ghes_estatus_pool_init(unsigned int num_ghes); static inline int acpi_hest_get_version(struct acpi_hest_generic_data *gdata) { return gdata->revision >> 8; } static inline void *acpi_hest_get_payload(struct acpi_hest_generic_data *gdata) { if (acpi_hest_get_version(gdata) >= 3) return (void *)(((struct acpi_hest_generic_data_v300 *)(gdata)) + 1); return gdata + 1; } static inline int acpi_hest_get_error_length(struct acpi_hest_generic_data *gdata) { return ((struct acpi_hest_generic_data *)(gdata))->error_data_length; } static inline int acpi_hest_get_size(struct acpi_hest_generic_data *gdata) { if (acpi_hest_get_version(gdata) >= 3) return sizeof(struct acpi_hest_generic_data_v300); return sizeof(struct acpi_hest_generic_data); } static inline int acpi_hest_get_record_size(struct acpi_hest_generic_data *gdata) { return (acpi_hest_get_size(gdata) + acpi_hest_get_error_length(gdata)); } static inline void *acpi_hest_get_next(struct acpi_hest_generic_data *gdata) { return (void *)(gdata) + acpi_hest_get_record_size(gdata); } #define apei_estatus_for_each_section(estatus, section) \ for (section = (struct acpi_hest_generic_data *)(estatus + 1); \ (void *)section - (void *)(estatus + 1) < estatus->data_length; \ section = acpi_hest_get_next(section)) #ifdef CONFIG_ACPI_APEI_SEA int ghes_notify_sea(void); #else static inline int ghes_notify_sea(void) { return -ENOENT; } #endif struct notifier_block; extern void ghes_register_report_chain(struct notifier_block *nb); extern void ghes_unregister_report_chain(struct notifier_block *nb); #endif /* GHES_H */ PKk]9__nfit.hnu[/* * SPDX-License-Identifier: GPL-2.0 * Copyright (C) 2018 Intel Corporation */ #ifndef __ACPI_NFIT_H #define __ACPI_NFIT_H #if IS_ENABLED(CONFIG_ACPI_NFIT) int nfit_get_smbios_id(u32 device_handle, u16 *flags); #else static inline int nfit_get_smbios_id(u32 device_handle, u16 *flags) { return -EOPNOTSUPP; } #endif #endif /* __ACPI_NFIT_H */ PKk] button.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef ACPI_BUTTON_H #define ACPI_BUTTON_H #define ACPI_BUTTON_HID_POWER "PNP0C0C" #define ACPI_BUTTON_HID_LID "PNP0C0D" #define ACPI_BUTTON_HID_SLEEP "PNP0C0E" #if IS_ENABLED(CONFIG_ACPI_BUTTON) extern int acpi_lid_open(void); #else static inline int acpi_lid_open(void) { return 1; } #endif /* IS_ENABLED(CONFIG_ACPI_BUTTON) */ #endif /* ACPI_BUTTON_H */ PKk]]h acpi_numa.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ACPI_NUMA_H #define __ACPI_NUMA_H #ifdef CONFIG_ACPI_NUMA #include /* Proximity bitmap length */ #if MAX_NUMNODES > 256 #define MAX_PXM_DOMAINS MAX_NUMNODES #else #define MAX_PXM_DOMAINS (256) /* Old pxm spec is defined 8 bit */ #endif extern int pxm_to_node(int); extern int node_to_pxm(int); extern int acpi_map_pxm_to_node(int); extern unsigned char acpi_srat_revision; extern void disable_srat(void); extern void bad_srat(void); extern int srat_disabled(void); #else /* CONFIG_ACPI_NUMA */ static inline void disable_srat(void) { } static inline int pxm_to_node(int pxm) { return 0; } static inline int node_to_pxm(int node) { return 0; } #endif /* CONFIG_ACPI_NUMA */ #ifdef CONFIG_ACPI_HMAT extern void disable_hmat(void); #else /* CONFIG_ACPI_HMAT */ static inline void disable_hmat(void) { } #endif /* CONFIG_ACPI_HMAT */ #endif /* __ACPI_NUMA_H */ PKk] acpi_io.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ACPI_IO_H_ #define _ACPI_IO_H_ #include #include #ifndef acpi_os_ioremap static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size) { return ioremap_cache(phys, size); } #endif extern bool acpi_permanent_mmap; void __iomem __ref *acpi_os_map_iomem(acpi_physical_address phys, acpi_size size); void __ref acpi_os_unmap_iomem(void __iomem *virt, acpi_size size); void __iomem *acpi_os_get_iomem(acpi_physical_address phys, unsigned int size); void __iomem *acpi_os_map_generic_address(struct acpi_generic_address *addr); void acpi_os_unmap_generic_address(struct acpi_generic_address *addr); #endif PKk]iF## acbuffer.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acbuffer.h - Support for buffers returned by ACPI predefined names * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACBUFFER_H__ #define __ACBUFFER_H__ /* * Contains buffer structures for these predefined names: * _FDE, _GRT, _GTM, _PLD, _SRT */ /* * Note: C bitfields are not used for this reason: * * "Bitfields are great and easy to read, but unfortunately the C language * does not specify the layout of bitfields in memory, which means they are * essentially useless for dealing with packed data in on-disk formats or * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, * this decision was a design error in C. Ritchie could have picked an order * and stuck with it." Norman Ramsey. * See http://stackoverflow.com/a/1053662/41661 */ /* _FDE return value */ struct acpi_fde_info { u32 floppy0; u32 floppy1; u32 floppy2; u32 floppy3; u32 tape; }; /* * _GRT return value * _SRT input value */ struct acpi_grt_info { u16 year; u8 month; u8 day; u8 hour; u8 minute; u8 second; u8 valid; u16 milliseconds; u16 timezone; u8 daylight; u8 reserved[3]; }; /* _GTM return value */ struct acpi_gtm_info { u32 pio_speed0; u32 dma_speed0; u32 pio_speed1; u32 dma_speed1; u32 flags; }; /* * Formatted _PLD return value. The minimum size is a package containing * one buffer. * Revision 1: Buffer is 16 bytes (128 bits) * Revision 2: Buffer is 20 bytes (160 bits) * * Note: This structure is returned from the acpi_decode_pld_buffer * interface. */ struct acpi_pld_info { u8 revision; u8 ignore_color; u8 red; u8 green; u8 blue; u16 width; u16 height; u8 user_visible; u8 dock; u8 lid; u8 panel; u8 vertical_position; u8 horizontal_position; u8 shape; u8 group_orientation; u8 group_token; u8 group_position; u8 bay; u8 ejectable; u8 ospm_eject_required; u8 cabinet_number; u8 card_cage_number; u8 reference; u8 rotation; u8 order; u8 reserved; u16 vertical_offset; u16 horizontal_offset; }; /* * Macros to: * 1) Convert a _PLD buffer to internal struct acpi_pld_info format - ACPI_PLD_GET* * (Used by acpi_decode_pld_buffer) * 2) Construct a _PLD buffer - ACPI_PLD_SET* * (Intended for BIOS use only) */ #define ACPI_PLD_REV1_BUFFER_SIZE 16 /* For Revision 1 of the buffer (From ACPI spec) */ #define ACPI_PLD_REV2_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ #define ACPI_PLD_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ /* First 32-bit dword, bits 0:32 */ #define ACPI_PLD_GET_REVISION(dword) ACPI_GET_BITS (dword, 0, ACPI_7BIT_MASK) #define ACPI_PLD_SET_REVISION(dword,value) ACPI_SET_BITS (dword, 0, ACPI_7BIT_MASK, value) /* Offset 0, Len 7 */ #define ACPI_PLD_GET_IGNORE_COLOR(dword) ACPI_GET_BITS (dword, 7, ACPI_1BIT_MASK) #define ACPI_PLD_SET_IGNORE_COLOR(dword,value) ACPI_SET_BITS (dword, 7, ACPI_1BIT_MASK, value) /* Offset 7, Len 1 */ #define ACPI_PLD_GET_RED(dword) ACPI_GET_BITS (dword, 8, ACPI_8BIT_MASK) #define ACPI_PLD_SET_RED(dword,value) ACPI_SET_BITS (dword, 8, ACPI_8BIT_MASK, value) /* Offset 8, Len 8 */ #define ACPI_PLD_GET_GREEN(dword) ACPI_GET_BITS (dword, 16, ACPI_8BIT_MASK) #define ACPI_PLD_SET_GREEN(dword,value) ACPI_SET_BITS (dword, 16, ACPI_8BIT_MASK, value) /* Offset 16, Len 8 */ #define ACPI_PLD_GET_BLUE(dword) ACPI_GET_BITS (dword, 24, ACPI_8BIT_MASK) #define ACPI_PLD_SET_BLUE(dword,value) ACPI_SET_BITS (dword, 24, ACPI_8BIT_MASK, value) /* Offset 24, Len 8 */ /* Second 32-bit dword, bits 33:63 */ #define ACPI_PLD_GET_WIDTH(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) #define ACPI_PLD_SET_WIDTH(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 32+0=32, Len 16 */ #define ACPI_PLD_GET_HEIGHT(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) #define ACPI_PLD_SET_HEIGHT(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 32+16=48, Len 16 */ /* Third 32-bit dword, bits 64:95 */ #define ACPI_PLD_GET_USER_VISIBLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) #define ACPI_PLD_SET_USER_VISIBLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 64+0=64, Len 1 */ #define ACPI_PLD_GET_DOCK(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) #define ACPI_PLD_SET_DOCK(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 64+1=65, Len 1 */ #define ACPI_PLD_GET_LID(dword) ACPI_GET_BITS (dword, 2, ACPI_1BIT_MASK) #define ACPI_PLD_SET_LID(dword,value) ACPI_SET_BITS (dword, 2, ACPI_1BIT_MASK, value) /* Offset 64+2=66, Len 1 */ #define ACPI_PLD_GET_PANEL(dword) ACPI_GET_BITS (dword, 3, ACPI_3BIT_MASK) #define ACPI_PLD_SET_PANEL(dword,value) ACPI_SET_BITS (dword, 3, ACPI_3BIT_MASK, value) /* Offset 64+3=67, Len 3 */ #define ACPI_PLD_GET_VERTICAL(dword) ACPI_GET_BITS (dword, 6, ACPI_2BIT_MASK) #define ACPI_PLD_SET_VERTICAL(dword,value) ACPI_SET_BITS (dword, 6, ACPI_2BIT_MASK, value) /* Offset 64+6=70, Len 2 */ #define ACPI_PLD_GET_HORIZONTAL(dword) ACPI_GET_BITS (dword, 8, ACPI_2BIT_MASK) #define ACPI_PLD_SET_HORIZONTAL(dword,value) ACPI_SET_BITS (dword, 8, ACPI_2BIT_MASK, value) /* Offset 64+8=72, Len 2 */ #define ACPI_PLD_GET_SHAPE(dword) ACPI_GET_BITS (dword, 10, ACPI_4BIT_MASK) #define ACPI_PLD_SET_SHAPE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_4BIT_MASK, value) /* Offset 64+10=74, Len 4 */ #define ACPI_PLD_GET_ORIENTATION(dword) ACPI_GET_BITS (dword, 14, ACPI_1BIT_MASK) #define ACPI_PLD_SET_ORIENTATION(dword,value) ACPI_SET_BITS (dword, 14, ACPI_1BIT_MASK, value) /* Offset 64+14=78, Len 1 */ #define ACPI_PLD_GET_TOKEN(dword) ACPI_GET_BITS (dword, 15, ACPI_8BIT_MASK) #define ACPI_PLD_SET_TOKEN(dword,value) ACPI_SET_BITS (dword, 15, ACPI_8BIT_MASK, value) /* Offset 64+15=79, Len 8 */ #define ACPI_PLD_GET_POSITION(dword) ACPI_GET_BITS (dword, 23, ACPI_8BIT_MASK) #define ACPI_PLD_SET_POSITION(dword,value) ACPI_SET_BITS (dword, 23, ACPI_8BIT_MASK, value) /* Offset 64+23=87, Len 8 */ #define ACPI_PLD_GET_BAY(dword) ACPI_GET_BITS (dword, 31, ACPI_1BIT_MASK) #define ACPI_PLD_SET_BAY(dword,value) ACPI_SET_BITS (dword, 31, ACPI_1BIT_MASK, value) /* Offset 64+31=95, Len 1 */ /* Fourth 32-bit dword, bits 96:127 */ #define ACPI_PLD_GET_EJECTABLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) #define ACPI_PLD_SET_EJECTABLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 96+0=96, Len 1 */ #define ACPI_PLD_GET_OSPM_EJECT(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) #define ACPI_PLD_SET_OSPM_EJECT(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 96+1=97, Len 1 */ #define ACPI_PLD_GET_CABINET(dword) ACPI_GET_BITS (dword, 2, ACPI_8BIT_MASK) #define ACPI_PLD_SET_CABINET(dword,value) ACPI_SET_BITS (dword, 2, ACPI_8BIT_MASK, value) /* Offset 96+2=98, Len 8 */ #define ACPI_PLD_GET_CARD_CAGE(dword) ACPI_GET_BITS (dword, 10, ACPI_8BIT_MASK) #define ACPI_PLD_SET_CARD_CAGE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_8BIT_MASK, value) /* Offset 96+10=106, Len 8 */ #define ACPI_PLD_GET_REFERENCE(dword) ACPI_GET_BITS (dword, 18, ACPI_1BIT_MASK) #define ACPI_PLD_SET_REFERENCE(dword,value) ACPI_SET_BITS (dword, 18, ACPI_1BIT_MASK, value) /* Offset 96+18=114, Len 1 */ #define ACPI_PLD_GET_ROTATION(dword) ACPI_GET_BITS (dword, 19, ACPI_4BIT_MASK) #define ACPI_PLD_SET_ROTATION(dword,value) ACPI_SET_BITS (dword, 19, ACPI_4BIT_MASK, value) /* Offset 96+19=115, Len 4 */ #define ACPI_PLD_GET_ORDER(dword) ACPI_GET_BITS (dword, 23, ACPI_5BIT_MASK) #define ACPI_PLD_SET_ORDER(dword,value) ACPI_SET_BITS (dword, 23, ACPI_5BIT_MASK, value) /* Offset 96+23=119, Len 5 */ /* Fifth 32-bit dword, bits 128:159 (Revision 2 of _PLD only) */ #define ACPI_PLD_GET_VERT_OFFSET(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) #define ACPI_PLD_SET_VERT_OFFSET(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 128+0=128, Len 16 */ #define ACPI_PLD_GET_HORIZ_OFFSET(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 128+16=144, Len 16 */ /* Panel position defined in _PLD section of ACPI Specification 6.3 */ #define ACPI_PLD_PANEL_TOP 0 #define ACPI_PLD_PANEL_BOTTOM 1 #define ACPI_PLD_PANEL_LEFT 2 #define ACPI_PLD_PANEL_RIGHT 3 #define ACPI_PLD_PANEL_FRONT 4 #define ACPI_PLD_PANEL_BACK 5 #define ACPI_PLD_PANEL_UNKNOWN 6 #endif /* ACBUFFER_H */ PKk]WJ acpi_lpat.hnu[/* SPDX-License-Identifier: GPL-2.0-only */ /* * acpi_lpat.h - LPAT table processing functions * * Copyright (C) 2015 Intel Corporation. All rights reserved. */ #ifndef ACPI_LPAT_H #define ACPI_LPAT_H struct acpi_lpat { int temp; int raw; }; struct acpi_lpat_conversion_table { struct acpi_lpat *lpat; int lpat_count; }; #ifdef CONFIG_ACPI int acpi_lpat_raw_to_temp(struct acpi_lpat_conversion_table *lpat_table, int raw); int acpi_lpat_temp_to_raw(struct acpi_lpat_conversion_table *lpat_table, int temp); struct acpi_lpat_conversion_table *acpi_lpat_get_conversion_table(acpi_handle handle); void acpi_lpat_free_conversion_table(struct acpi_lpat_conversion_table *lpat_table); #else static int acpi_lpat_raw_to_temp(struct acpi_lpat_conversion_table *lpat_table, int raw) { return 0; } static int acpi_lpat_temp_to_raw(struct acpi_lpat_conversion_table *lpat_table, int temp) { return 0; } static struct acpi_lpat_conversion_table *acpi_lpat_get_conversion_table( acpi_handle handle) { return NULL; } static void acpi_lpat_free_conversion_table(struct acpi_lpat_conversion_table *lpat_table) { } #endif #endif PKk]FHSSacpi.hnu[/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ /****************************************************************************** * * Name: acpi.h - Master public include file used to interface to ACPICA * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #ifndef __ACPI_H__ #define __ACPI_H__ /* * Public include files for use by code that will interface to ACPICA. * * Information includes the ACPICA data types, names, exceptions, and * external interface prototypes. Also included are the definitions for * all ACPI tables (FADT, MADT, etc.) * * Note: The order of these include files is important. */ #include /* Environment-specific items */ #include /* Common ACPI names and strings */ #include /* ACPICA data types and structures */ #include /* ACPICA exceptions */ #include /* ACPI table definitions */ #include /* Resource Descriptor structs */ #include /* Extra environment-specific items */ #include /* Error output and Debug macros */ #include /* OSL interfaces (ACPICA-to-OS) */ #include /* ACPI core subsystem external interfaces */ #endif /* __ACPI_H__ */ PKk]=ureboot.hnu[/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ACPI_REBOOT_H #define __ACPI_REBOOT_H #ifdef CONFIG_ACPI extern void acpi_reboot(void); #else static inline void acpi_reboot(void) { } #endif #endif PKk]5pcc.hnu[PKk]6'apei.hnu[PKk]Ni  cppc_acpi.hnu[PKk]i4c-c- "acpiosxf.hnu[PKk]30U.BB Pacoutput.hnu[PKk]z/]]nacuuid.hnu[PKk]>wCC acexcep.hnu[PKk]Yk:r:r acpi_bus.hnu[PKk]p// vXprocessor.hnu[PKk]˔5}}acpixf.hnu[PKk]w actypes.hnu[PKk]FwI acnames.hnu[PKk]5ewIwIactbl.hnu[PKk]platform/aczephyr.hnu[PKk] |  platform/aclinuxex.hnu[PKk]platform/acgcc.hnu[PKk]?fRplatform/aclinux.hnu[PKk]3t$t$7platform/acenv.hnu[PKk]P<oC\platform/acenvex.hnu[PKk]haplatform/acgccex.hnu[PKk] idbattery.hnu[PKk]l4gactbl1.hnu[PKk]7Wrrn&hed.hnu[PKk]gg(proc_cap_intel.hnu[PKk]Eq::-actbl2.hnu[PKk] hvideo.hnu[PKk]Yܜ  xacpi_drivers.hnu[PKk]M acconfig.hnu[PKk]F߳NN acrestyp.hnu[PKk]['yXyX'actbl3.hnu[PKk]@YYGghes.hnu[PKk]9__gVnfit.hnu[PKk] Wbutton.hnu[PKk]]h Yacpi_numa.hnu[PKk] ]acpi_io.hnu[PKk]iF## `acbuffer.hnu[PKk]WJ acpi_lpat.hnu[PKk]FHSSacpi.hnu[PKk]=ureboot.hnu[PK''X