Deleted Added
full compact
3c3
< * Module Name: utxface - External interfaces for "global" ACPI functions
---
> * Module Name: utxface - External interfaces, miscellaneous utility functions
49,50d48
< #include <contrib/dev/acpica/include/acevents.h>
< #include <contrib/dev/acpica/include/acnamesp.h>
52d49
< #include <contrib/dev/acpica/include/actables.h>
58d54
< #ifndef ACPI_ASL_COMPILER
61,365d56
< * FUNCTION: AcpiInitializeSubsystem
< *
< * PARAMETERS: None
< *
< * RETURN: Status
< *
< * DESCRIPTION: Initializes all global variables. This is the first function
< * called, so any early initialization belongs here.
< *
< ******************************************************************************/
<
< ACPI_STATUS
< AcpiInitializeSubsystem (
< void)
< {
< ACPI_STATUS Status;
<
<
< ACPI_FUNCTION_TRACE (AcpiInitializeSubsystem);
<
<
< AcpiGbl_StartupFlags = ACPI_SUBSYSTEM_INITIALIZE;
< ACPI_DEBUG_EXEC (AcpiUtInitStackPtrTrace ());
<
< /* Initialize the OS-Dependent layer */
<
< Status = AcpiOsInitialize ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_EXCEPTION ((AE_INFO, Status, "During OSL initialization"));
< return_ACPI_STATUS (Status);
< }
<
< /* Initialize all globals used by the subsystem */
<
< Status = AcpiUtInitGlobals ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_EXCEPTION ((AE_INFO, Status, "During initialization of globals"));
< return_ACPI_STATUS (Status);
< }
<
< /* Create the default mutex objects */
<
< Status = AcpiUtMutexInitialize ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_EXCEPTION ((AE_INFO, Status, "During Global Mutex creation"));
< return_ACPI_STATUS (Status);
< }
<
< /*
< * Initialize the namespace manager and
< * the root of the namespace tree
< */
< Status = AcpiNsRootInitialize ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_EXCEPTION ((AE_INFO, Status, "During Namespace initialization"));
< return_ACPI_STATUS (Status);
< }
<
< /* Initialize the global OSI interfaces list with the static names */
<
< Status = AcpiUtInitializeInterfaces ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_EXCEPTION ((AE_INFO, Status, "During OSI interfaces initialization"));
< return_ACPI_STATUS (Status);
< }
<
< /* If configured, initialize the AML debugger */
<
< ACPI_DEBUGGER_EXEC (Status = AcpiDbInitialize ());
< return_ACPI_STATUS (Status);
< }
<
< ACPI_EXPORT_SYMBOL (AcpiInitializeSubsystem)
<
<
< /*******************************************************************************
< *
< * FUNCTION: AcpiEnableSubsystem
< *
< * PARAMETERS: Flags - Init/enable Options
< *
< * RETURN: Status
< *
< * DESCRIPTION: Completes the subsystem initialization including hardware.
< * Puts system into ACPI mode if it isn't already.
< *
< ******************************************************************************/
<
< ACPI_STATUS
< AcpiEnableSubsystem (
< UINT32 Flags)
< {
< ACPI_STATUS Status = AE_OK;
<
<
< ACPI_FUNCTION_TRACE (AcpiEnableSubsystem);
<
<
< #if (!ACPI_REDUCED_HARDWARE)
<
< /* Enable ACPI mode */
<
< if (!(Flags & ACPI_NO_ACPI_ENABLE))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
<
< AcpiGbl_OriginalMode = AcpiHwGetMode();
<
< Status = AcpiEnable ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_WARNING ((AE_INFO, "AcpiEnable failed"));
< return_ACPI_STATUS (Status);
< }
< }
<
< /*
< * Obtain a permanent mapping for the FACS. This is required for the
< * Global Lock and the Firmware Waking Vector
< */
< Status = AcpiTbInitializeFacs ();
< if (ACPI_FAILURE (Status))
< {
< ACPI_WARNING ((AE_INFO, "Could not map the FACS table"));
< return_ACPI_STATUS (Status);
< }
<
< #endif /* !ACPI_REDUCED_HARDWARE */
<
< /*
< * Install the default OpRegion handlers. These are installed unless
< * other handlers have already been installed via the
< * InstallAddressSpaceHandler interface.
< */
< if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Installing default address space handlers\n"));
<
< Status = AcpiEvInstallRegionHandlers ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< #if (!ACPI_REDUCED_HARDWARE)
< /*
< * Initialize ACPI Event handling (Fixed and General Purpose)
< *
< * Note1: We must have the hardware and events initialized before we can
< * execute any control methods safely. Any control method can require
< * ACPI hardware support, so the hardware must be fully initialized before
< * any method execution!
< *
< * Note2: Fixed events are initialized and enabled here. GPEs are
< * initialized, but cannot be enabled until after the hardware is
< * completely initialized (SCI and GlobalLock activated) and the various
< * initialization control methods are run (_REG, _STA, _INI) on the
< * entire namespace.
< */
< if (!(Flags & ACPI_NO_EVENT_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Initializing ACPI events\n"));
<
< Status = AcpiEvInitializeEvents ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< /*
< * Install the SCI handler and Global Lock handler. This completes the
< * hardware initialization.
< */
< if (!(Flags & ACPI_NO_HANDLER_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Installing SCI/GL handlers\n"));
<
< Status = AcpiEvInstallXruptHandlers ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< #endif /* !ACPI_REDUCED_HARDWARE */
<
< return_ACPI_STATUS (Status);
< }
<
< ACPI_EXPORT_SYMBOL (AcpiEnableSubsystem)
<
<
< /*******************************************************************************
< *
< * FUNCTION: AcpiInitializeObjects
< *
< * PARAMETERS: Flags - Init/enable Options
< *
< * RETURN: Status
< *
< * DESCRIPTION: Completes namespace initialization by initializing device
< * objects and executing AML code for Regions, buffers, etc.
< *
< ******************************************************************************/
<
< ACPI_STATUS
< AcpiInitializeObjects (
< UINT32 Flags)
< {
< ACPI_STATUS Status = AE_OK;
<
<
< ACPI_FUNCTION_TRACE (AcpiInitializeObjects);
<
<
< /*
< * Run all _REG methods
< *
< * Note: Any objects accessed by the _REG methods will be automatically
< * initialized, even if they contain executable AML (see the call to
< * AcpiNsInitializeObjects below).
< */
< if (!(Flags & ACPI_NO_ADDRESS_SPACE_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Executing _REG OpRegion methods\n"));
<
< Status = AcpiEvInitializeOpRegions ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< /*
< * Execute any module-level code that was detected during the table load
< * phase. Although illegal since ACPI 2.0, there are many machines that
< * contain this type of code. Each block of detected executable AML code
< * outside of any control method is wrapped with a temporary control
< * method object and placed on a global list. The methods on this list
< * are executed below.
< */
< AcpiNsExecModuleCodeList ();
<
< /*
< * Initialize the objects that remain uninitialized. This runs the
< * executable AML that may be part of the declaration of these objects:
< * OperationRegions, BufferFields, Buffers, and Packages.
< */
< if (!(Flags & ACPI_NO_OBJECT_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Completing Initialization of ACPI Objects\n"));
<
< Status = AcpiNsInitializeObjects ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< /*
< * Initialize all device objects in the namespace. This runs the device
< * _STA and _INI methods.
< */
< if (!(Flags & ACPI_NO_DEVICE_INIT))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
< "[Init] Initializing ACPI Devices\n"));
<
< Status = AcpiNsInitializeDevices ();
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
< }
<
< /*
< * Empty the caches (delete the cached objects) on the assumption that
< * the table load filled them up more than they will be at runtime --
< * thus wasting non-paged memory.
< */
< Status = AcpiPurgeCachedObjects ();
<
< AcpiGbl_StartupFlags |= ACPI_INITIALIZED_OK;
< return_ACPI_STATUS (Status);
< }
<
< ACPI_EXPORT_SYMBOL (AcpiInitializeObjects)
<
<
< #endif
<
< /*******************************************************************************
< *
837a529,623
>
>
> /*******************************************************************************
> *
> * FUNCTION: AcpiDecodePldBuffer
> *
> * PARAMETERS: InBuffer - Buffer returned by _PLD method
> * Length - Length of the InBuffer
> * ReturnBuffer - Where the decode buffer is returned
> *
> * RETURN: Status and the decoded _PLD buffer. User must deallocate
> * the buffer via ACPI_FREE.
> *
> * DESCRIPTION: Decode the bit-packed buffer returned by the _PLD method into
> * a local struct that is much more useful to an ACPI driver.
> *
> ******************************************************************************/
>
> ACPI_STATUS
> AcpiDecodePldBuffer (
> UINT8 *InBuffer,
> ACPI_SIZE Length,
> ACPI_PLD_INFO **ReturnBuffer)
> {
> ACPI_PLD_INFO *PldInfo;
> UINT32 *Buffer = ACPI_CAST_PTR (UINT32, InBuffer);
> UINT32 Dword;
>
>
> /* Parameter validation */
>
> if (!InBuffer || !ReturnBuffer || (Length < 16))
> {
> return (AE_BAD_PARAMETER);
> }
>
> PldInfo = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PLD_INFO));
> if (!PldInfo)
> {
> return (AE_NO_MEMORY);
> }
>
> /* First 32-bit DWord */
>
> ACPI_MOVE_32_TO_32 (&Dword, &Buffer[0]);
> PldInfo->Revision = ACPI_PLD_GET_REVISION (&Dword);
> PldInfo->IgnoreColor = ACPI_PLD_GET_IGNORE_COLOR (&Dword);
> PldInfo->Color = ACPI_PLD_GET_COLOR (&Dword);
>
> /* Second 32-bit DWord */
>
> ACPI_MOVE_32_TO_32 (&Dword, &Buffer[1]);
> PldInfo->Width = ACPI_PLD_GET_WIDTH (&Dword);
> PldInfo->Height = ACPI_PLD_GET_HEIGHT(&Dword);
>
> /* Third 32-bit DWord */
>
> ACPI_MOVE_32_TO_32 (&Dword, &Buffer[2]);
> PldInfo->UserVisible = ACPI_PLD_GET_USER_VISIBLE (&Dword);
> PldInfo->Dock = ACPI_PLD_GET_DOCK (&Dword);
> PldInfo->Lid = ACPI_PLD_GET_LID (&Dword);
> PldInfo->Panel = ACPI_PLD_GET_PANEL (&Dword);
> PldInfo->VerticalPosition = ACPI_PLD_GET_VERTICAL (&Dword);
> PldInfo->HorizontalPosition = ACPI_PLD_GET_HORIZONTAL (&Dword);
> PldInfo->Shape = ACPI_PLD_GET_SHAPE (&Dword);
> PldInfo->GroupOrientation = ACPI_PLD_GET_ORIENTATION (&Dword);
> PldInfo->GroupToken = ACPI_PLD_GET_TOKEN (&Dword);
> PldInfo->GroupPosition = ACPI_PLD_GET_POSITION (&Dword);
> PldInfo->Bay = ACPI_PLD_GET_BAY (&Dword);
>
> /* Fourth 32-bit DWord */
>
> ACPI_MOVE_32_TO_32 (&Dword, &Buffer[3]);
> PldInfo->Ejectable = ACPI_PLD_GET_EJECTABLE (&Dword);
> PldInfo->OspmEjectRequired = ACPI_PLD_GET_OSPM_EJECT (&Dword);
> PldInfo->CabinetNumber = ACPI_PLD_GET_CABINET (&Dword);
> PldInfo->CardCageNumber = ACPI_PLD_GET_CARD_CAGE (&Dword);
> PldInfo->Reference = ACPI_PLD_GET_REFERENCE (&Dword);
> PldInfo->Rotation = ACPI_PLD_GET_ROTATION (&Dword);
> PldInfo->Order = ACPI_PLD_GET_ORDER (&Dword);
>
> if (Length >= ACPI_PLD_BUFFER_SIZE)
> {
> /* Fifth 32-bit DWord (Revision 2 of _PLD) */
>
> ACPI_MOVE_32_TO_32 (&Dword, &Buffer[4]);
> PldInfo->VerticalOffset = ACPI_PLD_GET_VERT_OFFSET (&Dword);
> PldInfo->HorizontalOffset = ACPI_PLD_GET_HORIZ_OFFSET (&Dword);
> }
>
> *ReturnBuffer = PldInfo;
> return (AE_OK);
> }
>
> ACPI_EXPORT_SYMBOL (AcpiDecodePldBuffer)