Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 4 */
 5#include <linux/kernel.h>
 6#include <linux/acpi.h>
 7#include <linux/efi.h>
 8#include <linux/export.h>
 9#include <linux/pm.h>
10#include <linux/types.h>
11#include <linux/reboot.h>
12#include <linux/delay.h>
13#include <linux/console.h>
14
15#include <acpi/reboot.h>
16#include <asm/idle.h>
17#include <asm/loongarch.h>
18#include <asm/loongson.h>
19
20void (*pm_power_off)(void);
21EXPORT_SYMBOL(pm_power_off);
22
23void machine_halt(void)
24{
25#ifdef CONFIG_SMP
26	preempt_disable();
27	smp_send_stop();
28#endif
29	local_irq_disable();
30	clear_csr_ecfg(ECFG0_IM);
31
32	pr_notice("\n\n** You can safely turn off the power now **\n\n");
33	console_flush_on_panic(CONSOLE_FLUSH_PENDING);
34
35	while (true) {
36		__arch_cpu_idle();
37	}
38}
39
40void machine_power_off(void)
41{
42#ifdef CONFIG_SMP
43	preempt_disable();
44	smp_send_stop();
45#endif
46#ifdef CONFIG_PM
47	if (!acpi_disabled)
48		enable_pci_wakeup();
49#endif
50	do_kernel_power_off();
51#ifdef CONFIG_EFI
52	efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);
53#endif
54
55	while (true) {
56		__arch_cpu_idle();
57	}
58}
59
60void machine_restart(char *command)
61{
62#ifdef CONFIG_SMP
63	preempt_disable();
64	smp_send_stop();
65#endif
66	do_kernel_restart(command);
67#ifdef CONFIG_EFI
68	if (efi_capsule_pending(NULL))
69		efi_reboot(REBOOT_WARM, NULL);
70	else
71		efi_reboot(REBOOT_COLD, NULL);
72#endif
73	if (!acpi_disabled)
74		acpi_reboot();
75
76	while (true) {
77		__arch_cpu_idle();
78	}
79}