+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
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;
{
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:
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;
{
struct grub_bios_int_registers regs;
+ grub_acpi_halt ();
+
if (no_apm)
stop ();
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);
#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);
#include <grub/cpu/io.h>
#include <grub/misc.h>
+#include <grub/acpi.h>
const char bochs_shutdown[] = "Shutdown";
{
unsigned int i;
+#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_MULTIBOOT)
+ grub_acpi_halt ();
+#endif
+
/* Disable interrupts. */
__asm__ __volatile__ ("cli");