14#define UACPI_EVENT_DISABLED 0
15#define UACPI_EVENT_ENABLED 1
17#if !defined(UACPI_REDUCED_HARDWARE) && !defined(UACPI_BAREBONES_MODE)
98 if (raw_value !=
value) {
188 "fixed event %d fired but no handler installed, disabling...",
246#define EVENTS_PER_GPE_REGISTER 8
326 return 1 << (
event->idx -
event->reg->base_idx);
348 if (!(
reg->current_mask & event_bit))
362 enable_mask |= event_bit;
365 enable_mask &= ~event_bit;
422 switch (
event->handler_type) {
437 "executing GPE(%02X) handler %.4s",
446 "error while executing GPE(%02X) handler %.4s: %s",
457 handler =
event->implicit_handler;
485 uacpi_error(
"unable to schedule GPE(%02X) restore: %s",
504 return event->native_handler->cb(
505 event->native_handler->ctx, device_node,
event->idx
528 switch (
event->handler_type) {
530 int_ret =
event->native_handler->cb(
531 event->native_handler->ctx, device_node,
event->idx
550 "unable to schedule GPE(%02X) for execution: %s",
557 uacpi_warn(
"GPE(%02X) fired but no handler, keeping disabled",
575 for (
i = 0;
i <
block->num_registers; ++
i) {
578 if (!
reg->runtime_mask && !
reg->wake_mask)
682 handler =
event->implicit_handler;
709 for (
i = 0;
i <
block->num_registers; ++
i) {
717 value =
reg->runtime_mask & ~reg->masked_mask;
745 for (
i = 0;
i <
block->num_registers; ++
i) {
749 if (!
reg->current_mask)
753 reg->masked_mask = 0xFF;
786 for (
i = 0;
i <
block->num_registers; ++
i) {
789 if (
reg->enable.total_bit_width)
791 if (
reg->status.total_bit_width)
799 if (
block->irq_ctx) {
804 ctx->gpe_head =
ctx->gpe_head->next;
815 prev_block = prev_block->
next;
822 ctx->prev->next =
ctx->next;
838 for (
i = 0;
i <
block->num_events; ++
i) {
839 event = &
block->events[
i];
841 switch (
event->handler_type) {
849 sizeof(*
event->native_handler));
865 sizeof(*
block->registers) *
block->num_registers);
875 if (idx < block->base_idx)
903 if (
node->name.text[0] !=
'_')
906 switch (
node->name.text[1]) {
927 switch (
event->handler_type) {
937 event->aml_handler =
node;
943 if (!
ctx->post_dynamic_table_load) {
945 "GPE(%02X) already matched %.4s, skipping %.4s",
954 "not assigning GPE(%02X) to %.4s, override "
965 ctx->matched_count++;
990 while (match_ctx.
block) {
999 irq_ctx = irq_ctx->
next;
1003 uacpi_info(
"matched %u additional GPEs post dynamic table load",
1022 struct acpi_gas tmp_gas = { 0 };
1025 tmp_gas.address_space_id = address_space_id;
1026 tmp_gas.register_bit_width = 8;
1032 block->device_node = device_node;
1033 block->base_idx = base_idx;
1072 event->idx =
reg->base_idx +
j;
1103 uacpi_trace(
"initialized GPE block %.4s[%d->%d], %d AML handlers (IRQ %d)",
1104 device_node->
name.
text, base_idx, base_idx +
block->num_events,
1152 if (
block->device_node !=
ctx->gpe_device)
1173 return ctx.out_event;
1184 reg->runtime_mask |= this_mask;
1185 reg->current_mask =
reg->runtime_mask;
1189 reg->runtime_mask &= ~this_mask;
1190 reg->current_mask =
reg->runtime_mask;
1200 if (--
event->num_users == 0) {
1227 if (++
event->num_users == 1) {
1302 if (!(
reg->masked_mask &
mask))
1306 if (!
event->block_interrupts &&
event->num_users)
1337 for (
i = 0;
i <
block->num_registers; ++
i) {
1357 if (count_enabled) {
1359 "enabled %zu GPEs in block %.4s@[%d->%d]",
1360 count_enabled,
block->device_node->name.text,
1453 native_handler->
ctx =
ctx;
1463 event->num_users != 0) {
1469 "GPE(%02X) user handler claims %s triggering, originally "
1470 "configured as %s",
idx,
1477 event->native_handler = native_handler;
1478 event->handler_type =
type;
1541 native_handler =
event->native_handler;
1559 uacpi_free(native_handler,
sizeof(*native_handler));
1813 switch (
event->handler_type) {
1831 "not configuring implicit notify for GPE(%02X) -> %.4s: "
1832 " a user handler already installed",
event->idx,
1842 uacpi_warn(
"invalid GPE(%02X) handler type: %d",
1857 implicit_handler =
event->implicit_handler;
1858 while (implicit_handler) {
1859 if (implicit_handler->
device == wake_device) {
1864 implicit_handler = implicit_handler->
next;
1869 implicit_handler->
device = wake_device;
1870 implicit_handler->
next =
event->implicit_handler;
1871 event->implicit_handler = implicit_handler;
1874 "unable to configure implicit wake for GPE(%02X) -> %.4s: "
2011 uacpi_u8 gpe0_regs = 0, gpe1_regs = 0;
2015 if (fadt->x_gpe0_blk.address && fadt->gpe0_blk_len) {
2016 gpe0_regs = fadt->gpe0_blk_len / 2;
2019 gpe_node, fadt->sci_int, 0, fadt->x_gpe0_blk.address,
2020 fadt->x_gpe0_blk.address_space_id, gpe0_regs
2023 uacpi_error(
"unable to create FADT GPE block 0: %s",
2028 if (fadt->x_gpe1_blk.address && fadt->gpe1_blk_len) {
2029 gpe1_regs = fadt->gpe1_blk_len / 2;
2034 "FADT GPE block 1 [%d->%d] collides with GPE block 0 "
2035 "[%d->%d], ignoring",
2044 gpe_node, fadt->sci_int, fadt->gpe1_base, fadt->x_gpe1_blk.address,
2045 fadt->x_gpe1_blk.address_space_id, gpe1_regs
2048 uacpi_error(
"unable to create FADT GPE block 1: %s",
2053 if (gpe0_regs == 0 && gpe1_regs == 0)
2142 uacpi_warn(
"platform has no global lock but a release event "
2143 "was fired anyway?");
2149 uacpi_trace(
"spurious firmware global lock release notification");
2153 uacpi_trace(
"received a firmware global lock release notification");
2212 "unable to install SCI interrupt handler: %s",
2233 uacpi_warn(
"platform has global lock but no FACS was provided");
2267 next_ctx =
ctx->next;
2269 next_block =
ctx->gpe_head;
2270 while (next_block) {
2272 next_block =
block->next;
2387 info |= UACPI_EVENT_INFO_HAS_HANDLER;
2395 info |= UACPI_EVENT_INFO_ENABLED | UACPI_EVENT_INFO_HW_ENABLED;
2401 info |= UACPI_EVENT_INFO_HW_STATUS;
2434 info |= UACPI_EVENT_INFO_HAS_HANDLER;
2440 info |= UACPI_EVENT_INFO_ENABLED;
2442 info |= UACPI_EVENT_INFO_MASKED;
2444 info |= UACPI_EVENT_INFO_ENABLED_FOR_WAKE;
2449 if (raw_value &
mask)
2450 info |= UACPI_EVENT_INFO_HW_ENABLED;
2455 if (raw_value &
mask)
2456 info |= UACPI_EVENT_INFO_HW_STATUS;
2464#define PM1_STATUS_BITS ( \
2465 ACPI_PM1_STS_TMR_STS_MASK | \
2466 ACPI_PM1_STS_BM_STS_MASK | \
2467 ACPI_PM1_STS_GBL_STS_MASK | \
2468 ACPI_PM1_STS_PWRBTN_STS_MASK | \
2469 ACPI_PM1_STS_SLPBTN_STS_MASK | \
2470 ACPI_PM1_STS_RTC_STS_MASK | \
2471 ACPI_PM1_STS_PCIEXP_WAKE_STS_MASK | \
2472 ACPI_PM1_STS_WAKE_STS_MASK \
unsigned long uacpi_cpu_flags
void user(int argc, const char *argv[])
uacpi_status uacpi_recursive_lock_deinit(struct uacpi_recursive_lock *lock)
uacpi_status uacpi_recursive_lock_init(struct uacpi_recursive_lock *lock)
uacpi_status uacpi_recursive_lock_acquire(struct uacpi_recursive_lock *lock)
uacpi_status uacpi_recursive_lock_release(struct uacpi_recursive_lock *lock)
UINT(* handler)(MSIPACKAGE *)
#define ACPI_PM1_EN_PWRBTN_EN_MASK
#define ACPI_PM1_STS_SLPBTN_STS_MASK
#define ACPI_PM1_EN_RTC_EN_MASK
#define ACPI_PM1_EN_SLPBTN_EN_MASK
#define ACPI_PM1_EN_TMR_EN_MASK
#define ACPI_PM1_STS_CLEAR
#define ACPI_PM1_STS_RTC_STS_MASK
#define ACPI_PM1_STS_TMR_STS_MASK
#define ACPI_PM1_STS_PWRBTN_STS_MASK
#define ACPI_PM1_EN_GBL_EN_MASK
#define ACPI_PM1_STS_GBL_STS_MASK
uacpi_interrupt_ret(* uacpi_gpe_handler)(uacpi_handle ctx, uacpi_namespace_node *gpe_device, uacpi_u16 idx)
#define UACPI_GPE_REENABLE
uacpi_u16 uacpi_gpe_triggering uacpi_gpe_handler uacpi_handle ctx uacpi_u16 uacpi_namespace_node *wake_device uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u64 uacpi_address_space uacpi_u16 num_registers
@ UACPI_GPE_TRIGGERING_MAX
@ UACPI_GPE_TRIGGERING_EDGE
@ UACPI_GPE_TRIGGERING_LEVEL
@ UACPI_FIXED_EVENT_TIMER_STATUS
@ UACPI_FIXED_EVENT_SLEEP_BUTTON
@ UACPI_FIXED_EVENT_POWER_BUTTON
uacpi_u16 uacpi_gpe_triggering triggering
uacpi_u16 uacpi_gpe_triggering uacpi_gpe_handler uacpi_handle ctx uacpi_u16 uacpi_namespace_node *wake_device uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u16 idx uacpi_u64 uacpi_address_space address_space
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
static uacpi_bool uacpi_is_hardware_reduced(void)
struct uacpi_runtime_context g_uacpi_rt_ctx
#define UACPI_FIXED_EVENT_GLOBAL_LOCK
void uacpi_unmap_gas_nofree(uacpi_mapped_gas *gas)
uacpi_status uacpi_map_gas_noalloc(const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped)
uacpi_status uacpi_namespace_do_for_each_child(uacpi_namespace_node *parent, uacpi_iteration_callback descending_callback, uacpi_iteration_callback ascending_callback, uacpi_object_type_bits, uacpi_u32 max_depth, enum uacpi_should_lock, enum uacpi_permanent_only, void *user)
uacpi_status uacpi_namespace_write_unlock(void)
uacpi_object * uacpi_namespace_node_get_object_typed(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask)
@ UACPI_PERMANENT_ONLY_YES
uacpi_status uacpi_namespace_write_lock(void)
#define uacpi_kernel_alloc_zeroed
#define uacpi_free(mem, _)
uacpi_status uacpi_gas_read_mapped(const uacpi_mapped_gas *gas, uacpi_u64 *value)
uacpi_status uacpi_gas_write_mapped(const uacpi_mapped_gas *gas, uacpi_u64 value)
uacpi_status uacpi_namespace_node_is(const uacpi_namespace_node *node, uacpi_object_type type, uacpi_bool *out)
uacpi_namespace_node * uacpi_namespace_get_predefined(uacpi_predefined_namespace)
#define UACPI_MAX_DEPTH_ANY
@ UACPI_PREDEFINED_NAMESPACE_GPE
uacpi_namespace_node * uacpi_namespace_root(void)
uacpi_object_name uacpi_namespace_node_name(const uacpi_namespace_node *node)
@ UACPI_REGISTER_FIELD_PWRBTN_EN
@ UACPI_REGISTER_FIELD_PWRBTN_STS
@ UACPI_REGISTER_FIELD_RTC_STS
@ UACPI_REGISTER_FIELD_RTC_EN
@ UACPI_REGISTER_FIELD_GBL_EN
@ UACPI_REGISTER_FIELD_SLPBTN_STS
@ UACPI_REGISTER_FIELD_SLPBTN_EN
@ UACPI_REGISTER_FIELD_GBL_STS
@ UACPI_REGISTER_FIELD_TMR_STS
@ UACPI_REGISTER_FIELD_TMR_EN
uacpi_status uacpi_read_register_field(uacpi_register_field, uacpi_u64 *)
uacpi_status uacpi_read_register(uacpi_register, uacpi_u64 *)
uacpi_status uacpi_write_register(uacpi_register, uacpi_u64)
uacpi_status uacpi_write_register_field(uacpi_register_field, uacpi_u64)
#define uacpi_likely_success(expr)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_INTERNAL_ERROR
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_STATUS_ALREADY_EXISTS
@ UACPI_STATUS_HARDWARE_TIMEOUT
@ UACPI_STATUS_NO_HANDLER
const uacpi_char * uacpi_status_to_string(uacpi_status)
#define UACPI_INTERRUPT_HANDLED
@ UACPI_ITERATION_DECISION_BREAK
@ UACPI_ITERATION_DECISION_CONTINUE
@ UACPI_OBJECT_METHOD_BIT
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
@ UACPI_INIT_LEVEL_NAMESPACE_LOADED
uacpi_interrupt_ret(* uacpi_interrupt_handler)(uacpi_handle)
uacpi_u32 uacpi_interrupt_ret
#define UACPI_INTERRUPT_NOT_HANDLED
static struct gp_event * get_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
@ GPE_HANDLER_TYPE_NATIVE_HANDLER
@ GPE_HANDLER_TYPE_NATIVE_HANDLER_RAW
@ GPE_HANDLER_TYPE_IMPLICIT_NOTIFY
@ GPE_HANDLER_TYPE_AML_HANDLER
const uacpi_char * uacpi_gpe_triggering_to_string(uacpi_gpe_triggering triggering)
static uacpi_status gpe_enable_disable_for_wake(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_bool enabled)
uacpi_status uacpi_install_gpe_handler_raw(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_gpe_triggering triggering, uacpi_gpe_handler handler, uacpi_handle ctx)
static uacpi_handle g_gpe_state_slock
static uacpi_status gpe_add_user(struct gp_event *event, enum event_clear_if_first clear_if_first)
static struct uacpi_recursive_lock g_event_lock
uacpi_status uacpi_initialize_events_early(void)
static uacpi_status set_gpe_state(struct gp_event *event, enum gpe_state state)
uacpi_status uacpi_disable_gpe_for_wake(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
@ EVENT_CLEAR_IF_FIRST_YES
@ EVENT_CLEAR_IF_FIRST_NO
uacpi_status uacpi_suspend_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
uacpi_status uacpi_enable_fixed_event(uacpi_fixed_event event)
static const struct fixed_event fixed_events[UACPI_FIXED_EVENT_MAX+1]
static uacpi_status sanitize_device_and_find_gpe(uacpi_namespace_node **gpe_device, uacpi_u16 idx, struct gp_event **out_event)
uacpi_status uacpi_initialize_events(void)
static void async_run_gpe_handler(uacpi_handle opaque)
uacpi_status uacpi_resume_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
uacpi_status uacpi_enable_all_wake_gpes(void)
static uacpi_interrupt_ret handle_global_lock(uacpi_handle ctx)
static uacpi_status find_or_create_gpe_interrupt_ctx(uacpi_u32 irq, struct gpe_interrupt_ctx **out_ctx)
uacpi_status uacpi_enable_gpe_for_wake(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
uacpi_status uacpi_disable_all_gpes(void)
static struct fixed_event_handler fixed_event_handlers[UACPI_FIXED_EVENT_MAX+1]
static uacpi_bool gpe_mask_safe(struct gp_event *event)
static uacpi_interrupt_ret handle_sci(uacpi_handle ctx)
static struct gpe_interrupt_ctx * g_gpe_interrupt_head
uacpi_status uacpi_install_gpe_block(uacpi_namespace_node *gpe_device, uacpi_u64 address, uacpi_address_space address_space, uacpi_u16 num_registers, uacpi_u32 irq)
static uacpi_status set_event(uacpi_u8 event, uacpi_u8 value)
static uacpi_status gpe_mask_unmask(struct gp_event *event, uacpi_bool should_mask)
static void gpe_block_mask_safe(struct gpe_block *block)
uacpi_status uacpi_uninstall_gpe_handler(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_gpe_handler handler)
static uacpi_status maybe_dispatch_gpe(uacpi_namespace_node *gpe_device, struct gp_event *event)
static uacpi_status create_gpe_block(uacpi_namespace_node *device_node, uacpi_u32 irq, uacpi_u16 base_idx, uacpi_u64 address, uacpi_u8 address_space_id, uacpi_u16 num_registers)
static uacpi_status restore_gpe(struct gp_event *event)
uacpi_status uacpi_enable_all_runtime_gpes(void)
static uacpi_iteration_decision do_match_gpe_methods(uacpi_handle opaque, uacpi_namespace_node *node, uacpi_u32 depth)
static uacpi_bool gpe_needs_polling(struct gp_event *event)
static void uninstall_gpe_block(struct gpe_block *block)
static uacpi_iteration_decision do_initialize_gpe_block(struct gpe_block *block, uacpi_handle opaque)
#define EVENTS_PER_GPE_REGISTER
uacpi_iteration_decision(* gpe_block_iteration_callback)(struct gpe_block *, uacpi_handle)
uacpi_status uacpi_disable_fixed_event(uacpi_fixed_event event)
static uacpi_iteration_decision do_find_gpe(struct gpe_block *block, uacpi_handle opaque)
uacpi_status uacpi_mask_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
uacpi_status uacpi_gpe_info(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_event_info *out_info)
uacpi_status uacpi_uninstall_fixed_event_handler(uacpi_fixed_event event)
static void gpe_release_implicit_notify_handlers(struct gp_event *event)
uacpi_status uacpi_uninstall_gpe_block(uacpi_namespace_node *gpe_device)
uacpi_status uacpi_finalize_gpe_initialization(void)
static uacpi_interrupt_ret handle_gpes(uacpi_handle opaque)
static uacpi_u8 gpe_get_mask(struct gp_event *event)
uacpi_status uacpi_fixed_event_info(uacpi_fixed_event event, uacpi_event_info *out_info)
static uacpi_status gpe_suspend_resume(uacpi_namespace_node *gpe_device, uacpi_u16 idx, enum gpe_state state)
static uacpi_interrupt_ret dispatch_fixed_event(const struct fixed_event *ev, uacpi_fixed_event event)
uacpi_status uacpi_install_fixed_event_handler(uacpi_fixed_event event, uacpi_interrupt_handler handler, uacpi_handle user)
static uacpi_interrupt_ret dispatch_gpe(uacpi_namespace_node *device_node, struct gp_event *event)
static uacpi_bool g_gpes_finalized
static void for_each_gpe_block(gpe_block_iteration_callback cb, uacpi_handle handle)
uacpi_status uacpi_finish_handling_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
void uacpi_deinitialize_events(void)
static uacpi_status do_install_gpe_handler(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_gpe_triggering triggering, enum gpe_handler_type type, uacpi_gpe_handler handler, uacpi_handle ctx)
#define UACPI_EVENT_DISABLED
static uacpi_interrupt_ret detect_gpes(struct gpe_block *block)
uacpi_status uacpi_setup_gpe_for_wake(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_namespace_node *wake_device)
static uacpi_iteration_decision do_for_all_gpes(struct gpe_block *block, uacpi_handle opaque)
@ GPE_STATE_ENABLED_CONDITIONALLY
uacpi_status uacpi_enable_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
uacpi_status uacpi_clear_fixed_event(uacpi_fixed_event event)
static uacpi_interrupt_ret handle_fixed_events(void)
#define UACPI_EVENT_ENABLED
static uacpi_status gpe_block_apply_action(struct gpe_block *block, enum gpe_block_action action)
static void gp_event_toggle_masks(struct gp_event *event, uacpi_bool set_on)
@ GPE_BLOCK_ACTION_ENABLE_ALL_FOR_WAKE
@ GPE_BLOCK_ACTION_ENABLE_ALL_FOR_RUNTIME
@ GPE_BLOCK_ACTION_DISABLE_ALL
@ GPE_BLOCK_ACTION_CLEAR_ALL
uacpi_status uacpi_disable_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
static uacpi_status initialize_fixed_events(void)
static uacpi_status for_all_gpes_locked(struct do_for_all_gpes_ctx *ctx)
uacpi_status uacpi_clear_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
static uacpi_status initialize_gpes(void)
static void async_restore_gpe(uacpi_handle opaque)
uacpi_status uacpi_install_gpe_handler(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_gpe_triggering triggering, uacpi_gpe_handler handler, uacpi_handle ctx)
static uacpi_status gpe_remove_user(struct gp_event *event)
uacpi_status uacpi_unmask_gpe(uacpi_namespace_node *gpe_device, uacpi_u16 idx)
static uacpi_status clear_gpe(struct gp_event *event)
static uacpi_status gpe_get_mask_unmask(uacpi_namespace_node *gpe_device, uacpi_u16 idx, uacpi_bool should_mask)
void uacpi_events_match_post_dynamic_table_load(void)
static struct gp_event * gpe_from_block(struct gpe_block *block, uacpi_u16 idx)
uacpi_status uacpi_clear_all_events(void)
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
uacpi_status uacpi_notify_all(uacpi_namespace_node *node, uacpi_u64 value)
uacpi_status uacpi_string_to_integer(const uacpi_char *str, uacpi_size max_chars, enum uacpi_base base, uacpi_u64 *out_value)
uacpi_status uacpi_execute_control_method(uacpi_namespace_node *scope, uacpi_control_method *method, const uacpi_object_array *args, uacpi_object **ret)
void * uacpi_kernel_alloc(uacpi_size size)
uacpi_status uacpi_kernel_wait_for_work_completion(void)
uacpi_status uacpi_kernel_schedule_work(uacpi_work_type, uacpi_work_handler, uacpi_handle ctx)
uacpi_status uacpi_kernel_uninstall_interrupt_handler(uacpi_interrupt_handler, uacpi_handle irq_handle)
uacpi_status uacpi_kernel_install_interrupt_handler(uacpi_u32 irq, uacpi_interrupt_handler, uacpi_handle ctx, uacpi_handle *out_irq_handle)
uacpi_handle uacpi_kernel_create_event(void)
@ UACPI_WORK_GPE_EXECUTION
@ UACPI_WORK_NOTIFICATION
uacpi_handle uacpi_kernel_create_spinlock(void)
void uacpi_kernel_signal_event(uacpi_handle)
void uacpi_kernel_free_spinlock(uacpi_handle)
uacpi_cpu_flags uacpi_kernel_lock_spinlock(uacpi_handle)
void uacpi_kernel_unlock_spinlock(uacpi_handle, uacpi_cpu_flags)
enum gpe_block_action action
uacpi_interrupt_handler handler
uacpi_u8 block_interrupts
struct gpe_implicit_notify_handler * implicit_handler
struct gpe_register * reg
uacpi_namespace_node * aml_handler
struct gpe_native_handler * native_handler
uacpi_handle * any_handler
uacpi_namespace_node * device_node
struct gpe_register * registers
struct gpe_interrupt_ctx * irq_ctx
uacpi_namespace_node * device
struct gpe_implicit_notify_handler * next
struct gpe_interrupt_ctx * prev
struct gpe_interrupt_ctx * next
struct gpe_block * gpe_head
uacpi_bool post_dynamic_table_load
uacpi_u8 previously_enabled
uacpi_u8 previous_triggering
uacpi_handle previous_handler
uacpi_u8 previous_handler_type
uacpi_namespace_node * gpe_device
struct gp_event * out_event
struct gpe_block * out_block
uacpi_control_method * method
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static unsigned int block