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.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-09-13 20:29:15 +02:00
parent 0575c7c3ec
commit 2419f17a09
6 changed files with 32 additions and 8 deletions

View 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;

View 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);