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:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user