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
This commit is contained in:
parent
8cddf19132
commit
84137e45f1
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <ACPI.h>
|
||||
#include <dpc.h>
|
||||
#include <KernelExport.h>
|
||||
|
||||
#include <malloc.h>
|
||||
@ -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;
|
||||
|
@ -6,9 +6,13 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "acpi_priv.h"
|
||||
|
||||
#include <dpc.h>
|
||||
#include <PCI.h>
|
||||
|
||||
|
||||
//#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},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -131,6 +131,9 @@
|
||||
# include <KernelExport.h>
|
||||
#include <PCI.h>
|
||||
extern pci_module_info *gPCIManager;
|
||||
#include <dpc.h>
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user