mirror of
https://github.com/acpica/acpica/
synced 2025-02-24 17:34:43 +03:00
commit
ee3f49cfb2
@ -551,8 +551,8 @@ AcpiEvGpeDetect (
|
|||||||
ACPI_GPE_HANDLER_INFO *GpeHandlerInfo;
|
ACPI_GPE_HANDLER_INFO *GpeHandlerInfo;
|
||||||
UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED;
|
UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED;
|
||||||
UINT8 EnabledStatusByte;
|
UINT8 EnabledStatusByte;
|
||||||
UINT32 StatusReg;
|
UINT64 StatusReg;
|
||||||
UINT32 EnableReg;
|
UINT64 EnableReg;
|
||||||
ACPI_CPU_FLAGS Flags;
|
ACPI_CPU_FLAGS Flags;
|
||||||
UINT32 i;
|
UINT32 i;
|
||||||
UINT32 j;
|
UINT32 j;
|
||||||
@ -629,7 +629,7 @@ AcpiEvGpeDetect (
|
|||||||
"RunEnable=%02X, WakeEnable=%02X\n",
|
"RunEnable=%02X, WakeEnable=%02X\n",
|
||||||
GpeRegisterInfo->BaseGpeNumber,
|
GpeRegisterInfo->BaseGpeNumber,
|
||||||
GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
|
GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
|
||||||
StatusReg, EnableReg,
|
(UINT32) StatusReg, (UINT32) EnableReg,
|
||||||
GpeRegisterInfo->EnableForRun,
|
GpeRegisterInfo->EnableForRun,
|
||||||
GpeRegisterInfo->EnableForWake));
|
GpeRegisterInfo->EnableForWake));
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ AcpiHwLowSetGpe (
|
|||||||
{
|
{
|
||||||
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
|
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
|
||||||
ACPI_STATUS Status = AE_OK;
|
ACPI_STATUS Status = AE_OK;
|
||||||
UINT32 EnableMask;
|
UINT64 EnableMask;
|
||||||
UINT32 RegisterBit;
|
UINT32 RegisterBit;
|
||||||
|
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ AcpiHwGetGpeStatus (
|
|||||||
ACPI_GPE_EVENT_INFO *GpeEventInfo,
|
ACPI_GPE_EVENT_INFO *GpeEventInfo,
|
||||||
ACPI_EVENT_STATUS *EventStatus)
|
ACPI_EVENT_STATUS *EventStatus)
|
||||||
{
|
{
|
||||||
UINT32 InByte;
|
UINT64 InByte;
|
||||||
UINT32 RegisterBit;
|
UINT32 RegisterBit;
|
||||||
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
|
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
|
||||||
ACPI_EVENT_STATUS LocalEventStatus = 0;
|
ACPI_EVENT_STATUS LocalEventStatus = 0;
|
||||||
|
@ -355,9 +355,8 @@ AcpiHwValidateRegister (
|
|||||||
*
|
*
|
||||||
* RETURN: Status
|
* RETURN: Status
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Read from either memory or IO space. This is a 32-bit max
|
* DESCRIPTION: Read from either memory or IO space. This is a 64-bit max
|
||||||
* version of AcpiRead, used internally since the overhead of
|
* version of AcpiRead.
|
||||||
* 64-bit values is not needed.
|
|
||||||
*
|
*
|
||||||
* LIMITATIONS: <These limitations also apply to AcpiHwWrite>
|
* LIMITATIONS: <These limitations also apply to AcpiHwWrite>
|
||||||
* SpaceID must be SystemMemory or SystemIO.
|
* SpaceID must be SystemMemory or SystemIO.
|
||||||
@ -366,7 +365,7 @@ AcpiHwValidateRegister (
|
|||||||
|
|
||||||
ACPI_STATUS
|
ACPI_STATUS
|
||||||
AcpiHwRead (
|
AcpiHwRead (
|
||||||
UINT32 *Value,
|
UINT64 *Value,
|
||||||
ACPI_GENERIC_ADDRESS *Reg)
|
ACPI_GENERIC_ADDRESS *Reg)
|
||||||
{
|
{
|
||||||
UINT64 Address;
|
UINT64 Address;
|
||||||
@ -384,18 +383,18 @@ AcpiHwRead (
|
|||||||
|
|
||||||
/* Validate contents of the GAS register */
|
/* Validate contents of the GAS register */
|
||||||
|
|
||||||
Status = AcpiHwValidateRegister (Reg, 32, &Address);
|
Status = AcpiHwValidateRegister (Reg, 64, &Address);
|
||||||
if (ACPI_FAILURE (Status))
|
if (ACPI_FAILURE (Status))
|
||||||
{
|
{
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize entire 32-bit return value to zero, convert AccessWidth
|
* Initialize entire 64-bit return value to zero, convert AccessWidth
|
||||||
* into number of bits based
|
* into number of bits based
|
||||||
*/
|
*/
|
||||||
*Value = 0;
|
*Value = 0;
|
||||||
AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 32);
|
AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 64);
|
||||||
BitWidth = Reg->BitOffset + Reg->BitWidth;
|
BitWidth = Reg->BitOffset + Reg->BitWidth;
|
||||||
BitOffset = Reg->BitOffset;
|
BitOffset = Reg->BitOffset;
|
||||||
|
|
||||||
@ -408,7 +407,7 @@ AcpiHwRead (
|
|||||||
{
|
{
|
||||||
if (BitOffset >= AccessWidth)
|
if (BitOffset >= AccessWidth)
|
||||||
{
|
{
|
||||||
Value32 = 0;
|
Value64 = 0;
|
||||||
BitOffset -= AccessWidth;
|
BitOffset -= AccessWidth;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -418,31 +417,31 @@ AcpiHwRead (
|
|||||||
Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
|
Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
|
||||||
Address + Index * ACPI_DIV_8 (AccessWidth),
|
Address + Index * ACPI_DIV_8 (AccessWidth),
|
||||||
&Value64, AccessWidth);
|
&Value64, AccessWidth);
|
||||||
Value32 = (UINT32) Value64;
|
|
||||||
}
|
}
|
||||||
else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
||||||
{
|
{
|
||||||
Status = AcpiHwReadPort ((ACPI_IO_ADDRESS)
|
Status = AcpiHwReadPort ((ACPI_IO_ADDRESS)
|
||||||
Address + Index * ACPI_DIV_8 (AccessWidth),
|
Address + Index * ACPI_DIV_8 (AccessWidth),
|
||||||
&Value32, AccessWidth);
|
&Value32, AccessWidth);
|
||||||
|
Value64 = (UINT64) Value32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use offset style bit writes because "Index * AccessWidth" is
|
* Use offset style bit writes because "Index * AccessWidth" is
|
||||||
* ensured to be less than 32-bits by AcpiHwValidateRegister().
|
* ensured to be less than 64-bits by AcpiHwValidateRegister().
|
||||||
*/
|
*/
|
||||||
ACPI_SET_BITS (Value, Index * AccessWidth,
|
ACPI_SET_BITS (Value, Index * AccessWidth,
|
||||||
ACPI_MASK_BITS_ABOVE_32 (AccessWidth), Value32);
|
ACPI_MASK_BITS_ABOVE_64 (AccessWidth), Value64);
|
||||||
|
|
||||||
BitWidth -= BitWidth > AccessWidth ? AccessWidth : BitWidth;
|
BitWidth -= BitWidth > AccessWidth ? AccessWidth : BitWidth;
|
||||||
Index++;
|
Index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
||||||
"Read: %8.8X width %2d from %8.8X%8.8X (%s)\n",
|
"Read: %8.8X%8.8X width %2d from %8.8X%8.8X (%s)\n",
|
||||||
*Value, AccessWidth, ACPI_FORMAT_UINT64 (Address),
|
ACPI_FORMAT_UINT64 (*Value), AccessWidth,
|
||||||
AcpiUtGetRegionName (Reg->SpaceId)));
|
ACPI_FORMAT_UINT64 (Address), AcpiUtGetRegionName (Reg->SpaceId)));
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
@ -457,15 +456,14 @@ AcpiHwRead (
|
|||||||
*
|
*
|
||||||
* RETURN: Status
|
* RETURN: Status
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Write to either memory or IO space. This is a 32-bit max
|
* DESCRIPTION: Write to either memory or IO space. This is a 64-bit max
|
||||||
* version of AcpiWrite, used internally since the overhead of
|
* version of AcpiWrite.
|
||||||
* 64-bit values is not needed.
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
ACPI_STATUS
|
ACPI_STATUS
|
||||||
AcpiHwWrite (
|
AcpiHwWrite (
|
||||||
UINT32 Value,
|
UINT64 Value,
|
||||||
ACPI_GENERIC_ADDRESS *Reg)
|
ACPI_GENERIC_ADDRESS *Reg)
|
||||||
{
|
{
|
||||||
UINT64 Address;
|
UINT64 Address;
|
||||||
@ -473,7 +471,6 @@ AcpiHwWrite (
|
|||||||
UINT32 BitWidth;
|
UINT32 BitWidth;
|
||||||
UINT8 BitOffset;
|
UINT8 BitOffset;
|
||||||
UINT64 Value64;
|
UINT64 Value64;
|
||||||
UINT32 Value32;
|
|
||||||
UINT8 Index;
|
UINT8 Index;
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
|
|
||||||
@ -483,7 +480,7 @@ AcpiHwWrite (
|
|||||||
|
|
||||||
/* Validate contents of the GAS register */
|
/* Validate contents of the GAS register */
|
||||||
|
|
||||||
Status = AcpiHwValidateRegister (Reg, 32, &Address);
|
Status = AcpiHwValidateRegister (Reg, 64, &Address);
|
||||||
if (ACPI_FAILURE (Status))
|
if (ACPI_FAILURE (Status))
|
||||||
{
|
{
|
||||||
return (Status);
|
return (Status);
|
||||||
@ -491,7 +488,7 @@ AcpiHwWrite (
|
|||||||
|
|
||||||
/* Convert AccessWidth into number of bits based */
|
/* Convert AccessWidth into number of bits based */
|
||||||
|
|
||||||
AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 32);
|
AccessWidth = AcpiHwGetAccessBitWidth (Address, Reg, 64);
|
||||||
BitWidth = Reg->BitOffset + Reg->BitWidth;
|
BitWidth = Reg->BitOffset + Reg->BitWidth;
|
||||||
BitOffset = Reg->BitOffset;
|
BitOffset = Reg->BitOffset;
|
||||||
|
|
||||||
@ -504,10 +501,10 @@ AcpiHwWrite (
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Use offset style bit reads because "Index * AccessWidth" is
|
* Use offset style bit reads because "Index * AccessWidth" is
|
||||||
* ensured to be less than 32-bits by AcpiHwValidateRegister().
|
* ensured to be less than 64-bits by AcpiHwValidateRegister().
|
||||||
*/
|
*/
|
||||||
Value32 = ACPI_GET_BITS (&Value, Index * AccessWidth,
|
Value64 = ACPI_GET_BITS (&Value, Index * AccessWidth,
|
||||||
ACPI_MASK_BITS_ABOVE_32 (AccessWidth));
|
ACPI_MASK_BITS_ABOVE_64 (AccessWidth));
|
||||||
|
|
||||||
if (BitOffset >= AccessWidth)
|
if (BitOffset >= AccessWidth)
|
||||||
{
|
{
|
||||||
@ -517,7 +514,6 @@ AcpiHwWrite (
|
|||||||
{
|
{
|
||||||
if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
|
if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
|
||||||
{
|
{
|
||||||
Value64 = (UINT64) Value32;
|
|
||||||
Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
|
Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
|
||||||
Address + Index * ACPI_DIV_8 (AccessWidth),
|
Address + Index * ACPI_DIV_8 (AccessWidth),
|
||||||
Value64, AccessWidth);
|
Value64, AccessWidth);
|
||||||
@ -526,7 +522,7 @@ AcpiHwWrite (
|
|||||||
{
|
{
|
||||||
Status = AcpiHwWritePort ((ACPI_IO_ADDRESS)
|
Status = AcpiHwWritePort ((ACPI_IO_ADDRESS)
|
||||||
Address + Index * ACPI_DIV_8 (AccessWidth),
|
Address + Index * ACPI_DIV_8 (AccessWidth),
|
||||||
Value32, AccessWidth);
|
(UINT32) Value64, AccessWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -539,9 +535,9 @@ AcpiHwWrite (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
||||||
"Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n",
|
"Wrote: %8.8X%8.8X width %2d to %8.8X%8.8X (%s)\n",
|
||||||
Value, AccessWidth, ACPI_FORMAT_UINT64 (Address),
|
ACPI_FORMAT_UINT64 (Value), AccessWidth,
|
||||||
AcpiUtGetRegionName (Reg->SpaceId)));
|
ACPI_FORMAT_UINT64 (Address), AcpiUtGetRegionName (Reg->SpaceId)));
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
@ -688,6 +684,7 @@ AcpiHwRegisterRead (
|
|||||||
UINT32 *ReturnValue)
|
UINT32 *ReturnValue)
|
||||||
{
|
{
|
||||||
UINT32 Value = 0;
|
UINT32 Value = 0;
|
||||||
|
UINT64 Value64;
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
@ -726,12 +723,14 @@ AcpiHwRegisterRead (
|
|||||||
|
|
||||||
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
|
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
|
||||||
|
|
||||||
Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPm2ControlBlock);
|
Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPm2ControlBlock);
|
||||||
|
Value = (UINT32) Value64;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
|
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
|
||||||
|
|
||||||
Status = AcpiHwRead (&Value, &AcpiGbl_FADT.XPmTimerBlock);
|
Status = AcpiHwRead (&Value64, &AcpiGbl_FADT.XPmTimerBlock);
|
||||||
|
Value = (UINT32) Value64;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
|
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
|
||||||
@ -749,7 +748,7 @@ AcpiHwRegisterRead (
|
|||||||
|
|
||||||
if (ACPI_SUCCESS (Status))
|
if (ACPI_SUCCESS (Status))
|
||||||
{
|
{
|
||||||
*ReturnValue = Value;
|
*ReturnValue = (UINT32) Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return_ACPI_STATUS (Status);
|
return_ACPI_STATUS (Status);
|
||||||
@ -789,6 +788,7 @@ AcpiHwRegisterWrite (
|
|||||||
{
|
{
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
UINT32 ReadValue;
|
UINT32 ReadValue;
|
||||||
|
UINT64 ReadValue64;
|
||||||
|
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE (HwRegisterWrite);
|
ACPI_FUNCTION_TRACE (HwRegisterWrite);
|
||||||
@ -850,11 +850,12 @@ AcpiHwRegisterWrite (
|
|||||||
* For control registers, all reserved bits must be preserved,
|
* For control registers, all reserved bits must be preserved,
|
||||||
* as per the ACPI spec.
|
* as per the ACPI spec.
|
||||||
*/
|
*/
|
||||||
Status = AcpiHwRead (&ReadValue, &AcpiGbl_FADT.XPm2ControlBlock);
|
Status = AcpiHwRead (&ReadValue64, &AcpiGbl_FADT.XPm2ControlBlock);
|
||||||
if (ACPI_FAILURE (Status))
|
if (ACPI_FAILURE (Status))
|
||||||
{
|
{
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
ReadValue = (UINT32) ReadValue64;
|
||||||
|
|
||||||
/* Insert the bits to be preserved */
|
/* Insert the bits to be preserved */
|
||||||
|
|
||||||
@ -910,26 +911,29 @@ AcpiHwReadMultiple (
|
|||||||
{
|
{
|
||||||
UINT32 ValueA = 0;
|
UINT32 ValueA = 0;
|
||||||
UINT32 ValueB = 0;
|
UINT32 ValueB = 0;
|
||||||
|
UINT64 Value64;
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
/* The first register is always required */
|
/* The first register is always required */
|
||||||
|
|
||||||
Status = AcpiHwRead (&ValueA, RegisterA);
|
Status = AcpiHwRead (&Value64, RegisterA);
|
||||||
if (ACPI_FAILURE (Status))
|
if (ACPI_FAILURE (Status))
|
||||||
{
|
{
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
ValueA = (UINT32) Value64;
|
||||||
|
|
||||||
/* Second register is optional */
|
/* Second register is optional */
|
||||||
|
|
||||||
if (RegisterB->Address)
|
if (RegisterB->Address)
|
||||||
{
|
{
|
||||||
Status = AcpiHwRead (&ValueB, RegisterB);
|
Status = AcpiHwRead (&Value64, RegisterB);
|
||||||
if (ACPI_FAILURE (Status))
|
if (ACPI_FAILURE (Status))
|
||||||
{
|
{
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
ValueB = (UINT32) Value64;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -247,84 +247,14 @@ AcpiRead (
|
|||||||
UINT64 *ReturnValue,
|
UINT64 *ReturnValue,
|
||||||
ACPI_GENERIC_ADDRESS *Reg)
|
ACPI_GENERIC_ADDRESS *Reg)
|
||||||
{
|
{
|
||||||
UINT32 ValueLo;
|
|
||||||
UINT32 ValueHi;
|
|
||||||
UINT32 Width;
|
|
||||||
UINT64 Address;
|
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
ACPI_FUNCTION_NAME (AcpiRead);
|
ACPI_FUNCTION_NAME (AcpiRead);
|
||||||
|
|
||||||
|
|
||||||
if (!ReturnValue)
|
Status = AcpiHwRead (ReturnValue, Reg);
|
||||||
{
|
return (Status);
|
||||||
return (AE_BAD_PARAMETER);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Validate contents of the GAS register. Allow 64-bit transfers */
|
|
||||||
|
|
||||||
Status = AcpiHwValidateRegister (Reg, 64, &Address);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Two address spaces supported: Memory or I/O. PCI_Config is
|
|
||||||
* not supported here because the GAS structure is insufficient
|
|
||||||
*/
|
|
||||||
if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
|
|
||||||
{
|
|
||||||
Status = AcpiOsReadMemory ((ACPI_PHYSICAL_ADDRESS)
|
|
||||||
Address, ReturnValue, Reg->BitWidth);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
|
||||||
{
|
|
||||||
ValueLo = 0;
|
|
||||||
ValueHi = 0;
|
|
||||||
|
|
||||||
Width = Reg->BitWidth;
|
|
||||||
if (Width == 64)
|
|
||||||
{
|
|
||||||
Width = 32; /* Break into two 32-bit transfers */
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = AcpiHwReadPort ((ACPI_IO_ADDRESS)
|
|
||||||
Address, &ValueLo, Width);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Reg->BitWidth == 64)
|
|
||||||
{
|
|
||||||
/* Read the top 32 bits */
|
|
||||||
|
|
||||||
Status = AcpiHwReadPort ((ACPI_IO_ADDRESS)
|
|
||||||
(Address + 4), &ValueHi, 32);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the return value only if status is AE_OK */
|
|
||||||
|
|
||||||
*ReturnValue = (ValueLo | ((UINT64) ValueHi << 32));
|
|
||||||
}
|
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
|
||||||
"Read: %8.8X%8.8X width %2d from %8.8X%8.8X (%s)\n",
|
|
||||||
ACPI_FORMAT_UINT64 (*ReturnValue), Reg->BitWidth,
|
|
||||||
ACPI_FORMAT_UINT64 (Address),
|
|
||||||
AcpiUtGetRegionName (Reg->SpaceId)));
|
|
||||||
|
|
||||||
return (AE_OK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_EXPORT_SYMBOL (AcpiRead)
|
ACPI_EXPORT_SYMBOL (AcpiRead)
|
||||||
@ -348,67 +278,13 @@ AcpiWrite (
|
|||||||
UINT64 Value,
|
UINT64 Value,
|
||||||
ACPI_GENERIC_ADDRESS *Reg)
|
ACPI_GENERIC_ADDRESS *Reg)
|
||||||
{
|
{
|
||||||
UINT32 Width;
|
|
||||||
UINT64 Address;
|
|
||||||
ACPI_STATUS Status;
|
ACPI_STATUS Status;
|
||||||
|
|
||||||
|
|
||||||
ACPI_FUNCTION_NAME (AcpiWrite);
|
ACPI_FUNCTION_NAME (AcpiWrite);
|
||||||
|
|
||||||
|
|
||||||
/* Validate contents of the GAS register. Allow 64-bit transfers */
|
Status = AcpiHwWrite (Value, Reg);
|
||||||
|
|
||||||
Status = AcpiHwValidateRegister (Reg, 64, &Address);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Two address spaces supported: Memory or IO. PCI_Config is
|
|
||||||
* not supported here because the GAS structure is insufficient
|
|
||||||
*/
|
|
||||||
if (Reg->SpaceId == ACPI_ADR_SPACE_SYSTEM_MEMORY)
|
|
||||||
{
|
|
||||||
Status = AcpiOsWriteMemory ((ACPI_PHYSICAL_ADDRESS)
|
|
||||||
Address, Value, Reg->BitWidth);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
|
||||||
{
|
|
||||||
Width = Reg->BitWidth;
|
|
||||||
if (Width == 64)
|
|
||||||
{
|
|
||||||
Width = 32; /* Break into two 32-bit transfers */
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = AcpiHwWritePort ((ACPI_IO_ADDRESS)
|
|
||||||
Address, ACPI_LODWORD (Value), Width);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Reg->BitWidth == 64)
|
|
||||||
{
|
|
||||||
Status = AcpiHwWritePort ((ACPI_IO_ADDRESS)
|
|
||||||
(Address + 4), ACPI_HIDWORD (Value), 32);
|
|
||||||
if (ACPI_FAILURE (Status))
|
|
||||||
{
|
|
||||||
return (Status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT ((ACPI_DB_IO,
|
|
||||||
"Wrote: %8.8X%8.8X width %2d to %8.8X%8.8X (%s)\n",
|
|
||||||
ACPI_FORMAT_UINT64 (Value), Reg->BitWidth,
|
|
||||||
ACPI_FORMAT_UINT64 (Address),
|
|
||||||
AcpiUtGetRegionName (Reg->SpaceId)));
|
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,12 +185,12 @@ AcpiHwValidateRegister (
|
|||||||
|
|
||||||
ACPI_STATUS
|
ACPI_STATUS
|
||||||
AcpiHwRead (
|
AcpiHwRead (
|
||||||
UINT32 *Value,
|
UINT64 *Value,
|
||||||
ACPI_GENERIC_ADDRESS *Reg);
|
ACPI_GENERIC_ADDRESS *Reg);
|
||||||
|
|
||||||
ACPI_STATUS
|
ACPI_STATUS
|
||||||
AcpiHwWrite (
|
AcpiHwWrite (
|
||||||
UINT32 Value,
|
UINT64 Value,
|
||||||
ACPI_GENERIC_ADDRESS *Reg);
|
ACPI_GENERIC_ADDRESS *Reg);
|
||||||
|
|
||||||
ACPI_BIT_REGISTER_INFO *
|
ACPI_BIT_REGISTER_INFO *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user