patch-2.4.20 linux-2.4.20/arch/sparc64/kernel/power.c
Next file: linux-2.4.20/arch/sparc64/kernel/process.c
Previous file: linux-2.4.20/arch/sparc64/kernel/pci_schizo.c
Back to the patch index
Back to the overall index
- Lines: 44
- Date:
Thu Nov 28 15:53:12 2002
- Orig file:
linux-2.4.19/arch/sparc64/kernel/power.c
- Orig date:
Fri Aug 2 17:39:43 2002
diff -urN linux-2.4.19/arch/sparc64/kernel/power.c linux-2.4.20/arch/sparc64/kernel/power.c
@@ -34,20 +34,28 @@
#endif /* CONFIG_PCI */
extern void machine_halt(void);
+extern void machine_alt_power_off(void);
+static void (*poweroff_method)(void) = machine_alt_power_off;
extern int serial_console;
void machine_power_off(void)
{
+ if (!serial_console) {
#ifdef CONFIG_PCI
- if (power_reg != 0UL && !serial_console) {
- /* Both register bits seem to have the
- * same effect, so until I figure out
- * what the difference is...
- */
- writel(POWER_COURTESY_OFF | POWER_SYSTEM_OFF, power_reg);
- }
+ if (power_reg != 0UL) {
+ /* Both register bits seem to have the
+ * same effect, so until I figure out
+ * what the difference is...
+ */
+ writel(POWER_COURTESY_OFF | POWER_SYSTEM_OFF, power_reg);
+ } else
#endif /* CONFIG_PCI */
+ if (poweroff_method != NULL) {
+ poweroff_method();
+ /* not reached */
+ }
+ }
machine_halt();
}
@@ -98,6 +106,7 @@
found:
power_reg = (unsigned long)ioremap(edev->resource[0].start, 0x4);
printk("power: Control reg at %016lx ... ", power_reg);
+ poweroff_method = machine_halt; /* able to use the standard poweroff */
if (edev->irqs[0] != PCI_IRQ_NONE) {
if (kernel_thread(powerd, 0, CLONE_FS) < 0) {
printk("Failed to start power daemon.\n");
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)