⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwgpe.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (ACPI_FAILURE (status)) {		goto unlock_and_exit;	}	if (bit_mask & in_byte) {		local_event_status |= ACPI_EVENT_FLAG_ENABLED;	}	/* GPE Enabled for wake? */	if (bit_mask & gpe_register_info->wake_enable) {		local_event_status |= ACPI_EVENT_FLAG_WAKE_ENABLED;	}	/* GPE active (set)? */	status = acpi_hw_low_level_read (8, &in_byte, &gpe_register_info->status_address);	if (ACPI_FAILURE (status)) {		goto unlock_and_exit;	}	if (bit_mask & in_byte) {		local_event_status |= ACPI_EVENT_FLAG_SET;	}	/* Set return value */	(*event_status) = local_event_status;unlock_and_exit:	return (status);}/****************************************************************************** * * FUNCTION:    acpi_hw_disable_gpe_block * * PARAMETERS:  gpe_xrupt_info      - GPE Interrupt info *              gpe_block           - Gpe Block info * * RETURN:      Status * * DESCRIPTION: Disable all GPEs within a GPE block * ******************************************************************************/acpi_statusacpi_hw_disable_gpe_block (	struct acpi_gpe_xrupt_info      *gpe_xrupt_info,	struct acpi_gpe_block_info      *gpe_block){	u32                             i;	acpi_status                     status;	/* Examine each GPE Register within the block */	for (i = 0; i < gpe_block->register_count; i++) {		/* Disable all GPEs in this register */		status = acpi_hw_low_level_write (8, 0x00,				 &gpe_block->register_info[i].enable_address);		if (ACPI_FAILURE (status)) {			return (status);		}	}	return (AE_OK);}/****************************************************************************** * * FUNCTION:    acpi_hw_clear_gpe_block * * PARAMETERS:  gpe_xrupt_info      - GPE Interrupt info *              gpe_block           - Gpe Block info * * RETURN:      Status * * DESCRIPTION: Clear status bits for all GPEs within a GPE block * ******************************************************************************/acpi_statusacpi_hw_clear_gpe_block (	struct acpi_gpe_xrupt_info      *gpe_xrupt_info,	struct acpi_gpe_block_info      *gpe_block){	u32                             i;	acpi_status                     status;	/* Examine each GPE Register within the block */	for (i = 0; i < gpe_block->register_count; i++) {		/* Clear status on all GPEs in this register */		status = acpi_hw_low_level_write (8, 0xFF,				 &gpe_block->register_info[i].status_address);		if (ACPI_FAILURE (status)) {			return (status);		}	}	return (AE_OK);}/****************************************************************************** * * FUNCTION:    acpi_hw_prepare_gpe_block_for_sleep * * PARAMETERS:  gpe_xrupt_info      - GPE Interrupt info *              gpe_block           - Gpe Block info * * RETURN:      Status * * DESCRIPTION: Disable all runtime GPEs and enable all wakeup GPEs -- within *              a single GPE block * ******************************************************************************/static acpi_statusacpi_hw_prepare_gpe_block_for_sleep (	struct acpi_gpe_xrupt_info      *gpe_xrupt_info,	struct acpi_gpe_block_info      *gpe_block){	u32                             i;	struct acpi_gpe_register_info   *gpe_register_info;	u32                             in_value;	acpi_status                     status;	/* Get the register info for the entire GPE block */	gpe_register_info = gpe_block->register_info;	/* Examine each GPE Register within the block */	for (i = 0; i < gpe_block->register_count; i++) {		/*		 * Read the enabled/disabled status of all GPEs. We		 * will be using it to restore all the GPEs later.		 *		 * NOTE:  Wake GPEs are are ALL disabled at this time, so when we wake		 * and restore this register, they will be automatically disabled.		 */		status = acpi_hw_low_level_read (8, &in_value,				 &gpe_register_info->enable_address);		if (ACPI_FAILURE (status)) {			return (status);		}		gpe_register_info->enable = (u8) in_value;		/*		 * 1) Disable all runtime GPEs		 * 2) Enable all wakeup GPEs		 */		status = acpi_hw_low_level_write (8, gpe_register_info->wake_enable,				&gpe_register_info->enable_address);		if (ACPI_FAILURE (status)) {			return (status);		}		/* Point to next GPE register */		gpe_register_info++;	}	return (AE_OK);}/****************************************************************************** * * FUNCTION:    acpi_hw_prepare_gpes_for_sleep * * PARAMETERS:  None * * RETURN:      Status * * DESCRIPTION: Disable all runtime GPEs, enable all wake GPEs. *              Called with interrupts disabled. The interrupt handler also *              modifies gpe_register_info->Enable, so it should not be *              given the chance to run until after the runtime GPEs are *              re-enabled. * ******************************************************************************/acpi_statusacpi_hw_prepare_gpes_for_sleep (	void){	acpi_status                     status;	ACPI_FUNCTION_ENTRY ();	status = acpi_ev_walk_gpe_list (acpi_hw_prepare_gpe_block_for_sleep);	return (status);}/****************************************************************************** * * FUNCTION:    acpi_hw_restore_gpe_block_on_wake * * PARAMETERS:  gpe_xrupt_info      - GPE Interrupt info *              gpe_block           - Gpe Block info * * RETURN:      Status * * DESCRIPTION: Enable all runtime GPEs and disable all wake GPEs -- in one *              GPE block * ******************************************************************************/static acpi_statusacpi_hw_restore_gpe_block_on_wake (	struct acpi_gpe_xrupt_info      *gpe_xrupt_info,	struct acpi_gpe_block_info      *gpe_block){	u32                             i;	struct acpi_gpe_register_info   *gpe_register_info;	acpi_status                     status;	/* This callback processes one entire GPE block */	/* Get the register info for the entire GPE block */	gpe_register_info = gpe_block->register_info;	/* Examine each GPE register within the block */	for (i = 0; i < gpe_block->register_count; i++) {		/* Clear the entire status register */		status = acpi_hw_low_level_write (8, 0xFF,				 &gpe_block->register_info[i].status_address);		if (ACPI_FAILURE (status)) {			return (status);		}		/*		 * Restore the GPE Enable register, which will do the following:		 *		 * 1) Disable all wakeup GPEs		 * 2) Enable all runtime GPEs		 *		 *  (On sleep, we saved the enabled status of all GPEs)		 */		status = acpi_hw_low_level_write (8, gpe_register_info->enable,				 &gpe_register_info->enable_address);		if (ACPI_FAILURE (status)) {			return (status);		}		/* Point to next GPE register */		gpe_register_info++;	}	return (AE_OK);}/****************************************************************************** * * FUNCTION:    acpi_hw_restore_gpes_on_wake * * PARAMETERS:  None * * RETURN:      Status * * DESCRIPTION: Enable all runtime GPEs and disable all wake GPEs -- in all *              GPE blocks * ******************************************************************************/acpi_statusacpi_hw_restore_gpes_on_wake (	void){	acpi_status                     status;	ACPI_FUNCTION_ENTRY ();	status = acpi_ev_walk_gpe_list (acpi_hw_restore_gpe_block_on_wake);	return (status);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -