| // Copyright 2017 The Fuchsia Authors |
| // |
| // Use of this source code is governed by a MIT-style |
| // license that can be found in the LICENSE file or at |
| // https://opensource.org/licenses/MIT |
| |
| #include <pdev/power.h> |
| |
| #include <arch/arch_ops.h> |
| #include <dev/power.h> |
| #include <dev/psci.h> |
| |
| static void default_reboot(enum reboot_flags flags) { |
| psci_system_reset(flags); |
| } |
| |
| static void default_shutdown() { |
| psci_system_off(); |
| } |
| |
| static const struct pdev_power_ops default_ops = { |
| .reboot = default_reboot, |
| .shutdown = default_shutdown, |
| }; |
| |
| static const struct pdev_power_ops* power_ops = &default_ops; |
| |
| void power_reboot(enum reboot_flags flags) { |
| power_ops->reboot(flags); |
| } |
| |
| void power_shutdown() { |
| power_ops->shutdown(); |
| } |
| |
| void pdev_register_power(const struct pdev_power_ops* ops) { |
| power_ops = ops; |
| smp_mb(); |
| } |