mirror of
https://github.com/acpica/acpica/
synced 2025-02-07 09:04:21 +03:00
Removed unnecessary macro (to make the 16-bit version build)
date 2002.02.01.22.45.00; author rmoore1; state Exp;
This commit is contained in:
parent
e9d5df00ae
commit
a527db8193
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: hwregs - Read/write access functions for the various ACPI
|
||||
* control and status registers.
|
||||
* $Revision: 1.115 $
|
||||
* $Revision: 1.117 $
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -126,35 +126,6 @@
|
||||
MODULE_NAME ("hwregs")
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwGetBitShift
|
||||
*
|
||||
* PARAMETERS: Mask - Input mask to determine bit shift from.
|
||||
* Must have at least 1 bit set.
|
||||
*
|
||||
* RETURN: Bit location of the lsb of the mask
|
||||
*
|
||||
* DESCRIPTION: Returns the bit number for the low order bit that's set.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
UINT32
|
||||
AcpiHwGetBitShift (
|
||||
UINT32 Mask)
|
||||
{
|
||||
UINT32 Shift;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("HwGetBitShift");
|
||||
|
||||
|
||||
for (Shift = 0; ((Mask >> Shift) & 1) == 0; Shift++)
|
||||
{ ; }
|
||||
|
||||
return_VALUE (Shift);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -171,21 +142,22 @@ AcpiHwGetBitShift (
|
||||
void
|
||||
AcpiHwClearAcpiStatus (void)
|
||||
{
|
||||
UINT16 GpeLength;
|
||||
UINT16 Index;
|
||||
NATIVE_UINT i;
|
||||
NATIVE_UINT GpeBlock;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("HwClearAcpiStatus");
|
||||
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n",
|
||||
ACPI_ALL_FIXED_STATUS_BITS,
|
||||
ACPI_BITMASK_ALL_FIXED_STATUS,
|
||||
(UINT16) ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1aEvtBlk.Address)));
|
||||
|
||||
|
||||
AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_STATUS, ACPI_ALL_FIXED_STATUS_BITS);
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
|
||||
ACPI_BITMASK_ALL_FIXED_STATUS);
|
||||
|
||||
/* Clear the fixed events */
|
||||
|
||||
@ -193,31 +165,17 @@ AcpiHwClearAcpiStatus (void)
|
||||
{
|
||||
AcpiOsWritePort ((ACPI_IO_ADDRESS)
|
||||
ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address),
|
||||
ACPI_ALL_FIXED_STATUS_BITS, 16);
|
||||
ACPI_BITMASK_ALL_FIXED_STATUS, 16);
|
||||
}
|
||||
|
||||
/* Clear the GPE Bits */
|
||||
|
||||
if (AcpiGbl_FADT->Gpe0BlkLen)
|
||||
for (GpeBlock = 0; GpeBlock < ACPI_MAX_GPE_BLOCKS; GpeBlock++)
|
||||
{
|
||||
GpeLength = (UINT16) DIV_2 (AcpiGbl_FADT->Gpe0BlkLen);
|
||||
|
||||
for (Index = 0; Index < GpeLength; Index++)
|
||||
for (i = 0; i < AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount; i++)
|
||||
{
|
||||
AcpiOsWritePort ((ACPI_IO_ADDRESS) (
|
||||
ACPI_GET_ADDRESS (AcpiGbl_FADT->XGpe0Blk.Address) + Index),
|
||||
0xFF, 8);
|
||||
}
|
||||
}
|
||||
|
||||
if (AcpiGbl_FADT->Gpe1BlkLen)
|
||||
{
|
||||
GpeLength = (UINT16) DIV_2 (AcpiGbl_FADT->Gpe1BlkLen);
|
||||
|
||||
for (Index = 0; Index < GpeLength; Index++)
|
||||
{
|
||||
AcpiOsWritePort ((ACPI_IO_ADDRESS) (
|
||||
ACPI_GET_ADDRESS (AcpiGbl_FADT->XGpe1Blk.Address) + Index),
|
||||
AcpiOsWritePort ((ACPI_IO_ADDRESS)
|
||||
(AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress + i),
|
||||
0xFF, 8);
|
||||
}
|
||||
}
|
||||
@ -229,37 +187,37 @@ AcpiHwClearAcpiStatus (void)
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwObtainSleepTypeRegisterData
|
||||
* FUNCTION: AcpiHwGetSleepTypeData
|
||||
*
|
||||
* PARAMETERS: SleepState - Numeric state requested
|
||||
* *Slp_TypA - Pointer to byte to receive SLP_TYPa value
|
||||
* *Slp_TypB - Pointer to byte to receive SLP_TYPb value
|
||||
* PARAMETERS: SleepState - Numeric sleep state
|
||||
* *SleepTypeA - Where SLP_TYPa is returned
|
||||
* *SleepTypeB - Where SLP_TYPb is returned
|
||||
*
|
||||
* RETURN: Status - ACPI status
|
||||
*
|
||||
* DESCRIPTION: AcpiHwObtainSleepTypeRegisterData() obtains the SLP_TYP and
|
||||
* SLP_TYPb values for the sleep state requested.
|
||||
* DESCRIPTION: Obtain the SLP_TYPa and SLP_TYPb values for the requested sleep
|
||||
* state.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiHwObtainSleepTypeRegisterData (
|
||||
AcpiHwGetSleepTypeData (
|
||||
UINT8 SleepState,
|
||||
UINT8 *Slp_TypA,
|
||||
UINT8 *Slp_TypB)
|
||||
UINT8 *SleepTypeA,
|
||||
UINT8 *SleepTypeB)
|
||||
{
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
ACPI_OPERAND_OBJECT *ObjDesc;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("HwObtainSleepTypeRegisterData");
|
||||
FUNCTION_TRACE ("HwGetSleepTypeData");
|
||||
|
||||
|
||||
/*
|
||||
* Validate parameters
|
||||
*/
|
||||
if ((SleepState > ACPI_S_STATES_MAX) ||
|
||||
!Slp_TypA || !Slp_TypB)
|
||||
!SleepTypeA || !SleepTypeB)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
@ -296,25 +254,23 @@ AcpiHwObtainSleepTypeRegisterData (
|
||||
/* Must have at least two elements */
|
||||
|
||||
REPORT_ERROR (("Sleep State package does not have at least two elements\n"));
|
||||
Status = AE_ERROR;
|
||||
Status = AE_AML_NO_OPERAND;
|
||||
}
|
||||
else if (((ObjDesc->Package.Elements[0])->Common.Type !=
|
||||
ACPI_TYPE_INTEGER) ||
|
||||
((ObjDesc->Package.Elements[1])->Common.Type !=
|
||||
ACPI_TYPE_INTEGER))
|
||||
else if (((ObjDesc->Package.Elements[0])->Common.Type != ACPI_TYPE_INTEGER) ||
|
||||
((ObjDesc->Package.Elements[1])->Common.Type != ACPI_TYPE_INTEGER))
|
||||
{
|
||||
/* Must have two */
|
||||
|
||||
REPORT_ERROR (("Sleep State package elements are not both of type Number\n"));
|
||||
Status = AE_ERROR;
|
||||
Status = AE_AML_OPERAND_TYPE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Valid _Sx_ package size, type, and value
|
||||
*/
|
||||
*Slp_TypA = (UINT8) (ObjDesc->Package.Elements[0])->Integer.Value;
|
||||
*Slp_TypB = (UINT8) (ObjDesc->Package.Elements[1])->Integer.Value;
|
||||
*SleepTypeA = (UINT8) (ObjDesc->Package.Elements[0])->Integer.Value;
|
||||
*SleepTypeB = (UINT8) (ObjDesc->Package.Elements[1])->Integer.Value;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE (Status))
|
||||
@ -328,7 +284,6 @@ AcpiHwObtainSleepTypeRegisterData (
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwGetRegisterBitMask
|
||||
@ -341,164 +296,123 @@ AcpiHwObtainSleepTypeRegisterData (
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
UINT32
|
||||
AcpiHwGetRegisterBitMask (
|
||||
ACPI_BIT_REGISTER_INFO *
|
||||
AcpiHwGetBitRegisterInfo (
|
||||
UINT32 RegisterId)
|
||||
{
|
||||
PROC_NAME ("HwGetBitRegisterInfo");
|
||||
|
||||
switch (ACPI_GET_REGISTER_BLOCK_ID (RegisterId))
|
||||
|
||||
if (RegisterId > ACPI_BITREG_MAX)
|
||||
{
|
||||
case ACPI_PM1_STATUS:
|
||||
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_TIMER_STATUS:
|
||||
return (ACPI_TIMER_STATUS_MASK);
|
||||
|
||||
case ACPI_BM_STATUS:
|
||||
return (ACPI_BM_STATUS_MASK);
|
||||
|
||||
case ACPI_GBL_LOCK_STATUS:
|
||||
return (ACPI_GBL_LOCK_STATUS_MASK);
|
||||
|
||||
case ACPI_POWER_BTN_STATUS:
|
||||
return (ACPI_POWER_BTN_STATUS_MASK);
|
||||
|
||||
case ACPI_SLEEP_BTN_STATUS:
|
||||
return (ACPI_SLEEP_BTN_STATUS_MASK);
|
||||
|
||||
case ACPI_RT_CLOCK_STATUS:
|
||||
return (ACPI_RT_CLOCK_STATUS_MASK);
|
||||
|
||||
case ACPI_WAKE_STATUS:
|
||||
return (ACPI_WAKE_STATUS_MASK);
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
case ACPI_PM1_ENABLE:
|
||||
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_TIMER_ENABLE:
|
||||
return (ACPI_TIMER_ENABLE_MASK);
|
||||
|
||||
case ACPI_GBL_LOCK_ENABLE:
|
||||
return (ACPI_GBL_LOCK_ENABLE_MASK);
|
||||
|
||||
case ACPI_POWER_BTN_ENABLE:
|
||||
return (ACPI_POWER_BTN_ENABLE_MASK);
|
||||
|
||||
case ACPI_SLEEP_BTN_ENABLE:
|
||||
return (ACPI_SLEEP_BTN_ENABLE_MASK);
|
||||
|
||||
case ACPI_RT_CLOCK_ENABLE:
|
||||
return (ACPI_RT_CLOCK_ENABLE_MASK);
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
case ACPI_PM1_CONTROL:
|
||||
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_SCI_ENABLE:
|
||||
return (ACPI_SCI_ENABLE_MASK);
|
||||
|
||||
case ACPI_BM_RLD:
|
||||
return (ACPI_BM_RLD_MASK);
|
||||
|
||||
case ACPI_GBL_LOCK_RELEASE:
|
||||
return (ACPI_GBL_LOCK_RELEASE_MASK);
|
||||
|
||||
case ACPI_SLEEP_TYPE_A:
|
||||
case ACPI_SLEEP_TYPE_B:
|
||||
return (ACPI_SLEEP_TYPE_X_MASK);
|
||||
|
||||
case ACPI_SLEEP_ENABLE:
|
||||
return (ACPI_SLEEP_ENABLE_MASK);
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
case ACPI_PM2_CONTROL:
|
||||
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_ARB_DIS:
|
||||
return (ACPI_ARB_DIS_MASK);
|
||||
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
case ACPI_PM_TIMER:
|
||||
|
||||
return (ACPI_TIMER_VAL_MASK);
|
||||
|
||||
|
||||
default:
|
||||
return (0);
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid BitRegister ID: %X\n", RegisterId));
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return (&AcpiGbl_BitRegisterInfo[RegisterId]);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwRegisterBitAccess
|
||||
* FUNCTION: AcpiHwBitRegisterRead
|
||||
*
|
||||
* PARAMETERS: ReadWrite - Either ACPI_READ or ACPI_WRITE.
|
||||
* PARAMETERS: RegisterId - index of ACPI Register to access
|
||||
* UseLock - Lock the hardware
|
||||
* RegisterId - index of ACPI Register to access
|
||||
* Value - (only used on write) value to write to the
|
||||
* Register. Shifted all the way right.
|
||||
*
|
||||
* RETURN: Value written to or read from specified Register. This value
|
||||
* is shifted all the way right.
|
||||
* RETURN: Value is read from specified Register. Value returned is
|
||||
* normalized to bit0 (is shifted all the way right)
|
||||
*
|
||||
* DESCRIPTION: Generic ACPI Register read/write function.
|
||||
* DESCRIPTION: ACPI BitRegister read function.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
UINT32
|
||||
AcpiHwRegisterBitAccess (
|
||||
NATIVE_UINT ReadWrite,
|
||||
BOOLEAN UseLock,
|
||||
AcpiHwBitRegisterRead (
|
||||
UINT32 RegisterId,
|
||||
...) /* Value (only used on write) */
|
||||
UINT32 Flags)
|
||||
{
|
||||
UINT32 RegisterValue = 0;
|
||||
UINT32 Mask = 0;
|
||||
UINT32 Value = 0;
|
||||
va_list marker;
|
||||
ACPI_BIT_REGISTER_INFO *BitRegInfo;
|
||||
|
||||
|
||||
FUNCTION_TRACE ("HwRegisterBitAccess");
|
||||
FUNCTION_TRACE ("HwBitRegisterRead");
|
||||
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
{
|
||||
va_start (marker, RegisterId);
|
||||
Value = va_arg (marker, UINT32);
|
||||
va_end (marker);
|
||||
}
|
||||
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
/* Get the info structure corresponding to the requested ACPI Register */
|
||||
|
||||
BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId);
|
||||
if (!BitRegInfo)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, BitRegInfo->ParentRegister);
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
/* Normalize the value that was read */
|
||||
|
||||
RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI RegisterRead: got %X\n", RegisterValue));
|
||||
return_VALUE (RegisterValue);
|
||||
}
|
||||
|
||||
|
||||
Mask = AcpiHwGetRegisterBitMask (RegisterId);
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiHwBitRegisterWrite
|
||||
*
|
||||
* PARAMETERS: RegisterId - ID of ACPI BitRegister to access
|
||||
* Value - (only used on write) value to write to the
|
||||
* Register, NOT pre-normalized to the bit pos.
|
||||
* Flags - Lock the hardware or not
|
||||
*
|
||||
* RETURN: Value written to from specified Register. This value
|
||||
* is shifted all the way right.
|
||||
*
|
||||
* DESCRIPTION: ACPI Bit Register write function.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
UINT32
|
||||
AcpiHwBitRegisterWrite (
|
||||
UINT32 RegisterId,
|
||||
UINT32 Value,
|
||||
UINT32 Flags)
|
||||
{
|
||||
UINT32 RegisterValue = 0;
|
||||
ACPI_BIT_REGISTER_INFO *BitRegInfo;
|
||||
|
||||
|
||||
FUNCTION_TRACE_U32 ("HwBitRegisterWrite", RegisterId);
|
||||
|
||||
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
/* Get the info structure corresponding to the requested ACPI Register */
|
||||
|
||||
BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId);
|
||||
if (!BitRegInfo)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/* Always do a register read first so we can insert the new bits */
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, BitRegInfo->ParentRegister);
|
||||
|
||||
/*
|
||||
* Decode the Register ID
|
||||
@ -507,201 +421,84 @@ AcpiHwRegisterBitAccess (
|
||||
* Check bit id to fine locate Register offset.
|
||||
* Check Mask to determine Register offset, and then read-write.
|
||||
*/
|
||||
switch (ACPI_GET_REGISTER_BLOCK_ID (RegisterId))
|
||||
switch (BitRegInfo->ParentRegister)
|
||||
{
|
||||
case ACPI_PM1_STATUS:
|
||||
case ACPI_REGISTER_PM1_STATUS:
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_STATUS);
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
/*
|
||||
* Status Registers are different from the rest. Clear by
|
||||
* writing 1, writing 0 has no effect. So, the only relevent
|
||||
* information is the single bit we're interested in, all others should
|
||||
* be written as 0 so they will be left unchanged
|
||||
*/
|
||||
Value = ACPI_REGISTER_PREPARE_BITS (Value, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask);
|
||||
if (Value)
|
||||
{
|
||||
/*
|
||||
* Status Registers are different from the rest. Clear by
|
||||
* writing 1, writing 0 has no effect. So, the only relevent
|
||||
* information is the single bit we're interested in, all
|
||||
* others should be written as 0 so they will be left
|
||||
* unchanged
|
||||
*/
|
||||
Value <<= AcpiHwGetBitShift (Mask);
|
||||
Value &= Mask;
|
||||
|
||||
if (Value)
|
||||
{
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_STATUS,
|
||||
(UINT16) Value);
|
||||
RegisterValue = 0;
|
||||
}
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
|
||||
(UINT16) Value);
|
||||
RegisterValue = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_ENABLE:
|
||||
case ACPI_REGISTER_PM1_ENABLE:
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_ENABLE);
|
||||
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value);
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
{
|
||||
RegisterValue &= ~Mask;
|
||||
Value <<= AcpiHwGetBitShift (Mask);
|
||||
Value &= Mask;
|
||||
RegisterValue |= Value;
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_ENABLE, (UINT16) RegisterValue);
|
||||
}
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE, (UINT16) RegisterValue);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_CONTROL:
|
||||
case ACPI_REGISTER_PM1_CONTROL:
|
||||
|
||||
/*
|
||||
* Read the PM1 Control register.
|
||||
* Note that at this level, the fact that there are actually TWO
|
||||
* registers (A and B) and that B may not exist, are abstracted.
|
||||
* registers (A and B - and that B may not exist) is abstracted.
|
||||
*/
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_PM1_CONTROL);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", RegisterValue));
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
{
|
||||
RegisterValue &= ~Mask;
|
||||
Value <<= AcpiHwGetBitShift (Mask);
|
||||
Value &= Mask;
|
||||
RegisterValue |= Value;
|
||||
|
||||
/*
|
||||
* SLP_TYPE_x Registers are written differently
|
||||
* than any other control Registers with
|
||||
* respect to A and B Registers. The value
|
||||
* for A may be different than the value for B
|
||||
*
|
||||
* Therefore, pass the RegisterId, not just generic PM1_CONTROL,
|
||||
* because we need to do different things. Yuck.
|
||||
*/
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId,
|
||||
(UINT16) RegisterValue);
|
||||
}
|
||||
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value);
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId,
|
||||
(UINT16) RegisterValue);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM2_CONTROL:
|
||||
case ACPI_REGISTER_PM2_CONTROL:
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_PM2_CONTROL);
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM2_CONTROL);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %8.8X%8.8X\n",
|
||||
RegisterValue, HIDWORD (AcpiGbl_FADT->XPm2CntBlk.Address),
|
||||
LODWORD(AcpiGbl_FADT->XPm2CntBlk.Address)));
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
{
|
||||
RegisterValue &= ~Mask;
|
||||
Value <<= AcpiHwGetBitShift (Mask);
|
||||
Value &= Mask;
|
||||
RegisterValue |= Value;
|
||||
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",
|
||||
RegisterValue,
|
||||
HIDWORD (AcpiGbl_FADT->XPm2CntBlk.Address),
|
||||
LODWORD (AcpiGbl_FADT->XPm2CntBlk.Address)));
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
|
||||
ACPI_PM2_CONTROL, (UINT8) (RegisterValue));
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM_TIMER:
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
|
||||
ACPI_PM_TIMER);
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM_TIMER: Read %X from %8.8X%8.8X\n",
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",
|
||||
RegisterValue,
|
||||
HIDWORD (AcpiGbl_FADT->XPmTmrBlk.Address),
|
||||
LODWORD (AcpiGbl_FADT->XPmTmrBlk.Address)));
|
||||
HIDWORD (AcpiGbl_FADT->XPm2CntBlk.Address),
|
||||
LODWORD (AcpiGbl_FADT->XPm2CntBlk.Address)));
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
|
||||
ACPI_REGISTER_PM2_CONTROL, (UINT8) (RegisterValue));
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_GPE1_ENABLE_BLOCK:
|
||||
case ACPI_GPE1_STATUS_BLOCK:
|
||||
case ACPI_GPE0_ENABLE_BLOCK:
|
||||
case ACPI_GPE0_STATUS_BLOCK:
|
||||
|
||||
/* Determine the bit to be accessed
|
||||
*
|
||||
* (UINT32) RegisterId:
|
||||
* 31 24 16 8 0
|
||||
* +--------+--------+--------+--------+
|
||||
* | gpe_block_id | gpe_bit_number |
|
||||
* +--------+--------+--------+--------+
|
||||
*
|
||||
* gpe_block_id is one of GPE[01]_ENABLE_BLOCK and GPE[01]_STATUS_BLOCK
|
||||
* gpe_bit_number is relative from the gpe_block (0x00~0xFF)
|
||||
*/
|
||||
Mask = ACPI_GET_REGISTER_BIT_ID (RegisterId); /* gpe_bit_number */
|
||||
RegisterId = ACPI_GET_REGISTER_BLOCK_ID (RegisterId) | (Mask >> 3);
|
||||
Mask = AcpiGbl_DecodeTo8bit [Mask & 0x07];
|
||||
|
||||
/*
|
||||
* The base address of the GPE 0 Register Block
|
||||
* Plus 1/2 the length of the GPE 0 Register Block
|
||||
* The enable Register is the Register following the Status Register
|
||||
* and each Register is defined as 1/2 of the total Register Block
|
||||
*/
|
||||
|
||||
/*
|
||||
* This sets the bit within EnableBit that needs to be written to
|
||||
* the Register indicated in Mask to a 1, all others are 0
|
||||
*/
|
||||
|
||||
/* Now get the current Enable Bits in the selected Reg */
|
||||
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, RegisterId);
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "GPE Enable bits: Read %X from %X\n",
|
||||
RegisterValue, RegisterId));
|
||||
|
||||
if (ReadWrite == ACPI_WRITE)
|
||||
{
|
||||
RegisterValue &= ~Mask;
|
||||
Value <<= AcpiHwGetBitShift (Mask);
|
||||
Value &= Mask;
|
||||
RegisterValue |= Value;
|
||||
|
||||
/*
|
||||
* This write will put the Action state into the General Purpose
|
||||
* Enable Register indexed by the value in Mask
|
||||
*/
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n",
|
||||
RegisterValue, RegisterId));
|
||||
|
||||
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId,
|
||||
(UINT8) RegisterValue);
|
||||
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
|
||||
RegisterId);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_SMI_CMD_BLOCK:
|
||||
case ACPI_PROCESSOR_BLOCK:
|
||||
|
||||
/* Not used by any callers at this time - therefore, not implemented */
|
||||
|
||||
default:
|
||||
|
||||
Mask = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ACPI_MTX_LOCK == UseLock)
|
||||
if (Flags & ACPI_MTX_LOCK)
|
||||
{
|
||||
AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
RegisterValue &= Mask;
|
||||
RegisterValue >>= AcpiHwGetBitShift (Mask);
|
||||
/* Normalize the value that was read */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Register I/O: returning %X\n", RegisterValue));
|
||||
RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition);
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI RegisterWrite actual %X\n", RegisterValue));
|
||||
return_VALUE (RegisterValue);
|
||||
}
|
||||
|
||||
@ -737,16 +534,16 @@ AcpiHwRegisterRead (
|
||||
AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
switch (ACPI_GET_REGISTER_BLOCK_ID (RegisterId))
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_PM1_STATUS: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */
|
||||
|
||||
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
|
||||
Value |= AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_ENABLE: /* 16-bit access*/
|
||||
case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access*/
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Pm1EvtLen);
|
||||
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
|
||||
@ -754,56 +551,25 @@ AcpiHwRegisterRead (
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_CONTROL: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
|
||||
|
||||
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aCntBlk, 0);
|
||||
Value |= AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1bCntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM2_CONTROL: /* 8-bit access */
|
||||
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
|
||||
|
||||
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XPm2CntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM_TIMER: /* 32-bit access */
|
||||
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
|
||||
|
||||
Value = AcpiHwLowLevelRead (32, &AcpiGbl_FADT->XPmTmrBlk, 0);
|
||||
break;
|
||||
|
||||
/*
|
||||
* For the GPE Blocks, the lower word of RegisterId contains the
|
||||
* byte offset for which to read, as each part of each block may be
|
||||
* several bytes long.
|
||||
*/
|
||||
case ACPI_GPE0_STATUS_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, BankOffset);
|
||||
break;
|
||||
|
||||
case ACPI_GPE0_ENABLE_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen) +
|
||||
ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe0Blk, BankOffset);
|
||||
break;
|
||||
|
||||
case ACPI_GPE1_STATUS_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, BankOffset);
|
||||
break;
|
||||
|
||||
case ACPI_GPE1_ENABLE_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen) +
|
||||
ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XGpe1Blk, BankOffset);
|
||||
break;
|
||||
|
||||
case ACPI_SMI_CMD_BLOCK: /* 8bit */
|
||||
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
|
||||
|
||||
AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value, 8);
|
||||
break;
|
||||
@ -853,16 +619,16 @@ AcpiHwRegisterWrite (
|
||||
AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
|
||||
}
|
||||
|
||||
switch (ACPI_GET_REGISTER_BLOCK_ID (RegisterId))
|
||||
switch (RegisterId)
|
||||
{
|
||||
case ACPI_PM1_STATUS: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_ENABLE: /* 16-bit access*/
|
||||
case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access*/
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Pm1EvtLen);
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
|
||||
@ -870,68 +636,38 @@ AcpiHwRegisterWrite (
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1_CONTROL: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1A_CONTROL: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1A_CONTROL: /* 16-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM1B_CONTROL: /* 16-bit access */
|
||||
case ACPI_REGISTER_PM1B_CONTROL: /* 16-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM2_CONTROL: /* 8-bit access */
|
||||
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XPm2CntBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_PM_TIMER: /* 32-bit access */
|
||||
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
|
||||
|
||||
AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk, 0);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_GPE0_STATUS_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, BankOffset);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_GPE0_ENABLE_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Gpe0BlkLen) +
|
||||
ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe0Blk, BankOffset);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_GPE1_STATUS_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, BankOffset);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_GPE1_ENABLE_BLOCK: /* 8-bit access */
|
||||
|
||||
BankOffset = DIV_2 (AcpiGbl_FADT->Gpe1BlkLen) +
|
||||
ACPI_GET_REGISTER_BIT_ID (RegisterId);
|
||||
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XGpe1Blk, BankOffset);
|
||||
break;
|
||||
|
||||
|
||||
case ACPI_SMI_CMD_BLOCK: /* 8bit */
|
||||
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
|
||||
|
||||
/* SMI_CMD is currently always in IO space */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user