Kernel: Add support for power button shutdown

This patch implements basic support for power button using ACPI
fixed events. I still need to implement general purpose events
and embedded controller for full power button support.
This commit is contained in:
2024-04-15 23:55:25 +03:00
parent 9fac5f94ba
commit b89bafa165
4 changed files with 100 additions and 21 deletions

View File

@@ -8,7 +8,7 @@
namespace Kernel::ACPI
{
class ACPI
class ACPI : public Interruptable
{
public:
static BAN::ErrorOr<void> initialize();
@@ -31,10 +31,16 @@ namespace Kernel::ACPI
// This function will return only if there was an error
void poweroff();
void handle_irq() override;
private:
ACPI() = default;
BAN::ErrorOr<void> initialize_impl();
FADT& fadt() { return *m_fadt; }
void acpi_event_task();
private:
paddr_t m_header_table_paddr = 0;
vaddr_t m_header_table_vaddr = 0;
@@ -49,6 +55,10 @@ namespace Kernel::ACPI
};
BAN::Vector<MappedPage> m_mapped_headers;
FADT* m_fadt { nullptr };
Semaphore m_acpi_event_semaphore;
bool m_hardware_reduced { false };
BAN::RefPtr<AML::Namespace> m_namespace;
};

View File

@@ -144,6 +144,7 @@ namespace Kernel
BAN::ErrorOr<long> sys_sync(bool should_block);
static BAN::ErrorOr<long> clean_poweroff(int command);
BAN::ErrorOr<long> sys_poweroff(int command);
BAN::ErrorOr<void> mount(BAN::StringView source, BAN::StringView target);