mirror of
https://github.com/genodelabs/genode.git
synced 2025-05-11 04:53:04 +00:00
acpica: provide verbose config
If "verbose" is set to true in the config, AcpiOsPrintf etc. are enabled to log to a dedicated LOG session using the Format:Console utility. Issue #5083
This commit is contained in:
parent
a6b30d58df
commit
30e37d90dd
@ -162,9 +162,10 @@ set config {
|
|||||||
</route>
|
</route>
|
||||||
</start>
|
</start>
|
||||||
|
|
||||||
<start name="acpica" caps="200">
|
<start name="acpica" caps="400">
|
||||||
<resource name="RAM" quantum="8M"/>
|
<resource name="RAM" quantum="8M"/>
|
||||||
<config ld_verbose="yes" reset="yes" poweroff="yes" report="yes" report_period_ms="0">
|
<config ld_verbose="yes" reset="yes" poweroff="yes" report="yes"
|
||||||
|
report_period_ms="0" verbose="yes">
|
||||||
</config>
|
</config>
|
||||||
<route>
|
<route>
|
||||||
<service name="ROM" label="system"> <child name="dynamic_rom"/> </service>
|
<service name="ROM" label="system"> <child name="dynamic_rom"/> </service>
|
||||||
|
@ -41,13 +41,16 @@ Furthermore the ACPICA library may trigger, dependent on the ACPI ASL code,
|
|||||||
various I/O port and I/O mem accesses to hardware. Accesses to PCI devices are
|
various I/O port and I/O mem accesses to hardware. Accesses to PCI devices are
|
||||||
ignored and dropped by this component.
|
ignored and dropped by this component.
|
||||||
|
|
||||||
|
Log verbosity can be increased by the "verbose" config attribute.
|
||||||
|
|
||||||
Excerpt of important parts of the acpica configuration
|
Excerpt of important parts of the acpica configuration
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
!<start name="acpica">
|
!<start name="acpica">
|
||||||
! <!-- <binary name="debug-acpica"/> -->
|
! <!-- <binary name="debug-acpica"/> -->
|
||||||
! ...
|
! ...
|
||||||
! <config reset="no" sleep="no" poweroff="no" report="yes" report_period_ms="2000" use_gpe="true"/>
|
! <config reset="no" sleep="no" poweroff="no" report="yes" report_period_ms="2000"
|
||||||
|
use_gpe="true" verbose="no"/>
|
||||||
! <route>
|
! <route>
|
||||||
! <service name="ROM" label="system"> <child name="..."/> </service>
|
! <service name="ROM" label="system"> <child name="..."/> </service>
|
||||||
! <service name="Report"> <child name="..."/> </service>
|
! <service name="Report"> <child name="..."/> </service>
|
||||||
|
@ -200,11 +200,15 @@ struct Acpica::Main
|
|||||||
bool const enable_reset = config.xml().attribute_value("reset", false);
|
bool const enable_reset = config.xml().attribute_value("reset", false);
|
||||||
bool const enable_poweroff = config.xml().attribute_value("poweroff", false);
|
bool const enable_poweroff = config.xml().attribute_value("poweroff", false);
|
||||||
bool const enable_report = config.xml().attribute_value("report", false);
|
bool const enable_report = config.xml().attribute_value("report", false);
|
||||||
|
bool const verbose = config.xml().attribute_value("verbose", false);
|
||||||
auto const periodic_ms = config.xml().attribute_value("report_period_ms", 0ULL);
|
auto const periodic_ms = config.xml().attribute_value("report_period_ms", 0ULL);
|
||||||
|
|
||||||
if (enable_report)
|
if (enable_report)
|
||||||
report = new (heap) Acpica::Reportstate(env);
|
report = new (heap) Acpica::Reportstate(env);
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
init_printf(env);
|
||||||
|
|
||||||
init_acpica(config.xml().attribute_value("use_gpe", true));
|
init_acpica(config.xml().attribute_value("use_gpe", true));
|
||||||
|
|
||||||
if (enable_report)
|
if (enable_report)
|
||||||
|
@ -6,12 +6,67 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <log_session/connection.h>
|
||||||
|
#include <format/console.h>
|
||||||
|
|
||||||
extern "C"
|
#include "util.h"
|
||||||
void AcpiOsPrintf (const char *fmt, ...)
|
|
||||||
{ }
|
using namespace Genode;
|
||||||
|
|
||||||
|
|
||||||
|
struct Formatted_log : Format::Console
|
||||||
|
{
|
||||||
|
Log_connection con;
|
||||||
|
|
||||||
|
char str[Log_session::MAX_STRING_LEN] { };
|
||||||
|
|
||||||
|
size_t pos { };
|
||||||
|
|
||||||
|
Formatted_log(Env &env) : con(env, "debug") { }
|
||||||
|
|
||||||
|
void _out_char(char c) override
|
||||||
|
{
|
||||||
|
if (c != '\n')
|
||||||
|
str[pos++] = c;
|
||||||
|
|
||||||
|
if (c == '\n' || pos == sizeof(str)) {
|
||||||
|
str[pos] = 0;
|
||||||
|
con.write(str);
|
||||||
|
pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static Formatted_log *formatted_log;
|
||||||
|
|
||||||
|
|
||||||
|
void Acpica::init_printf(Env &env)
|
||||||
|
{
|
||||||
|
static Formatted_log instance(env);
|
||||||
|
|
||||||
|
formatted_log = &instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
#include "acpi.h"
|
||||||
|
#include "acpiosxf.h"
|
||||||
|
|
||||||
extern "C"
|
|
||||||
void AcpiOsVprintf (const char *fmt, va_list va)
|
void AcpiOsVprintf (const char *fmt, va_list va)
|
||||||
{ }
|
{
|
||||||
|
if (formatted_log)
|
||||||
|
formatted_log->vprintf(fmt, va);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AcpiOsPrintf (const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
AcpiOsVprintf(fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
TARGET := acpica
|
TARGET := acpica
|
||||||
SRC_CC := os.cc printf.cc report.cc
|
SRC_CC := os.cc printf.cc report.cc
|
||||||
REQUIRES := x86
|
REQUIRES := x86
|
||||||
LIBS += base acpica
|
LIBS += base acpica format
|
||||||
|
|
||||||
CC_CXX_WARN_STRICT =
|
CC_CXX_WARN_STRICT =
|
||||||
|
@ -13,12 +13,18 @@
|
|||||||
#ifndef _ACPICA__UTIL_H_
|
#ifndef _ACPICA__UTIL_H_
|
||||||
#define _ACPICA__UTIL_H_
|
#define _ACPICA__UTIL_H_
|
||||||
|
|
||||||
|
#include <base/env.h>
|
||||||
|
#include <os/reporter.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "acpi.h"
|
#include "acpi.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Acpica {
|
namespace Acpica {
|
||||||
|
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
template<typename> class Buffer;
|
template<typename> class Buffer;
|
||||||
template<typename> class Callback;
|
template<typename> class Callback;
|
||||||
|
|
||||||
@ -26,6 +32,8 @@ namespace Acpica {
|
|||||||
void for_each_element(H const head, S *, F const &fn, FSIZE const &fn_size);
|
void for_each_element(H const head, S *, F const &fn, FSIZE const &fn_size);
|
||||||
|
|
||||||
void generate_suspend_report(Genode::Reporter::Xml_generator &);
|
void generate_suspend_report(Genode::Reporter::Xml_generator &);
|
||||||
|
|
||||||
|
void init_printf(Env &);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user