Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/acpi/acpica/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 6 kB image not shown  

Quelle  utxfinit.c   Sprache: C

 
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
/******************************************************************************
 *
 * Module Name: utxfinit - External interfaces for ACPICA initialization
 *
 * Copyright (C) 2000 - 2025, Intel Corp.
 *
 *****************************************************************************/


#define EXPORT_ACPI_INTERFACES

#include <acpi/acpi.h>
#include "accommon.h"
#include "acevents.h"
#include "acnamesp.h"
#include "acdebug.h"
#include "actables.h"

#define _COMPONENT          ACPI_UTILITIES
ACPI_MODULE_NAME("utxfinit")

/* For acpi_exec only */
void ae_do_object_overrides(void);

/*******************************************************************************
 *
 * FUNCTION:    acpi_initialize_subsystem
 *
 * PARAMETERS:  None
 *
 * RETURN:      Status
 *
 * DESCRIPTION: Initializes all global variables. This is the first function
 *              called, so any early initialization belongs here.
 *
 ******************************************************************************/


acpi_status ACPI_INIT_FUNCTION acpi_initialize_subsystem(void)
{
 acpi_status status;

 ACPI_FUNCTION_TRACE(acpi_initialize_subsystem);

 acpi_gbl_startup_flags = ACPI_SUBSYSTEM_INITIALIZE;
 ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());

 /* Initialize the OS-Dependent layer */

 status = acpi_os_initialize();
 if (ACPI_FAILURE(status)) {
  ACPI_EXCEPTION((AE_INFO, status, "During OSL initialization"));
  return_ACPI_STATUS(status);
 }

 /* Initialize all globals used by the subsystem */

 status = acpi_ut_init_globals();
 if (ACPI_FAILURE(status)) {
  ACPI_EXCEPTION((AE_INFO, status,
    "During initialization of globals"));
  return_ACPI_STATUS(status);
 }

 /* Create the default mutex objects */

 status = acpi_ut_mutex_initialize();
 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 = acpi_ns_root_initialize();
 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 = acpi_ut_initialize_interfaces();
 if (ACPI_FAILURE(status)) {
  ACPI_EXCEPTION((AE_INFO, status,
    "During OSI interfaces initialization"));
  return_ACPI_STATUS(status);
 }

 return_ACPI_STATUS(AE_OK);
}

ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_subsystem)

/*******************************************************************************
 *
 * FUNCTION:    acpi_enable_subsystem
 *
 * 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 ACPI_INIT_FUNCTION acpi_enable_subsystem(u32 flags)
{
 acpi_status status = AE_OK;

 ACPI_FUNCTION_TRACE(acpi_enable_subsystem);

 /*
 * The early initialization phase is complete. The namespace is loaded,
 * and we can now support address spaces other than Memory, I/O, and
 * PCI_Config.
 */

 acpi_gbl_early_initialization = FALSE;

 /*
 * Obtain a permanent mapping for the FACS. This is required for the
 * Global Lock and the Firmware Waking Vector
 */

 if (!(flags & ACPI_NO_FACS_INIT)) {
  status = acpi_tb_initialize_facs();
  if (ACPI_FAILURE(status)) {
   ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
   return_ACPI_STATUS(status);
  }
 }

#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"));

  acpi_gbl_original_mode = acpi_hw_get_mode();

  status = acpi_enable();
  if (ACPI_FAILURE(status)) {
   ACPI_WARNING((AE_INFO, "AcpiEnable failed"));
   return_ACPI_STATUS(status);
  }
 }

 /*
 * 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 global_lock 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 = acpi_ev_initialize_events();
  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 = acpi_ev_install_xrupt_handlers();
  if (ACPI_FAILURE(status)) {
   return_ACPI_STATUS(status);
  }
 }
#endif    /* !ACPI_REDUCED_HARDWARE */

 return_ACPI_STATUS(status);
}

ACPI_EXPORT_SYMBOL_INIT(acpi_enable_subsystem)

/*******************************************************************************
 *
 * FUNCTION:    acpi_initialize_objects
 *
 * 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 ACPI_INIT_FUNCTION acpi_initialize_objects(u32 flags)
{
 acpi_status status = AE_OK;

 ACPI_FUNCTION_TRACE(acpi_initialize_objects);

#ifdef ACPI_OBSOLETE_BEHAVIOR
 /*
 * 05/2019: Removed, initialization now happens at both object
 * creation and table load time
 */


 /*
 * Initialize the objects that remain uninitialized. This
 * runs the executable AML that may be part of the
 * declaration of these objects: operation_regions, buffer_fields,
 * bank_fields, Buffers, and Packages.
 */

 if (!(flags & ACPI_NO_OBJECT_INIT)) {
  status = acpi_ns_initialize_objects();
  if (ACPI_FAILURE(status)) {
   return_ACPI_STATUS(status);
  }
 }
#endif

 /*
 * Initialize all device/region objects in the namespace. This runs
 * the device _STA and _INI methods and region _REG methods.
 */

 if (!(flags & (ACPI_NO_DEVICE_INIT | ACPI_NO_ADDRESS_SPACE_INIT))) {
  status = acpi_ns_initialize_devices(flags);
  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 = acpi_purge_cached_objects();

 acpi_gbl_startup_flags |= ACPI_INITIALIZED_OK;
 return_ACPI_STATUS(status);
}

ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_objects)

Messung V0.5
C=90 H=92 G=90

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.