Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
0002 /******************************************************************************
0003  *
0004  * Name: acevents.h - Event subcomponent prototypes and defines
0005  *
0006  * Copyright (C) 2000 - 2022, Intel Corp.
0007  *
0008  *****************************************************************************/
0009 
0010 #ifndef __ACEVENTS_H__
0011 #define __ACEVENTS_H__
0012 
0013 /*
0014  * Conditions to trigger post enabling GPE polling:
0015  * It is not sufficient to trigger edge-triggered GPE with specific GPE
0016  * chips, software need to poll once after enabling.
0017  */
0018 #ifdef ACPI_USE_GPE_POLLING
0019 #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__)             \
0020     ((__gpe__)->runtime_count == 1 &&                   \
0021      (__gpe__)->flags & ACPI_GPE_INITIALIZED &&         \
0022      ((__gpe__)->flags & ACPI_GPE_XRUPT_TYPE_MASK) == ACPI_GPE_EDGE_TRIGGERED)
0023 #else
0024 #define ACPI_GPE_IS_POLLING_NEEDED(__gpe__)             FALSE
0025 #endif
0026 
0027 /*
0028  * evevent
0029  */
0030 acpi_status acpi_ev_initialize_events(void);
0031 
0032 acpi_status acpi_ev_install_xrupt_handlers(void);
0033 
0034 u32 acpi_ev_fixed_event_detect(void);
0035 
0036 /*
0037  * evmisc
0038  */
0039 u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node);
0040 
0041 u32 acpi_ev_get_gpe_number_index(u32 gpe_number);
0042 
0043 acpi_status
0044 acpi_ev_queue_notify_request(struct acpi_namespace_node *node,
0045                  u32 notify_value);
0046 
0047 /*
0048  * evglock - Global Lock support
0049  */
0050 acpi_status acpi_ev_init_global_lock_handler(void);
0051 
0052 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status
0053                 acpi_ev_acquire_global_lock(u16 timeout))
0054 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void))
0055 
0056 acpi_status acpi_ev_remove_global_lock_handler(void);
0057 
0058 /*
0059  * evgpe - Low-level GPE support
0060  */
0061 u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list);
0062 
0063 acpi_status
0064 acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info);
0065 
0066 acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info);
0067 
0068 acpi_status
0069 acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked);
0070 
0071 acpi_status
0072 acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info,
0073               u8 clear_on_enable);
0074 
0075 acpi_status
0076 acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info);
0077 
0078 struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
0079                                u32 gpe_number);
0080 
0081 struct acpi_gpe_event_info *acpi_ev_low_get_gpe_info(u32 gpe_number,
0082                              struct acpi_gpe_block_info
0083                              *gpe_block);
0084 
0085 acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info);
0086 
0087 u32
0088 acpi_ev_detect_gpe(struct acpi_namespace_node *gpe_device,
0089            struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number);
0090 
0091 /*
0092  * evgpeblk - Upper-level GPE block support
0093  */
0094 acpi_status
0095 acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
0096              u64 address,
0097              u8 space_id,
0098              u32 register_count,
0099              u16 gpe_block_base_number,
0100              u32 interrupt_number,
0101              struct acpi_gpe_block_info **return_gpe_block);
0102 
0103 acpi_status
0104 acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
0105                  struct acpi_gpe_block_info *gpe_block,
0106                  void *context);
0107 
0108 ACPI_HW_DEPENDENT_RETURN_OK(acpi_status
0109                 acpi_ev_delete_gpe_block(struct acpi_gpe_block_info
0110                              *gpe_block))
0111 
0112 u32
0113 acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
0114              struct acpi_gpe_event_info *gpe_event_info,
0115              u32 gpe_number);
0116 
0117 /*
0118  * evgpeinit - GPE initialization and update
0119  */
0120 acpi_status acpi_ev_gpe_initialize(void);
0121 
0122 ACPI_HW_DEPENDENT_RETURN_VOID(void
0123                   acpi_ev_update_gpes(acpi_owner_id table_owner_id))
0124 
0125 acpi_status
0126 acpi_ev_match_gpe_method(acpi_handle obj_handle,
0127              u32 level, void *context, void **return_value);
0128 
0129 /*
0130  * evgpeutil - GPE utilities
0131  */
0132 acpi_status
0133 acpi_ev_walk_gpe_list(acpi_gpe_callback gpe_walk_callback, void *context);
0134 
0135 acpi_status
0136 acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
0137                struct acpi_gpe_block_info *gpe_block, void *context);
0138 
0139 acpi_status
0140 acpi_ev_get_gpe_xrupt_block(u32 interrupt_number,
0141                 struct acpi_gpe_xrupt_info **gpe_xrupt_block);
0142 
0143 acpi_status acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt);
0144 
0145 acpi_status
0146 acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
0147                 struct acpi_gpe_block_info *gpe_block,
0148                 void *context);
0149 
0150 /*
0151  * evhandler - Address space handling
0152  */
0153 union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
0154                                space_id,
0155                                union acpi_operand_object
0156                                *handler_obj);
0157 
0158 u8
0159 acpi_ev_has_default_handler(struct acpi_namespace_node *node,
0160                 acpi_adr_space_type space_id);
0161 
0162 acpi_status acpi_ev_install_region_handlers(void);
0163 
0164 acpi_status
0165 acpi_ev_install_space_handler(struct acpi_namespace_node *node,
0166                   acpi_adr_space_type space_id,
0167                   acpi_adr_space_handler handler,
0168                   acpi_adr_space_setup setup, void *context);
0169 
0170 /*
0171  * evregion - Operation region support
0172  */
0173 acpi_status acpi_ev_initialize_op_regions(void);
0174 
0175 acpi_status
0176 acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
0177                    union acpi_operand_object *field_obj,
0178                    u32 function,
0179                    u32 region_offset, u32 bit_width, u64 *value);
0180 
0181 acpi_status
0182 acpi_ev_attach_region(union acpi_operand_object *handler_obj,
0183               union acpi_operand_object *region_obj,
0184               u8 acpi_ns_is_locked);
0185 
0186 void
0187 acpi_ev_detach_region(union acpi_operand_object *region_obj,
0188               u8 acpi_ns_is_locked);
0189 
0190 void
0191 acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
0192                 acpi_adr_space_type space_id, u32 function);
0193 
0194 acpi_status
0195 acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function);
0196 
0197 /*
0198  * evregini - Region initialization and setup
0199  */
0200 acpi_status
0201 acpi_ev_system_memory_region_setup(acpi_handle handle,
0202                    u32 function,
0203                    void *handler_context,
0204                    void **region_context);
0205 
0206 acpi_status
0207 acpi_ev_io_space_region_setup(acpi_handle handle,
0208                   u32 function,
0209                   void *handler_context, void **region_context);
0210 
0211 acpi_status
0212 acpi_ev_pci_config_region_setup(acpi_handle handle,
0213                 u32 function,
0214                 void *handler_context, void **region_context);
0215 
0216 acpi_status
0217 acpi_ev_cmos_region_setup(acpi_handle handle,
0218               u32 function,
0219               void *handler_context, void **region_context);
0220 
0221 acpi_status
0222 acpi_ev_pci_bar_region_setup(acpi_handle handle,
0223                  u32 function,
0224                  void *handler_context, void **region_context);
0225 
0226 acpi_status
0227 acpi_ev_data_table_region_setup(acpi_handle handle,
0228                 u32 function,
0229                 void *handler_context, void **region_context);
0230 
0231 acpi_status
0232 acpi_ev_default_region_setup(acpi_handle handle,
0233                  u32 function,
0234                  void *handler_context, void **region_context);
0235 
0236 acpi_status acpi_ev_initialize_region(union acpi_operand_object *region_obj);
0237 
0238 u8 acpi_ev_is_pci_root_bridge(struct acpi_namespace_node *node);
0239 
0240 /*
0241  * evsci - SCI (System Control Interrupt) handling/dispatch
0242  */
0243 u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context);
0244 
0245 u32 acpi_ev_sci_dispatch(void);
0246 
0247 u32 acpi_ev_install_sci_handler(void);
0248 
0249 acpi_status acpi_ev_remove_all_sci_handlers(void);
0250 
0251 ACPI_HW_DEPENDENT_RETURN_VOID(void acpi_ev_terminate(void))
0252 #endif              /* __ACEVENTS_H__  */