]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
merge gingold1_lsacpi into ia64
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 31 Aug 2010 23:13:53 +0000 (01:13 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 31 Aug 2010 23:13:53 +0000 (01:13 +0200)
1  2 
ChangeLog.ia64
grub-core/Makefile.core.def
grub-core/commands/efi/systab.c

diff --cc ChangeLog.ia64
index 453cbd88c3ae95ab4d45b043e5aba3490bd2e2b7,0000000000000000000000000000000000000000..38325aa53696ebfdb199320c7814a01db0973542
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,45 @@@
-       * commands/efi/acpi.c: New file.
 +2008-01-28  Tristan Gingold  <gingold@free.fr>
 +2010-01-18  Robert Millan  <rmh.grub@aybabtu.com>
 +
 +      * geninit.sh: Call _init with a null argument.
 +      * configure.ac: Add ia64-efi target.
 +      * Makefile.in (STRIP_FLAGS): Declare (overriden on ia64).
 +      * genmk.rb: Use STRIP_FLAGS for strip.
 +      * util/ia64/efi/grub-install.in: New file.
 +      * util/ia64/efi/pe32.h: New file.
 +      * util/ia64/efi/elf2pe.c: New file.
 +      * normal/ia64/setjmp.S: New file (from glibc).
 +      * normal/ia64/longjmp.S: New file (from glibc).
 +      * loader/ia64/efi/linux_normal.c: New file.
 +      * loader/ia64/efi/linux.c: New file.
 +      * conf/ia64-efi.rmk: New file.
 +      * commands/efi/systab.c: New file.
 +      * commands/efi/memmap.c: New file.
 +      * include/grub/efi/efi.h: Declare grub_efi_allocate_boot_pages and
 +      grub_efi_free_boot_pages.
 +      * include/grub/kernel.h: Export grub_machine_fini.
 +      * include/grub/dl.h: Use attribute instead of raw asm statement.
 +      Use grub_module as prefix to make identification easier.
 +      * include/grub/ia64/efi/time.h: New file.
 +      * include/grub/ia64/efi/misc.h: New file.
 +      * include/grub/ia64/efi/loader.h: New file.
 +      * include/grub/ia64/efi/kernel.h: New file.
 +      * include/grub/ia64/kernel.h: New file.
 +      * include/grub/ia64/time.h: New file.
 +      * include/grub/ia64/setjmp.h: New file.
 +      * include/grub/ia64/types.h: New file.
 +      * kern/efi/mm.c (BYTES_TO_PAGES): Round instead of truncating.
 +      (grub_efi_allocate_boot_pages): Low level interface to allocate_pages.
 +      (grub_efi_free_boot_pages): Low level interface to free_pages.
 +      (grub_efi_allocate_pages): Call grub_efi_allocate_boot_pages.
 +      (grub_efi_free_pages): Call grubèefi_free_boot_pages.
 +      (add_memory_regions): Add debug message in ifdef.
 +      (add_memory_regions): Add debug message in ifdef.
 +      (grub_efi_mm_init): Do not constraint memory map length, add space for
 +      a few more entries.
 +      * kern/dl.c (grub_init_module): New function.  Register an already
 +      linked module.
 +      * kern/ia64/efi/elf_ia64_efi.lds: New file.
 +      * kern/ia64/efi/startup.S: New file.
 +      * kern/ia64/efi/init.c: New file.
 +      * kern/ia64/trampoline.S: New file.
index 9e84af28318508ef9033652ee598ad11e81f8874,6f116770e41faaf8201bb92c5a737c2d752dfa13..2b012a7a9fe3b8c584c909bfb25c16d6ef6a240c
@@@ -414,8 -402,8 +414,8 @@@ module = 
  module = {
    name = acpi;
  
-   x86 = commands/acpi.c;
+   common = commands/acpi.c;
 -  x86_efi = commands/efi/acpi.c;
 +  efi = commands/efi/acpi.c;
    i386_pc = commands/i386/pc/acpi.c;
    i386_coreboot = commands/i386/pc/acpi.c;
    i386_multiboot = commands/i386/pc/acpi.c;
index 27a2cde833ec7fd889f93358b34a071e34acc7aa,0000000000000000000000000000000000000000..66677a190d2765184cbb48088b1ef755f51e50d9
mode 100644,000000..100644
--- /dev/null
@@@ -1,258 -1,0 +1,258 @@@
-   disp_acpi_rsdp_table (table);
 +/* systab.c  - Display EFI systab.  */
 +/*
 + *  GRUB  --  GRand Unified Bootloader
 + *  Copyright (C) 2008  Free Software Foundation, Inc.
 + *
 + *  GRUB is free software: you can redistribute it and/or modify
 + *  it under the terms of the GNU General Public License as published by
 + *  the Free Software Foundation, either version 3 of the License, or
 + *  (at your option) any later version.
 + *
 + *  GRUB is distributed in the hope that it will be useful,
 + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + *  GNU General Public License for more details.
 + *
 + *  You should have received a copy of the GNU General Public License
 + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 + */
 +#include <grub/types.h>
 +#include <grub/mm.h>
 +#include <grub/misc.h>
 +#include <grub/normal.h>
 +#include <grub/efi/api.h>
 +#include <grub/efi/efi.h>
 +
 +#define ACPI_20_TABLE_GUID \
 +{0x8868e871,0xe4f1,0x11d3,{0xbc,0x22,0x0,0x80,0xc7,0x3c,0x88,0x81}}
 +#define ACPI_TABLE_GUID \
 +{0xeb9d2d30,0x2d88,0x11d3,{0x9a,0x16,0x0,0x90,0x27,0x3f,0xc1,0x4d}}
 +#define SAL_SYSTEM_TABLE_GUID \
 +{0xeb9d2d32,0x2d88,0x11d3,{0x9a,0x16,0x0,0x90,0x27,0x3f,0xc1,0x4d}}
 +#define SMBIOS_TABLE_GUID \
 +{0xeb9d2d31,0x2d88,0x11d3,{0x9a,0x16,0x0,0x90,0x27,0x3f,0xc1,0x4d}}
 +#define MPS_TABLE_GUID \
 +{0xeb9d2d2f,0x2d88,0x11d3,{0x9a,0x16,0x0,0x90,0x27,0x3f,0xc1,0x4d}}
 +#define HCDP_TABLE_GUID \
 +{0xf951938d,0x620b,0x42ef,{0x82,0x79,0xa8,0x4b,0x79,0x61,0x78,0x98}}
 +
 +struct guid_mapping
 +{
 +  grub_efi_guid_t guid;
 +  const char *name;
 +  void (*disp)(struct guid_mapping *map, void *table);
 +};
 +
 +static void disp_sal (struct guid_mapping *map, void *table);
 +static void disp_acpi (struct guid_mapping *map, void *table);
 +
 +static const struct guid_mapping guid_mappings[] =
 +  {
 +    { ACPI_20_TABLE_GUID, "ACPI-2.0", disp_acpi},
 +    { ACPI_TABLE_GUID, "ACPI-1.0", disp_acpi},
 +    { SAL_SYSTEM_TABLE_GUID, "SAL", disp_sal},
 +    { SMBIOS_TABLE_GUID, "SMBIOS",NULL},
 +    { MPS_TABLE_GUID, "MPS", NULL},
 +    { HCDP_TABLE_GUID, "HCDP", NULL}
 +  };
 +
 +struct sal_system_table
 +{
 +  grub_uint32_t signature;
 +  grub_uint32_t total_table_len;
 +  grub_uint16_t sal_rev;
 +  grub_uint16_t entry_count;
 +  grub_uint8_t checksum;
 +  grub_uint8_t reserved1[7];
 +  grub_uint16_t sal_a_version;
 +  grub_uint16_t sal_b_version;
 +  grub_uint8_t oem_id[32];
 +  grub_uint8_t product_id[32];
 +  grub_uint8_t reserved2[8];
 +};
 +
 +static void
 +disp_sal (struct guid_mapping *map, void *table)
 +{
 +  struct sal_system_table *t = table;
 +  grub_uint8_t *desc = table;
 +  grub_uint32_t len, l;
 +
 +  grub_printf ("SAL rev: %02x, signature: %x, len:%x\n",
 +             t->sal_rev, t->signature, t->total_table_len);
 +  grub_printf ("nbr entry: %d, chksum: %02x, SAL version A: %02x B: %02x\n",
 +             t->entry_count, t->checksum,
 +             t->sal_a_version, t->sal_b_version);
 +  grub_printf ("OEM-ID: %-32s\n", t->oem_id);
 +  grub_printf ("Product-ID: %-32s\n", t->product_id);
 +
 +  desc += sizeof (struct sal_system_table);
 +  len = t->total_table_len - sizeof (struct sal_system_table);
 +  while (len > 0)
 +    {
 +      switch (*desc)
 +      {
 +      case 0:
 +        l = 48;
 +        grub_printf (" Entry point: PAL=%016lx SAL=%016lx GP=%016lx\n",
 +                     *(grub_uint64_t*)(desc + 8),
 +                     *(grub_uint64_t*)(desc + 16),
 +                     *(grub_uint64_t*)(desc + 24));
 +        break;
 +      case 1:
 +        l = 32;
 +        grub_printf (" Memory descriptor entry addr=%016llx len=%uKB\n",
 +                     *(grub_uint64_t*)(desc + 8),
 +                     *(grub_uint32_t*)(desc + 16) * 4);
 +        grub_printf ("     sal_used=%d attr=%x AR=%x attr_mask=%x "
 +                     "type=%x usage=%x\n",
 +                     desc[1], desc[2], desc[3], desc[4], desc[5], desc[6]);
 +        break;
 +      case 2:
 +        l = 16;
 +        grub_printf (" Platform features: %02x", desc[1]);
 +        if (desc[1] & 0x01)
 +          grub_printf (" BusLock");
 +        if (desc[1] & 0x02)
 +          grub_printf (" IrqRedirect");
 +        if (desc[1] & 0x04)
 +          grub_printf (" IPIRedirect");
 +        grub_printf ("\n");
 +        break;
 +      case 3:
 +        l = 32;
 +        grub_printf (" TR type=%d num=%d va=%016llx pte=%016llx\n",
 +                     desc[1], desc[2],
 +                     *(grub_uint64_t *)(desc + 8),
 +                     *(grub_uint64_t *)(desc + 16));
 +        break;
 +      case 4:
 +        l = 16;
 +        grub_printf (" PTC coherence nbr=%d addr=%016llx\n",
 +                     desc[1], *(grub_uint64_t *)(desc + 8));
 +        break;
 +      case 5:
 +        l = 16;
 +        grub_printf (" AP wake-up: mec=%d vect=%x\n",
 +                     desc[1], *(grub_uint64_t *)(desc + 8));
 +        break;
 +      default:
 +        grub_printf (" unknown entry %d\n", *desc);
 +        return;
 +      }
 +      desc += l;
 +      len -= l;
 +    }
 +}
 +
 +static void
 +disp_acpi (struct guid_mapping *map, void *table)
 +{
++  grub_printf ("For more information use lsacpi\n");
 +}
 +
 +static void
 +disp_systab (void)
 +{
 +  grub_efi_char16_t *vendor;
 +  const grub_efi_system_table_t *st = grub_efi_system_table;
 +  grub_efi_configuration_table_t *t;
 +  unsigned int i;
 +
 +  grub_printf ("Signature: %016llx revision: %08x\n",
 +             st->hdr.signature, st->hdr.revision);
 +  grub_printf ("Vendor: ");
 +  for (vendor = st->firmware_vendor; *vendor; vendor++)
 +    grub_printf ("%c", *vendor);
 +  grub_printf (", Version=%x\n", st->firmware_revision);
 +
 +  grub_printf ("%ld tables:\n", st->num_table_entries);
 +  t = st->configuration_table;
 +  for (i = 0; i < st->num_table_entries; i++)
 +    {
 +      unsigned int j;
 +
 +      grub_printf ("%016llx  ", (grub_uint64_t)t->vendor_table);
 +
 +      grub_printf ("%08x-%04x-%04x-",
 +                 t->vendor_guid.data1, t->vendor_guid.data2,
 +                 t->vendor_guid.data3);
 +      for (j = 0; j < 8; j++)
 +      grub_printf ("%02x", t->vendor_guid.data4[j]);
 +      
 +      for (j = 0; j < sizeof (guid_mappings)/sizeof(guid_mappings[0]); j++)
 +      if (grub_memcmp (&guid_mappings[j].guid, &t->vendor_guid,
 +                       sizeof (grub_efi_guid_t)) == 0)
 +        grub_printf ("   %s", guid_mappings[j].name);
 +
 +      grub_printf ("\n");
 +      t++;
 +    }
 +}
 +
 +static void
 +disp_systab_entry (const char *name)
 +{
 +  const grub_efi_system_table_t *st = grub_efi_system_table;
 +  grub_efi_configuration_table_t *t;
 +  unsigned int i;
 +  struct guid_mapping *map;
 +
 +  map = NULL;
 +  for (i = 0; i < sizeof (guid_mappings)/sizeof(guid_mappings[0]); i++)
 +    if (grub_strcmp (guid_mappings[i].name, name) == 0)
 +      {
 +      map = &guid_mappings[i];
 +      break;
 +      }
 +  if (map == NULL)
 +    {
 +      grub_printf ("System table '%s' unknown\n", name);
 +      return;
 +    }
 +  if (map->disp == NULL)
 +    {
 +      grub_printf ("Don't know how to display table '%s'\n", name);
 +      return;
 +    }
 +  t = st->configuration_table;
 +  for (i = 0; i < st->num_table_entries; i++)
 +    {
 +      if (grub_memcmp (&map->guid, &t->vendor_guid,
 +                     sizeof (grub_efi_guid_t)) == 0)
 +      {
 +        grub_set_more (1);
 +        (*map->disp)(map, t->vendor_table);
 +        grub_set_more (0);
 +        return;
 +      }
 +      t++;
 +    }
 +  grub_printf ("Systab '%s' not found\n", map->name);
 +}
 +
 +static grub_err_t
 +grub_cmd_systab (struct grub_arg_list *state, int argc, char **args)
 +{
 +  int i;
 +
 +  if (argc == 0)
 +    disp_systab ();
 +  else
 +    for (i = 0; i < argc; i++)
 +      disp_systab_entry (args[i]);
 +  return 0;
 +}
 +
 +GRUB_MOD_INIT(systab)
 +{
 +  (void) mod;                 /* To stop warning. */
 +  grub_register_extcmd ("systab", grub_cmd_systab, GRUB_COMMAND_FLAG_BOTH,
 +                      "systab [NAME]",
 +                      "Display EFI system table.", NULL);
 +}
 +
 +GRUB_MOD_FINI(systab)
 +{
 +  grub_unregister_extcmd ("systab");
 +}