/******************************************************************************* * * FUNCTION: acpi_ev_get_gpe_device * * PARAMETERS: GPE_WALK_CALLBACK * * RETURN: Status * * DESCRIPTION: Matches the input GPE index (0-current_gpe_count) with a GPE * block device. NULL if the GPE is one of the FADT-defined GPEs. *
******************************************************************************/
if (info->index < info->next_block_base_index) { /* * The GPE index is within this block, get the node. Leave the node * NULL for the FADT-defined GPEs
*/ if ((gpe_block->node)->type == ACPI_TYPE_DEVICE) {
info->gpe_device = gpe_block->node;
}
info->status = AE_OK; return (AE_CTRL_END);
}
return (AE_OK);
}
/******************************************************************************* * * FUNCTION: acpi_ev_get_gpe_xrupt_block * * PARAMETERS: interrupt_number - Interrupt for a GPE block * gpe_xrupt_block - Where the block is returned * * RETURN: Status * * DESCRIPTION: Get or Create a GPE interrupt block. There is one interrupt * block per unique interrupt level used for GPEs. Should be * called only when the GPE lists are semaphore locked and not * subject to change. *
******************************************************************************/
/******************************************************************************* * * FUNCTION: acpi_ev_delete_gpe_xrupt * * PARAMETERS: gpe_xrupt - A GPE interrupt info block * * RETURN: Status * * DESCRIPTION: Remove and free a gpe_xrupt block. Remove an associated * interrupt handler if not the SCI interrupt. *
******************************************************************************/
/* We never want to remove the SCI interrupt handler */
if (gpe_xrupt->interrupt_number == acpi_gbl_FADT.sci_interrupt) {
gpe_xrupt->gpe_block_list_head = NULL;
return_ACPI_STATUS(AE_OK);
}
/* Disable this interrupt */
status =
acpi_os_remove_interrupt_handler(gpe_xrupt->interrupt_number,
acpi_ev_gpe_xrupt_handler); if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
/* Unlink the interrupt block with lock */
flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); if (gpe_xrupt->previous) {
gpe_xrupt->previous->next = gpe_xrupt->next;
} else { /* No previous, update list head */
acpi_gbl_gpe_xrupt_list_head = gpe_xrupt->next;
}
if (gpe_xrupt->next) {
gpe_xrupt->next->previous = gpe_xrupt->previous;
}
acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
/******************************************************************************* * * FUNCTION: acpi_ev_delete_gpe_handlers * * PARAMETERS: gpe_xrupt_info - GPE Interrupt info * gpe_block - Gpe Block info * * RETURN: Status * * DESCRIPTION: Delete all Handler objects found in the GPE data structs. * Used only prior to termination. *
******************************************************************************/
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.