]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Enable acpi shutdown on all ACPI platforms.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 13 Sep 2010 18:29:15 +0000 (20:29 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 13 Sep 2010 18:29:15 +0000 (20:29 +0200)
* grub-core/Makefile.core.def (halt): Inlude commands/acpihalt.c
on coreboo, multiboot and EFI.
* grub-core/commands/acpihalt.c (get_sleep_type): Add missing casts.
(grub_acpi_halt): Likewise.
* grub-core/commands/i386/pc/halt.c (grub_halt): Call grub_acpi_halt.
(grub_cmd_halt): Don't call grub_acpi_halt directly.
* grub-core/lib/efi/halt.c (grub_halt): Call grub_acpi_halt.
* grub-core/lib/i386/halt.c (grub_halt)
[GRUB_MACHINE_COREBOOT || GRUB_MACHINE_MULTIBOOT]: Likewise.

ChangeLog
grub-core/Makefile.core.def
grub-core/commands/acpihalt.c
grub-core/commands/i386/pc/halt.c
grub-core/lib/efi/halt.c
grub-core/lib/i386/halt.c

index 8b959c0f4b109b831d78715b351aba688fea6341..555ed77119ae538e2b671c3c14f318836e581d0d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2010-09-13  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Enable acpi shutdown on all ACPI platforms.
+
+       * grub-core/Makefile.core.def (halt): Inlude commands/acpihalt.c
+       on coreboo, multiboot and EFI.
+       * grub-core/commands/acpihalt.c (get_sleep_type): Add missing casts.
+       (grub_acpi_halt): Likewise.
+       * grub-core/commands/i386/pc/halt.c (grub_halt): Call grub_acpi_halt.
+       (grub_cmd_halt): Don't call grub_acpi_halt directly.
+       * grub-core/lib/efi/halt.c (grub_halt): Call grub_acpi_halt.
+       * grub-core/lib/i386/halt.c (grub_halt)
+       [GRUB_MACHINE_COREBOOT || GRUB_MACHINE_MULTIBOOT]: Likewise.
+
 2010-09-13  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/commands/iorw.c (grub_cmd_read): Declare buf in smallest
index 902ab48a81c455d60a7443a4ce7c4f2c46672a42..05890d248d8aadecbb88574341fe166c045be3e2 100644 (file)
@@ -521,6 +521,9 @@ module = {
   nopc = commands/halt.c;
   i386_pc = commands/i386/pc/halt.c;
   i386_pc = commands/acpihalt.c;
+  i386_coreboot = commands/acpihalt.c;
+  i386_multiboot = commands/acpihalt.c;
+  x86_efi = commands/acpihalt.c;
   i386_multiboot = lib/i386/halt.c;
   i386_coreboot = lib/i386/halt.c;
   i386_qemu = lib/i386/halt.c;
index 2ba15468b0cd460780dd7dce1d53285d8a8e9279..0cd32f3890f20d3fbaae18d467087d0427f3b5a1 100644 (file)
@@ -144,8 +144,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *end)
     {
       int add;
       prev = ptr;
-      grub_dprintf ("acpi", "Opcode %x\n", *ptr);
-      grub_dprintf ("acpi", "Tell %x\n", ptr - table);
+      grub_dprintf ("acpi", "Opcode 0x%x\n", *ptr);
+      grub_dprintf ("acpi", "Tell %x\n", (unsigned) (ptr - table));
       switch (*ptr)
        {
        case GRUB_ACPI_OPCODE_EXTOP:
@@ -225,19 +225,19 @@ grub_acpi_halt (void)
   if (!rsdp1)
     return;
 
-  rsdt = (struct grub_acpi_table_header *) rsdp1->rsdt_addr;
+  rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp1->rsdt_addr;
   for (entry_ptr = (grub_uint32_t *) (rsdt + 1);
        entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
                                      + rsdt->length);
        entry_ptr++)
     {
-      if (grub_memcmp ((void *)*entry_ptr, "FACP", 4) == 0)
+      if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "FACP", 4) == 0)
        {
          grub_uint32_t port;
          struct grub_acpi_fadt *fadt
-           = ((struct grub_acpi_fadt *) *entry_ptr);
+           = ((struct grub_acpi_fadt *) (grub_addr_t) *entry_ptr);
          struct grub_acpi_table_header *dsdt
-           = (struct grub_acpi_table_header *) fadt->dsdt_addr;
+           = (struct grub_acpi_table_header *) (grub_addr_t) fadt->dsdt_addr;
          int sleep_type = -1;
 
          port = fadt->pm1a;
index 8afae8eb7423ca0a4d9382f3268a1c8a39ccc307..44a88bb0539180bf1862055f6d5bf89902399f8b 100644 (file)
@@ -47,6 +47,8 @@ grub_halt (int no_apm)
 {
   struct grub_bios_int_registers regs;
 
+  grub_acpi_halt ();
+
   if (no_apm)
     stop ();
 
@@ -102,8 +104,6 @@ grub_cmd_halt (grub_extcmd_context_t ctxt,
   struct grub_arg_list *state = ctxt->state;
   int no_apm = 0;
 
-  grub_acpi_halt ();
-
   if (state[0].set)
     no_apm = 1;
   grub_halt (no_apm);
index ed3e1e1c090be2ca365dd8401c71340a6855d927..c195368975909bd9c99bd317d45c590722871597 100644 (file)
 #include <grub/misc.h>
 #include <grub/mm.h>
 #include <grub/kernel.h>
+#include <grub/acpi.h>
 
 void
 grub_halt (void)
 {
   grub_machine_fini ();
+  grub_acpi_halt ();
   efi_call_4 (grub_efi_system_table->runtime_services->reset_system,
               GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL);
 
index 74e0c73019c3e7dde4df17b07b4b615a5b4ec8e8..15c4ba0d6058252e483c2f2e4d22530495f0c3d9 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <grub/cpu/io.h>
 #include <grub/misc.h>
+#include <grub/acpi.h>
 
 const char bochs_shutdown[] = "Shutdown";
 
@@ -40,6 +41,10 @@ grub_halt (void)
 {
   unsigned int i;
 
+#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_MULTIBOOT)
+  grub_acpi_halt ();
+#endif
+
   /* Disable interrupts.  */
   __asm__ __volatile__ ("cli");