mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
parent
bfbfa86cd4
commit
fa834e34eb
@ -50,9 +50,10 @@ class Ac : Acpica::Callback<Ac> {
|
||||
_report->ac_event();
|
||||
}
|
||||
|
||||
static ACPI_STATUS detect(ACPI_HANDLE ac, UINT32, void * report, void **)
|
||||
static ACPI_STATUS detect(ACPI_HANDLE ac, UINT32, void * m, void **)
|
||||
{
|
||||
Ac * obj = new (Genode::env()->heap()) Ac(report);
|
||||
Acpica::Main * main = reinterpret_cast<Acpica::Main *>(m);
|
||||
Ac * obj = new (main->heap) Ac(main->report);
|
||||
|
||||
ACPI_STATUS res = AcpiInstallNotifyHandler (ac, ACPI_DEVICE_NOTIFY,
|
||||
handler, obj);
|
||||
|
@ -25,6 +25,7 @@ class Ec : Acpica::Callback<Ec> {
|
||||
|
||||
ACPI_HANDLE gpe_block;
|
||||
|
||||
Genode::Allocator &_heap;
|
||||
Acpica::Reportstate * _report;
|
||||
|
||||
/* 12.2.1 Embedded Controller Status, EC_SC (R) */
|
||||
@ -49,9 +50,10 @@ class Ec : Acpica::Callback<Ec> {
|
||||
|
||||
public:
|
||||
|
||||
Ec(void * report)
|
||||
Ec(Genode::Allocator &heap, Acpica::Reportstate *report)
|
||||
:
|
||||
_report(reinterpret_cast<Acpica::Reportstate *>(report))
|
||||
_heap(heap),
|
||||
_report(report)
|
||||
{ }
|
||||
|
||||
static UINT32 handler_gpe(ACPI_HANDLE dev, UINT32 gpe, void *context)
|
||||
@ -104,7 +106,7 @@ class Ec : Acpica::Callback<Ec> {
|
||||
}
|
||||
|
||||
if (!data_obj) {
|
||||
data_obj = new (Genode::env()->heap()) Data(data);
|
||||
data_obj = new (ec->_heap) Data(data);
|
||||
ec->_list_data.insert(data_obj);
|
||||
}
|
||||
data_obj->count ++;
|
||||
@ -136,11 +138,11 @@ class Ec : Acpica::Callback<Ec> {
|
||||
|
||||
if (!ec->ec_data) {
|
||||
ec->ec_port_data = resource->Data.Io.Minimum;
|
||||
ec->ec_data = new (Genode::env()->heap()) Genode::Io_port_connection(ec->ec_port_data, 1);
|
||||
ec->ec_data = new (ec->_heap) Genode::Io_port_connection(ec->ec_port_data, 1);
|
||||
} else
|
||||
if (!ec->ec_cmdsta) {
|
||||
ec->ec_port_cmdsta = resource->Data.Io.Minimum;
|
||||
ec->ec_cmdsta = new (Genode::env()->heap()) Genode::Io_port_connection(ec->ec_port_cmdsta, 1);
|
||||
ec->ec_cmdsta = new (ec->_heap) Genode::Io_port_connection(ec->ec_port_cmdsta, 1);
|
||||
} else
|
||||
Genode::error("unknown io_port");
|
||||
|
||||
@ -212,9 +214,10 @@ class Ec : Acpica::Callback<Ec> {
|
||||
return AE_BAD_PARAMETER;
|
||||
}
|
||||
|
||||
static ACPI_STATUS detect(ACPI_HANDLE ec, UINT32, void *report, void **)
|
||||
static ACPI_STATUS detect(ACPI_HANDLE ec, UINT32, void *m, void **)
|
||||
{
|
||||
Ec *ec_obj = new (Genode::env()->heap()) Ec(report);
|
||||
Acpica::Main * main = reinterpret_cast<Acpica::Main *>(m);
|
||||
Ec *ec_obj = new (main->heap) Ec(main->heap, main->report);
|
||||
|
||||
ACPI_STATUS res = AcpiWalkResources(ec, ACPI_STRING("_CRS"),
|
||||
Ec::detect_io_ports, ec_obj);
|
||||
|
@ -50,9 +50,10 @@ class Lid : Acpica::Callback<Lid> {
|
||||
_report->lid_event();
|
||||
}
|
||||
|
||||
static ACPI_STATUS detect(ACPI_HANDLE lid, UINT32, void * report, void **)
|
||||
static ACPI_STATUS detect(ACPI_HANDLE lid, UINT32, void * m, void **)
|
||||
{
|
||||
Lid * obj = new (Genode::env()->heap()) Lid(report);
|
||||
Acpica::Main * main = reinterpret_cast<Acpica::Main *>(m);
|
||||
Lid * obj = new (main->heap) Lid(main->report);
|
||||
|
||||
ACPI_STATUS res = AcpiInstallNotifyHandler (lid, ACPI_DEVICE_NOTIFY,
|
||||
handler, obj);
|
||||
|
@ -11,6 +11,7 @@
|
||||
*/
|
||||
|
||||
#include <base/allocator_avl.h>
|
||||
#include <base/component.h>
|
||||
#include <libc/component.h>
|
||||
#include <base/log.h>
|
||||
#include <base/signal.h>
|
||||
@ -43,10 +44,6 @@ namespace Acpica {
|
||||
#include "util.h"
|
||||
#include "reporter.h"
|
||||
#include "fixed.h"
|
||||
#include "ac.h"
|
||||
#include "lid.h"
|
||||
#include "sb.h"
|
||||
#include "ec.h"
|
||||
|
||||
|
||||
struct Acpica::Statechange
|
||||
@ -110,7 +107,7 @@ struct Acpica::Main
|
||||
|
||||
Genode::Attached_rom_dataspace config { env, "config" };
|
||||
|
||||
Genode::Signal_handler<Acpica::Main> sci_irq;
|
||||
Genode::Signal_handler<Acpica::Main> sci_irq;
|
||||
Genode::Constructible<Genode::Irq_connection> sci_conn;
|
||||
|
||||
Acpica::Reportstate * report = nullptr;
|
||||
@ -143,7 +140,7 @@ struct Acpica::Main
|
||||
|
||||
if (enable_reset || enable_poweroff)
|
||||
new (heap) Acpica::Statechange(env.ep(), enable_reset,
|
||||
enable_poweroff);
|
||||
enable_poweroff);
|
||||
|
||||
/* setup IRQ */
|
||||
if (!irq_handler.handler) {
|
||||
@ -188,6 +185,10 @@ struct Acpica::Main
|
||||
}
|
||||
};
|
||||
|
||||
#include "ac.h"
|
||||
#include "lid.h"
|
||||
#include "sb.h"
|
||||
#include "ec.h"
|
||||
|
||||
void Acpica::Main::init_acpica()
|
||||
{
|
||||
@ -227,7 +228,7 @@ void Acpica::Main::init_acpica()
|
||||
}
|
||||
|
||||
/* Embedded controller */
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C09"), Ec::detect, report, nullptr);
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C09"), Ec::detect, this, nullptr);
|
||||
if (status != AE_OK) {
|
||||
Genode::error("AcpiGetDevices failed, status=", status);
|
||||
return;
|
||||
@ -268,21 +269,21 @@ void Acpica::Main::init_acpica()
|
||||
|
||||
|
||||
/* AC Adapters and Power Source Objects */
|
||||
status = AcpiGetDevices(ACPI_STRING("ACPI0003"), Ac::detect, report, nullptr);
|
||||
status = AcpiGetDevices(ACPI_STRING("ACPI0003"), Ac::detect, this, nullptr);
|
||||
if (status != AE_OK) {
|
||||
Genode::error("AcpiGetDevices (ACPI0003) failed, status=", status);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Smart battery control devices */
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C0A"), Battery::detect, report, nullptr);
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C0A"), Battery::detect, this, nullptr);
|
||||
if (status != AE_OK) {
|
||||
Genode::error("AcpiGetDevices (PNP0C0A) failed, status=", status);
|
||||
return;
|
||||
}
|
||||
|
||||
/* LID device */
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C0D"), Lid::detect, report, nullptr);
|
||||
status = AcpiGetDevices(ACPI_STRING("PNP0C0D"), Lid::detect, this, nullptr);
|
||||
if (status != AE_OK) {
|
||||
Genode::error("AcpiGetDevices (PNP0C0D) failed, status=", status);
|
||||
return;
|
||||
@ -303,4 +304,7 @@ ACPI_STATUS AcpiOsInstallInterruptHandler(UINT32 irq, ACPI_OSD_HANDLER handler,
|
||||
}
|
||||
|
||||
|
||||
/* used by normal (no-printf-debug) target */
|
||||
void Component::construct(Genode::Env &env) { static Acpica::Main main(env); }
|
||||
/* used by debug target (using printf of libc) */
|
||||
void Libc::Component::construct(Genode::Env &env) { static Acpica::Main main(env); }
|
||||
|
@ -33,9 +33,10 @@ class Battery : Acpica::Callback<Battery> {
|
||||
_report->battery_event();
|
||||
}
|
||||
|
||||
static ACPI_STATUS detect(ACPI_HANDLE sb, UINT32, void *report, void **)
|
||||
static ACPI_STATUS detect(ACPI_HANDLE sb, UINT32, void *m, void **)
|
||||
{
|
||||
Battery * dev_obj = new (Genode::env()->heap()) Battery(report, sb);
|
||||
Acpica::Main * main = reinterpret_cast<Acpica::Main *>(m);
|
||||
Battery * dev_obj = new (main->heap) Battery(main->report, sb);
|
||||
|
||||
ACPI_STATUS res = AcpiInstallNotifyHandler (sb, ACPI_DEVICE_NOTIFY,
|
||||
handler, dev_obj);
|
||||
|
@ -44,7 +44,7 @@ class Acpica::Io_mem
|
||||
Genode::Io_mem_connection *_io_mem = nullptr;
|
||||
unsigned _ref;
|
||||
|
||||
static Acpica::Io_mem _ios[16];
|
||||
static Acpica::Io_mem _ios[32];
|
||||
|
||||
public:
|
||||
|
||||
@ -239,7 +239,7 @@ class Acpica::Io_mem
|
||||
}
|
||||
};
|
||||
|
||||
Acpica::Io_mem Acpica::Io_mem::_ios[16];
|
||||
Acpica::Io_mem Acpica::Io_mem::_ios[32];
|
||||
|
||||
|
||||
void * AcpiOsMapMemory (ACPI_PHYSICAL_ADDRESS phys, ACPI_SIZE size)
|
||||
|
Loading…
x
Reference in New Issue
Block a user