Beispiel #1
0
void
AcpiHwClearGpe (
    UINT32                  GpeNumber)
{
    UINT32                  RegisterIndex;
    UINT32                  BitMask;


    FUNCTION_ENTRY ();


    /*
     * Translate GPE number to index into global registers array.
     */
    RegisterIndex = AcpiGbl_GpeValid[GpeNumber];

    /*
     * Figure out the bit offset for this GPE within the target register.
     */
    BitMask = AcpiGbl_DecodeTo8bit [MOD_8 (GpeNumber)];

    /*
     * Write a one to the appropriate bit in the status register to
     * clear this GPE.
     */
    AcpiOsWritePort (AcpiGbl_GpeRegisters[RegisterIndex].StatusAddr, BitMask, 8);
}
Beispiel #2
0
void
acpi_hw_disable_gpe (
	u32                     gpe_number)
{
	u8                      in_byte;
	u32                     register_index;
	u8                      bit_mask;

	/*
	 * 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 = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].enable_addr);
	acpi_os_out8 (acpi_gbl_gpe_registers[register_index].enable_addr,
			 (u8)(in_byte & ~bit_mask));
}
Beispiel #3
0
void
AcpiHwDisableGpe (
    UINT32                  GpeNumber)
{
    UINT32                  InByte;
    UINT32                  RegisterIndex;
    UINT32                  BitMask;


    FUNCTION_ENTRY ();


    /*
     * Translate GPE number to index into global registers array.
     */
    RegisterIndex = AcpiGbl_GpeValid[GpeNumber];

    /*
     * Figure out the bit offset for this GPE within the target register.
     */
    BitMask = AcpiGbl_DecodeTo8bit [MOD_8 (GpeNumber)];

    /*
     * Read the current value of the register, clear the appropriate bit,
     * and write out the new register value to disable the GPE.
     */
    InByte = 0;
    AcpiOsReadPort (AcpiGbl_GpeRegisters[RegisterIndex].EnableAddr, &InByte, 8);
    AcpiOsWritePort (AcpiGbl_GpeRegisters[RegisterIndex].EnableAddr,
                (InByte & ~BitMask), 8);
}
Beispiel #4
0
void
acpi_hw_enable_gpe_for_wakeup (
	u32                     gpe_number)
{
	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)];

	/*
	 * Set the bit so we will not disable this when sleeping
	 */
	acpi_gbl_gpe_registers[register_index].wake_enable |= bit_mask;
}
Beispiel #5
0
void
acpi_hw_enable_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, set the appropriate bit
	 * to enable the GPE, and write out the new register.
	 */
	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);
}
Beispiel #6
0
void
acpi_hw_clear_gpe (
	u32                     gpe_number)
{
	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)];

	/*
	 * Write a one to the appropriate bit in the status register to
	 * clear this GPE.
	 */
	acpi_os_write_port (acpi_gbl_gpe_registers[register_index].status_addr, bit_mask, 8);
}
Beispiel #7
0
void
acpi_hw_get_gpe_status (
	u32                     gpe_number,
	acpi_event_status       *event_status)
{
	u32                     in_byte = 0;
	u32                     register_index = 0;
	u32                     bit_mask = 0;


	FUNCTION_ENTRY ();


	if (!event_status) {
		return;
	}

	(*event_status) = 0;

	/*
	 * 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)];

	/*
	 * Enabled?:
	 */
	in_byte = 0;
	acpi_os_read_port (acpi_gbl_gpe_registers[register_index].enable_addr, &in_byte, 8);
	if (bit_mask & in_byte) {
		(*event_status) |= ACPI_EVENT_FLAG_ENABLED;
	}

	/*
	 * Enabled for wake?:
	 */
	if (bit_mask & acpi_gbl_gpe_registers[register_index].wake_enable) {
		(*event_status) |= ACPI_EVENT_FLAG_WAKE_ENABLED;
	}

	/*
	 * Set?
	 */
	in_byte = 0;
	acpi_os_read_port (acpi_gbl_gpe_registers[register_index].status_addr, &in_byte, 8);
	if (bit_mask & in_byte) {
		(*event_status) |= ACPI_EVENT_FLAG_SET;
	}
}
Beispiel #8
0
void
AcpiHwGetGpeStatus (
    UINT32                  GpeNumber,
    ACPI_EVENT_STATUS       *EventStatus)
{
    UINT32                  InByte = 0;
    UINT32                  RegisterIndex = 0;
    UINT32                  BitMask = 0;


    FUNCTION_ENTRY ();


    if (!EventStatus)
    {
        return;
    }

    (*EventStatus) = 0;

    /*
     * Translate GPE number to index into global registers array.
     */
    RegisterIndex = AcpiGbl_GpeValid[GpeNumber];

    /*
     * Figure out the bit offset for this GPE within the target register.
     */
    BitMask = AcpiGbl_DecodeTo8bit [MOD_8 (GpeNumber)];

    /*
     * Enabled?:
     */
    InByte = 0;
    AcpiOsReadPort (AcpiGbl_GpeRegisters[RegisterIndex].EnableAddr, &InByte, 8);
    if (BitMask & InByte)
    {
        (*EventStatus) |= ACPI_EVENT_FLAG_ENABLED;
    }

    /*
     * Set?
     */
    InByte = 0;
    AcpiOsReadPort (AcpiGbl_GpeRegisters[RegisterIndex].StatusAddr, &InByte, 8);
    if (BitMask & InByte)
    {
        (*EventStatus) |= ACPI_EVENT_FLAG_SET;
    }
}
Beispiel #9
0
void
acpi_hw_get_gpe_status (
	u32                     gpe_number,
	ACPI_EVENT_STATUS       *event_status)
{
	u8                      in_byte = 0;
	u32                     register_index = 0;
	u8                      bit_mask = 0;

	if (!event_status) {
		return;
	}

	(*event_status) = 0;

	/*
	 * 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)];

	/*
	 * Enabled?:
	 */
	in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].enable_addr);

	if (bit_mask & in_byte) {
		(*event_status) |= ACPI_EVENT_FLAG_ENABLED;
	}

	/*
	 * Set?
	 */
	in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].status_addr);

	if (bit_mask & in_byte) {
		(*event_status) |= ACPI_EVENT_FLAG_SET;
	}
}