GRUB-1.98 changes
[grub2/jjazz.git] / efiemu / i386 / pc / cfgtables.c
blob9c6b4e55efdb60dc3d78974175fa651bf492d8f3
1 /* Register SMBIOS and ACPI tables. */
2 /*
3 * GRUB -- GRand Unified Bootloader
4 * Copyright (C) 2009 Free Software Foundation, Inc.
6 * GRUB is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * GRUB is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
20 #include <grub/err.h>
21 #include <grub/efiemu/efiemu.h>
22 #include <grub/machine/efiemu.h>
23 #include <grub/misc.h>
24 #include <grub/mm.h>
25 #include <grub/acpi.h>
27 grub_err_t
28 grub_machine_efiemu_init_tables ()
30 grub_uint8_t *ptr;
31 void *table;
32 grub_err_t err;
33 grub_efi_guid_t smbios = GRUB_EFI_SMBIOS_TABLE_GUID;
34 grub_efi_guid_t acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
35 grub_efi_guid_t acpi = GRUB_EFI_ACPI_TABLE_GUID;
37 err = grub_efiemu_unregister_configuration_table (smbios);
38 if (err)
39 return err;
40 err = grub_efiemu_unregister_configuration_table (acpi);
41 if (err)
42 return err;
43 err = grub_efiemu_unregister_configuration_table (acpi20);
44 if (err)
45 return err;
47 table = grub_acpi_get_rsdpv1 ();
48 if (table)
50 err = grub_efiemu_register_configuration_table (acpi, 0, 0, table);
51 if (err)
52 return err;
54 table = grub_acpi_get_rsdpv2 ();
55 if (table)
57 err = grub_efiemu_register_configuration_table (acpi20, 0, 0, table);
58 if (err)
59 return err;
62 for (ptr = (grub_uint8_t *) 0xf0000; ptr < (grub_uint8_t *) 0x100000;
63 ptr += 16)
64 if (grub_memcmp (ptr, "_SM_", 4) == 0
65 && grub_byte_checksum (ptr, *(ptr + 5)) == 0)
66 break;
68 if (ptr < (grub_uint8_t *) 0x100000)
70 grub_dprintf ("efiemu", "Registering SMBIOS\n");
71 if ((err = grub_efiemu_register_configuration_table (smbios, 0, 0, ptr)))
72 return err;
75 return GRUB_ERR_NONE;