mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 17:58:18 +03:00
Kernel: Simplify ACPI initialization a bit
Construct the parser, no matter which kind, in ACPI::initialize().
This commit is contained in:
parent
85c0557839
commit
e983c745f7
Notes:
sideshowbarker
2024-07-19 07:46:58 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/e983c745f72
@ -29,26 +29,13 @@
|
||||
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
void DynamicParser::initialize(PhysicalAddress rsdp)
|
||||
{
|
||||
if (!StaticParser::is_initialized()) {
|
||||
new DynamicParser(rsdp);
|
||||
}
|
||||
}
|
||||
void DynamicParser::initialize_without_rsdp()
|
||||
{
|
||||
if (!StaticParser::is_initialized()) {
|
||||
new DynamicParser();
|
||||
}
|
||||
}
|
||||
|
||||
DynamicParser::DynamicParser()
|
||||
: IRQHandler(9)
|
||||
, StaticParser()
|
||||
|
||||
{
|
||||
klog() << "ACPI: Dynamic Parsing Enabled, Can parse AML";
|
||||
}
|
||||
|
||||
DynamicParser::DynamicParser(PhysicalAddress rsdp)
|
||||
: IRQHandler(9)
|
||||
, StaticParser(rsdp)
|
||||
|
@ -35,12 +35,13 @@
|
||||
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
class DynamicParser final : public IRQHandler
|
||||
, StaticParser {
|
||||
public:
|
||||
static void initialize(PhysicalAddress rsdp);
|
||||
static void initialize_without_rsdp();
|
||||
|
||||
class DynamicParser final
|
||||
: public IRQHandler
|
||||
, public StaticParser {
|
||||
friend class Parser;
|
||||
|
||||
public:
|
||||
virtual void enable_aml_interpretation() override;
|
||||
virtual void enable_aml_interpretation(File& dsdt_file) override;
|
||||
virtual void enable_aml_interpretation(u8* physical_dsdt, u32 dsdt_payload_legnth) override;
|
||||
|
@ -29,24 +29,19 @@
|
||||
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
|
||||
static Parser* s_acpi_parser;
|
||||
|
||||
Parser& Parser::the()
|
||||
{
|
||||
ASSERT(s_acpi_parser != nullptr);
|
||||
ASSERT(s_acpi_parser);
|
||||
return *s_acpi_parser;
|
||||
}
|
||||
|
||||
void Parser::initialize_limited()
|
||||
void Parser::set_the(Parser& parser)
|
||||
{
|
||||
if (!Parser::is_initialized()) {
|
||||
s_acpi_parser = new Parser(false);
|
||||
}
|
||||
}
|
||||
|
||||
bool Parser::is_initialized()
|
||||
{
|
||||
return (s_acpi_parser != nullptr);
|
||||
ASSERT(!s_acpi_parser);
|
||||
s_acpi_parser = &parser;
|
||||
}
|
||||
|
||||
Parser::Parser(bool usable)
|
||||
@ -56,7 +51,6 @@ Parser::Parser(bool usable)
|
||||
} else {
|
||||
klog() << "ACPI: Limited Initialization. Vital functions are disabled by a request";
|
||||
}
|
||||
s_acpi_parser = this;
|
||||
}
|
||||
|
||||
PhysicalAddress Parser::find_table(const char*)
|
||||
|
@ -35,12 +35,17 @@
|
||||
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
|
||||
class Parser {
|
||||
public:
|
||||
static Parser& the();
|
||||
|
||||
static bool is_initialized();
|
||||
static void initialize_limited();
|
||||
template<typename ParserType>
|
||||
static void initialize()
|
||||
{
|
||||
set_the(*new ParserType);
|
||||
}
|
||||
|
||||
virtual PhysicalAddress find_table(const char* sig);
|
||||
|
||||
virtual void try_acpi_reboot();
|
||||
@ -58,8 +63,12 @@ public:
|
||||
virtual bool is_operable();
|
||||
|
||||
protected:
|
||||
explicit Parser(bool usable);
|
||||
explicit Parser(bool usable = false);
|
||||
bool m_operable;
|
||||
|
||||
private:
|
||||
static void set_the(Parser&);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -36,24 +36,6 @@
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
|
||||
void StaticParser::initialize(PhysicalAddress rsdp)
|
||||
{
|
||||
if (!Parser::is_initialized()) {
|
||||
new StaticParser(rsdp);
|
||||
}
|
||||
}
|
||||
void StaticParser::initialize_without_rsdp()
|
||||
{
|
||||
if (!Parser::is_initialized()) {
|
||||
new StaticParser();
|
||||
}
|
||||
}
|
||||
|
||||
bool StaticParser::is_initialized()
|
||||
{
|
||||
return Parser::is_initialized();
|
||||
}
|
||||
|
||||
void StaticParser::locate_static_data()
|
||||
{
|
||||
locate_main_system_description_table();
|
||||
|
@ -32,12 +32,10 @@
|
||||
namespace Kernel {
|
||||
namespace ACPI {
|
||||
|
||||
class StaticParser : Parser {
|
||||
public:
|
||||
static void initialize(PhysicalAddress rsdp);
|
||||
static void initialize_without_rsdp();
|
||||
static bool is_initialized();
|
||||
class StaticParser : public Parser {
|
||||
friend class Parser;
|
||||
|
||||
public:
|
||||
virtual PhysicalAddress find_table(const char* sig) override;
|
||||
virtual void try_acpi_reboot() override;
|
||||
virtual bool can_reboot() override;
|
||||
|
@ -51,13 +51,13 @@ void initialize()
|
||||
{
|
||||
switch (determine_feature_level()) {
|
||||
case FeatureLevel::Enabled:
|
||||
ACPI::DynamicParser::initialize_without_rsdp();
|
||||
Parser::initialize<DynamicParser>();
|
||||
break;
|
||||
case FeatureLevel::Limited:
|
||||
ACPI::StaticParser::initialize_without_rsdp();
|
||||
Parser::initialize<StaticParser>();
|
||||
break;
|
||||
case FeatureLevel::Disabled:
|
||||
ACPI::Parser::initialize_limited();
|
||||
Parser::initialize<Parser>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user