Fourth pass to include lint changes/comments/cleanup (64-bit)

date	2002.04.11.22.57.00;	author rmoore1;	state Exp;
This commit is contained in:
aystarik 2005-06-29 16:56:10 +00:00
parent 4c99581210
commit 0d175cb2e8

View File

@ -3,7 +3,7 @@
*
* Module Name: hwregs - Read/write access functions for the various ACPI
* control and status registers.
* $Revision: 1.120 $
* $Revision: 1.123 $
*
******************************************************************************/
@ -119,7 +119,6 @@
#define __HWREGS_C__
#include "acpi.h"
#include "achware.h"
#include "acnamesp.h"
#define _COMPONENT ACPI_HARDWARE
@ -138,10 +137,10 @@
*
******************************************************************************/
void
ACPI_STATUS
AcpiHwClearAcpiStatus (void)
{
NATIVE_UINT i;
NATIVE_UINT_MAX32 i;
NATIVE_UINT GpeBlock;
ACPI_STATUS Status;
@ -157,19 +156,26 @@ AcpiHwClearAcpiStatus (void)
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
if (ACPI_FAILURE (Status))
{
return_VOID;
return_ACPI_STATUS (Status);
}
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
ACPI_BITMASK_ALL_FIXED_STATUS);
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
ACPI_BITMASK_ALL_FIXED_STATUS);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
/* Clear the fixed events */
if (ACPI_VALID_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address))
{
AcpiOsWritePort ((ACPI_IO_ADDRESS)
ACPI_GET_ADDRESS (AcpiGbl_FADT->XPm1bEvtBlk.Address),
ACPI_BITMASK_ALL_FIXED_STATUS, 16);
Status = AcpiHwLowLevelWrite (16, ACPI_BITMASK_ALL_FIXED_STATUS,
&AcpiGbl_FADT->XPm1bEvtBlk, 0);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
}
/* Clear the GPE Bits */
@ -178,14 +184,18 @@ AcpiHwClearAcpiStatus (void)
{
for (i = 0; i < AcpiGbl_GpeBlockInfo[GpeBlock].RegisterCount; i++)
{
AcpiOsWritePort ((ACPI_IO_ADDRESS)
(AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress + i),
0xFF, 8);
Status = AcpiHwLowLevelWrite (8, 0xFF,
AcpiGbl_GpeBlockInfo[GpeBlock].BlockAddress, i);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
}
}
UnlockAndExit:
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
return_VOID;
return_ACPI_STATUS (Status);
}
@ -331,26 +341,20 @@ AcpiHwGetBitRegisterInfo (
*
******************************************************************************/
UINT32
ACPI_STATUS
AcpiHwBitRegisterRead (
UINT32 RegisterId,
UINT32 *ReturnValue,
UINT32 Flags)
{
UINT32 RegisterValue = 0;
ACPI_BIT_REGISTER_INFO *BitRegInfo;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE ("HwBitRegisterRead");
if (Flags & ACPI_MTX_LOCK)
{
if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_HARDWARE)))
{
return_VALUE (0);
}
}
/* Get the info structure corresponding to the requested ACPI Register */
BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId);
@ -359,19 +363,36 @@ AcpiHwBitRegisterRead (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, BitRegInfo->ParentRegister);
if (Flags & ACPI_MTX_LOCK)
{
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
BitRegInfo->ParentRegister, &RegisterValue);
if (Flags & ACPI_MTX_LOCK)
{
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
}
/* Normalize the value that was read */
if (ACPI_SUCCESS (Status))
{
/* Normalize the value that was read */
RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition);
RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask)
>> BitRegInfo->BitPosition);
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI RegisterRead: got %X\n", RegisterValue));
return_VALUE (RegisterValue);
*ReturnValue = RegisterValue;
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Read value %X\n", RegisterValue));
}
return_ACPI_STATUS (Status);
}
@ -384,14 +405,13 @@ AcpiHwBitRegisterRead (
* 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.
* RETURN: None
*
* DESCRIPTION: ACPI Bit Register write function.
*
******************************************************************************/
UINT32
ACPI_STATUS
AcpiHwBitRegisterWrite (
UINT32 RegisterId,
UINT32 Value,
@ -399,30 +419,38 @@ AcpiHwBitRegisterWrite (
{
UINT32 RegisterValue = 0;
ACPI_BIT_REGISTER_INFO *BitRegInfo;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE_U32 ("HwBitRegisterWrite", RegisterId);
if (Flags & ACPI_MTX_LOCK)
{
if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_HARDWARE)))
{
return_VALUE (0);
}
}
/* Get the info structure corresponding to the requested ACPI Register */
BitRegInfo = AcpiHwGetBitRegisterInfo (RegisterId);
if (!BitRegInfo)
{
ACPI_REPORT_ERROR (("Bad ACPI HW RegisterId: %X\n", RegisterId));
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
if (Flags & ACPI_MTX_LOCK)
{
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
}
/* Always do a register read first so we can insert the new bits */
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, BitRegInfo->ParentRegister);
Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
BitRegInfo->ParentRegister, &RegisterValue);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
/*
* Decode the Register ID
@ -441,11 +469,12 @@ AcpiHwBitRegisterWrite (
* 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);
Value = ACPI_REGISTER_PREPARE_BITS (Value,
BitRegInfo->BitPosition, BitRegInfo->AccessBitMask);
if (Value)
{
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
(UINT16) Value);
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
ACPI_REGISTER_PM1_STATUS, (UINT16) Value);
RegisterValue = 0;
}
break;
@ -453,9 +482,11 @@ AcpiHwBitRegisterWrite (
case ACPI_REGISTER_PM1_ENABLE:
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value);
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition,
BitRegInfo->AccessBitMask, Value);
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE, (UINT16) RegisterValue);
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
ACPI_REGISTER_PM1_ENABLE, (UINT16) RegisterValue);
break;
@ -468,29 +499,36 @@ AcpiHwBitRegisterWrite (
*/
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", RegisterValue));
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, Value);
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition,
BitRegInfo->AccessBitMask, Value);
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId,
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK, RegisterId,
(UINT16) RegisterValue);
break;
case ACPI_REGISTER_PM2_CONTROL:
RegisterValue = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM2_CONTROL);
Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
ACPI_REGISTER_PM2_CONTROL, &RegisterValue);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %8.8X%8.8X\n",
RegisterValue, ACPI_HIDWORD (AcpiGbl_FADT->XPm2CntBlk.Address),
ACPI_LODWORD (AcpiGbl_FADT->XPm2CntBlk.Address)));
ACPI_REGISTER_INSERT_VALUE (RegisterValue, BitRegInfo->BitPosition, BitRegInfo->AccessBitMask, 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,
ACPI_HIDWORD (AcpiGbl_FADT->XPm2CntBlk.Address),
ACPI_LODWORD (AcpiGbl_FADT->XPm2CntBlk.Address)));
AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
Status = AcpiHwRegisterWrite (ACPI_MTX_DO_NOT_LOCK,
ACPI_REGISTER_PM2_CONTROL, (UINT8) (RegisterValue));
break;
@ -499,6 +537,9 @@ AcpiHwBitRegisterWrite (
break;
}
UnlockAndExit:
if (Flags & ACPI_MTX_LOCK)
{
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
@ -506,10 +547,10 @@ AcpiHwBitRegisterWrite (
/* Normalize the value that was read */
RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition);
ACPI_DEBUG_EXEC (RegisterValue = ((RegisterValue & BitRegInfo->AccessBitMask) >> BitRegInfo->BitPosition));
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI RegisterWrite actual %X\n", RegisterValue));
return_VALUE (RegisterValue);
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "ACPI Register Write actual %X\n", RegisterValue));
return_ACPI_STATUS (Status);
}
@ -527,13 +568,16 @@ AcpiHwBitRegisterWrite (
*
******************************************************************************/
UINT32
ACPI_STATUS
AcpiHwRegisterRead (
BOOLEAN UseLock,
UINT32 RegisterId)
UINT32 RegisterId,
UINT32 *ReturnValue)
{
UINT32 Value = 0;
UINT32 Value1 = 0;
UINT32 Value2 = 0;
UINT32 BankOffset;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE ("HwRegisterRead");
@ -541,9 +585,10 @@ AcpiHwRegisterRead (
if (ACPI_MTX_LOCK == UseLock)
{
if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_HARDWARE)))
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
if (ACPI_FAILURE (Status))
{
return_VALUE (0);
return_ACPI_STATUS (Status);
}
}
@ -551,53 +596,78 @@ AcpiHwRegisterRead (
{
case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
Value |= AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
Value1 |= Value2;
break;
case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access*/
BankOffset = ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen);
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
Value |= AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1bEvtBlk, BankOffset);
Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT->XPm1bEvtBlk, BankOffset);
Value1 |= Value2;
break;
case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
Value = AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1aCntBlk, 0);
Value |= AcpiHwLowLevelRead (16, &AcpiGbl_FADT->XPm1bCntBlk, 0);
Status = AcpiHwLowLevelRead (16, &Value1, &AcpiGbl_FADT->XPm1aCntBlk, 0);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelRead (16, &Value2, &AcpiGbl_FADT->XPm1bCntBlk, 0);
Value1 |= Value2;
break;
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
Value = AcpiHwLowLevelRead (8, &AcpiGbl_FADT->XPm2CntBlk, 0);
Status = AcpiHwLowLevelRead (8, &Value1, &AcpiGbl_FADT->XPm2CntBlk, 0);
break;
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
Value = AcpiHwLowLevelRead (32, &AcpiGbl_FADT->XPmTmrBlk, 0);
Status = AcpiHwLowLevelRead (32, &Value1, &AcpiGbl_FADT->XPmTmrBlk, 0);
break;
case ACPI_REGISTER_SMI_COMMAND_BLOCK: /* 8-bit access */
AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value, 8);
Status = AcpiOsReadPort (AcpiGbl_FADT->SmiCmd, &Value1, 8);
break;
default:
/* Value will be returned as 0 */
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Register ID: %X\n", RegisterId));
Status = AE_BAD_PARAMETER;
break;
}
UnlockAndExit:
if (ACPI_MTX_LOCK == UseLock)
{
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
}
return_VALUE (Value);
if (ACPI_SUCCESS (Status))
{
*ReturnValue = Value1;
}
return_ACPI_STATUS (Status);
}
@ -615,13 +685,14 @@ AcpiHwRegisterRead (
*
******************************************************************************/
void
ACPI_STATUS
AcpiHwRegisterWrite (
BOOLEAN UseLock,
UINT32 RegisterId,
UINT32 Value)
{
UINT32 BankOffset;
ACPI_STATUS Status;
ACPI_FUNCTION_TRACE ("HwRegisterWrite");
@ -629,9 +700,10 @@ AcpiHwRegisterWrite (
if (ACPI_MTX_LOCK == UseLock)
{
if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_HARDWARE)))
Status = AcpiUtAcquireMutex (ACPI_MTX_HARDWARE);
if (ACPI_FAILURE (Status))
{
return_VOID;
return_ACPI_STATUS (Status);
}
}
@ -639,47 +711,62 @@ AcpiHwRegisterWrite (
{
case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, 0);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk, 0);
break;
case ACPI_REGISTER_PM1_ENABLE: /* 16-bit access*/
BankOffset = ACPI_DIV_2 (AcpiGbl_FADT->Pm1EvtLen);
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk, BankOffset);
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aEvtBlk, BankOffset);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bEvtBlk, BankOffset);
break;
case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
break;
case ACPI_REGISTER_PM1A_CONTROL: /* 16-bit access */
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1aCntBlk, 0);
break;
case ACPI_REGISTER_PM1B_CONTROL: /* 16-bit access */
AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
Status = AcpiHwLowLevelWrite (16, Value, &AcpiGbl_FADT->XPm1bCntBlk, 0);
break;
case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XPm2CntBlk, 0);
Status = AcpiHwLowLevelWrite (8, Value, &AcpiGbl_FADT->XPm2CntBlk, 0);
break;
case ACPI_REGISTER_PM_TIMER: /* 32-bit access */
AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk, 0);
Status = AcpiHwLowLevelWrite (32, Value, &AcpiGbl_FADT->XPmTmrBlk, 0);
break;
@ -687,21 +774,22 @@ AcpiHwRegisterWrite (
/* SMI_CMD is currently always in IO space */
AcpiOsWritePort (AcpiGbl_FADT->SmiCmd, Value, 8);
Status = AcpiOsWritePort (AcpiGbl_FADT->SmiCmd, (ACPI_INTEGER) Value, 8);
break;
default:
Value = 0;
Status = AE_BAD_PARAMETER;
break;
}
UnlockAndExit:
if (ACPI_MTX_LOCK == UseLock)
{
(void) AcpiUtReleaseMutex (ACPI_MTX_HARDWARE);
}
return_VOID;
return_ACPI_STATUS (Status);
}
@ -719,31 +807,35 @@ AcpiHwRegisterWrite (
*
******************************************************************************/
UINT32
ACPI_STATUS
AcpiHwLowLevelRead (
UINT32 Width,
UINT32 *Value,
ACPI_GENERIC_ADDRESS *Reg,
UINT32 Offset)
{
UINT32 Value = 0;
ACPI_PHYSICAL_ADDRESS MemAddress;
ACPI_IO_ADDRESS IoAddress;
ACPI_PCI_ID PciId;
UINT16 PciRegister;
ACPI_STATUS Status;
ACPI_FUNCTION_ENTRY ();
ACPI_FUNCTION_NAME ("HwLowLevelRead");
/*
* Must have a valid pointer to a GAS structure, and
* a non-zero address within
*/
#if 0
if ((!Reg) ||
(!ACPI_VALID_ADDRESS (Reg->Address)))
{
return 0;
return (AE_BAD_PARAMETER);
}
#endif
*Value = 0;
/*
* Three address spaces supported:
@ -753,17 +845,19 @@ AcpiHwLowLevelRead (
{
case ACPI_ADR_SPACE_SYSTEM_MEMORY:
MemAddress = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address) + Offset);
MemAddress = (ACPI_GET_ADDRESS (Reg->Address)
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsReadMemory (MemAddress, &Value, Width);
Status = AcpiOsReadMemory (MemAddress, &Value, Width);
break;
case ACPI_ADR_SPACE_SYSTEM_IO:
IoAddress = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address) + Offset);
IoAddress = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address)
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsReadPort (IoAddress, &Value, Width);
Status = AcpiOsReadPort (IoAddress, &Value, Width);
break;
@ -773,13 +867,20 @@ AcpiHwLowLevelRead (
PciId.Bus = 0;
PciId.Device = ACPI_PCI_DEVICE (ACPI_GET_ADDRESS (Reg->Address));
PciId.Function = ACPI_PCI_FUNCTION (ACPI_GET_ADDRESS (Reg->Address));
PciRegister = (UINT16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (Reg->Address)) + Offset);
PciRegister = (UINT16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (Reg->Address))
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsReadPciConfiguration (&PciId, PciRegister, &Value, Width);
Status = AcpiOsReadPciConfiguration (&PciId, PciRegister, &Value, Width);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported address space: %X\n", Reg->AddressSpaceId));
Status = AE_BAD_PARAMETER;
break;
}
return Value;
return (Status);
}
@ -799,7 +900,7 @@ AcpiHwLowLevelRead (
*
******************************************************************************/
void
ACPI_STATUS
AcpiHwLowLevelWrite (
UINT32 Width,
UINT32 Value,
@ -810,21 +911,23 @@ AcpiHwLowLevelWrite (
ACPI_IO_ADDRESS IoAddress;
ACPI_PCI_ID PciId;
UINT16 PciRegister;
ACPI_STATUS Status;
ACPI_FUNCTION_ENTRY ();
ACPI_FUNCTION_NAME ("HwLowLevelWrite");
/*
* Must have a valid pointer to a GAS structure, and
* a non-zero address within
*/
#if 0
if ((!Reg) ||
(!ACPI_VALID_ADDRESS (Reg->Address)))
{
return;
return (AE_BAD_PARAMETER);
}
#endif
/*
* Three address spaces supported:
* Memory, Io, or PCI config.
@ -833,17 +936,19 @@ AcpiHwLowLevelWrite (
{
case ACPI_ADR_SPACE_SYSTEM_MEMORY:
MemAddress = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address) + Offset);
MemAddress = (ACPI_GET_ADDRESS (Reg->Address)
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsWriteMemory (MemAddress, Value, Width);
Status = AcpiOsWriteMemory (MemAddress, (ACPI_INTEGER) Value, Width);
break;
case ACPI_ADR_SPACE_SYSTEM_IO:
IoAddress = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address) + Offset);
IoAddress = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (Reg->Address)
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsWritePort (IoAddress, Value, Width);
Status = AcpiOsWritePort (IoAddress, (ACPI_INTEGER) Value, Width);
break;
@ -853,9 +958,18 @@ AcpiHwLowLevelWrite (
PciId.Bus = 0;
PciId.Device = ACPI_PCI_DEVICE (ACPI_GET_ADDRESS (Reg->Address));
PciId.Function = ACPI_PCI_FUNCTION (ACPI_GET_ADDRESS (Reg->Address));
PciRegister = (UINT16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (Reg->Address)) + Offset);
PciRegister = (UINT16) (ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (Reg->Address))
+ (ACPI_PHYSICAL_ADDRESS) Offset);
AcpiOsWritePciConfiguration (&PciId, PciRegister, Value, Width);
Status = AcpiOsWritePciConfiguration (&PciId, PciRegister, (ACPI_INTEGER) Value, Width);
break;
default:
ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported address space: %X\n", Reg->AddressSpaceId));
Status = AE_BAD_PARAMETER;
break;
}
return (Status);
}