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:
parent
0575c7c3ec
commit
2419f17a09
6 changed files with 32 additions and 8 deletions
14
ChangeLog
14
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>
|
2010-09-13 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/commands/iorw.c (grub_cmd_read): Declare buf in smallest
|
* grub-core/commands/iorw.c (grub_cmd_read): Declare buf in smallest
|
||||||
|
|
|
@ -521,6 +521,9 @@ module = {
|
||||||
nopc = commands/halt.c;
|
nopc = commands/halt.c;
|
||||||
i386_pc = commands/i386/pc/halt.c;
|
i386_pc = commands/i386/pc/halt.c;
|
||||||
i386_pc = commands/acpihalt.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_multiboot = lib/i386/halt.c;
|
||||||
i386_coreboot = lib/i386/halt.c;
|
i386_coreboot = lib/i386/halt.c;
|
||||||
i386_qemu = lib/i386/halt.c;
|
i386_qemu = lib/i386/halt.c;
|
||||||
|
|
|
@ -144,8 +144,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *end)
|
||||||
{
|
{
|
||||||
int add;
|
int add;
|
||||||
prev = ptr;
|
prev = ptr;
|
||||||
grub_dprintf ("acpi", "Opcode %x\n", *ptr);
|
grub_dprintf ("acpi", "Opcode 0x%x\n", *ptr);
|
||||||
grub_dprintf ("acpi", "Tell %x\n", ptr - table);
|
grub_dprintf ("acpi", "Tell %x\n", (unsigned) (ptr - table));
|
||||||
switch (*ptr)
|
switch (*ptr)
|
||||||
{
|
{
|
||||||
case GRUB_ACPI_OPCODE_EXTOP:
|
case GRUB_ACPI_OPCODE_EXTOP:
|
||||||
|
@ -225,19 +225,19 @@ grub_acpi_halt (void)
|
||||||
if (!rsdp1)
|
if (!rsdp1)
|
||||||
return;
|
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);
|
for (entry_ptr = (grub_uint32_t *) (rsdt + 1);
|
||||||
entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
|
entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
|
||||||
+ rsdt->length);
|
+ rsdt->length);
|
||||||
entry_ptr++)
|
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;
|
grub_uint32_t port;
|
||||||
struct grub_acpi_fadt *fadt
|
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 *dsdt
|
||||||
= (struct grub_acpi_table_header *) fadt->dsdt_addr;
|
= (struct grub_acpi_table_header *) (grub_addr_t) fadt->dsdt_addr;
|
||||||
int sleep_type = -1;
|
int sleep_type = -1;
|
||||||
|
|
||||||
port = fadt->pm1a;
|
port = fadt->pm1a;
|
||||||
|
|
|
@ -47,6 +47,8 @@ grub_halt (int no_apm)
|
||||||
{
|
{
|
||||||
struct grub_bios_int_registers regs;
|
struct grub_bios_int_registers regs;
|
||||||
|
|
||||||
|
grub_acpi_halt ();
|
||||||
|
|
||||||
if (no_apm)
|
if (no_apm)
|
||||||
stop ();
|
stop ();
|
||||||
|
|
||||||
|
@ -102,8 +104,6 @@ grub_cmd_halt (grub_extcmd_context_t ctxt,
|
||||||
struct grub_arg_list *state = ctxt->state;
|
struct grub_arg_list *state = ctxt->state;
|
||||||
int no_apm = 0;
|
int no_apm = 0;
|
||||||
|
|
||||||
grub_acpi_halt ();
|
|
||||||
|
|
||||||
if (state[0].set)
|
if (state[0].set)
|
||||||
no_apm = 1;
|
no_apm = 1;
|
||||||
grub_halt (no_apm);
|
grub_halt (no_apm);
|
||||||
|
|
|
@ -22,11 +22,13 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/kernel.h>
|
#include <grub/kernel.h>
|
||||||
|
#include <grub/acpi.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_halt (void)
|
grub_halt (void)
|
||||||
{
|
{
|
||||||
grub_machine_fini ();
|
grub_machine_fini ();
|
||||||
|
grub_acpi_halt ();
|
||||||
efi_call_4 (grub_efi_system_table->runtime_services->reset_system,
|
efi_call_4 (grub_efi_system_table->runtime_services->reset_system,
|
||||||
GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL);
|
GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL);
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <grub/cpu/io.h>
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/acpi.h>
|
||||||
|
|
||||||
const char bochs_shutdown[] = "Shutdown";
|
const char bochs_shutdown[] = "Shutdown";
|
||||||
|
|
||||||
|
@ -40,6 +41,10 @@ grub_halt (void)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_MULTIBOOT)
|
||||||
|
grub_acpi_halt ();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Disable interrupts. */
|
/* Disable interrupts. */
|
||||||
__asm__ __volatile__ ("cli");
|
__asm__ __volatile__ ("cli");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue