diff options
Diffstat (limited to 'kernel/src/drivers/powerbutton.cpp')
| -rw-r--r-- | kernel/src/drivers/powerbutton.cpp | 28 |
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 |
