Beispiel #1
0
void
acpi_hw_disable_gpe (
	u32                     gpe_number)
{
	u32                     in_byte;
	u32                     register_index;
	u32                     bit_mask;


	FUNCTION_ENTRY ();


	/*
	 * Translate GPE number to index into global registers array.
	 */
	register_index = acpi_gbl_gpe_valid[gpe_number];

	/*
	 * Figure out the bit offset for this GPE within the target register.
	 */
	bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)];

	/*
	 * Read the current value of the register, clear the appropriate bit,
	 * and write out the new register value to disable the GPE.
	 */
	in_byte = 0;
	acpi_os_read_port (acpi_gbl_gpe_registers[register_index].enable_addr, &in_byte, 8);
	acpi_os_write_port (acpi_gbl_gpe_registers[register_index].enable_addr,
			 (in_byte & ~bit_mask), 8);

	acpi_hw_disable_gpe_for_wakeup(gpe_number);
}
Beispiel #2
0
acpi_status
acpi_hw_disable_gpe (
	struct acpi_gpe_event_info      *gpe_event_info)
{
	u32                             in_byte;
	acpi_status                     status;
	struct acpi_gpe_register_info   *gpe_register_info;


	ACPI_FUNCTION_ENTRY ();


	/* Get the info block for the entire GPE register */

	gpe_register_info = gpe_event_info->register_info;
	if (!gpe_register_info) {
		return (AE_BAD_PARAMETER);
	}

	/*
	 * Read the current value of the register, clear the appropriate bit,
	 * and write out the new register value to disable the GPE.
	 */
	status = acpi_hw_low_level_read (8, &in_byte,
			  &gpe_register_info->enable_address);
	if (ACPI_FAILURE (status)) {
		return (status);
	}

	/* Write the byte with this GPE bit cleared */

	status = acpi_hw_low_level_write (8, (in_byte & ~(gpe_event_info->bit_mask)),
			  &gpe_register_info->enable_address);
	if (ACPI_FAILURE (status)) {
		return (status);
	}

	acpi_hw_disable_gpe_for_wakeup (gpe_event_info);
	return (AE_OK);
}