From 84137e45f1340bcda008cd9ad3ec33ded2320acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 16 Jan 2007 20:37:22 +0000 Subject: [PATCH] now uses the dpc module for AcpiExecute(). Untested with hardware events. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19830 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/bus_managers/acpi/acpi_busman.c | 24 ++++++++----------- .../kernel/bus_managers/acpi/acpi_module.c | 6 +++++ .../kernel/bus_managers/acpi/oshaiku.c | 19 ++++++--------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c index 9349cf7d1e..f28bae5de3 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -6,6 +6,7 @@ */ #include +#include #include #include @@ -23,7 +24,8 @@ status_t acpi_rescan_stub(void); #define TRACE(x...) dprintf("acpi: " x) #define ERROR(x...) dprintf("acpi: " x) - +extern dpc_module_info *gDPC; +void *gDPChandle = NULL; struct acpi_module_info acpi_module = { { @@ -83,23 +85,12 @@ acpi_std_ops(int32 op,...) return ENOSYS; } + gDPChandle = gDPC->new_dpc_queue("acpi_task", B_NORMAL_PRIORITY, 10); + #ifdef ACPI_DEBUG_OUTPUT AcpiDbgLevel = ACPI_DEBUG_ALL | ACPI_LV_VERBOSE; AcpiDbgLayer = ACPI_ALL_COMPONENTS; #endif - - // check if safemode settings disable ACPI - settings = load_driver_settings(B_SAFEMODE_DRIVER_SETTINGS); - if (settings != NULL) { - acpiDisabled = get_driver_boolean_parameter(settings, B_SAFEMODE_DISABLE_ACPI, - false, false); - unload_driver_settings(settings); - } - - if (acpiDisabled) { - ERROR("ACPI disabled"); - return ENOSYS; - } Status = AcpiInitializeSubsystem(); if (Status != AE_OK) { @@ -135,6 +126,11 @@ acpi_std_ops(int32 op,...) ERROR("Could not bring system out of ACPI mode. Oh well.\n"); /* This isn't so terrible. We'll just fail silently */ + if (gDPChandle != NULL) { + gDPC->delete_dpc_queue(gDPChandle); + gDPChandle = NULL; + } + break; default: return B_ERROR; diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c index 63255b0f78..d512f3b3d3 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c @@ -6,9 +6,13 @@ #include #include + #include "acpi_priv.h" + +#include #include + //#define TRACE_ACPI_MODULE #ifdef TRACE_ACPI_MODULE # define TRACE(x) dprintf x @@ -18,10 +22,12 @@ device_manager_info *gDeviceManager; pci_module_info *gPCIManager; +dpc_module_info *gDPC; module_dependency module_dependencies[] = { {B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&gDeviceManager}, {B_PCI_MODULE_NAME, (module_info **)&gPCIManager}, + {B_DPC_MODULE_NAME, (module_info **)&gDPC}, {} }; diff --git a/src/add-ons/kernel/bus_managers/acpi/oshaiku.c b/src/add-ons/kernel/bus_managers/acpi/oshaiku.c index 53ceed7ba2..1186161538 100644 --- a/src/add-ons/kernel/bus_managers/acpi/oshaiku.c +++ b/src/add-ons/kernel/bus_managers/acpi/oshaiku.c @@ -131,6 +131,9 @@ # include #include extern pci_module_info *gPCIManager; +#include +extern dpc_module_info *gDPC; +extern void *gDPChandle; #endif #include "acpi.h" @@ -844,8 +847,7 @@ AcpiOsExecute ( ACPI_OSD_EXEC_CALLBACK Function, void *Context) { - int priority = 10; - thread_id thread; + status_t err; switch (Type) { case OSL_GLOBAL_LOCK_HANDLER: @@ -856,17 +858,10 @@ AcpiOsExecute ( case OSL_EC_BURST_HANDLER: break; } + + err = gDPC->queue_dpc(gDPChandle, Function, Context); - #ifndef _KERNEL_MODE - #define spawn_kernel_thread spawn_thread - #endif - - thread = spawn_kernel_thread((thread_func)(Function),"ACPI Worker Thread",priority,Context); - /* We're going to cheerfully ignore the fact that ACPI_OSD_EXEC_CALLBACK - routines don't give canonical return values, as we aren't going to - check up on them, and the kernel doesn't care */ - - if (thread < B_OK) + if (err != B_OK) return AE_ERROR; return AE_OK; }