summaryrefslogtreecommitdiff
path: root/kernel/src/drivers/powerbutton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/drivers/powerbutton.cpp')
-rw-r--r--kernel/src/drivers/powerbutton.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/kernel/src/drivers/powerbutton.cpp b/kernel/src/drivers/powerbutton.cpp
new file mode 100644
index 0000000..f34bdb9
--- /dev/null
+++ b/kernel/src/drivers/powerbutton.cpp
@@ -0,0 +1,28 @@
+#include <cstdint>
+#include <drivers/powerbutton.hpp>
+#include <klibc/stdio.hpp>
+#if defined(__x86_64__)
+#include <uacpi/event.h>
+#include <generic/poweroff.hpp>
+
+static uacpi_interrupt_ret handle_power_button(uacpi_handle ctx) {
+ (void)ctx;
+ poweroff::reboot();
+ return UACPI_INTERRUPT_HANDLED;
+}
+
+void drivers::powerbutton::init() {
+ uacpi_install_fixed_event_handler(
+ UACPI_FIXED_EVENT_POWER_BUTTON,
+ handle_power_button, UACPI_NULL
+ );
+ klibc::printf("PowerButton: Registered powerbutton at ip 0x%p\r\n",(std::uint64_t)handle_power_button);
+}
+
+#else
+
+void drivers::powerbutton::init() {
+
+}
+
+#endif \ No newline at end of file