All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Durbin <adurbin@google.com>
To: linux-kernel@vger.kernel.org
Cc: linux-acpi@vger.kernel.org, len.brown@intel.com, ak@suse.de,
	akpm@osdl.org
Subject: [PATCH] ACPI: Add reboot mechanism
Date: Mon, 16 Jul 2007 11:00:19 -0700	[thread overview]
Message-ID: <20070716180019.GA5112@google.com> (raw)


Add the ability to reset the machine using the RESET_REG in ACPI's FADT table.

Signed-off-by: Aaron Durbin <adurbin@google.com>
---

diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index d4336f1..c9906a5 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -21,7 +21,7 @@ obj-$(CONFIG_X86)		+= blacklist.o
 #
 # ACPI Core Subsystem (Interpreter)
 #
-obj-y				+= osl.o utils.o \
+obj-y				+= osl.o utils.o reboot.o \
 				   dispatcher/ events/ executer/ hardware/ \
 				   namespace/ parser/ resources/ tables/ \
 				   utilities/
diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
new file mode 100644
index 0000000..4bb4d3e
--- /dev/null
+++ b/drivers/acpi/reboot.c
@@ -0,0 +1,45 @@
+
+#include <linux/pci.h>
+#include <acpi/acpi.h>
+
+void acpi_reboot(void)
+{
+	struct acpi_generic_address *rr;
+	struct pci_bus *bus0;
+	u8 reset_value;
+	unsigned int devfn;
+
+	rr = &acpi_gbl_FADT.reset_register;
+
+	/* Is the reset register supported? */
+	if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) ||
+	    rr->bit_width != 8 || rr->bit_offset != 0)
+		return;
+
+	reset_value = acpi_gbl_FADT.reset_value;
+
+	/* The reset register can only exist in I/O, Memory or PCI config space
+	 * on a device on bus 0. */
+	switch (rr->space_id) {
+		case ACPI_ADR_SPACE_PCI_CONFIG:
+			/* The reset register can only live on bus 0. */
+			bus0 = pci_find_bus(0, 0);
+			if (!bus0)
+				return;
+			/* Form PCI device/function pair. */
+			devfn = PCI_DEVFN((rr->address >> 32) & 0xffff,
+					  (rr->address >> 16) & 0xffff);
+			printk(KERN_DEBUG "Resetting with ACPI PCI RESET_REG.");
+			/* Write the value that resets us. */
+			pci_bus_write_config_byte(bus0, devfn,
+					(rr->address & 0xffff), reset_value);
+			break;
+
+		case ACPI_ADR_SPACE_SYSTEM_MEMORY:
+		case ACPI_ADR_SPACE_SYSTEM_IO:
+			printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.");
+			acpi_hw_low_level_write(8, reset_value, rr);
+			break;
+	}
+}
+
diff --git a/include/acpi/reboot.h b/include/acpi/reboot.h
new file mode 100644
index 0000000..1d8da79
--- /dev/null
+++ b/include/acpi/reboot.h
@@ -0,0 +1,10 @@
+#ifndef __ACPI_REBOOT_H
+#define __ACPI_REBOOT_H
+
+#ifdef CONFIG_ACPI
+extern void acpi_reboot(void);
+#else
+#define acpi_reboot()
+#endif
+
+#endif

             reply	other threads:[~2007-07-16 18:01 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-16 18:00 Aaron Durbin [this message]
2007-07-16 18:17 ` [PATCH] ACPI: Add reboot mechanism Arjan van de Ven
2007-07-16 18:22   ` Aaron Durbin
2007-07-17  1:46 ` Shaohua Li
2007-07-17  2:10   ` Aaron Durbin
2007-07-17 11:31 ` Andi Kleen
2007-07-17 14:40   ` Yinghai Lu
2007-07-17 15:08     ` Aaron Durbin
2007-07-17 15:42       ` Andi Kleen
2007-07-17 15:47         ` Aaron Durbin
2007-07-17 15:08   ` Aaron Durbin
2007-07-27  6:17     ` Pavel Machek
     [not found] <fa.IMXKKgfBkv/U+MG0xx5sLkpV2Ws@ifi.uio.no>
     [not found] ` <fa.+iOE+OqrQUbecN788fV4aEhLLtg@ifi.uio.no>
2007-07-17 14:39   ` Robert Hancock
2007-07-17 15:41     ` Andi Kleen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070716180019.GA5112@google.com \
    --to=adurbin@google.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.